用exec執行cmd命令返回為空白

來源:互聯網
上載者:User
我把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 函數的

我也遇到相同情況,不過我的命令可以執行成功,但是沒有傳回值。不知道問題出在哪,許可權也全開了了

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.