我有一個奇怪的問題,在某些情況下沒有執行查詢。我非常確定這不是他們查詢自己的問題,因爲我在它之前插入了一個非常簡單的查詢,這不會是錯誤的,但也不會被執行。長時間處理後PHP不執行查詢
下面是對此腳本的簡短說明:腳本每分鐘都由cronjob執行。它檢查上傳的PDF文件列表,並將它們拆分爲單獨的文件(如果尚未拆分),然後生成JPG預覽。
它對於普通的PDF文件非常適用。但是,上傳一個大型的PDF文件(例如30MB,28頁)會使腳本無緣無故地停下來(請參閱行內註釋)。我有PDF分割過程error_logged($ pdf->過程),它工作得很好。
一位朋友懷疑這個奇怪的錯誤可能是由於服務器上的memoryspace不足或達到了與數據庫的最大連接數引起的,但我們對這些事情都沒有太多線索。也許你們中的一個有?
ignore_user_abort(0);
set_time_limit(0);
error_reporting(-1);
if($_SERVER['SERVER_ADDR'] == '127.0.0.1')
include_once("../config.php");
else
include_once("/home/httpd/docs/myproject/inc/config.php");
include_once(ROOT."inc/db.class.php");
include_once(ROOT."inc/functions.php");
include_once(ROOT."inc/generate_previews.class.php");
$db = DB::getInstance();
$select_file_name_query = "SELECT * FROM z_tmp_preview_files WHERE id > '0' AND status = '0' AND file_name != ''";
$result = $db->query($select_file_name_query);
while($job_preview = $db->fetchNextObject($result)){
$job_id = $job_preview->rel_job_id;
$file = $job_preview->file_name;
$set_inprocess_file_name_query = "UPDATE z_tmp_preview_files SET status = '1' WHERE id = '".$job_preview->id."'";
$set_inprocess_file_name_result = $db->execute($set_inprocess_file_name_query);
$file_info = explode('.',$file);
$file_name = $file_info[0];
$jpg_file = str_replace(".pdf", ".jpg", $file);
// =======================================================================================
// PDF-file is split into separate pages and JPG-previews are generated with the McPdf Class
// This works just fine, even with very large files, but may take some minutes.
// =======================================================================================
$pdf = new McPdf($job_id);
$pdf->process();
$files_burst = LoadFiles("".ROOT."intern/jobs/".$job_id."/burst/");
$page_count = sizeof($files_burst);
error_log("\nTEST:",3,ERROR_DIR);
$sql = "SELECT annotation_type FROM annotations";
$value = $db->queryUniqueValue($sql);
// =======================================================================================
// This is where the PHP-script just stops. Non of the following error_logs are shown,
// nor will the UPDATE-query be executed. The previous SELECT-query probably hasn't been executed as well.
// =======================================================================================
error_log($value,3,ERROR_DIR);
$remove_file_name_query = "UPDATE z_tmp_preview_files SET status = '2' WHERE id = '".$job_preview->id."'";
error_log("\n\ncheck query:",3,ERROR_DIR);
error_log(" ".$remove_file_name_query,3,ERROR_DIR);
$remove_file_name = $db->execute($remove_file_name_query);
error_log("\npossible error:".$remove_file_name."\n",3,ERROR_DIR);
}
的db.class工作得很好,我到處都在我的項目中使用它,但如果你想知道queryUniqueValue做什麼,下面的代碼:
function queryUniqueValue($query, $debug = -1){
$query = "$query LIMIT 1";
$this->nbQueries++;
$result = mysql_query($query) or $this->debugAndDie($query);
$line = mysql_fetch_row($result);
$this->debug($debug, $query, $result);
return $line[0];
}
編輯:這是另一種猜測:也許這是某種MySQL超時?只有當McPdf類需要很長時間來處理時,問題纔會發生。據我所知,在執行$ pdf-process()之後,第一個mysql-query將中止執行PHP腳本。
我想,並將其設置爲1個小時,但遺憾的是它沒有工作:/ –
嗯,可能是一個數據庫超時。超時發生多少分鐘後?這是否一直如此? 查看http://gauravasthana.blogspot.nl/2011/02/exploring-timeout-variables-in-mysql.html 它在MySQL中列出了一些超時參數,它們可能會讓你回到正軌。 – HammerNL