我已經寫了一個PHP類,基本上從GraphicksMagick 1.3.12調用gm convert
通過exec()來調整圖片大小。來自現場的用戶正在報告問題,我也能夠在我的開發框中重現一些問題。想法調試從PHP調用GraphicsMagick
相關的代碼如下所示:
<?php
define('GM_PATH', 'C:\\Archivos de programa\\GraphicsMagick-1.3.12-Q16\\gm.exe');
[...]
private function resize($width, $height, $do_not_upscale=TRUE){
$source = escapeshellarg($this->source_file);
$target = escapeshellarg($this->target_file);
$command = escapeshellarg(GM_PATH) . ' convert ';
$parameters = array();
$parameters[] = $source;
$parameters[] = sprintf('-resize "%dx%d%s"', round($width), round($height), $do_not_upscale ? '>' : '');
$parameters[] = '+profile "*"';
$parameters[] = $target;
$execute = $command . ' ' . implode(' ', $parameters) . ' 2>&1';
exec($execute, $output, $return);
if($return==0){
return $this->target_file;
}else{
throw new Exception('Image resizing failed: return code ' . $return . ': ' . implode(PHP_EOL, $output));
}
}
直播現場PHP下運行/ 5.2.9-2和開發站點運行PHP/5.3.0。兩個盒子都運行Windows Server 2003,Apache/2.2和GraphicsMagick 1.3.112 Q16。
在生活網站我收到一個異常,返回碼1
。在dev站點中,我可以隨機看到cmd.exe
進程如何保持空閒狀態,直到我終止任務爲止,使用0%的CPU。
鑑於這是一個外部工具,我已經沒有關於接下來要做什麼的想法。我如何解決這個問題?
更新#1
我無關的代碼固定的一個小錯誤,我登錄到一個文件中的每個單獨的一步,我能想到的(包括gm.exe
的與-debug All
活動),但我沒有任何意義。 PHP到達exec()調用並且gm.exe
仍然永遠無法運行。
更新#2
我已經得到了確切的指令通過兩個方式來執行。一個回聲到日誌文件中示出了這一點:
"C:\Archivos de programa\GraphicsMagick-1.3.12-Q16\gm.exe" convert -debug All "\\SHARE\Project\tmp\mini_4d13465d4bc4b.jpg" -resize "1024x1024>" +profile "*" "\\SHARE\Project\tmp\mini_4d13465dafddd.jpg" 2>>"//SHARE/Project/Miniatura-01.log"
在該過程特性如圖Process Explorer命令行看起來像這樣:
cmd.exe /c ""C:\Archivos de programa\GraphicsMagick-1.3.12-Q16\gm.exe" convert -debug All "\\SHARE\Project\tmp\mini_4d13465d4bc4b.jpg" -resize "1024x1024>" +profile "*" "\\SHARE\Project\tmp\mini_4d13465dafddd.jpg" 2>>"//SHARE/Project/Miniatura-01.log""
我能夠手動雖然運行這兩個命令第二個只能從開始 - >運行(不是來自命令提示符),除非我double quote the whole expression。
在任何情況下,我都相當確定該命令按預期得到執行,因爲我一直獲得調整大小的圖像,並且由gm生成的調試日誌看起來很正常。在最後一行總是看起來是這樣的,當它檔,當它沒有:
13時53分52秒0:03 3.016u 2344 的module.c/UnloadModule/2180 /配置: 卸載「 JPEG」模塊......
我懷疑那裏的東西,使進程無法完成時退出:病毒掃描儀,外殼擴展或東西...
整個事情的開始不值得被修復的努力。我會考慮切換到ImageMagick或純PHP功能圖像。
更新#3
滑稽......我切換到ImageMagick的和我得到完全相同的問題!我可以重現它總是:我只需要打開兩個瀏覽器選項卡。
很明顯,我已經忘記了如何從PHP運行命令。我想我會嘗試使用純PHP代碼調整圖片大小。
我都記錄確切的命令,並從工藝(用的Process Explorer)讀它,它工作正常,從命令提示符(實際上,我要殺死停滯不前的過程首先是因爲輸出文件被鎖住了)。我會考慮你的其他建議。 – 2010-12-23 15:19:58