Fórumok
Sziasztok,
Van egy teljesen jól működő kódom, amikor "manuálisan" nyitom meg, akkor úgy működik, ahogy kell.
Ám itt jön a probléma:
Amikor a CRON nyitja meg a PHP-t, akkor a benne lévő ciklus lefut, ráadásul annyiszor ahányszor kell, plusz a ciklusban lévő adatbázisba írások is végbemennek, DE a ciklusban lévő CURL nem fut le.
Mi lehet ennek az oka? Gondoltam arra, hogy a PHP futási idő limitálva van, de akkor a ciklusban lévő adatbázisba írásoknak se kéne működniük, nem?
Esetleg van valaki, aki le tudná nekem futtatni a CRON-t saját szerverről, hogy kiderüljön azzal van-e gond? Ha igen, kérem írjon PM-et. Köszönöm előre is!
Hozzászólások
Hogy nyitod meg manuálisan és hogy cron-ból? Tedd az error_reporting-ot E_ALL-ra és nézd meg, mi kerül az stder-re.
BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)
Beleírtam, de hogy tudom megnézni, hogy mi van az stderr-ben? Ingyenes tárhely...
Tárhelytől függ. A cron feladat beállításainál nincs valami naplózási vagy akármilyen lehetőség? (pl. e-mail az eredményről)
A lefuttatott parancsot te adod meg? Ha igen, és kiderül, hogy tényleg a php.ini-ben van eltérés (gondolom/remélem a dl() nem játszik, hogy te kézzel betöltsd), akkor végszükség esetén csinálhatod, hogy cron-ból wget-tel lekéred az oldalt, bár az elég masszív taknyolás.
BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)
Sajnos semmi log nincs itt a CRON-ról. A "Command to run"-nál ez van:
php -f /home/u184806125/public_html/csinalo.php
(A csinalo.php az én fájlom.)
Ezt a cron-ből wget-tel lekérést nem értem. Mi is az a wget és miért jó ha ezt csinálom/hogyan csináljam?
Ha tudod szerkeszteni a parancssort, akkor a php -f ... 2> /home/u18.../cron.log -al át tudod írányítani az stderr-t egy fájlba, a következő lefutás után pedig látod, hogy mi a gond.
A wget egy általános letöltő program, ami többek közt http-n is tud letöltögetni. Command to run-nál valami wget http://foo.bar/csinalo.php, ez gyakorlatilag mintha a böngészőből letöltenéd a csinalo.php-t, így garantáltan ugyanazzal az ini-vel fog menni, mert ugyanaz a webserver szolgálja ki (ha még leszabályozod, hogy ez a fájl csak a 127.0.0.1-ről legyen elérhető, még akár biztonságosnak is lehet nevezni)
BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)
Sajnos nem tudom szerkeszteni a parancssort, csak egy mező van, ahová beírom a php fájl nevét.
Így mit tehetnék?
Egyébként miért gond, ha más az ini?
Mert tippre a parancssorból/cron-ból indított php scriptekhez tartozó ini-ben nincs benne az extension=php5_curl.so [fejből írtam, nem biztos] sor, úgyhogy nincs betöltve a curl kiterjesztés (ha nem tiltották le, akkor egy dl('php5_curl'); [szintén fejből] sorral a scriptedben is betöltheted, de valszeg tiltva van a dl - egy próbát azért megér).
Ha a dl sem működik, akkor marad az, hogy egyezkedned kell az üzemeltetőkkel, vagy a curl-t lecserélni valami másra (nem írtad, hogy mire használod)
BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)
Köszönöm a választ. Sajnos a dl('php5_curl'); parancsot nem tudom kiadni, tiltva van.
Írtam PM-et.
Szerk.: nagyon érdekes, hogy a CURL-lal bejelentkezek egy oldalra és a CRON egy cookie.txt fájlt is létrehoz, akár CRON-nal futtatva is... tehát feltételezem, hogy mégsincs tiltva a CURL CRON-os futtatásnál.
Viszont most kipróbáltam egy egyszerűbb CURL-os feladatot is, konkrétan ezt:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://news.google.com/news?hl=en&topic=t&output=rss');
$fp = fopen('rss.xml', 'w');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec ($ch);
curl_close ($ch);
fclose($fp);
És ez "manuálisan" futtatva működik, tehát beleírja az rss.xml fájlba amit kell, CRON-nal futtatva viszont hozzá se nyúl az rss.xml fájlhoz.
Tehát akkor most mi a helyzet?... Hogy lehet, hogy egy CURL-os loginolás sikeres CRON-nal is, más CURL-os feladat viszont csak "manuális" futtatás esetén működik?
De jó lenne, ha valaki lefuttatna nekem saját szerverről egy CRON-t... :) Látnánk, hogy biztosan azzal van-e a gond.
Az elejére egy
?
Szerk.: Most látom a leveled. A legjobb tippem még mindig a working directory, úgyhogy a fenti kódrészlet még áll.
Szerk 2.: Ill. nézd meg a fájlok (itt xml, a küldött kódban txt) elérési jogosultságait, nem feltétlenül fut ugyanazzal a userrel a cron-ból indított script és a webszerver (próbáld ki, hogy 777-et adsz neki, ha az a gond, akkor ez biztosan kizárja)
BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)
Még nem akarom elkiabálni, mert melóban vagyok és csak fél szemmel tudok idefigyelni, de mintha működik (chdir(dirname(__FILE__)))!!! Nem tudod mióta szenvedek ezzel :D Ha ez tényleg igaz, akkor leköteleztél :) Majd azért még tesztelgetem később.
El tudod nekem magyarázni, hogyha tényleg ez a megoldás, akkor miért? Chdir, tehát jogosultság adás a könyvtárnak... de a cookie.txt-t hogyhogy enélkül is létre tudta hozni?
Ha anélkül is megcsinálta, akkor valszeg nem ez lesz, mert ez csak a munkakönyvtárat változtatja arra, ahol a script van (alapbeállításon a futtató user home könyvtárából indít).
Nem lehet hogy a cookie.txt még egy korábbi, webes indításból maradt ott?
BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)
Bocs, hogy csak most írok, eddig teszteltem.
Én ezt nem tudom megfejteni. Ami történt:
1.: Amikor nem volt benne a fájl elején a chdir(dirname(__FILE__));, akkor írt a cookie.txt fájlba, de a CURL nem végezte el a dolgát.
2.: Ezután beletettem a fájl elejére a chdir(dirname(__FILE__));, így nem írt a cookie.txt-be, viszont működött a CURL.
3.: Kivettem a fájl elejéről a chdir(dirname(__FILE__));-t, így most írt a cookie.txt-be és a CURL is működött.
Na ezt fejtse meg valaki...
Addig tesztelek tovább.
Szerk.: a következő CRON-nál már nem működött a CRON így, hogy ki van véve a chdir a kód elejéről, viszont a cookie.txt-t megírta. Mi a fene?
Nem lehet, hogy most van két cookie.txt-d?
Nem, megnéztem. Lehet, hogy nem a public_html-be dolgozik ilyenkor, hanem valami olyan helyre, amit én nem láthatok? Akkor viszont ez nem lesz gond?
Egyébként most visszaírtam a chdir(dirname(__FILE__));-t a php-be, működik a CURL, de a cookie.txt fájlt változatlanul hagyja.
Ha tényleg az van, hogy nem abba a cookie.txt fájlba dolgozik, akkor hogy deríthetném ki, hogy hova? Vagy ez lehetetlen, hiszen csak a public_html mappához van hozzáférésem?
Ha még mindig public_html/cookie.txt néven hivatkozol rá és a futtatott PHP scripted is a public_html-ben van, akkor írd át a COOKIEFILE/COOKIEJAR-t cookie.txt-re (btw, ha az első lekérésnek kéne beállítania valami sütit, amit a többinek olvasnia kéne, akkor afaik közben kell egy curl_close, mert csak akkor írja ki a sütiket (The name of a file to save all internal cookies to when the handle is closed, e.g. after a call to curl_close. - http://www.php.net/manual/en/function.curl-setopt.php)
BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)
Pont beugrott ez nekem is, hogy biztos ezért van és közben már le is teszteltem, valóban :D Köszi!
Akkor úgy tűnik minden rejtély megoldódott és minden úgy működik, ahogy kell :) Azért még tesztelgetek.
Köszönöm még egyszer.
php.ini-k nem különböznek? cli-re és a webserver által használtra?
+1
"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."
Ezt ingyenes tárhelyen meg tudom nézni valahogy?
Ne használj ingyenes tárhelyet.
-----
"Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben."
rand() a lelke mindennek! :)
Höhö... na mindegy.
A phpinfo nem lenne jó?
http://kb.mediatemple.net/questions/764/How+can+I+create+a+phpinfo.php+…
Valóban, köszi. De kiderült, hogy a jogosultságokkal volt gond, így az ügy megoldódott :)
Jogosultságok rendben vannak? Mert nem biztos, hogy ugyanazon felhasználó nevében fut CRON-ból indítva, mint amikor kézzel indítod. Ellenőrizd a kimeneti fájl teljes elérési útján a jogosultságokat (a teszt idejére mindenki írhassa és beléphessen a könyvtárakba). Illetve megpróbálhatsz egy sima fájl létrehozást tenni a PHP szkriptedbe és megnézni, mindkét indítás esetén létrejön-e a fájl.
Valóban a jogosultságokkal volt gond, köszönöm Neked is :)