Hey,
loopt even tegen een probleempje op en vind via Google geen passende oplossing. Voor een klant heb ik een import script geschreven dat bepaalde M4N feeds uitleest en importeert. Nu is de volgende stap om dit geheel automatisch te laten verlopen via cronjobs.
De files werken 100%, als ik ze handmatig aanroep wordt de logfile netjes vol geschreven met wat er allemaal gebeurd, echter als de cronjob in werking wordt gesteld dan loopt de cronjob vast op het moment dat de functie simplexml_load_file() wordt gebruikt.
Na wat zoeken ben ik er inmiddels achter dat deze functie vastloopt omdat de locatie van de file via het http-protocol gaat. Aangezien de cronjob vanuit de unix commandline wordt uitgevoerd wordt naar alle waarschijnlijkheid dit protocol niet herkent en loopt daarom de cronjob niet verder (hij loopt dus niet vast, maar 'skipped' elke keer hetgeen wat moet gebeuren na het uitlezen omdat de functie geen 'true' als return heeft).
Iemand enig idee of er in de crontab iets toe te voegen is waardoor de http wel wordt herkend? Het gebruik van cURL om eerst de XML in te lezen en vervolgens met simplexml_load_string te gebruiken levert een fout op dat er teveel geheugen wordt gebruikt (sommige feeds zijn dan ook behoorlijk lang), dus ik twijfel of dit de juiste oplossing is.
Aanvullend bericht:
Nou goed, de cURL lost een gedeelte op. De in te laden XML feeds staan in een array waar ik doorheen loop, als ik nu onderstaande functie gebruik voor het ophalen van de data dan lukt dat voor de 1e feed wel, maar de tweede feed blijft vervolgens hangen.. ik blijf even debuggen maar als iemand een oplossing weet: graag.
Meer aanvullende inhoud:
Lijkt erop dat niemand me echt kan helpen hiermee.. in elk geval gebruik ik deze functie om de XML in te laden:
Vrij simpel; indien je van buitenaf files mag aanroepen word de simplexml_load_file gebruikt en zo niet dan wordt cURL ingeschakeld om de file op te halen en met simplexml_load_string geladen te worden.PHP Code:
function curl_get_url($url) {
if (ini_get('allow_url_fopen')) {
libxml_use_internal_errors(true);
$xml = simplexml_load_file($url);
} else {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xml_raw = curl_exec($ch);
libxml_use_internal_errors(true);
$xml = simplexml_load_string($xml_raw);
curl_close($ch);
}
return $xml;
}
Echter nu heb ik de volgende setup:
Als ik de file direct aanroep dan werkt alles prima, maar zodra de cronjob de file opent wordt er maar één key uit de $urls array genomen, dus enkel $urls['key'] wordt geopend en bekeken terwijl $urls['key2'] en $urls['etc'] niet geopend worden.PHP Code:
$urls = array('key' => 'url', 'key2' => 'url2', 'etc' => 'etc');
foreach($urls as $key => value) {
// Elke URL ophalen
$load = curl_get_url($value);
foreach($load->XML->structuur as $record) {
// iets met het gevonden record doen
}
}
In de cronjob staan ook nog een aantal stukjes code om te loggen, maar hij houd simpelweg op zodra hij de 2e keer een feed moet openen, hij logged de laatste regel ('Cron ended at ....') ook niet meer in de file.
- Cronjob: simplexml_load_file mislukt vanwege http locatie v/d file
-
09-03-2011, 13:15 #1
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Cronjob: simplexml_load_file mislukt vanwege http locatie v/d file
Laatst aangepast door Joshua de Gier : 09-03-2011 om 20:25 Reden: Automatisch samengevoegd.
-
-
09-03-2011, 20:36 #2
64BitsWebhosting.EU
- Berichten
- 2.085
- Lid sinds
- 18 Jaar
Re: Cronjob: simplexml_load_file mislukt vanwege http locatie v/d file
foreach($urls as $key => value) {
... zie je hem?
-
09-03-2011, 20:42 #3
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Re: Cronjob: simplexml_load_file mislukt vanwege http locatie v/d file
Ja sorry, tikfoutje! Dit is maar een voorbeeld van de setup, dus niet het echte script. Per mail heb ik je een link gestuurd naar het script.
De cronjob werkt ook als je hem via de browser aanroept, echter als de cron zelf uitgevoerd wordt, loopt hij niet door alle URLs maar neemt hij slechts de 1e.
-
09-03-2011, 22:00 #4
ManagedWPHosting.nl
- Berichten
- 1.486
- Lid sinds
- 19 Jaar
Re: Cronjob: simplexml_load_file mislukt vanwege http locatie v/d file
Mail m mijn ook es? dus compleet
ps: check ook de laatste hier: http://www.ramonfincken.com/tag/xml.html
-
09-03-2011, 22:06 #5
- Berichten
- 312
- Lid sinds
- 15 Jaar
Re: Cronjob: simplexml_load_file mislukt vanwege http locatie v/d file
Ramon die advertenties doen pijn aan mijn ogen :P
-
10-03-2011, 17:09 #6
ManagedWPHosting.nl
- Berichten
- 1.486
- Lid sinds
- 19 Jaar
-
10-03-2011, 17:16 #7
- Berichten
- 750
- Lid sinds
- 15 Jaar
Re: Cronjob: simplexml_load_file mislukt vanwege http locatie v/d file
Probeer een met wget erin?
/usr/bin/wget -O - -q http://www.....
-
10-03-2011, 19:23 #8
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Re: Cronjob: simplexml_load_file mislukt vanwege http locatie v/d file
wget is niet te bedoeling, is niet de bedoeling dat ze zo aangeroepen worden (staan nu nog in een directory met htpasswd beveiliging maar moeten nog buiten de webroot komen). Dus via de phphandler is wel een vereiste.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic