ここから本文です

PHPの実行について初歩的な質問です。 以下のようなindex.phpという名前のPHPフ...

yoi********さん

2016/1/1713:55:01

PHPの実行について初歩的な質問です。

以下のようなindex.phpという名前のPHPファイルがあります。

<?php
$file_name = "test.txt";
touch($file_name);
echo("Completed");
?>

Apacheサーバーを建ててブラウザからindex.phpにアクセスしたところ
Completedとは表示されたのですが、test.txtが作成されていませんでした。

これをコマンドラインから
$ php index.php
として実行すると
PHP Warning: touch(): Unable to create file test.txt because Permission denied in /var/www/html/index.php on line 3
と返ってきたため
$ sudo php index.php
として実行すると問題なくtest.txtが作成されました。

ブラウザからのアクセスでファイルが生成されない理由として
- アクセス権限関係の問題
- PHPやApacheの設定
- そもそもtouch()関数はコマンドラインからしか利用できない
等の原因を考えていますが、知識が乏しくなにをすべきなのかが分からず、質問させていただきました。

バカバカしいことを質問しているのではないかと思いますがよろしくお願い致します。

環境は
Apache/2.4.10 (Raspbian)
PHP 5.6.14-0+deb8u1
です。

最終的な目標としてはRaspberryPiのGPIOをブラウザから制御したいので、もっと簡単な方法があるのでしたら教えていただけると幸いです。

Completed&amp;quot,test.txt&amp;quot,Apache,PHP Warning,ブラウザ,test.txt,全て質問者

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
60
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tez********さん

リクエストマッチ

2016/1/1723:52:48

> ブラウザからのアクセスでファイルが生成されない理由
大方パーミッションでしょう。

> Completedとは表示されたのですが、test.txtが作成されていません
PHPの開始タグの直後辺りに
error_reporting(E_ALL);
ini_set('display_errors', 1);

を書いておくと、エラーが表示されるのではありませんか?


Apache の動作時のユーザや、PHPの動作モードでも状況が異なるでしょうが、それらは全て質問者さんが設定したはずですから、設定している事の意味をよく調べていけばどんなパーミッションが必要であるかも調べられるでしょう。
__簡単にチェックするなら /tmp 以下に出力してみるとか

  • 質問者

    yoi********さん

    2016/1/1818:46:38

    ご回答ありがとうございます。
    パーミッションについて調べたところ、Apacheは通常「apache」というユーザーで動作しているようなので、「apache」を「sudo」グループに入れてみましたがうまくいきませんでした。
    しかし、ファイルを生成したいディレクトリのパーミッションを変更したところ、すんなりと解決しました。
    ディレクトリにもパーミッションがあることを知りませんでしたので勉強になりました。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2016/1/18 18:47:27

自分の知識レベルに対して、少し敷居の高いことをしようとしていたようです。
ありがとうございました。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる