spamcam
30.03.05, 13:49
Hallo zusammen,
ich habe ein PHP-Script geschrieben, welches eine bzw. mehrere XML-Files ausliest und die Daten in eine MySQL-DB wegschreibt. Das funktioniert per Browser-Aufruf einwandfrei.
Jetzt wollte ich mein Script per Cronjob regelmäßig abarbeiten lassen.
Das funktioniert auch bis zu dem Punkt, wo der Parser erzeugt wird:
$xml_parser = xml_parser_create('');
Dort stoppt das Script ohne Fehlermeldung oder Hinweis.......... Verzweiflung!
Warum funktioniert das Script per Browseraufruf und per Cron nicht? Gibt es da Unterschiede, die ich nicht beachtet habe? Kenne mich mit Crons noch nicht so gut aus.
Hatte schon einmal jemand einen Cronjob der mittels PHP ein XML-File parst oder xml_parser_create () verwendet und mir ein Beispiel schicken oder hier posten kann?
Muß man dem Cron erst sagen das er den XML-Parser benötigt, so wie ich ihm erst den Pfad auf PHP zeigen muß (Macht für mich zwar keinen Sinn, weil das ja ein Bestandteil von PHP ist)?
Kann es mit der PHP-Installation zusammenhängen?
Hier noch ein wenig Code zur Verdeutlichung:
Cronaufruf /usr/local/psa/admin/bin/php /home/httpd/vhosts/meinedomain.de/httpdocs/import/import.php
Auszug aus dem PHP-Script:
// XML-Parsen
$file = "/home/httpd/vhosts/meinedomain.de/httpdocs/uploaded_test/".$filename;
echo $file."<br>";
if (file_exists($file)){
echo "Datei ist da jetzt sollte geparst werden!<br>";
// XML_PARSER
$elements = $stack = array();
$count = $depth = 0;
class element{
var $name = '';
var $attributes = array();
var $data = '';
var $depth = 0;
}
function start_element_handler($parser, $name, $attribs){
global $elements, $stack, $count, $depth;
$id = $count;
$element = new element;
$elements[$id] = $element;
$elements[$id]->name = $name;
while(list($key, $value) = each($attribs))
$elements[$id]->attributes[$key] = $value;
$elements[$id]->depth = $depth;
array_push($stack, $id);
$count++;
$depth++;
}
function end_element_handler($parser, $name){
global $stack, $depth;
array_pop($stack);
$depth--;
}
function character_data_handler($parser, $data){
global $elements, $stack;
$elements[$stack[count($stack)-1]]->data .= $data;
}
$xml_parser = xml_parser_create();
ich habe ein PHP-Script geschrieben, welches eine bzw. mehrere XML-Files ausliest und die Daten in eine MySQL-DB wegschreibt. Das funktioniert per Browser-Aufruf einwandfrei.
Jetzt wollte ich mein Script per Cronjob regelmäßig abarbeiten lassen.
Das funktioniert auch bis zu dem Punkt, wo der Parser erzeugt wird:
$xml_parser = xml_parser_create('');
Dort stoppt das Script ohne Fehlermeldung oder Hinweis.......... Verzweiflung!
Warum funktioniert das Script per Browseraufruf und per Cron nicht? Gibt es da Unterschiede, die ich nicht beachtet habe? Kenne mich mit Crons noch nicht so gut aus.
Hatte schon einmal jemand einen Cronjob der mittels PHP ein XML-File parst oder xml_parser_create () verwendet und mir ein Beispiel schicken oder hier posten kann?
Muß man dem Cron erst sagen das er den XML-Parser benötigt, so wie ich ihm erst den Pfad auf PHP zeigen muß (Macht für mich zwar keinen Sinn, weil das ja ein Bestandteil von PHP ist)?
Kann es mit der PHP-Installation zusammenhängen?
Hier noch ein wenig Code zur Verdeutlichung:
Cronaufruf /usr/local/psa/admin/bin/php /home/httpd/vhosts/meinedomain.de/httpdocs/import/import.php
Auszug aus dem PHP-Script:
// XML-Parsen
$file = "/home/httpd/vhosts/meinedomain.de/httpdocs/uploaded_test/".$filename;
echo $file."<br>";
if (file_exists($file)){
echo "Datei ist da jetzt sollte geparst werden!<br>";
// XML_PARSER
$elements = $stack = array();
$count = $depth = 0;
class element{
var $name = '';
var $attributes = array();
var $data = '';
var $depth = 0;
}
function start_element_handler($parser, $name, $attribs){
global $elements, $stack, $count, $depth;
$id = $count;
$element = new element;
$elements[$id] = $element;
$elements[$id]->name = $name;
while(list($key, $value) = each($attribs))
$elements[$id]->attributes[$key] = $value;
$elements[$id]->depth = $depth;
array_push($stack, $id);
$count++;
$depth++;
}
function end_element_handler($parser, $name){
global $stack, $depth;
array_pop($stack);
$depth--;
}
function character_data_handler($parser, $data){
global $elements, $stack;
$elements[$stack[count($stack)-1]]->data .= $data;
}
$xml_parser = xml_parser_create();