編集が追加されました。PHPコードがセグメンテーションフォルトを生成します
PHPの三項演算からセグメンテーションフォルトが発生しています。私は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のインストールや依存関係のいずれかでエラーが発生しました。しかし、function
が使用されていないため、言語機能のみが使用されていたため、かなり簡単に絞り込むことができると思いました。
編集:私はセグメンテーションフォールトが発生し、そのうちの一つは、上記のコードから識別することができれば、私はどこのソリューションを検索する場所を知っているとどのように行動するだろうように、共通の問題が何であるかを知りたいと思った 。 (これはそれについて疑問に思う人のために、質問です)
EDIT 2: 準備は今、$ _GETにはより多くの割り当てはありませんので、私は、今ではadvisable
、有効であると思います。しかし、エラーはまだそこにあります。
EDIT 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のインストールが破損していて拡張機能です。コード自体は問題ありませんでしたが、誤ったインストールの一部を使っていたと思います。もっとたくさん追加することができますが、私は正確な原因とその解決策を見つけられませんでしたが、それを再び働かせるように管理しています。
'$ _GET 'の値を設定することは良い方法とは考えられません。あなたはそれで何を達成しようとしていますか? – Aquillo
@Aquilloとは何なのですか?これがバグであれば、PHPバグデータベースに報告する方が良いでしょう。 – datasage
私はこれを実行し、私のためのsegfaultはありません。しかし、t2が定義されていない場合、私は未定義インデックス:t2に対してエラーを取得します。しかし、上記のように値を取得するのは良い方法ではありません。 – o0rebelious0o