ホームページ > バックエンド開発 > PHPの問題 > php execが実行できない場合の対処法

php execが実行できない場合の対処法

藏色散人
リリース: 2023-03-17 14:30:01
オリジナル
4238 人が閲覧しました

php exec が実行できない問題の解決策: 1. php 設定ファイル php.ini を見つけ、ファイル内で「disable_functions」を検索し、「exec」と「shell_exec」を削除します。 ;3. 設定内のセーフ モードを「safe_mode=On」に変更します。

php execが実行できない場合の対処法

このチュートリアルの動作環境: Windows 7 システム、PHP バージョン 8.1、Dell G3 コンピューター。

php exec が実行できない場合はどうすればよいですか?

PHP exec がシステム命令の実行に失敗する理由の分析

問題の背景:

原因プロジェクトの要件に応じて、HTML ページから画像を生成し、phantomjs (クリックして学習) ツールを使用してページのスクリーンショットを撮り、cmd ウィンドウで問題なく実行する必要があります。しかし、php で exec 操作が失敗し、phantomjs が内部命令ではないことがわかりました。

#問題解決策:#Baidu でさまざまな解決策を見つける:

オプション 1:

1. php.ini を変更する

php 設定ファイル php.ini を見つけます。php 自動インストール プログラムを使用して php 環境を設定する場合、このファイルは C:\WINDOWS\ ディレクトリにあります。

ファイル内で「disable_functions」を検索して見つけ、「exec」と「shell_exec」を削除して、ファイルを保存します。

## 2. cmd.exe ファイルのプロパティを変更します。php execが実行できない場合の対処法

C:\WINDOWS\system32 と入力し、cmd.exe ファイルを見つけて右クリックし、[プロパティ] を選択します。 , [セキュリティ] 設定にインターネット ゲスト アカウント (IUSR_****** アカウント) を追加し、[読み取りと実行] と [読み取り] 権限を付与します。

オプション 2:

これはアクセス許可の問題であるという人もいます。

解決策:

https://www.php.cn/php-weizijiaocheng-498092.html

オプション 3:

PHPの組み込み関数execやsystemはシステムコマンド(シェルコマンド)を呼び出すことができ、もちろんpassthruやescapeshellcmdなどの関数もあります。

多くの場合、PHP の exec、system、およびその他の関数を使用してシステム コマンドを呼び出すと、作業をより適切かつ迅速に完了できます。たとえば、2 日前に .rar ファイルをバッチ処理していたとき、exec は非常に役に立ちました。

今日は、よく使われる通話システムの機能を整理し、私の経験を皆さんと共有します。

注: これら 2 つの関数を使用する場合は、php.ini のセーフ モードをオフにする必要があります。オフにしないと、セキュリティ上の理由から、PHP ではシステム コマンドの呼び出しが許可されません。

まず、PHP マニュアルでこれら 2 つの関数の説明を見てみましょう:

exec --- 外部プログラムの実行

语法 : string exec ( string command [, array &output [, int &return_var]] )
ログイン後にコピー

説明:

exec ( ) 指定されたコマンドを実行しますが、何も出力されません。コマンドの結果から最後の行が返されるだけです。コマンドを実行してコマンドからすべての情報を取得する必要がある場合は、 passthru() を使用できます。この機能。

パラメータ配列が指定されている場合、指定された配列には、コマンドによって出力された各行が埋め込まれます。 注: 配列に既に要素が含まれている場合は、exec() がそれを配列に追加します。この関数で要素を追加したくない場合は、配列を exec() に渡す前に unset() を呼び出すことができます。

パラメータ array と return_var が指定されている場合、実行に戻されたステータス コマンドがこの変数に書き込まれます。

注: ユーザー入力からのデータをこの関数に渡すことを許可する場合は、ユーザーがシステムを騙して任意のコマンドを実行できないように、escapeshellcmd() を使用する必要があります。

注: この関数を使用してプログラムを開始し、バックグラウンドで実行中にそのプログラムを残しておきたい場合は、プログラムの出力がファイルまたは他の出力データ ストリームにリダイレクトされていることを確認する必要があります。そうしないと、プログラムの実行が終了するまで PHP がハングします。

system --- 外部プログラムを実行し、出力を表示します。

语法 : string system ( string command [, int &return_var] )
ログイン後にコピー

説明:

system() は、指定されたコマンド command を実行し、結果を出力します。パラメータ return_var が指定されている場合、実行されたコマンドのステータス コードがこの変数に書き込まれます。

注: ユーザー入力からのデータをこの関数に渡すことを許可する場合は、ユーザーがシステムを騙して任意のコマンドを実行できないように、escapeshellcmd() を使用する必要があります。

注: この関数を使用してプログラムを開始し、バックグラウンドで実行中にそのプログラムを残しておきたい場合は、プログラムの出力がファイルまたは他の出力データ ストリームにリダイレクトされていることを確認する必要があります。そうしないと、プログラムの実行が終了するまで PHP がハングします。

PHP がサーバー モジュールとして実行されている場合、system() は各行を出力した後に Web サーバーの出力バッファを自動的にクリアしようとします。

成功した場合はコマンドの最後の行を返し、失敗した場合は false を返します。

コマンドを実行し、コマンドからすべてのデータを取得する必要がある場合は、 passthru() 関数を使用できます。

这二个都是用来调用系统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视频教程

以上がphp execが実行できない場合の対処法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート