수정 사항이 추가되었습니다.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'];
는 세그멘테이션 오류 (나는 이것에 대한 아파치 오류 로그를 확인) 전달합니다. 위의 주석문은 세그먼트 화 오류를 발생시키지 않습니다.
이것이 유일한 소스 오류 일까 의심 스럽지만이 부분을 좁힐 수있었습니다. 이 PHP를 사용하는 거의 모든 사이트가 이제이 문제를 겪고 있습니다.
나는 이것이 버그라고 생각하지 않는다! PHP 설치 또는 종속성 중 하나에 오류가 있습니다. 그러나 아무 function
도 사용되지 않았기 때문에 언어 기능만으로 쉽게 좁힐 수 있다고 생각했습니다.
편집 : 나는 세그먼트 오류가 발생, 그 중 하나가 위의 코드에서 확인 될 수 있다면 어디 솔루션을 찾아야하는지 알고 어떻게 행동 할 수 있도록 일반적인 문제 무엇인지 알고 싶어 .
편집 2 (이 문제는 그것에 대해 궁금해하는 사람들을 위해입니다) : 준비 지금, $ _GET에서 더 이상 할당이없는, 그래서 그것이 advisable
및 유효 이제 같아요. 그러나 오류는 여전히 존재합니다.
편집 3 :
==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를위한 것입니다 : Valgrind의에 대한 은 추적은
#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
나는 이것을 도망 갔고 나를 위해 세그 폴트도 없었다. 그러나 t2가 정의되어 있지 않으면 Undefined index : t2에 대한 오류가 발생합니다.그러나 위와 같이 값을 설정하는 것은 좋은 습관이 아닙니다. – o0rebelious0o