Web サーバーの仮想ホスト ファイルを作成するために、いくつかのパラメーターを受け取り、ヒアドキュメントの出力を別のファイルにリダイレクトするスクリプトがあります。コマンドラインでスクリプトを実行すると、正常に実行され、ファイルが作成されますが、PHP の exec または shell_exec を使用して実行すると、ファイルが作成されません。他のすべて (出力をリダイレクトする代わりに出力をエコーまたは単純に返そうとする) は正常に実行されます。ファイルの作成は行われず、問題があったという兆候はありません。
ここに私のコードがあります: create_vhost.sh:
#!/bin/bash
#Use the template to create the vhost file
echo "Creating vhost file in sites-available"
sudo /absolute/path/to/vhost_template.sh $1 $2 > /etc/nginx/sites-available/$2
service nginx restart
上記のスクリプトを次のように実行する/absolute/path/to/create_vhost.sh site_id domain.com
と、ターミナルで ssh を使用して完全に動作します。
参考までに、vhost_template ファイルは次のようになります。
#!/bin/sh
SITE_ID=$1
DOMAIN=$2
#define the template.
cat << EOF
[template code here with $SITE_ID and $DOMAIN parameters somewhere]
EOF
ただし、次のように PHP で実行すると、次のようになります。
return shell_exec("/absolute/path/to/create_vhost.sh site_id domain.com");
出力は問題なく取得できますが、ファイルは作成されません! そして、私が言ったように、リダイレクトをドロップすると、PHP でも問題なくテンプレート ファイルの出力が表示されます。
私はこれを何時間も見てきましたが、ただ困惑しています。助言がありますか?
編集:おそらくパーミッションの問題だと思いましたが、shell_exec() 内で sudo を使用し、visudo を使用して www-data ユーザーに sudo 特権を与えようとしました。それでも同じ問題...