[英]Running exec() from PHP not working
這適用於我的PHP代碼
$output = array();
exec("ls /Applications/XAMPP/htdocs/MY_APP/images", $output);
var_dump($output);
現在,我需要使用ImageMagick的“轉換”命令將PNG文件轉換為PDF文件。 但是以下內容不執行任何操作,也不返回任何錯誤。
$output = array()
exec("convert /Applications/XAMPP/htdocs/MY_APP/images/test.png /Applications/XAMPP/htdocs/MY_APP/images/test.pdf", $output);
var_dump($output);
是權限問題嗎? 我將chmod 777放入了images文件夾。 我還應該檢查什么? 當我從終端運行命令時,它運行正常。
嘗試將convert更改為完整路徑以進行轉換,例如usr / local / bin / convert
可以找到:
<?php
echo "<pre>";
system("type convert");
echo "</pre>";
?>
要么
<?php
echo "<pre>";
system('which convert',$path); print_r($path);
echo "</pre>";
?>
我剛剛重讀了您的帖子,並注意到您正在使用XAMPP,因此上述答案可能無效。
嘗試將所有內容放在同一文件夾中,以消除路徑等問題。
exec("convert test.png test.pdf");
您還安裝了ghostscript嗎? 為了證明它有效,而不是ghostscript問題,請嘗試另存為jpg而不是pdf。
如果您的PHP代碼是通過Web服務器(例如Apache)執行的,則Apache進程(httpd)可能會在受限制的unix用戶(例如apache或httpd)下運行。 受限制的Unix用戶通常在試圖生成pdf的/Applications/XAMPP/htdocs/MY_APP/images/
目錄中沒有寫權限。 嘗試使用以下命令,看看是否可行:
exec("convert /Applications/XAMPP/htdocs/MY_APP/images/test.png /tmp/test.pdf", $output);
var_dump($output);
上面的命令嘗試在/tmp
目錄中生成pdf,這通常對於Apache unix用戶是可寫的。
我注意到您已經為圖像文件夾指定了777。 請了解僅chmod 777到images文件夾是不夠的。 您還需要在所有父目錄中向Apache用戶授予寫權限,例如MY_APP,htdocs,XAMPP,Applications等,這是一個很大的安全隱患 ,我必須補充。
我遇到了同樣的問題:安全模式已關閉,但仍然無法執行Image Magick的轉換。
我發現由於某種原因,php無法看到腳本(甚至包括通過php.ini包含在include_path中的路徑)。 檢查日志,發現錯誤是:
sh: convert: command not found
嘗試使用fullpath調用腳本(我使用which convert
對其進行了檢查),我最終設法使其通過exec
正常運行。
因此,假設轉換全路徑為/usr/local/bin
,請嘗試運行以下命令:
<?php
$output = array();
exec("/usr/local/bin/convert /Applications/XAMPP/htdocs/MY_APP/images/test.png /Applications/XAMPP/htdocs/MY_APP/images/test.pdf", $output);
var_dump($output);
?>
如果您在Windows下遇到此問題,請嘗試exec('identify pathtoyourfile')。 如果可以,但是exec('convert ...')不起作用,您可能無意中調用了Window的convert實用程序而不是IM的convert。 解決方案是將IM的轉換重命名為cconvert。 或者,檢查IM是否位於PATH環境變量的開頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.