ugrás a tartalomhoz

Return value PHP scriptbol Shell scriptbe

sunder · 2008. Nov. 5. (Sze), 01.21
Üdvöletem!

Egy problémával kapcsolatban kérném a fórumozó szakemberek segítségét.
Adott két rendszer, egy Apache2/PHP/MySQL webszerver, és egy nagyon lebutított (specializált) Red Hat rendszer.

A Buta Red Hat kellene meghívjon egy paraméterezett PHP file-t a webszerveren shell script segítségével, és annak egy értéket kellene visszaadnia a Red Hat shell scriptnek attól függően, hogy hogyan futott le.

Próbálkoztam a WGET-tel, mert CRON-ból a webszerveren sikeresen futtat automatizált PHP függvényeket időszakosan, de ebbe a visszatérő értékbe beletört a bicskám.


Tehát, adott a shell script, amely meghívja a PHP file-t, és a további futása a visszatérő értéken múlna.


Tehát:
/usr/bin/wget --output-document=/dev/null http://abc.php?a=123&b=456

A PHP file függően a paraméterektől (a és b) vagy 1-et, vagy 0-át kellene visszaadjon.
Itt próbálkoztam már exit("1") , echo "1" , és egyéb módszerrekkel, de igazából a linux oldalon nem tudom megfogalmazni azt, hogy a PHP-nak legyen egy visszatérő értéke, amit egy változóba mentek.

Példa:
ertek = ''
$ertek = /usr/bin/wget --output-document=/dev/null http://abc.php?a=123&b=456


Sajnos ez nem ad vissza így semmit. Van valakinek ötlete, hogy miként lehetne megvalósítani, hogy a PHP ne csak lefusson, hanem értéket is adjon egy xyz shell script változónak?


Előre is köszönöm az ötleteket / megoldásokat.

Csaba
 
1

Ha a kimenetet a /dev/null-ba

Poetro · 2008. Nov. 5. (Sze), 02.05
Ha a kimenetet a /dev/null-ba küldöd, akkor probálkozhatsz akármivel is. Amit a PHP-ban tenni kellene, hogy KIIRSZ valamit, amit a shell scripteddel feldogozol.

#!/bin/sh
`/usr/bin/wget -q -t 10 -T 10 -c -O result.txt http://abc.php?a=123&b=456`
# A file már le van töltve, csak be kell olvasni.
2

Kozvetlenul

sunder · 2008. Nov. 5. (Sze), 05.29
Koszonom a valaszt.

Annyival folytatnam, hogy mivel nagyon sok konkurrens keres erkezhet ugyanezen a modon egyidoben, nem lenne szerencses file-t hasznalni es onnan visszaolvasni. Arra nincs esely, hogy a PHP magaba a shell valtozoba toltson be adatot (1-et vagy 0-at), illetve a shell valtozo erteket kapjon a PHP return erteken keresztul?
4

Egyedi filenév

zila · 2008. Nov. 5. (Sze), 08.43
Csinálhatsz egyedi filenevet is pl. phpout-shellscriptpid
Így garantáltan nem írod felül a filejaidat, hiszen a shell script pid-je egyedi lesz.

példa:
#!/bin/bash
wget -O ./phpout-$$ http://my.server/logic.php
PHPRESULT=${cat ./phpout-$$}
rm ./phpout-$$

if [ "$PHPRESULT" eq "1" ]; then
#akármi
else
#másvalami
fi
3

Torolve

sunder · 2008. Nov. 5. (Sze), 05.30
Duplikalt hsz.
5

Csak a kimenetet tudod felhasználni

deadcode · 2008. Nov. 5. (Sze), 13.06
Úgy tudom, hogy nem lehet PHP scriptben exportálni shell változót. A putenv() függvénnyel elvileg lehet módosítani/létrehozni környezeti változókat, de az csak az adott processre lesz érvényes. Mint bash scriptnél... csak akkor maradnak meg a környezeti változókon végzett módosítások, ha exportálod őket, de nem tudok róla, hogy erre lenne lehetőség php-ben.

Egyébként már említette valaki a jó megoldást a problémára, pl. egy bash scriptben közvetlenül a PHP scripted kimenetét kezeled le ahogy akarod.

Nyilván, ha adott szerveren van a PHP script, aminek a kimenete kellene, akkor nem kell a wgettel bajlodni, szoval valahogy így fog kinézni (ha a $PATH-ban bent van a php interpreter elérési útja):

#!/bin/bash
STUFF=`php /path/stuff.php param1 param2 etc`
# itt mar benne van a $STUFF-ban, ami a script kimenete volt
export STUFF
# ezzel a $STUFF-ot fel lehet hasznalni a bash scripten kivul is, bekerul a kornyezeti valtozok koze
# nyilvan, ha csak ebben a scriptben kell az ertek, akkor felesleges exportalni


Van szebb megoldás is, pl. egy bash script, amit filterként lehet használni (pipe után a script, ami a php outputját használja fel közvetlenül inputként, pl. php /path/stuff.php param | foo.sh), vagy csak simán megoldani, amit kell a PHP-ból, már ha nem olyan dolog, amit nem lehet. :)

EDIT: némi info az exportálásról
EDIT2: ha ugyanazon a szerveren van a PHP script, ahol a bash script fog futni, akkor ugye wget helyett érdemesebb közvetlenül lefuttatni command line-ból, ezt csináltam a kódrészletben. Ha nem ismerős a dolog, akkor bővebb info: http://hu2.php.net/features.commandline
6

láthatóság

zila · 2008. Nov. 5. (Sze), 18.13
Annyit még tudni kell, hogy az export csak az aktuális shell és abból indított programok (köztük további shell-ek) számára teszi láthatóvá az adott környezeti változót. Visszafelé nem működik, tehát ha a php tenné környezeti változóba, az nem látszódna a szülő shellben...