【问题标题】:PHP code generates a segmentation faultPHP 代码生成分段错误
【发布时间】:2013-04-26 16:51:18
【问题描述】:

已添加编辑。

我从 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,只有语言功能,我认为可以很容易地缩小范围。

编辑: 我想知道导致分段错误的常见问题是什么,以及是否可以从上面的代码中识别出其中一个问题,以便我知道在哪里寻找解决方案以及如何采取行动。 (这就是问题,对于那些想知道它的人)

编辑 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 及其扩展的损坏安装造成的。代码本身没有问题,但我猜它使用了错误安装的某些部分。可以添加更多,但由于我没有找到确切的原因和解决方案,但设法使其再次起作用,我感谢大家指导我解决问题。

【问题讨论】:

  • 我不认为在$_GET 中设置值被认为是一种好习惯。你想用它来完成什么?
  • @Aquillo 所说的是真的。如果这是一个错误,最好向 php 错误数据库报告。
  • 我运行了这个,没有段错误。但是,如果未定义 t2,我会收到未定义索引的错误:t2。但是如上所述设置获取值并不是一个好习惯
  • @datasage 我不知道这是否是一个错误,这就是我在这里的原因。这是否是一个好习惯并不重要,我可以将 $_GET['t1'] 替换为 $t1 之类的东西,并且仍然会发送错误。
  • 您应该对其进行测试以缩小范围。

标签: php segmentation-fault


【解决方案1】:

在查看您的代码时,我认为您没有任何错误。

话虽如此,您提到您现在的许多网站都存在问题。我想知道您现在是否受到恶意机器人的攻击,这些机器人可能会导致类似于此 [PHP 错误报告][1]https://bugs.php.net/bug.php?id=59748 上的错误。 [1]:。

我会查看您的日志,看看这些网站上的流量是否发生了变化,以便开始利用这个问题。

【讨论】:

  • 其实是我配置php安装和扩展的一半错了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 2017-12-19
  • 2015-05-20
  • 2014-03-23
相关资源
最近更新 更多