cmd - php檔案在命令列可以順利運行,在瀏覽器上無法正常運行

來源:互聯網
上載者:User

首先感謝抽時間閱讀!
我嘗試通過瀏覽器登陸本機伺服器運行我的PHP檔案,無法正常運行。我安裝的是Appserver安裝包2.6.0版本(Appserver網站),包內包含的軟體版本為:Apache 2.2.8PHP 6.0.0-dev。為了找出錯誤原因,我進行了如下步驟:
1、從命令列運行PHP檔案,檔案名稱為julia.php。運行成功。運行過程如下:
php檔案代碼為:

命令列運行:

同時,php檔案中還有一行指令"exec('julia 12.jl')"也執行成功了。這行代碼意思是運用julia語言(一種新的程式設計語言)的REPL環境運行12.jl這個julia檔案,12.jl運行成功的話,會在案頭輸出一個txt檔案。在此處txt檔案也成功出現在案頭上了。
但是,當我使用瀏覽器,從伺服器訪問julia.php的時候,結果如下:

雖然最後一行代碼echo "finished!"順利執行了,但是"exec('julia 12.jl')"並沒有執行成功,因為案頭上沒有產生txt檔案。
2、我百度Google了很久看到一個貌似是查看錯誤的方法,我也不是很清楚是怎麼回事,抱著試試看的態度操作了一下:
php檔案代碼如下:

array('pipe', 'r'), 1=>array('pipe', 'w'), 2=>array('pipe', 'w')), $pipes);           fwrite($pipes[0], $input);fclose($pipes[0]);           $stdout=stream_get_contents($pipes[1]);fclose($pipes[1]);           $stderr=stream_get_contents($pipes[2]);fclose($pipes[2]);           $rtn=proc_close($proc);           return array('stdout'=>$stdout,                        'stderr'=>$stderr,                        'return'=>$rtn                       );          }$str = " julia 12.jl";  //此處為我要檢測是否執行成功的指令" julia 12.jl"var_export(my_exec($str));     echo "finished!";?>

命令列運行該php檔案結果:

瀏覽器訪問結果:

百度Google了其中的

"ERROR:key not found: "HOMEDRIVE"

並沒有找到滿意的答案。
請問我這是遇到什麼問題了?有什麼辦法能讓我順利執行該檔案中的exec(" julia 12.jl")指令嗎?
另外,我把其中的調用julia軟體運行指令碼的命令換成調用MATLAB軟體的命令後,無論是在命令列還是在瀏覽器訪問的情況下,均成功運行了MATLAB的m檔案。我的php.ini檔案也關閉了安全模式。
萬分期待你的解答,謝謝!

回複內容:

首先感謝抽時間閱讀!
我嘗試通過瀏覽器登陸本機伺服器運行我的PHP檔案,無法正常運行。我安裝的是Appserver安裝包2.6.0版本(Appserver網站),包內包含的軟體版本為:Apache 2.2.8PHP 6.0.0-dev。為了找出錯誤原因,我進行了如下步驟:
1、從命令列運行PHP檔案,檔案名稱為julia.php。運行成功。運行過程如下:
php檔案代碼為:

命令列運行:

同時,php檔案中還有一行指令"exec('julia 12.jl')"也執行成功了。這行代碼意思是運用julia語言(一種新的程式設計語言)的REPL環境運行12.jl這個julia檔案,12.jl運行成功的話,會在案頭輸出一個txt檔案。在此處txt檔案也成功出現在案頭上了。
但是,當我使用瀏覽器,從伺服器訪問julia.php的時候,結果如下:

雖然最後一行代碼echo "finished!"順利執行了,但是"exec('julia 12.jl')"並沒有執行成功,因為案頭上沒有產生txt檔案。
2、我百度Google了很久看到一個貌似是查看錯誤的方法,我也不是很清楚是怎麼回事,抱著試試看的態度操作了一下:
php檔案代碼如下:

array('pipe', 'r'), 1=>array('pipe', 'w'), 2=>array('pipe', 'w')), $pipes);           fwrite($pipes[0], $input);fclose($pipes[0]);           $stdout=stream_get_contents($pipes[1]);fclose($pipes[1]);           $stderr=stream_get_contents($pipes[2]);fclose($pipes[2]);           $rtn=proc_close($proc);           return array('stdout'=>$stdout,                        'stderr'=>$stderr,                        'return'=>$rtn                       );          }$str = " julia 12.jl";  //此處為我要檢測是否執行成功的指令" julia 12.jl"var_export(my_exec($str));     echo "finished!";?>

命令列運行該php檔案結果:

瀏覽器訪問結果:

百度Google了其中的

"ERROR:key not found: "HOMEDRIVE"

並沒有找到滿意的答案。
請問我這是遇到什麼問題了?有什麼辦法能讓我順利執行該檔案中的exec(" julia 12.jl")指令嗎?
另外,我把其中的調用julia軟體運行指令碼的命令換成調用MATLAB軟體的命令後,無論是在命令列還是在瀏覽器訪問的情況下,均成功運行了MATLAB的m檔案。我的php.ini檔案也關閉了安全模式。
萬分期待你的解答,謝謝!

多次嘗試後,問題得以解決
解決方案:增加了兩個系統內容變數:HOMEDRIVEHOMEPATH
之前無法解決原因:
1、不清楚Key Not Found的含義,後來嘗試才知道,指的是系統的環境變數,而非Apache或者PHP的環境變數,在此感謝xelz的點撥。
2、初次嘗試增加HOMEDRIVE系統內容變數,測試後沒反應,其實需要重啟電腦,windows就這個蛋疼。
3、初次嘗試增加HOMEDRIVE系統內容變數,重啟電腦後,依然報錯,一開始我沒注意以為還是缺少HOMEDRIVE系統內容變數,其實這次的錯誤略有不同,顯示的是缺少HOMEPATH系統內容變數。
4、意識到以上錯誤後,我再次添加HOMEPATH環境變數,重啟電腦後,伺服器成功運行了PHP檔案,成功調用Julia軟體運行了jl檔案。
十分感謝大家之前的熱心回答。

以下答案只是猜的,希望有協助

julia需要HOMEDRIVE這個環境變數,命令列啟動並執行時候是以你自己的身份啟動並執行
但是運行apache伺服器的使用者沒有設定這個環境變數,因此報錯

不懂julia,如果你寫檔案用到了相對路徑,可以嘗試改成絕對路徑
如果本來就是絕對路徑,或者改成絕對路徑也不行, 那麼嘗試在系統內容變數裡設定一個HOMEDRIVE

Apache 過濾掉了一些環境變數大概?用 SetEnv 還是什麼指令在設定檔裡設定一下試試。

瀏覽器上本來就不能運行php

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.