wifrstfasnriov
@wifrstfasnriov (KA TO)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【PHP】書き込み不可の原因が知りたい

解決したいこと

is_writableでfalseが返ってくる原因が知りたいです。
調べられる限り試しましたが原因がわかりませんでした。
is_writableがfalseであるところを解消しないと解決しないと思ったので表題の記載にしましたが、最終的にはfwriteかfile_put_contentsで該当ファイルに書き込めれば方法は問いません。
よろしくお願いします。

発生している問題・エラー

エラーはありません。

該当するソースコード

if (is_writable($file_url)) {
  echo "ok";
}

自分で試したこと

以下の読み込みは問題なく可能であることを確認しました。

$fp = fopen($file_url, 'r');
// whileで行末までループ処理
while (!feof($fp)) {
  // fgetsでファイルを読み込み、変数に格納
  $txt = fgets($fp);
  $text=$text.$txt;
}
fclose($fp);
echo $text;

また、該当ファイルとディレクトリのパーミッションは共に777(本当はもっと絞りたいですが)であることを確認しました。
スクリーンショット 2021-10-02 23.13.37.png

0

2Answer

Comments

  1. @wifrstfasnriov

    Questioner

    ご回答ありがとうございます。流石にtrueだろうと思いながらやってみたら、まさかのfalseでした。読み込みができるのに存在しないってどういうことなんでしょうか…。

    if (file_exists($file_url)) {
    echo "exist";
    }
  2. @wifrstfasnriov

    Questioner

    is_writableでtrueが得られました。
    ファイルのURLの指定の仕方が違ったようです。
    「is_writableがfalseになる」でなく「file_existsがfalseになる」で調べた結果見つけられた記事で解決したので、ご指摘いただいたおかげです。質問してよかったです。
    ありがとうございました!

解決しました。
PHPというよりWordpressを使っていることに関係しているのかもしれません。
$file_urlをhttpsで始まるURLで指定していましたが、/home/で始まるサーバーからのパスを渡すと、trueになりました。
Wordpressを使っている場合は、get_template_directory_uri()でなくget_template_directory()で得られるパスを渡す必要があるようです。
なお、httpで始まるURLでもfopenで読み取ることはできるようです。(このせいでハマりました…)

0Like

Your answer might help someone💌