E_ALL や safe_mode などでいじると、まだまだwarningが出るんじゃない?

  • 元タイトル: Undefined index: action in diff.inc.php on line 16
  • ページ: BugTrack
  • 投稿者: ishii
  • 優先順位: 低
  • 状態: 提案
  • カテゴリー: プラグイン
  • 投稿日: 2004-06-30 (水) 11:27:26
  • バージョン:

メッセージ

えっと、細かいですが…error_reportingを常にE_ALLにしているとページの差分表示でエラーが出ます。

--- plugin/diff.inc.php.orig    2004-06-30 11:06:11.671875000 +0900
+++ plugin/diff.inc.php 2004-06-30 11:06:25.437500000 +0900
@@ -13,7 +13,7 @@

        $action = array_key_exists('action',$vars) ? $vars['action'] : '';

-       switch ($vars['action']) {
+       switch ($action) {
        case 'delete':
                $retval = plugin_diff_delete($vars['page']);
                break;


コメント

  • お知らせありがとうございます。細かくないです :) 個人的には常に E_ALL にしたくてウズウズしているのですが、Perlで言う use strict と同等の扱いをしていいのかがまだ判断できかねるので、発作を抑えているだけです。 -- henoheno 2004-06-30 (水) 22:06:45
  • safe mode では、これ以外にもwarningが出ることを確認しています。サーバーの環境によって、warningが出てしまうため、E_WARNINNGを抑制しているのだと、私は推測しています。また、セキュリティ的な面から言うと、ソースコードが見えてしまうため、E_ALLは控えた方が良いです。PHPのドキュメントに、「公開サーバーではエラーの出力は抑制しろ」というようなことが書いてあります。 -- 三浦克介 2004-07-01 (木) 08:52:06
  • いちばんいいのはどのような環境に対してもnoticeが出ないようにする事なんでしょうが…なかなか無理そうです。phpもCみたいにincludeできたらいいんですけどね…。 -- Ratbeta? 2004-07-01 (木) 15:46:28
  • E_ALLは控えた方が良い、とのことですが、これはあまりよくないような気がします。E_ALLを設定しないと(場合によっては)真っ白な画面になってしまい、ユーザを混乱させるだけになってしまいます。…普段はE_ERRORにして、PukiWikiにE_ALLにしたデバッグオプションをつける、というのはどうでしょうか? -- Ratbeta? 2004-07-01 (木) 15:49:13
  • コメントありがとうございます。Webアプリケーションのエラー(内情含む)が、常時見えるのはさすがに良くないですか。残念です :) とりあえずはこのように(cvs-raw:init.php.diff?r1=1.77&r2=1.78)、なるべく手軽に E_ALL に変更できる様にはしました。が、私は面倒くさがりなのでもっとお気楽に、環境ごとにE_ALLを強制できる方法があればなぁと思う今日このごろです。 -- henoheno 2004-07-01 (木) 22:28:57

  • お蔭様で、デフォルトのerror_reportingを変更したいという衝動は収まりました・・・が、ユーザーによってはwarningやnoticeが出るというのは面白くないですね XD ということで、見かけたwarningでcvs未対応のものがありましたら、このページなどでお知らせいただければ順次対処します。よろしくお願いします。 -- henoheno 2004-07-01 (木) 22:31:55
  • CVS版はE_ALL、リリース版はE_ALLを外すというのはどうでしょうか。それと、Ratbeta?さんが書かれているように、デバッグ用の設定をどこか(pukiwiki.ini.phpあたり)にまとめて、「何が異常な動作をしたときは、まずデバッグオプションを有効にしてくてだい」とどこかで説明しておいた方がよいですね。 -- 三浦克介 2004-07-07 (水) 09:24:16
    • ご提案ありがとうございます。CVS版 E_ALL は、影響範囲が大きいので保留中です。例えば php.ini で特別な指定をすると、そのサーバーでだけは自動的に E_ALL となる、といったことができれば(※未調査) より影響が少ないのではないか、なんて考えています。 -- henoheno
  • safe_modeでは、set_time_limit() 関数でWarningが出ます。
     if(ini_get('safe_mode')=='0') {
       set_time_limit(0);
     }
    ってな感じにした方が良さそうです。 -- 三浦克介 2004-07-07 (水) 09:26:00
  • 確認しました。こんなメッセージですね。 -- henoheno 2004-07-10 (土) 08:41:40
      Warning: set_time_limit(): Cannot set time limit in safe mode in /path/to/using-set_time_limit.php on line 3
  • 他にもWarning等あれば、お知らせください :) -- henoheno 2004-07-10 (土) 08:56:09

関数コール時

  • E_ALL で運用中、ls2.inc.php の array_walk()で 以下のようなPHP_Warning が出ていたので御連絡します。
    (長いので適宜折り返してます)
    PHP Warning:  Call-time pass-by-reference has been deprecated -  argument passed by value;
    If you would like topass it by reference,  modify the declaration of array_walk().
    If you would like to enable call-time pass-by-reference,
    you can set allow_call_time_pass_reference to true in your INI file. 
    However, future versions may not support this any longer. in /<ls2までのPath>/ls2.inc.php on line 93
    サーバの設定次第のようですが、上記の設定がなされていない場合でも、 このWarningが出力されないようにしたいと思い、私のところでは、 以下のように修正して、Warningの出力を抑制することはできました。
    (修正案:廃案(2005-11-14))
    plugin_ls2_convert() 関数内
      :
    -     array_walk($args, 'ls2_check_arg', & $params);
    +     $ref_params = &$params;
    +     array_walk($args, 'ls2_check_arg', $ref_params);
    修正内容は、「直接 array_walk()に参照値が渡せないなら、参照値を値渡しする」という意図です。こんな修正でいいのかどうか分かりかねてはいるものの、 一応 御連絡しておきます。-- jjyun 2004-08-15 (日) 12:05:50
    • online.inc.php , ver1.9 line42 の plugin_online_check_online(& $count, $host) でも同じような Warning が出力されてます (確認した環境:FedoraCore4 PHP5.0.4 ...Zend Engine v2.0.4-dev) -- jjyun 2005-11-14 (月) 00:46:02
    • 補足:上記でのサーバの設定とは、php.ini で allow_call_time_pass_referenceをonにするということです。なおリファレンスから引用すると『関数コールの際には、リファレンス記号がないことに注意してください。関 数定義にのみリファレンス記号があります。リファレンスで正しく引数を 渡すには、関数定義のみで十分です。』( 引用元: http://jp.php.net/manual/ja/language.references.pass.php ) 、参照記事:php-users MLの記事 その内の記事のひとつ
      (修正案:(上記の修正版 2005-11-14))
      plugin_ls2_convert() 関数内
        :
      -     array_walk($args, 'ls2_check_arg', & $params);
      +     array_walk($args, 'ls2_check_arg', $params);

      もしくは サポートするPHPのバージョンの範囲(PHP4.0.6 あるいは 4.1以降)のせいでこのような変更だと良くないのでしょうか? -- jjyun 2005-11-14 (月) 00:53:02
    • 関連: BugTrack2/82, BugTrack2/106, BugTrack2/182 -- 2009-06-22 (月) 22:38:58

  • 1.4.5_rc1で、$pagereading_enable = 1; の時に、 deletedプラグインを実行すると次のNoticeが出ました。 -- にぶんのに 2005-01-27 (木) 03:44:21
    Notice: Undefined index: (削除したページ名) in /~/lib/func.php on line 308
    • cvs:lib/func.php (1.30)
    • ありがとうございます。isset()を足しておきました。 -- henoheno 2005-01-27 (木) 21:51:30

$edit_auth_pages などで正規表現の指定をミスった場合

  • 直近(恐らくrev:1.14以降?)のauth.inc.phpで、編集作業を実行しようとすると次のWarningが出力されました。 -- Ratbeta? 2005-06-05 (日) 22:28:58
    Warning: Compilation failed: missing ) at offset 19 in /lib/auth.php on line 181
    • む、この場合は該当のリビジョンも具体的に出していただかないと、該当行が何かを絞りきれませぬ。 -- henoheno 2005-06-05 (日) 22:35:42
    • 手元のCVS版では出ないので、本当にbasic_auth()関係なのであれば、設定によって通過するコードのどこかなのでせう -- henoheno 2005-06-05 (日) 22:37:08
    • 仮に以下の部分だとすると、 $edit_auth_pages ないし $read_auth_pages の設定がおかしい可能性があると思います。-- henoheno 2005-06-05 (日) 22:38:57
       foreach($auth_pages as $key=>$val)
               if (preg_match($key, $target_str)) // <= HERE
                       $user_list = array_merge($user_list, explode(',', $val));
  • 申し訳ありません。こちらの設定側のミスでした。ちなみに、原因は、$edit_auth_pagesでの正規表現で(の閉じ忘れがあったことでした。 -- Ratbeta? 2005-06-05 (日) 22:45:19
    • 了解です :) 結局該当の行は上の行で合っているのですか? -- henoheno 2005-06-06 (月) 23:43:21

trackback.inc.php

次のメッセージが出力されます。おそらくvia_proxyがin_the_netに変わった頃からだと思います。

Fatal error: Call to undefined function: via_proxy() in /lib/trackback.php on line 183
  • お知らせありがとうございます。その通りだと思います (^^; -- henoheno 2005-07-04 (月) 23:19:26

バックアップ関係

新しいページを作らなくてもいいかなと思いこちらに (2007-06-27 (水) 22:03:01)

バックアップが存在しないページで、バックアップ世代を指定するとエラーが出ることがあります。

Notice: Undefined offset: 0
Warning: join(): Bad arguments.

バックアップ世代の指定が0 以下となるか、数字以外の時は、plugin_backup_get_list() へと飛ばすので問題ありませんでした。

  • 修正案その1 plugin/backup.inc.php (1.27)
    function plugin_backup_action()
    {
    (中略)
    	$backups = get_backup($page);
    	$backups_count = count($backups);
    +	if ($backups_count == 0)
    +		return array( 'msg'=>$_title_pagebackuplist, 'body'=>plugin_backup_get_list($page));
    +
    	if ($s_age > $backups_count) $s_age = $backups_count;
    
    	if ($backups_count > 0) {
  • 修正案その2 plugin_backup_action() 最後の
    	if ($action == 'diff') {
    からの括りを
    	if ($backups_count > 0) {
    でさらに括る。

(ページに表示される)感じからは、修正案その1 がいいかなと(個人的に)思います。


  • バックアップ関係でもう1件見つけました。
    $del_backup が有効になっていて、バックアップが作成される前か、削除した後にページを削除しようとすると、
    unlink() がファイルが見つからないというWarning を返してきます。
    lib/backup.php のmake_backup() が_backup_delete() を呼び出す直前か、_backup_delete() の最初に、_backup_file_exists() を入れてチェックすれば回避できると思います。
    ちなみに、plugin/backup.inc.php では、_backup_delete() を呼び出す前にチェックしています。 -- 2007-06-28 (木) 16:36:37
  • BugTrack2/129 -- 2007-10-13 (土) 20:10:13


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-06-22 (月) 22:38:58
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.224 sec.

OSDN