* [PLUGIN] dumpプラグインが空のファイルを格納できない [#we5b744b] - 元タイトル: dumpプラグインのバグ -ページ: [[BugTrack2]] -投稿者: [[1]] -優先順位: 低 -状態: 完了 -カテゴリー: プラグイン -投稿日: 2005-02-17 (木) 19:06:49 -バージョン: 1.4.5-1.4.5_1 #contents ** 修正 [#kb0dab87] - [[cvs:plugin/dump.inc.php]] (1.36) **メッセージ [#d7951c33] dumpプラグインでバックアップの対象となるファイルの中に0バイトのものがあるとRuntime errorと表示される。 エラーメッセージは以下の通り Error message : wiki/0bytefile.txt is not found or not readable. 0bytefile.txtは実際に0バイトだったファイル名が入ります。~ 0バイトのページは削除すればいいですが、InterWikiNameページは削除できないので((必ず書く必要があるのかもしれませんが。。))コメントを入れるなどして対応しています。 ---- -[[BugTrack/701]]にて既知です。 -- &new{2005-02-18 (金) 00:19:20}; -そうですね(既報というのは)。FrontPage、InterWikiNameなどのページを削除した直後にPukiWikiにアクセスすると、それぞれのページを touch() で作成するため、このような状況になります。 -- [[henoheno]] &new{2005-02-20 (日) 21:17:52}; -ご指摘ありがとうございます。1.4.5から標準のプラグインになったので試しに使ってみたのですが、まだ開発途上のようですね。このページの内容も含めてhenohenoさんのTODOが既に[[BugTrack/701]]でまとめられているので一旦クローズとした方が良いでしょうか? -- [[1]] &new{2005-02-21 (月) 19:31:32}; -こんにちは :) このBugTrackの投稿者が[[1]]さんであるのかどうかが名前で判別できません・・・ (^^; ((ひょっとして2ちゃんねる掲示板のノリで書かれていますか? ここは名前と同じ名前のページ名が自然にできる場所ですから、何かしら個性的な名前の方が後々便利ですよ ;) ))少し様子を見てから、クローズとさせていただきたいと思います。 -- [[henoheno]] &new{2005-02-21 (月) 22:43:37}; - [[filesize()関数>PHP関数:filesize]]の戻り値を FALSEと比較するときに''==''演算子を使っているようです。ここを''===''演算子にすれば0バイトのときに引っかからなくなると思いますが。 -- &new{2005-03-03 (木) 16:09:12}; diff -u -r1.34 dump.inc.php --- dump.inc.php 23 Jan 2005 07:24:11 -0000 1.34 +++ dump.inc.php 3 Mar 2005 06:50:37 -0000 @@ -430,7 +430,7 @@ // ファイルサイズを取得 $size = filesize($name); - if ($size == FALSE) { + if ($size === FALSE) { @unlink($this->filename); die_message($name . ' is not found or not readable.'); } -コメントありがとうございます :) 確認しました。確かにその通りの様です。他の部分は(ちゃんと、意図的に) === 演算子を使っているようです。1さんの疑問が解決につながった様で何よりです :) -- [[henoheno]] &new{2005-03-27 (日) 21:15:09}; //#comment ** 返り値としてFALSE だけでなく、FALSE として評価される 0 や "" などといった値を返す可能性もある関数 [#z575ab92] - [[論理型 (boolean): boolean への変換 - PHP Manual>http://jp2.php.net/manual/ja/language.types.boolean.php#language.types.boolean.casting]] *** readdir 関数 [#ad519e69] - [[PHP関数:readdir]] によると、「この関数は論理値 FALSE を返す可能性がありますが、FALSE として評価される 0 や "" といった値を返す可能性もあります。(中略)。この関数の返り値を調べるには ===演算子 を使用してください。 」だそうです。&br;なので、while (FALSE != ($file = readdir($dp))) と同じ意味の、while ($file = readdir($dp)) を、while (FALSE !== ($file = readdir($dp))) と修正した方が無難だと思います。 -- &new{2007-11-03 (土) 17:48:40}; ~2007-11-03 (土) 12:00:00 時点のCVS lib\file.php(562): while ($file = readdir($dp)) lib\file.php(737): while ($file = readdir($dp)) plugin\attach.inc.php(821): while ($file = readdir($dir)) { plugin\dump.inc.php(394): while ($filename = readdir($dp)) { plugin\rename.inc.php(322): while ($file = readdir($dir)) { - ChangeLog 2007-11-04 00:12 -- [[cvs:lib/file.php]] (1.93) -- [[cvs:plugin/attach.inc.php]] (1.89) -- [[cvs:plugin/dump.inc.php]] (1.41) -- [[cvs:plugin/rename.inc.php]] (1.37) - コメント & ピックアップありがとうございます。この指摘は「関数の仕様通りに書きましょう」というものであり、このBugTrackのテーマとは異なりますので、後でもっといいページがあったならばそちらに移動しましょう。今のPukiWikiを普通に使っている分には、今回の修正がなかったとしても特段影響はないと思いますが、きちんと書くに越したことはありません。 -- [[henoheno]] &new{2007-11-04 (日) 23:05:00}; - 関連: [[BugTrack2/10]] -- &new{2009-05-07 (木) 23:49:42}; -- [[BugTrack2/236]] より移動 -- &new{2009-05-08 (金) 14:51:25}; - tRIamgDJV -- [[fyjhky]] &new{2013-07-17 (水) 13:48:16}; #comment //#comment *** fgets 関数 [#a8f7d2f3] - [[cvs:lib/func.php]] のis_freeze() のように直後の比較条件で"0" などがFALSE 判定されるような場合は別としても、[[cvs:lib/file.php]] のfile_head() で使われている[[PHP関数:fgets]]は直した方がいいのではないでしょうか。 -- &new{2009-05-08 (金) 15:46:53}; -- 意図的に"" や"0" を除いているのなら、却下ですが。 -- &new{2009-05-08 (金) 15:46:53}; #comment //#comment *** PukiWiki: file_head 関数 [#h1ef48cc] - [[cvs:lib/file.php]] に存在するFALSE または配列を返す関数ですが、「要素の数がゼロである 配列」が返ってくる場合もあります。[[cvs:plugin/recent.inc.php]] では「==」 で比較しているので、データが空である場合も「ファイルが開けない」とエラーが表示されてしまうようです。([[official:質問箱4/454]]) -- &new{2009-05-08 (金) 15:46:53}; -- 少し場違いな話題かもしれませんが。 -- &new{2009-05-08 (金) 15:46:53}; #comment //#comment