首先感謝抽時間閱讀!
我嘗試通過瀏覽器登陸本機伺服器運行我的PHP檔案,無法正常運行。我安裝的是Appserver安裝包2.6.0版本(Appserver網站),包內包含的軟體版本為:Apache 2.2.8、PHP 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.8、PHP 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
檔案也關閉了安全模式。
萬分期待你的解答,謝謝!
多次嘗試後,問題得以解決
解決方案:增加了兩個系統內容變數:HOMEDRIVE、HOMEPATH。
之前無法解決原因:
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