web-dev-qa-db-ja.com

PHP 5.3の後のWSOD:5.3:menu.incのcall_user_func_array()に関する問題

編集11月10日:これはLetharionの提案によって解決されました。md5ファイルで、ファイルを、エラーをスローしていた関数を含む元のパッケージファイルと比較します。

-

私はここで https://www.drupal.org/node/2336585#comment-9311707 から紹介されました

私はこれに2日間の大部分を費やしました。私は提案を検索して試しましたが、これまでのところサイコロはありません。可能な限り要約:

最近、私のWHM/cPanelが自動的に更新され、MySQL 5.5以上にアップグレードしないとphpMyAdminからロックアウトされました-ある日phpMyAdminにアクセスしようとすると、赤いボックスにアップグレードを示す赤いテキストが表示されました。私たちはそれを無視してきましたが、2日前にデータベースにアクセスする必要があったので、cPanelにSQL 5.5への支援なしのアップグレードを実行させました。

Drupal 6.33でノードを編集してWSODを受信するまで、プロセスは完全にスムーズになり、通常のように見えました。別のページをリロードすると、次のエラーが発生します。

warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'node_page_edit' not found or invalid function name in /home/SITENAME/public_html/includes/menu.inc on line 350.

未変更のmenu.incの350行目は、次のように関数menu_execute_active_handler()内にあります。345 if ($router_item = menu_get_item($path)) { 346 if ($router_item['access']) { 347 if ($router_item['file']) { 348 require_once($router_item['file']); 349 } 350 return call_user_func_array($router_item['page_callback'], $router_item['page_arguments']); 351 } 352 else { 353 return MENU_ACCESS_DENIED; 354 } 355 } 356 return MENU_NOT_FOUND;

髪の毛を抜いた後、SQLのアップグレード中にサーバーが自動的に更新されていることを発見しましたPHP長年の5.2ブランチから現在の5.3.29へ。D6が「公式」になっていないことを知りましたサポートPHP 5.3。

Call-user-func-array()を検索すると、実際にPHP 5.3+

今のところこれをパッチする方法について誰かが光を当てることができますか?必要ないくつかのモジュールがまだD7の準備ができていないため、まだD6を使用しています。

事前にありがとうございました、BigMike

- 追加情報:

これまでのところ、多数のcontribモジュールを含む他のすべてが期待どおりに機能しています。私たちが見た唯一のエラーは call_user_func_array()は、パラメータ1が有効なコールバックであることを期待しています また、ノードを作成(node_add)または編集(node_page_edit)しようとした場合のみ。

$ router_itemでダンプを実行し、call-user-func-array()が動作しています node_page_view、 drupal_get_form、および statistics_node_tracker page_callback's but not working for node_page_edit または node_add

使用するもの drupal_get_form これで問題ありません。これまでのところ、ブロックと分類法の両方を作成して編集し、期待どおりに機能することをテストしました。キックのために、私は「node_page_edit」をインターセプトし、それを「drupal_get_form」に変更しました。これで、ノード編集ページがロードされます-死の白い画面ではなくなりましたが、他の大量のエラーがあり、画面には何も出力されません。

クローンページ(クローンモジュールv6.x-1.3)でもエラーが発生します。

warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'node_form' not found or invalid function name in /home/SITENAME/public_html/includes/form.inc on line 421.

これはform.incでは...

419 // If $callback was returned by a hook_forms() implementation, call it. 420 // Otherwise, call the function named after the form id. 421 $form = call_user_func_array(isset($callback) ? $callback : $form_id, $args);

ここで$ callbackをダンプします。これは、値「node_form」の通常の文字列です。

PHP 5.3.x。で使用するためにcall_user_func_array()を操作する方法を理解する必要があります。 php.netサイトにはいくつかのヒントがありますが、今のところわかりません。

これまでに試しました... return call_user_func_array($router_item['page_callback'], array(&$router_item['page_arguments']));return call_user_func_array(array($router_item['page_arguments'], $router_item['page_callback']), $router_item['page_arguments']);

...そしてアンパサンドを追加して配列の順序を変更しようとしました...これはcall_user_func_array()を使用するのが初めてなので、実際には単にボールを吐きます。

どんな助けでも大歓迎です!私たちのウェブサイトは http://www.marlincrawler.com であり、ほとんどのものが正常に機能しています。コンテンツを編集できないことは、DBで行うことができるので世界の終わりではありませんが、コンテンツを作成できる必要があり、この機能がないことは私たちにとって重要な問題です。

2
BigMike

上記のレサリオンの提案は私の問題を解決しました。何らかの理由で、PHP_SQLレンダリングのcPanel自動更新中に「d6_root/modules/node/node.pages.inc」ファイルのMD5チェックサムが「node_page_edit」が見つからないか、無効な関数名として変更されました。変更されていないnode.pages.incファイルと元の/在庫のWord-for-Wordテキスト比較の一致にもかかわらず、Drupal 6.33ファイルですが、このWSODを取得していました。私のnode.pages.incファイルはストックD6ファイルのバイナリマッチではなく、変更されていないnode.pages.incファイルをD6パッケージの元のファイルで上書きした直後に、私のWebサイトは即座に正常に機能し始めました。

私にとって、この変更がPHP&SQLのアップグレード中に発生したことは非常にありそうにありません。以前にファイルに何らかの問題があり、おそらく古いバージョンのPHP気にしませんでした......?

したがって、他の誰かが特に厄介な死の白い画面を持っている場合、この例では、どの関数が問題の原因であり、どのファイルがその関数を含んでいるかを知っている場合、MD5ファイルの一致を実行し、何らかの理由でファイルがオリジナルDrupalインストールファイル。

Ashish Bairagi、calebtr、およびLetharionの協力に感謝し、これを解決しました。

1
BigMike

まず最初に、あなたが参照しているエラーは実際にはWSODを引き起こさない単なる警告であることを述べておきます。したがって、WSODの原因となっている胎児エラーを正確に調べる必要があります。

これを行うには、settings.phpファイルでエラー報告のレベルを変更する必要があります。このコードを追加します。

<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
//Note:  Do not include the opening and closing PHP tags when you copy this code
?>

その後、正確なエラーを確認できます。それを解決できれば、問題が解決する可能性があります。または、ここに投稿するだけで、誰でもサポートできます。

詳細はこちら: https://www.drupal.org/node/1056468

0
Ashish Bairagi

コメントするのに十分な評判がありません。あなたがこれを試したことはどこにもありませんが、ここにあります:

すべてのキャッシュをクリアします。

(管理者/設定/パフォーマンスで)

call_user_func_array()は正常に動作していますが、関数 'node_page_edit'が見つからないため、PHPが不平を言っています。

しかしコースにはnode_page_editという関数があり、Drupalコアのノードモジュールの一部であり、そのモジュールを無効にする方法はありません。 Drupalがモジュールをロードする方法に誤りがあり、ほとんどの場合、キャッシュのクリアが役立ちます。

0
calebtr