[PLUGIN] dumpプラグインが空のファイルを格納できない

  • 元タイトル: dumpプラグインのバグ
  • ページ: BugTrack2
  • 投稿者: 1?
  • 優先順位: 低
  • 状態: 完了
  • カテゴリー: プラグイン
  • 投稿日: 2005-02-17 (木) 19:06:49
  • バージョン: 1.4.5-1.4.5_1

修正

メッセージ

dumpプラグインでバックアップの対象となるファイルの中に0バイトのものがあるとRuntime errorと表示される。 エラーメッセージは以下の通り

Error message : wiki/0bytefile.txt is not found or not readable.

0bytefile.txtは実際に0バイトだったファイル名が入ります。
0バイトのページは削除すればいいですが、InterWikiNameページは削除できないので*1コメントを入れるなどして対応しています。


  • BugTrack/701にて既知です。 -- 2005-02-18 (金) 00:19:20
  • そうですね(既報というのは)。FrontPage、InterWikiNameなどのページを削除した直後にPukiWikiにアクセスすると、それぞれのページを touch() で作成するため、このような状況になります。 -- henoheno 2005-02-20 (日) 21:17:52
  • ご指摘ありがとうございます。1.4.5から標準のプラグインになったので試しに使ってみたのですが、まだ開発途上のようですね。このページの内容も含めてhenohenoさんのTODOが既にBugTrack/701でまとめられているので一旦クローズとした方が良いでしょうか? -- 1? 2005-02-21 (月) 19:31:32
  • こんにちは :) このBugTrackの投稿者が1?さんであるのかどうかが名前で判別できません・・・ (^^; *2少し様子を見てから、クローズとさせていただきたいと思います。 -- henoheno 2005-02-21 (月) 22:43:37
  • filesize()関数の戻り値を FALSEと比較するときに==演算子を使っているようです。ここを===演算子にすれば0バイトのときに引っかからなくなると思いますが。 -- 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 2005-03-27 (日) 21:15:09

返り値としてFALSE だけでなく、FALSE として評価される 0 や "" などといった値を返す可能性もある関数

readdir 関数

  • PHP関数:readdir によると、「この関数は論理値 FALSE を返す可能性がありますが、FALSE として評価される 0 や "" といった値を返す可能性もあります。(中略)。この関数の返り値を調べるには ===演算子 を使用してください。 」だそうです。
    なので、while (FALSE != ($file = readdir($dp))) と同じ意味の、while ($file = readdir($dp)) を、while (FALSE !== ($file = readdir($dp))) と修正した方が無難だと思います。 -- 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
  • コメント & ピックアップありがとうございます。この指摘は「関数の仕様通りに書きましょう」というものであり、このBugTrackのテーマとは異なりますので、後でもっといいページがあったならばそちらに移動しましょう。今のPukiWikiを普通に使っている分には、今回の修正がなかったとしても特段影響はないと思いますが、きちんと書くに越したことはありません。 -- henoheno 2007-11-04 (日) 23:05:00
  • 関連: BugTrack2/10 -- 2009-05-07 (木) 23:49:42

fgets 関数

  • cvs:lib/func.php のis_freeze() のように直後の比較条件で"0" などがFALSE 判定されるような場合は別としても、cvs:lib/file.php のfile_head() で使われているPHP関数:fgetsは直した方がいいのではないでしょうか。 -- 2009-05-08 (金) 15:46:53
    • 意図的に"" や"0" を除いているのなら、却下ですが。 -- 2009-05-08 (金) 15:46:53

PukiWiki: file_head 関数

  • cvs:lib/file.php に存在するFALSE または配列を返す関数ですが、「要素の数がゼロである 配列」が返ってくる場合もあります。cvs:plugin/recent.inc.php では「==」 で比較しているので、データが空である場合も「ファイルが開けない」とエラーが表示されてしまうようです。(official:質問箱4/454) -- 2009-05-08 (金) 15:46:53
    • 少し場違いな話題かもしれませんが。 -- 2009-05-08 (金) 15:46:53

*1 必ず書く必要があるのかもしれませんが。。
*2 ひょっとして2ちゃんねる掲示板のノリで書かれていますか? ここは名前と同じ名前のページ名が自然にできる場所ですから、何かしら個性的な名前の方が後々便利ですよ ;)

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-07-17 (水) 13:48:16
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.252 sec.

OSDN