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

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

ただいまの
回答率

90.34%

  • PHP

    25511questions

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

  • HTML

    12608questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • Eclipse

    2034questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • Windows

    1796questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PHP ファイルへの書き込み方について

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 663

0424_404

score 14

PHPによる掲示板を作ってます。コメントのログをbbs.datというファイルに入れていき、表示させるようにしています。
しかし、いざ書き込んでDATファイルの中身をみてみると、何も書かれておらず困っています。原因分かりませんか?

*コードです
<?php
$dataFile = 'bbs.dat';
//さっき作ったファイル呼び出し

function h($s){
return htmlspecialchars($s,ENT_QUOTES,'UTF-8');
//エスケープの文
}

if($_SERVER['REQUEST_METHOD']=='POST'&&
isset($_POST['message'])&&
isset($_POST['user'])){
//$_SERVERでどこからでもアクセスできるstaticなものにする
//$_SERVER['REQUEST_METHOD']=='POST'でポストなメソッドを呼び出せる

$message= trim($_POST['message']);

$user = trim($_POST['user']);

if($message !==''){

$user = ($user ==='')?'名無し投稿者' : $user;

$message = str_replace("\t",' ',$message);
$user = str_replace("\t",' ',$user);
//文字置き換え

$hiduke = date('Y-m-d H:i:s');

$newData = $message."\t".$user."\t".$hiduke."\n";

$fp =fopen($dataFile,'a');
/*foppenはファイルを開くメソッド。
*ついでに開き方を指定できる。
*今回は追加形式にしたいので'a'で。*/

fwrite($fp,$newData);
//ファイルに書き込んでいくメソッド

fclose($fp);

}
}

$posts = file($dataFile,FILE_IGNORE_NEW_LINES);
//呼び込む。最後ので改行を取り去る

$posts = array_reverse($posts);
//逆順に並び替え
?>

<!DOCTYPE HTML >
<html lang ="ja">
<head>
<meta http-equiv="Content-Type" content="text/html";charset="UTF-8" />
<title>簡易掲示板</title>
</head>
<body>
<h1>簡易掲示板</h1>
<form action="" method="post">
message:<input type="text" name="message">
user:<input type="text" name="user">
<input type="submit" value="投稿"> 
</form>

<h2>投稿一覧</h2>
<ul>

<?php if(count($posts)): ?>
<?php foreach($posts as $post) : ?>
<?php list($message,$user,$postedAt) = explode("",$post); ?>
<li><?php echo h($message); ?>(<?php echo h($user); ?>)-<?php echo h($hiduke); ?></li>
<?php endforeach; ?>
<?php else : ?>
<li>投稿はまだありません</li>
<?php endif; ?>
</ul>
</body>

</html>

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2018/03/23 08:03

    プログラムコードはコードブロック ``` で囲んでください(以前の質問でも指摘されていたかと思いますが、コードをきちんと見やすくするのがこのサイトのルールです)質問の仕方のヒントも必ず一読してください。https://teratail.com/help/question-tips

    キャンセル

  • 退会済みユーザー

    2018/04/03 12:53

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 3

+1

前回の質問にも同様の回答をさせて頂きましたが、fopenの成否を確認された方がよいです。
https://teratail.com/questions/118495
※以前の質問と内容が重複しているようなのでいったん前回のものは回答締め切ってはいかがでしょう?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/23 17:59

    そうします。実はこれドットインストールの授業の一部でして、もうすぐ授業に出てくるともうのですが、出てこなかったらそこで付け加えます。それまでどうか、fopen合否は気にしないでほしいです。

    キャンセル

  • 2018/03/23 21:47

    教えられるまでやる気のないならここでしつもんすべきでは無いです。

    キャンセル

  • 2018/03/24 00:45

    守破離っていうじゃないですか。まずは、自分の師から教わってから、オリジナルに挑戦すべきなのですよ。

    キャンセル

checkベストアンサー

0

確認したい点が2つ。

1)

$dataFile = 'bbs.dat';
//さっき作ったファイル呼び出し 

とありますが、bbs.datはあらかじめ作ってあるファイルということで間違いないでしょうか。

2)

phpファイルはWebサーバ経由でアクセスしている、で間違いないでしょうか。

上記二点が想像どおりだと、ファイルの書き込み権限がWebサーバを動かすユーザに無いために書き込めていない、ということが起きているはずです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/23 17:45

    回答ありがとうございます。これだと思います。ファイル書き込み宣言の権限の設定方法教えてもらっていいですか?Macでしか説明載ってなくて

    キャンセル

  • 2018/03/23 18:29

    右クリックしてプロパティを開きます。
    セキュリティタブを選択します。
    真ん中らへんの「編集...」ボタンを押します。
    「追加」ボタンを押します。
    「選択するオブジェクト名を入力してください」のところで追加したいユーザ名を入力し、「名前の確認」ボタンを押した後、「OK」を押します。セキュリティが二の次でいいなら、「Everyone」と入力しましょう。
    「Everyoneのアクセス許可」で、「フルコントロール」の許可にチェックを入れ、「OK」を押します。
    「OK」でプロパティを終了します。

    キャンセル

  • 2018/03/24 01:16

    本当にありがとうございます。

    キャンセル

0

とりあえず、落ち着きましょう。

1. 世に色々とOSはありますが、貴殿の場合、
UNIC系とWindows系の区別が出来ていない様です。

2. 「(過去の)質問」から、貴殿はUNIC系の情報からPHPに手を付けて、
それを元に、Windowsで実装しようとして、Windowsに対してアクセス権が
「制御(chmodが効かない)出来ないので助けて」
と言われている様です。

(↓ここは3なのになぜ1? > 事務局への疑問)

  1. 「Macでしか説明載ってなくて」、、、
    と言う事は無いはずですが、、、貴殿のアプローチの方法ではLinuxの情報を得られるでしょう。
    なお、MacはFreeBSDが土台ですので、UNIX系になります。

  2. ならば、Macを入手するか、、、は、多分、非現実的で、
    WindowsなPCで行くならば、
    XAMPPをWindowsにインストールして
    UNIXもどきon Windowsな動作環境を構築する事をお薦めします。

そうすれば、貴殿の混乱は、多くの方が理解出来て、多くの助言が得られるでしょう。

↓とりあえす、検証前に見やすくして見た。

<?php
    $dataFile = 'bbs.dat';

    //さっき作ったファイル呼び出し
    function h($s){
        return htmlspecialchars($s,ENT_QUOTES,'UTF-8');
        //エスケープの文
    }

    if($_SERVER['REQUEST_METHOD']=='POST'&&
        isset($_POST['message'])&&
        isset($_POST['user'])){
        //$_SERVERでどこからでもアクセスできるstaticなものにする
        //$_SERVER['REQUEST_METHOD']=='POST'でポストなメソッドを呼び出せる

        $message= trim($_POST['message']);
        $user = trim($_POST['user']);

        if($message !==''){

            $user = ($user ==='')?'名無し投稿者' : $user;
            $message = str_replace("\t",' ',$message);
            $user = str_replace("\t",' ',$user);

            //文字置き換え
            $hiduke = date('Y-m-d H:i:s');
            $newData = $message."\t".$user."\t".$hiduke."\n";
            $fp =fopen($dataFile,'a');

            /*foppenはファイルを開くメソッド。
             *ついでに開き方を指定できる。
             *今回は追加形式にしたいので'a'で。*/

            fwrite($fp,$newData);
            //ファイルに書き込んでいくメソッド

            fclose($fp);

        }
    }

    $posts = file($dataFile,FILE_IGNORE_NEW_LINES);

    //呼び込む。最後ので改行を取り去る
    $posts = array_reverse($posts);

    //逆順に並び替え
?>

<!DOCTYPE HTML >
<html lang ="ja">
<head>
<meta http-equiv="Content-Type" content="text/html";charset="UTF-8" />
<title>簡易掲示板</title>
</head>
<body>
    <h1>簡易掲示板</h1>
    <form action="" method="post">
        message:<input type="text" name="message">
        user:<input type="text" name="user">
        <input type="submit" value="投稿"> 
    </form>

    <h2>投稿一覧</h2>

    <ul>
        <?php if(count($posts)): ?>
        <?php foreach($posts as $post) : ?>
        <?php list($message,$user,$postedAt) = explode("",$post); ?>
        <li>
            <?php echo h($message); ?>(<?php echo h($user); ?>)-<?php echo h($hiduke); ?>
        </li>
            <?php endforeach; ?>
            <?php else : ?>
        <li>投稿はまだありません</li>
            <?php endif; ?>
    </ul>
</body>
</html>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/23 21:49

    ハウス2?

    キャンセル

  • 2018/03/23 21:49

    タブレットからだどんぜこうなる

    キャンセル

  • 2018/03/23 21:50

    だめだこり

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • PHP

    25511questions

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

  • HTML

    12608questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • Eclipse

    2034questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • Windows

    1796questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。