質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2130閲覧

サーバサイドのphp内のファイルからexec('nkf -w --overwrite /var/www/html/csvs/201901.csv');とするとコマンドが動かない

carrot0001

総合スコア24

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/01/11 05:17

編集2019/01/11 05:18

シェルから実行すると成功するんですがPHPからexecで実行したいです。
どうしたら成功しますでしょうか?

CentOS6, PHP7.2, Apache2.4です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2019/01/11 05:23

PHPから実行したときの具体的な現象を書いてください。
carrot0001

2019/01/11 05:26

[Fri Jan 11 14:10:14 2019] [error] [client x.x.x.x] PHP Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/html/csvs/hoge.php on line 57, referer: http://myserver.x.x.x/csvs/hoge.php: Permission denied です
m.ts10806

2019/01/11 05:36

結局PHP7入れられたんですね。良かったです。 「 Permission denied」なので、これはそのままかと。 ただ、情報がこれだけでは答えようがないです。 PHPはどのように実行しているのか(コマンドかブラウザか) それぞれのファイルのパーミッション  あと、他のlinuxコマンドは実行できるか 提示してください。
carrot0001

2019/01/11 05:38

PHPはブラウザです。 パーミッションはPHPファイル、csvファイルともに-rw-r--r--です。 'whoami'はexecから通りました。
m.ts10806

2019/01/11 05:43

記述を削除されたようですが編集履歴から確認できるのでマズイ内容であれば運営に問い合わせし削除を依頼してください(回答がついているので直接運営に行くしかありません) エラーメッセージ等、追加情報なのでそちらは質問本文に追記してください。 whoamiよりファイル等を操作するコマンドの方がいいですね。
carrot0001

2019/01/11 05:49

chmod 666 sample.phpはブラウザ上から実行するとループやサーバエラーは出ないのですがexecからはコマンドが通りませんでした。
guest

回答1

0

ベストアンサー

[Fri Jan 11 14:10:14 2019] [error] [client x.x.x.x] PHP Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/html/csvs/hoge.php on line 57, referer: http://myserver.x.x.x/csvs/hoge.php: Permission denied

PHP の連続実行時間が 30秒(デフォルト値)で制限されており、実行時間が 30秒を超えたのでエラーになっているようです。

詳しくは、マニュアル 実行時設定 max-execution-time 参照。

max_execution_time integer
スクリプトがパーサにより強制終了されるまでに許容される最大の 時間を秒単位で指定します。この命令は、いい加減に書かれた スクリプトがサーバーの負荷を上げることを防止するのに役立ちます。 デフォルトでは、30 に設定されています。 PHP を コマンドライン から実行する場合のデフォルト設定は 0 です。

php.ini 等で、max_execution_time の設定を変更するか set_time_limit 関数で制限時間を緩和してください。

投稿2019/01/11 05:36

編集2019/01/11 05:38
CHERRY

総合スコア25175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carrot0001

2019/01/11 05:39

コマンドからnkfを実行すると1秒もかからないんです。 何かほかに原因があると思います。
m.ts10806

2019/01/11 05:40

処理内容によりますね。 Permissionの方に原因があるのであれば実行時間は関係ないかも…
carrot0001

2019/01/11 05:42

'whoami'はexecから通りました。
CHERRY

2019/01/11 05:53 編集

巨大ファイルで、30秒で終わらないのかと思ったのですが... たとえば、` nkf -w /var/www/html/csvs/201901.csv > /dev/null ` だとエラーが出ないとかありますか? ( --overwrite を外して、 出力を /dev/null にする(捨てる)。 --overwrite は、一時ファイルに書き出して、最後に rename する動作だったと思うので、一時ファイルが作成できない or ファイルの削除ができなくて失敗しているとかが考えられると思います。
carrot0001

2019/01/11 05:52

そのコマンドではエラーは出ませんでした
CHERRY

2019/01/11 05:55

どうやらパーミッション周りのようですね... ディレクトリと csv ファイルの オーナーやパーミッションは、どうなっていますか? ls -la /var/www/html/csvs/ で、確認してみてください。
carrot0001

2019/01/11 05:58

drwxr-xr-x 2 root root 4096 1月 11 14:00 2019 . drwxr-xr-x 6 root root 4096 1月 11 14:48 2019 .. オーナーパーミッションは以上でした
CHERRY

2019/01/11 06:00

201901.csv のオーナーも root ですか? コマンドラインからの実行は、 root ユーザーで実行ですか?
carrot0001

2019/01/11 06:01

201901.csv のオーナーも root です コマンドラインからの実行もroot ユーザーです
CHERRY

2019/01/11 06:05

CentOS 6 だと Apache の実行ユーザー( /etc/httpd/conf/httpd.conf の User xxx で設定しているユーザー) は、 apache だと思うので、この apache ユーザーに ファイルの作成権限と削除権限が必要になると思います。 おそらく、一番簡単なのは、/var/www/html/csvs/ や csv ファイルの所有者を apache にすることかなぁ...
carrot0001

2019/01/11 06:12 編集

所有者の変更はどうやるのですか?調べたほうがよいですか?
m.ts10806

2019/01/11 06:12

nkf コマンドでできることはPHPでもできるような内容だったりするので(細かいやりたいこと知りませんが)あえてコマンドでやるのもどうかなと。 サーバーコマンドって本当にできるものは何でも出来てしまいますし、だからこそ実行権限があるわけですし。 ブラウザから実行できる=見ず知らずの他人が実行できる ですからね。余程のことがない限り避けたほうが良いです。
carrot0001

2019/01/11 06:14

やりたいことはcsvがSJISなのでUTF-8に文字コードを変更したいだけなのですが、 $str[$i] = mb_convert_encoding($str[$i], "UTF-8", "SJIS") とかでまわしても最初の文字が英文字になってしまう(コンバートに失敗する)のでnkfを使おうと思いました
carrot0001

2019/01/11 06:27

所有者の変更をapacheにしたらなおりました。 CHERRYさんありがとうございました。
m.ts10806

2019/01/11 06:47

PHPで解決できた問題だったのに勿体無いですね。
CHERRY

2019/01/11 07:49

(ちょっと不在の間に解決済みになってる...) mb_convert_encoding で、失敗するのは文字列が短かったりするのでしょうか。 メモリを大量に使いますが、確認のために下記のような感じでファイルを全部読み込んで変換してみたら成功したりしないでしょうか? $data = file_get_contents("ファイル名"); $data = mb_convert_encoding($data, "utf-8", "sjis-win, SJIS"); file_put_contents("ファイル名", $data);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問