6

編集が追加されました。

PHP の 3 項演算でセグメンテーション エラーが発生します。PHP (5.4.13) を使用しています。

<?php

$t = empty($_GET['t2']) ? $_GET['t2'] : 'test';
$t = empty($_GET['t2']) ? 'test' : $_GET['t2'];

echo '<pre>'.print_r($t, true).'</pre>';

?>

ステートメント:

$t = empty($_GET['t2']) ? $_GET['t2'] : 'test';
$t = empty($_GET['t2']) ? 'test' : $_GET['t2'];

セグメンテーション違反をディスパッチします (これについては、Apache エラー ログを確認しました)。上記のコメント付きのステートメントは、セグメンテーション違反をスローしません。

これが唯一のソースエラーだとは思いませんが、これが私が絞り込んだものです。この php を使用するほとんどすべてのサイトで、この問題が発生しています。

これはバグではないと思います!PHPのインストールまたは依存関係の1つにエラーがあります。でもfunction言語機能だけで何も使われていないので、結構簡単に絞り込めると思いました。

編集: セグメンテーション違反を引き起こす一般的な問題とは何か、また、上記のコードからそのうちの 1 つを特定できる場合は、解決策を探す場所と対処方法を知りたいと思いました。(気になる方に質問です)

編集 2: 準備ができました。$_GET にはこれ以上割り当てがないので、今はadvisable有効であると思います。しかし、エラーはまだあります。

編集 3: valgrind の場合、トレースは次のとおりです。

==3775== Process terminating with default action of signal 11 (SIGSEGV)
==3775==  Bad permissions for mapped region at address 0x0
==3775==    at 0x0: ???
==3775==    by 0xF60F9F7: execute (in /opt/rh/php54/root/usr/lib64/httpd/modules/libphp5.so)
==3775==    by 0xF5A619F: zend_execute_scripts (in /opt/rh/php54/root/usr/lib64/httpd/modules/libphp5.so)
==3775==    by 0xF548E87: php_execute_script (in /opt/rh/php54/root/usr/lib64/httpd/modules/libphp5.so)
==3775==    by 0xF650A94: ??? (in /opt/rh/php54/root/usr/lib64/httpd/modules/libphp5.so)
==3775==    by 0x133BAF: ap_run_handler (in /usr/sbin/httpd)
==3775==    by 0x13746D: ap_invoke_handler (in /usr/sbin/httpd)
==3775==    by 0x142B2F: ap_process_request (in /usr/sbin/httpd)
==3775==    by 0x13F9A7: ??? (in /usr/sbin/httpd)
==3775==    by 0x13B6B7: ap_run_process_connection (in /usr/sbin/httpd)
==3775==    by 0x147976: ??? (in /usr/sbin/httpd)
==3775==    by 0x147C45: ??? (in /usr/sbin/httpd)

gdbの場合は次のとおりです。

#0  0x0000000000000000 in ?? ()
#1  0x00007fc4dd8a49f8 in execute () from /etc/httpd/modules/libphp54-php5.so
#2  0x00007fc4dd83b1a0 in zend_execute_scripts () from /etc/httpd/modules/libphp54-php5.so
#3  0x00007fc4dd7dde88 in php_execute_script () from /etc/httpd/modules/libphp54-php5.so
#4  0x00007fc4dd8e5a95 in ?? () from /etc/httpd/modules/libphp54-php5.so
#5  0x00007fc4e818dbb0 in ap_run_handler ()
#6  0x00007fc4e819146e in ap_invoke_handler ()
#7  0x00007fc4e819cb30 in ap_process_request ()
#8  0x00007fc4e81999a8 in ?? ()
#9  0x00007fc4e81956b8 in ap_run_process_connection ()
#10 0x00007fc4e81a1977 in ?? ()
#11 0x00007fc4e81a1c46 in ?? ()
#12 0x00007fc4e81a2293 in ap_mpm_run ()
#13 0x00007fc4e8179900 in main ()

最終編集

私が最初から疑っていたように、それは確かに破損したphpのインストールとその拡張機能によるものでした. コード自体には問題はありませんでしたが、インストールに失敗した一部を使用していると思われます。さらに追加することができますが、正確な原因と解決策が見つからなかったので、再び機能させることができたので、解決策に導いてくれてありがとう.

4

1 に答える 1

1

あなたのコードを見ると、エラーはないと思います。

そうは言っても、現在多くのサイトで問題が発生しているとのことでした。この [PHP バグ レポート][1]https://bugs.php.net/bug.php?id=59748 にあるものと同様のエラーを引き起こしている可能性のある悪意のあるボットに攻撃されているのではないかと思います。 [1]:.

ログを見て、これらのサイトでトラフィックが変化したかどうかを確認し、この問題を利用し始めます.

于 2013-05-15T14:08:08.043 に答える