質問箱/5206

カテゴリ動作環境
サマリPHP5.6環境でプラグイン「s.inc.php」を使うとエラーが出る
バージョン1.5.0
投稿者Hs?
状態完了
投稿日2016-01-05 (火) 03:32:17

質問

PHP5.6環境でプラグイン「s.inc.php」を使うとエラーが出ます

エラーはfopen() failed:というものです shortenerのディレクトリを確認するとファイルが作られていません

PHP5.6にしたことでファイルを作るのに失敗しているようです どのように修正したらファイルを作れるようになりますでしょうか?

回答

  • 書き忘れましたが今まではPHP5.4環境で使っていて問題ありませんでした。PHP5.6にしたことでエラーが発生しています。 -- Hs? 2016-01-05 (火) 03:34:02
  • 自作プラグイン/s.inc.php#gd9902d8 のセットアップに書いてあるように、 shortener/ と shortener_counter/ のディレクトリを書き込み可能(777)で作成する必要があります。まずここを確認してみてください -- umorigu 2016-01-05 (火) 07:03:04
  • shortenerとshortener_counterのディレクトリを777にしてみましたが改善されません。fopen() failed: shortener/ファイル名.txt というエラーが出ます。すでにファイルができている場合も読み込みに失敗しているみたいで、同様のエラーが出ます。ファイルの書き出しと読み込みの両方がうまくいっていないのかもしれません。 -- 2016-01-05 (火) 13:55:28
  • なるほど。それでは既存ファイルの書き込みに失敗してるのかもしれません。すでに存在するファイルのパーミッションも確認してみてください。簡単なのは chmod 666 shortener/* shortener_counter/* です。Webサーバー(PHP実行ユーザー)とファイルのアップロードユーザーが異なっている場合にこのページのようなエラーが発生します -- umorigu 2016-01-05 (火) 23:49:48
  • なお、手元でPHP5.6で s.inc.php を使っていますが、特別な修正なく動作しています。このため、PHP5.6による問題ではなく、環境移行による問題だと推測しています。(PukiWikiのデータ移設は特にパーミッションでトラブルが多いです) -- umorigu 2016-01-06 (水) 00:02:53
  • 原因がわかりました。index.phpにdefine('PLUGIN_S_NAMES_DIR', '../../test/shortener');みたいな感じに書いているのですがこれが使えてないみたいです。PLUGIN_S_NAMES_COUNTER_DIRも同じようにindex.phpに書いています。同じようにindex.phpにdefine('DATA_DIR','パス');やdefine('DIFF_DIR','パス');なども書いていますが、こちらは問題なく動いているようです。この差はどこなんでしょうか?PHP5.4では同じdefine('PLUGIN_S_NAMES_DIR', '../../test/shortener');の書き方で動いていたので、パスの指定は間違っていないと考えています。よろしくお願いします。 -- Hs? 2016-01-07 (木) 12:14:36
  • ↑に追加ですが複数のWikiを作っていて、データファイルだけ別ディレクトリで管理していて、index.phpでディレクトリを別に指定して使っています。1つ目のwikiではdefine('PLUGIN_S_NAMES_DIR', '../../wiki1/shortener');、2つ目のwikiではdefine('PLUGIN_S_NAMES_DIR', '../../wiki2/shortener');みたいな感じにしています。できればこの方法で使いたいので、index.phpにdefine('PLUGIN_S_NAMES_DIR', '../../test/shortener');を指定したいです。 -- 2016-01-07 (木) 12:22:51
  • 「fopen() failed: shortener/ファイル名.txt というエラーが出ます。」 と書かれていますが、 define('PLUGIN_S_NAMES_DIR', '../../test/shortener'); で且つ、存在しないディレクトリで試したところ、 「 fopen() failed: ../../test/shortener/c3d7c88dff.txt 」 というエラー表示になりました。もし ファイル先頭の ../../test/ がエラーメッセージ中に表示されてないとすると define('PLUGIN_S_NAMES_DIR', '../../test/shortener'); の定義が有効になっていない(例えば二重定義になって無視されている)です。どうでしょう? s.inc.php 側のPLUGIN_S_NAMES_DIR定義は削除していますか? define()はindex.php のどこに書かれていますか? 極端な例ですが、少なくとも require(LIB_DIR . 'pukiwiki.php'); より上に書く必要があります。エラーメッセージはできるだけ編集せずにそのままコピーしてください -- umorigu 2016-01-08 (金) 00:43:01
  • 例えば 'PLUGIN_S_NAMES_DIR' のスペルミスだったりしませんか -- umorigu 2016-01-08 (金) 00:56:06
  • 「二重定義になって無視されている」←これでした。s.inc.phpのPLUGIN_S_NAMES_DIRを削除(コメントアウト)することで解決しました。PHP5.4では問題なかったのですが、PHP5.6からはどうやらダメになったみたいです。解決しました。お手数をおかけしました。 -- 2016-01-08 (金) 02:22:24
  • 状態を完了に変更しました。umoriguさんありがとうございました。 -- 2016-01-08 (金) 02:26:21
  • 解決してよかった。PHP5.6でdefineの挙動が変わったのでしょうかね -- umorigu 2016-01-08 (金) 02:52:11


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-01-08 (金) 04:09:42
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2018 PukiWiki Development Team. Powered by PHP 5.6.38-0+deb8u1. HTML convert time: 1.273 sec.

OSDN