Autor Zpráva
h4ever
Profil *
Ahoj,
snažím se rozjet jednu php aplikaci, která má pracovat s programem swetest.exe (binární program samostatně funguje dobře, ale php aplikace nezpracovává data z toho programu).

Snažím se porozumět tomu scriptu a zdá se mi, jak kdyby se proměnná PATH nenastavovala správně. Zřejmě se autor pokusil přičíst k řetězci PATH další data, ale místo toho se to přepsalo.


Ve scriptu index.php jsem našel toto:

$swephsrc = './'; // to má být cesta kde je program umístěn
$sweph = './';
unset($PATH);
putenv("PATH=$PATH:$swephsrc");


Protože se ale program nachází v adresáři sweph, cestu jsem upravil:
$swephsrc = './sweph';
$sweph = './sweph';


Abych vyzkoušel jakou hodnotu proměnná PATH obsahuje přidal jsem tento řádek na test:

die (getenv("PATH")."");


A vypíše se:
:./sweph

Program stále nefunguje a tak se chci zeptat, jestli ta cesta není špatně nastavená. Nechápu smysl té dvojtečky. Nebo ještě když teď přehodím ty dva řádky
die (getenv("PATH")."");
putenv("PATH=$PATH:$swephsrc");
tak se už nevypíšou ty cesty k systému, které tam byly původně, ale jen toto.
Joker
Profil
h4ever:
Nechápu smysl té dvojtečky.
Já hlavně nechápu smysl toho, že se volá unset(proměnná) a vzápětí se ta proměnná používá.

Není to celé nějak špatně?
h4ever
Profil *
Joker:
Tam se píše:
// Unset any variables not initialized elsewhere in the program

Autor se zřejmě snažil resetovat proměnnou PATH, aby tam nebyla uložená stará hodnota. Nejdříve tam byly nastavené cesty k programům ve Windows (moje PATH).
V cmd.com napíšu set PATH > a.txt
a notepad a.txt
Path=C:\Program Files\PC Connectivity Solution\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;P:\MULTIMDIA\QuickTime\QTSystem\;C:\Program Files\Common Files\Adobe\AGL
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH


To byly původní hodnoty, které byly přístupné ve skriptu, když jsem dělal ten test
die (getenv("PATH")."");

Ještě před nastavováním proměnné PATH.

Pak jsem spustil putenv a PATH se nastavilo. Tedy ty cesty výše už nejsou přístupné. Pro chod aplikace to ale nehraje roli. Tam by podle mého názoru měla být cesta "./swepth"

No a script dále pokračuje spuštěním programu:
exec ("swetest -edir$sweph -b$utdatenow -ut$utnow -p0123456789 -eswe -house$my_longitude,$my_latitude, -fPlj -g, -head", $out);

a můj test:
print_r($out);
die();

Vypíše prázdné pole. Proto asi program nebyl nalezen.
Jozin
Profil
h4ever:
Zdravím, pokud se nepletu, tak putenv je vložení nastavení do environment PHP, to znamená, že mu předáš nový PATH, dvojtečka je oddělovací znak.
Dále když koukám na ten exec, tak nevím, proč za parametry nejsou mezery, ale i tak, abych zjistil, jestli příkaz funguje nebo ne, bych všechny parametry oddělal (nebo všechny nepotřebné), prostě v terminálu zkuste spustit tu binárku a když to něco vrátí, tak celý příkaz zkopírovat a vyzkoušet, pokud nepojede, tak máš špatnou relativní adresu. Pokud ano, tak je chyba tady v tom exec, jak jsem již psal.
h4ever
Profil *
Jozin:
V terminálu to musí fungovat; testoval jsem tu binárku v cmd a normálně mi to vracelo korektní výstup.

Opravil jsem lomítko na konec cesty:

$swephsrc = './sweph/';
$sweph = './sweph/';


Hurá! Přeci nějaký pokrok:

Zkusil jsem upravit cestu v execu:

exec (".\sweph\swetest ....


A už mám výstup.

Takže teď si jen lámu hlavu s tím, proč to autor dělal tak složitě přes vracení a nastavování nějaké proměnné PATH, když to lze zapsat přímo do execu!
Jozin
Profil
h4ever:
Nepochopil si mě... neříkal jsem, že to v terminálu nejde, ale že si měl to co ti funguje v terminálu zkopírovat do exec, aby si věděl, jestli php našlo tu binárku.

Jinak gratuluju, že ti to funguje. Těžko říct, proč to tak programátor psal. Jestli k tomu je dokumentace, tak v ní by to mohlo být, jinak jedině kontaktovat ho a zeptat se.
h4ever
Profil *
Jozin:
dokumentace není a autor tvrdí, že mu to jede (a má taky Windows) a že to nepředělával. Já mám od něj více podobných scriptů a ani jeden bez editace nepojede. Podle struktury kodu je to trochu fušeřina, ale zase obdiv má za to, že se mu chtělo ty skripty psát.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0