【再質問】PHPについて次のスクリプトを手直ししてください。


fwriteを用いてhoge.phpにbasename(__FILE__)を書き出すよう、
下記のスクリプトを作成しました。

■私が作成したスクリプト(注)間違ってます
---------------
<?php
$datas = '<html> <?php basename(__FILE__); ?> </html>';

$fp = fopen('hoge.php', 'w');
fwrite($fp, $datas);
fclose($fp);
?>
---------------


■作成したいhoge.php
---------------
<html>
  hoge.php
</html>
---------------


ブラウザでhoge.phpにアクセスすると「hoge.php」のみが表示されてるようにしたいです。
$datasをどう変更したらよいでしょうか?

先ほど似たような質問をしましたが、
説明が不適切でしたので再度質問し直しました。

Vista、PHP5、Firefoxでやってます。
よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2008/12/17 03:34:42
  • 終了:2008/12/18 11:54:45

ベストアンサー

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012008/12/17 09:23:05

ポイント70pt

hoge.phpの中身をどうしたいのかによって対応が違います。


パターン1:固定で書き込みたい

$filename = 'hoge.php';
$datas = '<html>' . $filename . '</html>';

$fp = fopen($filename, 'w');
fwrite($fp, $datas);
fclose($fp);

パターン2:php関数を正しく動作するように書き込みたい

$datas = '<html> <?= basename(__FILE__); ?> </html>';

$fp = fopen('hoge.php', 'w');
fwrite($fp, $datas);
fclose($fp);
id:taroemon

いつもご回答ありがとうございましす。

パターン2の方が扱いやすいかもしれません。


いただいたスクリプトをコピペして実行してみましたが、ブラウザ上には何も現れませんし、

ソースは「<html> <?= basename(__FILE__); ?> </html>」となってました。

hoge.phpに「<html>hoge.php</html>」とさせるにはどうしたらよいのでしょうか?


たぶんいただいたスクリプトの問題ではなく、設定とかもっと初歩的なミスであるような気がしています。

推察でも結構ですので、ひきつづきご回答をお待ちしています。


それと「<?= basename(__FILE__); ?>」の「<?=」について勉強したいのですが、これはどういう技術なんでしょうか?

今軽くググってみたのですが、よいページが見つかりませんでした。参考になるURLを教えてください。


初心者丸出しですみません。よろしくお願いします。


追記

すみません。このスクリプトが正解です。

私の単純ミスでした。ありがとうございました。

2008/12/18 11:28:18

その他の回答(1件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012008/12/17 09:23:05ここでベストアンサー

ポイント70pt

hoge.phpの中身をどうしたいのかによって対応が違います。


パターン1:固定で書き込みたい

$filename = 'hoge.php';
$datas = '<html>' . $filename . '</html>';

$fp = fopen($filename, 'w');
fwrite($fp, $datas);
fclose($fp);

パターン2:php関数を正しく動作するように書き込みたい

$datas = '<html> <?= basename(__FILE__); ?> </html>';

$fp = fopen('hoge.php', 'w');
fwrite($fp, $datas);
fclose($fp);
id:taroemon

いつもご回答ありがとうございましす。

パターン2の方が扱いやすいかもしれません。


いただいたスクリプトをコピペして実行してみましたが、ブラウザ上には何も現れませんし、

ソースは「<html> <?= basename(__FILE__); ?> </html>」となってました。

hoge.phpに「<html>hoge.php</html>」とさせるにはどうしたらよいのでしょうか?


たぶんいただいたスクリプトの問題ではなく、設定とかもっと初歩的なミスであるような気がしています。

推察でも結構ですので、ひきつづきご回答をお待ちしています。


それと「<?= basename(__FILE__); ?>」の「<?=」について勉強したいのですが、これはどういう技術なんでしょうか?

今軽くググってみたのですが、よいページが見つかりませんでした。参考になるURLを教えてください。


初心者丸出しですみません。よろしくお願いします。


追記

すみません。このスクリプトが正解です。

私の単純ミスでした。ありがとうございました。

2008/12/18 11:28:18
id:goodvn No.2

goodvn回答回数228ベストアンサー獲得回数182008/12/18 04:45:42

ポイント10pt
$datas = '<html> <?php ' . basename(__FILE__); . ' ?> </html>';
id:taroemon

ご回答ありがとうございます。

申し訳ありませんが、私の環境では「Parse error: syntax error, unexpected '.' 」というエラーが出ます。

2008/12/18 11:27:34
  • id:kn1967
    >ブラウザ上には何も現れません

    fwrite はファイルへの書き出しなので
    サーバ上にhoge.phpというファイルが出来上がるだけであって
    パターン1でも2でもブラウザには何も返ってきません。

    ブラウザには何も返ってはきませんが
    hoge.phpという名前のファイルは出来てますから
    ブラウザのアドレス欄にてhoge.phpにアクセスすれば
    お望みのものが出てきます。

    hoge.php を作った後、
    自動的にhoge.phpを表示するようにしたいのであれば
    最後に
    header("Location: hoge.php");
    を追加して飛ばせばよいでしょう。

    >これはどういう技術なんでしょうか?

    phpをHTML内部に埋め込む場合に用いる書式です。
  • id:tezcello
    > 「<?=」について勉強したいのですが...
    http://www.php.net/manual/ja/language.basic-syntax.php
    http://www.php.net/manual/ja/ini.core.php#ini.short-open-tag

    本家サイトによるとデフォルトで有効になっているようですが、環境依存なので質問者さんのところではうまくいかない(=無効にしてある)可能性もあります。

    > ソースは「<html> <?= basename(__FILE__); ?> </html>」となってました
    ( <, > が全角なのはおいておくとして)
    ソースにスクリプトが出てきてしまっている=PHPスクリプトが動作していない
    ですから、short-open-tag が無効なのかなぁ...と思うのですが。

    まさか、できたファイルを直接読んでいるのではないですよね?
  • id:kn1967
    >環境依存

    XAMPP(taroemonさんの過去質問参照) って
    デフォルトで有効じゃなかった?

    ><, > が全角
    半角だとクロスサイトスクリプトへの対抗措置で
    消されてしまうからだと思うのだけど
    返答欄って回避策使えなかったかしら・・・?

    >ソースにスクリプトが出てきてしまっている=PHPスクリプトが動作していない
    それだと、そもそものphpスクリプトすら動かない・・・。

    >できたファイルを直接読んでいるのではないですよね?
    環境はXAMPPなので
    hoge.phpファイルが出来ているかの確認をするのも
    直接開いてソースを見るのも容易。
  • id:kn1967
    >それだと、そもそものphpスクリプトすら動かない・・・。

    >>short-open-tag が無効

    この部分見逃してました m(__)m
  • id:tezcello
    > XAMPP(taroemonさんの過去質問参照) って
    > デフォルトで有効じゃなかった?
    XML を扱われていたようですし、デフォルト(XAMPP がどうなのかは不明ですが)から変更したのかはご本人しか分からないですから。

    > 直接開いてソースを見るのも容易。
    ですから、ダブルクリック等で直接ブラウザで開いてしまう(=Apache を介さずに)も容易でしょ?
    http://localhost/hoge.php にアクセスしないと、PHPが働かないですよね。
    これもご本人にお答え頂かないとわかりませんが。

    また、コピペ後に、ファイル名を hoge から変更したついでに拡張子まで .html になっていたりすると当然PHPとしては機能しません。
    更に、別階層にファイルを作った(特に上位階層)としたら、そこではPHPが有効ではなかったりして...

    要は、PHPスクリプトが機能していないのは、スクリプト本体に問題があるのではなく、その環境等にあるのかもしれないという点を述べたかったのです。
    言葉足らずでごめんなさい。
  • id:taroemon
    kn1967さん、tezcelloさん
    何度も丁寧にコメントいただきありがとうございます。

    結論から言いますと、最初にkn1967さんからいただいたご回答でうまくいきました。
    回答欄で予想したとおり、「初歩的なミス」の問題でした。すみません。

    > <, > が全角
    > 半角だとクロスサイトスクリプトへの対抗措置で
    > 消されてしまうからだと思うのだけど
    > 返答欄って回避策使えなかったかしら・・・?
    そのとおりです。回避策ってあるんですね。調べておきます。

    「<?=」についてのコメント、参考リンクもありがとうございます。勉強になりました。
  • id:tezcello
    > 回答欄で予想したとおり、「初歩的なミス」の問題でした。
    どんなミスだったのか知りたいなぁ... <チョッと意地悪ですね。

    > > 返答欄って回避策使えなかったかしら・・・?
    > そのとおりです。回避策ってあるんですね。調べておきます。
    質問した事が無いので使えるのかが不明ですが、
    &lt; , &gt; ではダメなんですか?
  • id:goodvn
    すいません.コード途中のサブコロンがミスです

    この位のエラーは理解しないとダメですよ(^^;
  • id:taroemon
    コメントに対するお返事が遅くなってすみません。


    tezcelloさん
    >どんなミスだったのか知りたいなぁ... <チョッと意地悪ですね。
    いえ。意地悪で公表しなかったのではありません。
    あまりにも初歩的すぎるミスで恥ずかしかったと言うことと、
    それを公表しても恥をさらすだけで皆さんの知的好奇心を満たすことはできないからです。
    マナーに反してるかもしれませんが、これでお許しください。


    goodvnさん
    >すいません.コード途中のサブコロンがミスです
    >この位のエラーは理解しないとダメですよ(^^;
    わざわざ謝っていただいて恐縮です。
    私も指摘するほどのミスではないと思ってましたが、
    後でこの質問を参考にする人もいるかもしれないと思い、少しからめにしてしまいました。
    回答者1の方へのポイントの差は、上記に加えてコメント欄へのお礼です。
    実際には十分参考になりました。私がちゃんとそれを説明すべきでしたね。
    また質問しますので、いろいろ教えてください。
  • id:tezcello
    > あまりにも初歩的すぎるミスで恥ずかしかったと言うことと、
    その類いの事だろうと予想した上で、お尋ねしてました。
    ですから、「意地悪」は自分( tezcello )に対して言った言葉です。
      自分の予想していたのと違っているのか知りたいという
      誠に自分勝手なお願いですので気にしないでください。

    ミスである事に気が付き修正出来た時点で、上級者への階段を1段上がった訳です。
    つまり、質問者さんよりも初心者に近い人にとっては、それも立派な情報だと思うのです。
    まぁ、これも個人的な「戯言」ですので、お気になさらずに。

  • id:taroemon
    tezcelloさん

    わざわざコメントありがとうございます。
    私が早合点してしてたようです。
    しかし、結果として私の対応は他の方に対して意地悪であったかもしれません。
    今後はこのようなことがないように気をつけます。

    あと、やさしい言葉ありがとうございます。
    ネット上のやりとりだけだと相手の顔を見れないので、
    あらぬ誤解をしてへこみがちですが、
    このフォローのコメントのおかげで本当に救われます。
    また、励みにもなりました。

    これからもがんばります。よろしくご指導ください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません