Dokumentumok konvertálása PHP-vel parancssorból. A feladat a következő: Konvertáljunk át n darab doc, rtf, pdf fájlt .txt szöveges formátumba, úgy hogy később kereshető, kategorizált, módosítható legyen a tartalma. Mindezt parancssoros eszközökkel úgy, hogy a kimenet akár webszerverről is működjön. A feladatot annyiban nehezítjük hogy csak ingyenes szoftvereket vehetünk igénybe. Kereshetőség: SQL adatbázisba tároljuk a szöveges állományt. Kategóriákba sorolás: szintén az adatbázis 1 mezőjével megoldva. Kimenetek: rendezett nevek eredeti fájl másolása, átnevezése .zip archívum elkészítése .txt fájl elkészítése adatok adatbázisba töltése
Mivel a PHP egyben ütős parancssori programnyelvként is használható és a fent felsorolt dolgokat mind meglehet vele valósítani, (adatbázis elérés, fájl műveletek, külső függvények hívása) ezért ebben dolgozunk. A választott operációs rendszer Linux.
Miért Linux? (Xubuntu 7.10) Mert a fájlok átalakításához egyszerűen lehet telepíteni az eszközöket (és tökéletes erre a célra is!), míg Windowsos rendszeren ez elég körülményes lehet, de megvalósítható. Windowson hogyan? Cygwin telepítésével és ezek beszerzésével:
Cygwin telepítésével és ezek beszerzésével: unrtf - ok abiword pdftohtml catdoc – ok antiword – ok Mit telepítettem? root ként feltettem az alábbi dolgokat: sudo apt-get install unrtf abiword pdftohtml catdoc antiword
Megjegyzem a Linux számtalan lehetőséget kínál dokumentumok konvertálására és indexelésére. A apt-vel telepített eszközök fele is bőven sok lenne, de tesztelni szerettem volna a kimeneteket is. Tracker GUI-val ellátott fájl indexelő szoftver amely SQLite adatbázist használ.
Hogyan oldható meg PHP-ben a külsős rendszer függvények hívása? A válasz az exec PHP függvényben van. Amely élles környezetben a legtöbb esetben nem elérhető, mivel a használata komoly fejfájást okozhat a rendszergazdáknak. (igazuk van . De nem úgy a localhostra telepített szervernél, ahol minden lehet mint a búcsúban. Exec függvényről: //exec ( “parancs”, “visszatérési érték tömb formájában”, “a futtatott parancs állapota”); $parancs=(string)”echo ‘hello világ’”; $tomb=array(); $return=(int)0 exec ( $parancs, $tomb, $return); ?> A tömb visszatérési érték ($tomb) minden eleme a kimenet 1 sora. Vagyis a $tomb[0]=kimenet 1 sora.
Vagyis a $tomb[0]=kimenet 1 sora. A tömb nem tartalmazza a sorvég karaktereket. Ha a tömböt nem töröljük a parancs végrahajtása előtt, akkor a következő futtatás a tömb végére lesz beszúrva. $return visszatérési érték tartalmazza a futtatott parancs állapotát. $parancs ez tartalmazza a parancssoron futtatni kívánt kódot (utasítást) pl. unrtf msdoksi.rtf > /var/www/msdoksi.txt AbiWord-ről Aki ismeri ezt a profi, ingyenes, kis erőforrás igényű, ám de nagy teljesítményű szövegszerkesztőt annak nem kell bemutatni a tudását. Aki nem ismeri annak csak javasolni tudom, hogy próbálja ki. Tehát az AbiWord nevű parancssorból is elérhető eszközzel remekül tudunk dokumentum formátumokból konvertálni. A lenti példa jól mutatja, hogy amilyen formátumokat kezel az AbiWord. A kimenetre is hasonlót tudunk gyártani vele (abw, zabw, rtf, txt, utf8, html, latex…). Íme néhány példa, hogy mennyire egyszerű: 1. $ abiword –to=formátum fajlneve.kiterjesztes 2. $ abiword –to=/var/www/a_html_kimenet.html msdoksi.rtf AbiWord opciók: 1. –geometry=GEOMETRY_STRING Sets the initial frame geometry. X11-like geometry string. 2. –nosplash Do not show the splash screen 3. –to=FORMAT or FILENAME Target format of file or new target filename. For conversion AbiWord documents. [abw, zabw, rtf, txt, utf8, html, latex,etc] 4. –verbose Specify the amount required amount of detail of the message information. 5. –plugin=PLUGIN_NAME Execute plugin instead of the main application 6. –print=FILE or |lpr Print any documents passed on the command line to FILE or send the output to the specified print command 7. –show Force the Graphical User Interface (GUI) to be shown, even if using the options –to or –help 8. –version Report the version of AbiWord. 9. –help Displays a helpful message explaining AbiWord usage CatDoc megközelítés: (V.B.Wagner) A catdoc segítségével MS-Word fájlokból .txt fájlt gyárthatunk. Ami a legjobb hogy megadhatjuk a kimenet karakterkódolását is. MAN catdoc. Elvileg tud HTML kimenetet is, de a fejléc részét rendesen megpakolják a programról szóló információkkal (Ez általában igaz mindegyikre, sajna). catdoc -s cp1252 -d cp1252 msdoc.doc > /var/www/t.txt
UnRtf (GNU UnRTF 0.19.2) Ms-Word formátumból konvertálunk: Az UnRtf programmal RTF formátumban lévő dokumentumokat tudunk kovertálni html, text, vt (VT100 escape codes), latex, ps (PostScript output), wpml kimenetté. 1. unrtf ms_doksi.rtf > /var/www/doksi.txt 2. unrtf –text ms_doksi.rtf > /var/www/doksi.txt Utasítás felépítése és opciók: unrtf [options] [file...] Options: [--nopict] [--html] [--text] [--vt] [--latex] [--ps] [--wpml][--help] [--version] A legjobb text kimenetet MS-WORD fájlból az AntiWord nevű programmal értem el:
A legjobb text kimenetet MS-WORD fájlból az AntiWord nevű programmal értem el: 1. antiword -m 8859-2.txt ms_doksi.doc > doksi.txt Pdf-ből .txt átalakítás: Két lépcsőben sikerült megoldani a dolgot úgy, hogy ne keljen vele vacakolni sokat. Pdftohtml programmal készítettem egy .html fájlt a .pdf-ből (frame-nélkül), és a kimenetet átadtam az abiword-nek ami .html-ből már tud dolgozni (pluginek nélkül is). 1. pdftohtml -noframes /var/www/test.pdf /var/www/test.html 2. abiword –to=/var/www/test.txt /var/www/test.html Pdftohtml was developed by Gueorgui Ovtcharov and Rainer Dorsch. Pdf fájlokból konvertál html, xml formátumba + a képfájlokat is megkapjuk az eredeti állományból. A pdftohtml nagyon jól paraméterezhető, de a html tartalmat szintén teli cuccolja sajátos információkkal (amit megjegyzem nem volna nehéz eltávolítani, de minek). Beállíthatjuk melyik oldaltól kezdje az átalakítást, hol fejezze be. Alapjáraton a szoftver egy frames html oldalat készít bármely PDF dosikból, ahol a linkek, könyvjelzők is a helyükön vannak. PHP használata Linuxon parancssoros eszközként: /var/www/test_sh.php tartalma: #! /usr/bin/php echo “hello világ”; //újsor karakter /n ?> A fájl legyen futtatható. Bár a fájlt a /var/www/ mappába mentettem ne tévesszen meg senkit, de nem böngészőből lesz futtatva, hanem parancssorból. A fordító helyét mutatja a #! /usr/bin/php string. A fájl futtatása konzol módban: /var/www/test_sh.php ha mögé írunk agy & karaktert akkor háttérben futó folyamat lesz. ./var/www/test_sh.php & Ami a PHP programozást illeti az a szokványos módon mehet a fájlban. Annyi különbséggel hogy a programozás során az EXEC PHP függvény segítségével (ha engedélyezve van) külső Linuxos programokat is hívhatunk, feldolgozhatunk. A PHP programnyelvet nem csak szerveroldali programozásra lehet használni, hanem parancssori programnyelvként is. Ezért aki ismeri a PHP programnyelvet, az Linuxon rendszeren sincs elveszve. Pingvinre fel!
Teszt alkalmazás itt található. nincs kapcsolódó bejegyzés.
Téma: Webalkalmazás fejlesztés Forrás: http://opendir.hu Szerző: ArtH2O Erdeti URL: http://opendir.hu/webalkalmazas/php/238-php-mint-parancssoros-programnyelv/