Heim  >  Artikel  >  Backend-Entwicklung  >  Was tun, wenn PHP Exec nicht ausgeführt werden kann?

Was tun, wenn PHP Exec nicht ausgeführt werden kann?

藏色散人
藏色散人Original
2022-11-22 10:16:144163Durchsuche

Lösung für das Problem, dass PHP Exec nicht ausgeführt werden kann: 1. Suchen Sie die PHP-Konfigurationsdatei php.ini, suchen Sie in der Datei nach „disable_functions“ und entfernen Sie „exec“ und „shell_exec“. 2. Gehen Sie zum Server Ändern Sie die Dateiberechtigungen. 3. Ändern Sie den abgesicherten Modus in der Konfiguration: „safe_mode=On“.

Was tun, wenn PHP Exec nicht ausgeführt werden kann?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, PHP-Version 8.1, Dell G3-Computer.

Was soll ich tun, wenn PHP Exec nicht ausgeführt werden kann?

Analyse der Ursache des Befehlsfehlers bei der PHP-Exec-Ausführung

Problemhintergrund:

Aufgrund der Projektanforderungen ist es erforderlich, Bilder von der HTML-Seite zu generieren. Verwenden Sie das Tool phantomjs (zum Lernen klicken). Machen Sie einen Screenshot der Seite und führen Sie ihn im Cmd-Fenster aus. Kein Problem. Aber der Exec-Vorgang in PHP ist fehlgeschlagen, was darauf hindeutet, dass PhantomJS keine interne Anweisung ist.

Problemlösung:

Finden Sie verschiedene Lösungen in Baidu:

Lösung 1:

1. Ändern Sie php.ini

Suchen Sie die PHP-Konfigurationsdatei php.ini, wenn Sie Xingwaiphp automatisch verwenden. Das Installationsprogramm konfiguriert das PHP-Umgebung. Diese Datei befindet sich im Verzeichnis C:WINDOWS.

Suchen Sie in der Datei nach „disable_functions“, finden Sie sie, entfernen Sie „exec“ und „shell_exec“ und speichern Sie dann die Datei.

Was tun, wenn PHP Exec nicht ausgeführt werden kann?

2. Ändern Sie die Eigenschaften der Datei cmd.exe

Geben Sie C:WINDOWSsystem32 ein, suchen Sie die Datei cmd.exe, klicken Sie mit der rechten Maustaste -> Eigenschaften, fügen Sie das Internet-Gastkonto in den „Sicherheit“-Einstellungen hinzu, das ist IUSR_ *** ***Dieses Konto und erteilen Sie dann die Berechtigungen „Lesen und Ausführen“ und „Lesen“.

Option 2:

Es soll sich um ein Berechtigungsproblem handeln.

Lösung: https://www.php.cn/php-weizijiaocheng-498092.html

Option 3:

Die in PHP integrierten Funktionen exec und system können Systembefehle (Shell-Befehle) aufrufen Natürlich gibt es auch Durchgangs-, Escapeshellcmd- und andere Funktionen.

In vielen Fällen kann uns die Verwendung der Exec-, System- und anderen Funktionen von PHP zum Aufrufen von Systembefehlen dabei helfen, unsere Arbeit besser und schneller abzuschließen. Exec hat mir beispielsweise vor zwei Tagen sehr geholfen, als ich .rar-Dateien stapelweise verarbeitete.

Heute werde ich die häufig verwendeten Anrufsystemfunktionen sortieren und meine Erfahrungen mit allen teilen.

Hinweis: Wenn Sie diese beiden Funktionen nutzen möchten, muss der abgesicherte Modus in php.ini ausgeschaltet sein, da PHP sonst aus Sicherheitsgründen den Aufruf von Systembefehlen nicht zulässt.

Schauen Sie sich zunächst die Erklärung dieser beiden Funktionen im PHP-Handbuch an:

exec --- Externe Programme ausführen

语法 : string exec ( string command [, array &output [, int &return_var]] )

Erklärung:

exec() führt den angegebenen Befehl aus, gibt aber nichts aus. Geben Sie einfach die letzte Zeile des Befehlsergebnisses zurück. Wenn Sie einen Befehl ausführen und alle Daten aus dem Befehl abrufen müssen, können Sie die Funktion passhru() verwenden.

Wenn das Parameter-Array angegeben ist, wird das angegebene Array mit jeder vom Befehl ausgegebenen Zeile gefüllt. Hinweis: Wenn das Array bereits einige Elemente enthält, hängt exec() diese an das Ende des Arrays an Wenn Sie nicht möchten, dass diese Funktion Elemente anhängt, können Sie unset() aufrufen, bevor Sie das Array an exec() übergeben.

Wenn die Parameter array und return_var angegeben sind, wird der zur Ausführung zurückgegebene Statusbefehl in diese Variable geschrieben.

Hinweis: Wenn Sie zulassen, dass Daten aus Benutzereingaben an diese Funktion übergeben werden, sollten Sie escapeshellcmd() verwenden, um sicherzustellen, dass der Benutzer das System nicht dazu verleiten kann, beliebige Befehle auszuführen.

Hinweis: Wenn Sie diese Funktion zum Starten eines Programms verwenden und es während der Ausführung im Hintergrund belassen möchten, müssen Sie sicherstellen, dass die Ausgabe des Programms in eine Datei oder einen Ausgabedatenstrom umgeleitet wird, da sonst PHP hängen bleibt bis die Programmausführung endet.

system --- Führen Sie ein externes Programm aus und zeigen Sie die Ausgabe an

语法 : string system ( string command [, int &return_var] )

Beschreibung:

system() führt den angegebenen Befehl aus und gibt das Ergebnis aus. Wenn der Parameter return_var angegeben ist, wird der Statuscode des ausgeführten Befehls in diese Variable geschrieben.

Hinweis: Wenn Sie zulassen, dass Daten aus Benutzereingaben an diese Funktion übergeben werden, sollten Sie escapeshellcmd() verwenden, um sicherzustellen, dass der Benutzer das System nicht dazu verleiten kann, beliebige Befehle auszuführen.

Hinweis: Wenn Sie diese Funktion zum Starten eines Programms verwenden und es im Hintergrund laufen lassen möchten, müssen Sie sicherstellen, dass die Ausgabe des Programms in eine Datei oder einen Ausgabedatenstrom umgeleitet wird, da PHP sonst hängen bleibt bis die Programmausführung endet.

Wenn PHP als Servermodul ausgeführt wird, versucht system(), den Ausgabepuffer des Webservers nach der Ausgabe jeder Zeile automatisch zu löschen.

Die letzte Zeile des Befehls wird bei Erfolg zurückgegeben, bei Fehlschlag wird false zurückgegeben.

Wenn Sie einen Befehl ausführen und alle Daten aus dem Befehl abrufen müssen, können Sie die Funktion passhru() verwenden.

这二个都是用来调用系统shell命令,

不同点:

exec可以把执行的结果全部返回到$output函数里(数组),$status是执行的状态 0为成功 1为失败

systerm不需要提供$output函数,他是直接把结果返回出来,同样$return_var是执行的状态码 0为成功 1为失败

exec示例: 

以下为引用的内容:  

<?php  
$a = exec("dir",$out,$status);  
print_r($a);  
print_r($out);  
print_r($status);  
?>

system示例:

以下为引用的内容:  

<?php  
$a = system("dir",$out);  
print_r($a);  
print_r($out);  
?>

总结:

以上三个解决方案都是从百度搜索到的。

第一个解决方案我查看了配置,不存在这种情况,pass。

第二个解决方案由于需要改服务器权限,情况不允许,没试。

第三个解决方案参考了一下,修改了配置中的安全模式,safe_mode=On;然后问题迎刃而解。

OK,以上是我解决问题的过程。希望可以帮到广大像我一样的小白。

推荐学习:《PHP视频教程

Das obige ist der detaillierte Inhalt vonWas tun, wenn PHP Exec nicht ausgeführt werden kann?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn