0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHPでのファイル書き込みが、権限的にどうしても出来ない場合の最終的な解決策

Last updated at Posted at 2023-12-10

やりたいこと

PHPからNode.jsのプログラムを実行して、実行結果をブラウザに表示したい。その際にnode.jsのプログラムの実行結果(console.logで出力させている文字列とか)をブラウザに表示したい。
※管理者用プログラムなので

あと、タイトルに「最終的な解決策」と勝手に言っているが個人開発だから言えるのであって業務だったらルール守らなきゃだが

背景

apacheでPHP導入しているが、ファイルの書き込み処理で権限的にエラーが出るのはよくあることで、解決先としてはフォルダやファイルの権限を変えたりapacheユーザーの権限変えたり色々あるが、それらはしたくない。
そのファイルは他のユーザーに見られないようにしたい。

まず、出来ない方法

  • shell_exec関数を使ってlinuxコマンドとしてnode.jsプログラムを実行する。sudoをつけているとはいえ、やはりapacheユーザーでは実行は出来てもログファイルの出力はできなかった。

解決方法

  • 間にシェルを挟む

    • 「PHP→shell(sudoで)→Node.js」って流れにしてしまえばいい。(メインプログラムがPHPならこんなことしなくていいのにw)
  • ★この時sudoつけないとうまくいかないのでつける。

hoge.php
$cmd_shell = "sudo sh hoge.sh なんか引数";
shell_exec($cmd_shell);
  • 上記PHPから呼ばれるシェル
hoge.sh
sudo node hoge.js $1 > hoge.txt 2> error.txt
  • これでブラウザからNode.jsを実行した際にログが生成された。
  • これをPHPから読み取って送信ボタン押すたびに実行ログがブラウザに表示されるようになった。2重送信防止でリダイレクトも毎回するので、フォーム送信後にリダイレクトを維持しつつファイルの中身を表示できるので自分の管理者画面が便利になった。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?