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