**[[質問箱5/206]] [#z22b9e18] #author("2018-03-11T22:05:37+09:00;2016-01-08T04:09:42+09:00","","") **[[質問箱/5206]] [#z22b9e18] |RIGHT:70|LEFT:410|c |~カテゴリ|動作環境| |~サマリ|PHP5.6環境でプラグイン「s.inc.php」を使うとエラーが出る| |~バージョン|1.5.0| |~投稿者|[[Hs]]| |~状態|完了| |~投稿日|&new{2016-01-05 (火) 03:32:17};| ***質問 [#kf9c5ed7] PHP5.6環境でプラグイン「[[s.inc.php>自作プラグイン/s.inc.php]]」を使うとエラーが出ます エラーはfopen() failed:というものです shortenerのディレクトリを確認するとファイルが作られていません PHP5.6にしたことでファイルを作るのに失敗しているようです どのように修正したらファイルを作れるようになりますでしょうか? ***回答 [#v3019c65] - 書き忘れましたが今まではPHP5.4環境で使っていて問題ありませんでした。PHP5.6にしたことでエラーが発生しています。 -- [[Hs]] &new{2016-01-05 (火) 03:34:02}; - [[自作プラグイン/s.inc.php#gd9902d8]] のセットアップに書いてあるように、 shortener/ と shortener_counter/ のディレクトリを書き込み可能(777)で作成する必要があります。まずここを確認してみてください -- [[umorigu]] &new{2016-01-05 (火) 07:03:04}; - shortenerとshortener_counterのディレクトリを777にしてみましたが改善されません。fopen() failed: shortener/ファイル名.txt というエラーが出ます。すでにファイルができている場合も読み込みに失敗しているみたいで、同様のエラーが出ます。ファイルの書き出しと読み込みの両方がうまくいっていないのかもしれません。 -- &new{2016-01-05 (火) 13:55:28}; - なるほど。それでは既存ファイルの書き込みに失敗してるのかもしれません。すでに存在するファイルのパーミッションも確認してみてください。簡単なのは chmod 666 shortener/* shortener_counter/* です。Webサーバー(PHP実行ユーザー)とファイルのアップロードユーザーが異なっている場合にこのページのようなエラーが発生します -- [[umorigu]] &new{2016-01-05 (火) 23:49:48}; - なお、手元でPHP5.6で s.inc.php を使っていますが、特別な修正なく動作しています。このため、PHP5.6による問題ではなく、環境移行による問題だと推測しています。(PukiWikiのデータ移設は特にパーミッションでトラブルが多いです) -- [[umorigu]] &new{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]] &new{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');を指定したいです。 -- &new{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]] &new{2016-01-08 (金) 00:43:01}; - 例えば 'PLUGIN_S_NAMES_DIR' のスペルミスだったりしませんか -- [[umorigu]] &new{2016-01-08 (金) 00:56:06}; - 「二重定義になって無視されている」←これでした。s.inc.phpのPLUGIN_S_NAMES_DIRを削除(コメントアウト)することで解決しました。PHP5.4では問題なかったのですが、PHP5.6からはどうやらダメになったみたいです。解決しました。お手数をおかけしました。 -- &new{2016-01-08 (金) 02:22:24}; - 状態を完了に変更しました。umoriguさんありがとうございました。 -- &new{2016-01-08 (金) 02:26:21}; - 解決してよかった。PHP5.6でdefineの挙動が変わったのでしょうかね -- [[umorigu]] &new{2016-01-08 (金) 02:52:11}; #comment