我有以下文件,其中處理單個XML文件並將其作爲一行推送到數據庫中。它爲完美工作單個文件。服務器可以處理多少時間有限制嗎?
現在我想把所有目錄中的文件這樣到數據庫中,因此寫了一個腳本走了過來目錄,並通過一個一個推它的所有文件。而是它的工作,但處理文件的XX(可變)數量後停止
我雖然可能是壞了我的XML文件,因此決定只具有單一的XML文件(這是完美的處理早些時候)在目錄中,只是循環它,插入它數百次,以便我可以證實它與我的文件有問題。但是猜猜發生了什麼?
處理XX(可變)數量的文件後,處理停止。在我下面的例子中,經過反覆嘗試,它停在110(counter val),111,99等。它應該在哪裏處理1000個文件。
<?php
include_once '../includeTop.php';
header ('Content-type: text/xml');
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
$dir = "../../newHotelFiles";
$file = NULL;
$fileName = "noFileName";
$processed = 0;
util::writeToLog ($dir . '/progressData.tmp', "Files processed: $processed");
try {
echo XMLInterface::openTag ("start");
for($counter = 0; $counter < 1000; $counter ++) {
$dirHandle = opendir ('../../newHotelFiles');
while (false !== ($file = readdir ($dirHandle))) {
//process my files codes
$processed ++;
util::writeToLog ($dir . '/progressData.tmp', "Files processed: $processed");
}
}
//util::writeToLog($dir.'/progressData.tmp', "Done ".$counter);
}
echo XMLInterface::closeTag ("start");
exit();
} catch (Exception $e) {
echo XMLInterface::failure ("Error occured. Written to the log file - $file.log");
util::writeToLog ("../../newHotelFiles/$fileName.log", ExceptionHandler::error_msg ($e));
exit();
}
?>
什麼問題?是否它的腳本(我懷疑,因爲它的工作時for循環不存在)或是否有任何serverside限制我不知道
沒有真正相關,但爲什麼你使用PHP來做到這一點? PHP被用作模板語言,而不是編程語言。將其導出到單獨的腳本中,以便您的Web服務器不會佔用太多處理空間(使用Python或其他)。 – tjameson
@tjameson在所有應有的尊重下,意圖都沒有想到這麼多,所以我想。 'PHP'雖然遠離我個人最喜歡的語言,但它完全符合Turing,並且非常適合做OP似乎正在做的事情。另外,就像Perl命名一樣,您可以在命令行上調用它,而不依賴於Apache,HTTP,CGI等。 – amn
@footy您是否知道可以從命令行調用'PHP'作爲解釋器?這很可能會消除你的超時錯誤的原因,如果你的代碼一切正常,你不需要與HTTP,CGI或Apache(對不起,重複自己)有關的API的一部分,那麼你總是比較好。使用'php -f/path/to/file.php'。儘管並非所有的PHP發行版都附帶了命令行解釋器,但確實很方便。 – amn