我把swftools裡的pdf2swf.exe這個檔案放到了網站根目錄 在php裡利用exec函數執行命令
$cmd = "c:/php/www/pdf2swf c:/php/www/upload/1.pdf c:/php/www/upload/1.swf"
exec($cmd);
我直接把這個代碼 粘貼到命令列裡 執行是正確的 可用php這麼調用 卻不成功 exec的後兩個參數加上後 第二個參數是array();第三個是1,不成功 然後經過修改 我直接在跟目錄下放個php檔案 在裡面寫的exec(pdf2swf 1.pdf 1.swf)這麼執行能成功 求教這是什麼原因?
註:以上代碼我在我本地測試完全通過,放到伺服器上就是以上錯誤,都是windows2003的 網上用的IIS 本地用的apache
回複討論(解決方案)
先看手冊
exec() 第二個參數是螢幕返回的資訊,每行為一個單元,組成數組
先看手冊
exec() 第二個參數是螢幕返回的資訊,每行為一個單元,組成數組
嗯 是 這個數組是空的 螢幕上行沒有任何資訊 我把命令粘貼到命令列裡直接執行是正確的
因為你手動開啟命令列,是承接了系統內容的,所以能直接運行檔案
但用php執行,並不能承接系統內容,所以你還是需要指明可執行檔(exe等)
這應該是使用者權限問題
直接在跟目錄下放個php檔案 可以成功
但顯然不是 web 方式啟動並執行,因為你不可能將網站的根放在 C 盤的根上
建議:
將網站目錄移動到 D 盤上,並授予匿名使用者執行權
不把網站放在 C 盤可防止系統檔案被意外破壞,同時在系統崩潰時,災難恢複的的工作量要小得多
因為你手動開啟命令列,是承接了系統內容的,所以能直接運行檔案
但用php執行,並不能承接系統內容,所以你還是需要指明可執行檔(exe等)
我把pdf2swf後面加上了.exe 還是不能執行 我試了試ipconfig 這個命令沒問題 可能應該還是路徑問題 我明明都寫了絕對路徑的 請問大哥 我是不是路徑什麼地方有問題?
$mcd = "D:\JGY\JGY_WEB\JGY_PHP\install_package\app\pdf2swf.exe D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.pdf D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.swf"
exec($cmd,$out);
這是我的cmd命令 比較長 請賜教
這應該是使用者權限問題
直接在跟目錄下放個php檔案 可以成功
但顯然不是 web 方式啟動並執行,因為你不可能將網站的根放在 C 盤的根上
建議:
將網站目錄移動到 D 盤上,並授予匿名使用者執行權
不把網站放在 C 盤可防止系統檔案被意外破壞,同時在系統崩潰時,災難恢複的的工作量要小得多
呃 版主大大 我是放在網站根目錄了 不是C盤根目錄
D:\JGY\JGY_WEB\JGY_PHP\install_package 這個是我的網站根目錄
我把pdf2swf.exe放在這個下面 然後在放個1.pdf 再建一個index.php
裡面的代碼直接就是exec(pdf2swf 1.pdf 1.swf)
這樣的能成功
然後下面的代碼:
$mcd = "D:\JGY\JGY_WEB\JGY_PHP\install_package\app\pdf2swf.exe D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.pdf D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.swf"
路徑比較深 三個參數中間都有空格 但這個就不行了
$mcd
$cmd
我看到兩個不同的變數名
$mcd
$cmd
我看到兩個不同的變數名
額 這個是我剛才手敲的 不好意思 我是在ie裡echo出的cmd命令
D:\JGY\JGY_WEB\JGY_PHP\install_package\app\pdf2swf.exe D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.pdf D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.swf
就是這麼個路徑
再試試單引號……也不想這個問題,儘管試試吧
$cmd = "c:/php/www/pdf2swf c:/php/www/upload/1.pdf c:/php/www/upload/1.swf"
exec($cmd);
這是你發帖中的代碼
如果你提供的資訊,怎麼可能得到真實的結果呢?
$cmd = "c:/php/www/pdf2swf c:/php/www/upload/1.pdf c:/php/www/upload/1.swf"
exec($cmd);
這是你發帖中的代碼
如果你提供的資訊,怎麼可能得到真實的結果呢?
抱歉 抱歉 因為我的地址是在程式裡得到的 我把程式貼出來 不如這麼直接寫個url直接 我echo了一下$cms這個變數 就是這個路徑
D:\JGY\JGY_WEB\JGY_PHP\install_package\app\pdf2swf.exe D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.pdf D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.swf
勞煩版主大人再給分析一下 是不是iis的問題?我在本地apache測試是正常的 iis上看了一下 所有的使用者都有讀寫執行許可權的
首先要解決的是許可權的問題
如果指令在命令列或批處理中可以正確執行的話,那麼問題就在於“許可權”
當然你是不會禁用 exec 函數的
我也遇到相同情況,不過我的命令可以執行成功,但是沒有傳回值。不知道問題出在哪,許可權也全開了了