2013-05-02 5 views
6

수정 사항이 추가되었습니다.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가 손상된 설치에서 나온 것이고 확장 기능입니다. 코드 자체에는 아무런 문제가 없었지만 잘못된 설치의 일부를 사용했다고 생각합니다. 더 많은 것을 추가 할 수는 있지만 정확한 원인을 발견하지 못했고 해결책이되었지만 다시 작동하도록 관리하면서 해결 방법을 안내해 준 모든 분들께 감사드립니다.

+6

'$ _GET '의 값을 설정하는 것이 좋다고 생각하지 않습니다. 그걸로 무엇을 이루려고합니까? – Aquillo

+0

@Aquillo가 말하는 것은 사실입니다. 이것이 버그 인 경우 PHP 버그 데이터베이스에보고하는 것이 좋습니다. – datasage

+0

나는 이것을 도망 갔고 나를 위해 세그 폴트도 없었다. 그러나 t2가 정의되어 있지 않으면 Undefined index : t2에 대한 오류가 발생합니다.그러나 위와 같이 값을 설정하는 것은 좋은 습관이 아닙니다. – o0rebelious0o

답변

1

코드를 볼 때 어떤 오류가 있다고 생각하지 않습니다.

그렇다면 현재 많은 사이트에서 문제가 있음을 언급하셨습니다. 나는이 [PHP Bug Report] [1] https://bugs.php.net/bug.php?id=59748에있는 것과 유사한 오류를 일으킬 수있는 악의적 인 봇에 의해 공격당하는 지 궁금합니다. [1]:.

나는 귀하의 로그를보고 이러한 사이트에서 트래픽이 변경되어이 문제점을 이용하기 시작했는지 확인합니다.

+1

사실, PHP 설치를 구성하는 것이 나의 잘못이었고 확장이되었습니다. – khael

관련 문제