ユーザーデータをPythonスクリプトに渡す小さなWebアプリケーションをセットアップしました。 Pythonは仕事に行き、Webサーバー上にファイルを作成し、ユーザーがそれをダウンロードできるようになっています。ただし、Python write()
コマンドが発行された場所でスクリプトの実行が停止しているようです。PHPで呼び出されたpythonスクリプトは書き込めません
のPython:
print("Writing to '" + filename + "'")
f = open('backups/' + filename, 'w')
f.write(self.output())
f.close()
print("Done!")
PHP:
$user = escapeshellarg($_POST['user']);
$password = escapeshellarg($_POST['password']);
$command = './backup.py '.$user.' '.$password;
print(exec($command));
実際の結果:
- Pythonが目的のディレクトリにファイルを作成していますが、R空になる。 2. Pythonは "Done!"を出力しません。
期待される結果(パーミッションが拒否されているため): "!完了"
- Pythonが印刷に進み
- Pythonのデータのファイルを作成します私がやった
呼び出し元のPHPスクリプトの出力は以下の通りです:
- WWW-データは
#!/usr/bin/env python3
シェバングがあるディレクトリ./backup
- のグループ書き込み権限(
drwxrwsr-x
)を持っていますPythonファイルに存在 - pythonファイルが実行可能です
- でユーザwww-dataに変更したときその後、phpコマンドラインを起動し、私のPythonスクリプトを呼び出す上記のコマンドを入力すると、ファイルが正しく作成されます!私は組み込みのPHPサーバーを起動した場合、それはまた、正常に動作します
- 、PHPスクリプトがapacheのを介して処理されている場合にのみ、それは私が正式に私の人生の一日を無駄にしている
あなたはここで物事をエスケープするかもしれません。 'escapeshellarg'呼び出しで十分であるはずです。'escapeshellcmd'は、物事を壊すエスケープを追加するかもしれません。 – tadman
提案をいただきありがとうございます。余分なエスケープを削除しました。しかし、スクリプトはまだファイルに書き込めません。それはファイルを作成することができると思われるので、私は許可が大丈夫だと思いますか? – bluppfisk
ウェブサイトがPHP組み込みサーバ(php -S localhost:8000)を介して提供されていてもApacheが提供している場合はうまく動作します。 – bluppfisk