ugrás a tartalomhoz

Word dokkumentum beolvasása

hunge · 2005. Dec. 4. (V), 19.02
Sziasztok a következő dolgot szeretném megoldani. Word dokumentumot kívánok txt-be alakítani majd a kapott txt fájlt berakni egy adatbázisba. Elég alaposan utánaolvastam már a témának így találtam meg töbek közt ezt http://weblabor.hu/hirek/20040429/word2html linket is.
így a korában használni kívánt antiword programot a jobb wvText programra cseréltem.
Ez parancssorba kiválóan működik! Pl: konzolba beírom wvText /home/pappg/Teszt.doc /home/pappg/Teszt.txt. A gond ott van, hogy nem sikerül rábírnom a php-t, hogy "adja ki" ezt a parancsot. Következő a kódom (az ürlap feltöltés és feltöltött állomány elhelyezését végző kódot nem irom ide mivel az egyrészt triviális feladat másrészt jól működik nálam)

<?php .
.
.
. 
        $program="/usr/bin/wvText";
	   $mit=$all_tomb['tmp_name']. '/' .$all_tomb['name'];
	   $mive= "/tmp" ."/" ."ideglenes" .".txt";
	   print "$program <br>\n";
	   print "$mit <br>\n";
	   print "$mive <br>\n";
	   passthru("$program $mit", $mive);
	   //passthru($futtat,$Doctxt); //ahol a $futtat egyenlő volt a program+mit+mivé -vel.  
	   //print "$program $mit $mive";	   
	   //exec($program $mit $mive, $dokumentum);
	   
	   $dokumentum=fopen("/tmp/ideglenes.txt",'r'); 
	   foreach($dokumentum as $sor){	   
	   print "$sor";
	   }
	//itt jön majd az ideglenes állomány törlése untouch()-val.
	// illetve az adatbázisba írás,de most a cél a képernyő.
....
?>
 
Mint a kommentekből látható elég sok féle képpen próbáltam megoldani, rá is ment fél napom, de sajnos kifogott rajtam. Ugyanis még igencsak ujjonc vagyok php terén + soha nem hívtam meg külső programot a php-ből. Mi(ke)t rontottam/hattam el? Nagyon köszönök minden segítséget/ötletet.
 
1

Foreach? Fopen?

janoszen · 2005. Dec. 4. (V), 19.22
Hallod, sztem sürgősen nézd meg, hogy az fopen mit csinál. Ugyanis a dokumentum egy filepointer. Nem array.

Amit te akarsz:

<?php
while($s = fgets($dokumentum))
{
 echo($s . "<br />");
}

// EZ FONTOS! Ne hagyj nyitva fájlt!
fclose($dokumentum);
2

Valóban

hunge · 2005. Dec. 4. (V), 19.59
fopent() célszerű használni. Ezt elnéztem.Hiába kezdő/láma vagyok. Bár mintha lett volna egy ilyen verzió is de 'vagy ötszür újra irtam ugyhogy már nem tudom.
fclose újabb hiba. (amúgy letöröltem volna a fájlt a script végén) Azért jár a fél fekete pont.
De sajnos nem ez a legnagyobb gond. Hanem az hogy a /temp/ideglenes.txt nem tudtam létrehozatni a scripttel. Mivel nem tudom, hogy jelenesetben hogy kellene meghívni a passthru()/exec() függvényt ahhoz hogy jól müködjön.
3

A megoldás

hunge · 2005. Dec. 6. (K), 12.44
Na sikerült megcsinálni a helyes kód a következő:

<?php
$konyvtar= "/var/www/tmp/";
...
...
...
if(is_uploaded_file($all_tomb['tmp_name'])){
		
			move_uploaded_file($all_tomb['tmp_name'] ,
		   $konyvtar.$all_tomb['name']) or die("Nem sikerüt az áthelyezés");
		   print "Az áthelyezés és sikerült a <strong>$konyvtar</strong> könyvtárba <br>\n";
	      
		   //*******dokumentum konvertálása txtvé*******
	  	   
		   $program="/usr/bin/wvText";
		   $mit=$konyvtar. '/' .$all_tomb['name'];
		   $mive= "/var/www/tmp/" ."/" ."ideglenesallomany" .".txt";
		   
		   //print "$program $mit $mive <br>\n <br>\n ";	
		   passthru("$program $mit $mive ");

		   $dokumentum=fopen($mive,'r') or die ("Az állományt nem lehet megnyitni!");
		   	while(!feof($dokumentum)){
		   		$sor =fgets($dokumentum,1024);
		   		print "$sor <br>\n";
		   	} 
		}//belső if vége 
?>
A megoldás kulcs az volt hogy a feltöltött állományra nem lehet az ideglenes elérési úttal hivatkozni hanem ténylegesen el kell helyezni valahova.

Más, rájöttem hogy a multkor azt kevertem, hogy a megnyitott fájlt olvasásra soronként kell feldolgozni...
4

Még egy kis hiba

hunge · 2005. Dec. 6. (K), 14.08
Rájöttem hogy a script még nem tökéletes, ha olyan dokumentumot adok neki aminek a nevében szóköz szerepel akkor elszáll, a wvtext program. Nem tudok valami olyan php függvényt ami szóköz problémát megoldaná? Mint a htmlspecialchars() persze az nem jó it... Nézegettem a manualt de én nem találtam. Persze lehet hogy nem jó helyen kerestem...
5

str_replace

Pal_ur · 2005. Dec. 6. (K), 20.17
... vagy ereg_replace.

Pál_úr
6

Köszönöm, Jólesz!

hunge · 2005. Dec. 6. (K), 21.25
Jónak tűnik kár, hogy nincs olyan függvény ami direktbe a space-eket kivenné. Így most át kell néznem a php karakterlánc kezelését. :-( . Amit (karakterlánc kezelés) utálok. Na mind1. Üdv hunge.