proc_open()
プログラムを実行して結果を出力するために使用しようとしています。ただし、「許可が拒否されました」というメッセージが表示され続けます。スクリプトと実行可能ファイルの chmod を 0777 に設定しましたが、役に立ちませんでした。
ini_get('safe_mode')
は偽です。
何が間違っている可能性がありますか?
CentOS、Apache、および PHP 5.3.3 を使用しています。
私は同じセットアップでこの問題を抱えていましたが、問題は SELinux (デフォルトでオン) であることが判明し、httpd が外部プログラムを実行できなくなりました。次の方法で許容モードにすることができます。
setenforce permissive
私と同じ問題が発生している場合は、すべてが機能するはずです。これは、再起動するまで続きます。
変更を永続的にするには、/etc/selinux/config に移動して、次のように変更します。
SELINUX=enforcing
に
SELINUX=permissive
編集:
OK、SELinux をオフにする必要のないこれを行う方法を見つけました。問題は、私が理解しているように、httpd には独自のドメインがあり、その外部のものにアクセスできないことです。したがって、最も簡単な方法は、スクリプト/プログラムを /var/www ディレクトリ ツリーに移動することです。
それが不可能な場合は、代わりにプログラムのコンテキストをインプレースで変更できます。
semanage fcontext -a -t httpd_sys_content_t "/path/to/program(/.*)?"
これは基本的に、あなたのプログラムが httpd に属していることを示します。
safe_mode を有効にして、safe_mode_exec_dir を調べる必要があります。safemode exec dir の外では実行できません。あなたのプログラムが safe_mode_exec_dir 内にある場合、問題は共有ホスティングにあります (共有ホスティングが exec 関数を無効にする場合があります)。