Home >php教程 >php手册 >解决PHP文件字符串长度为4096倍数时的bug

解决PHP文件字符串长度为4096倍数时的bug

WBOY
WBOYOriginal
2016-06-06 20:08:271573browse

今天在Drupal社区看到这样一个Bug。 当Windows平台在PHP = 5.3.10时,如果一个PHP的文件的字符串长度正好是4096的倍数,运行或者调用这个PHP文件,将会直接发生PHP崩溃。 PHP官方的bug页面在https://bugs.php.net/bug.php?id=60758 测试bug 于是我便在本机wi

今天在Drupal社区看到这样一个Bug。

当Windows平台在PHP

PHP官方的bug页面在https://bugs.php.net/bug.php?id=60758

测试bug

于是我便在本机windows上做了这个测试,果然PHP 5.3.9和PHP 5.3.10 存在这个bug,而PHP 5.3.8 却不存在这个问题,当然是神奇。

PHP will crash if its size is multiples of 4096 bytes

下面是代码:

<?php &#160; file_put_contents(&#8216;test.txt&#8217;, str_pad(&#8221;, 4096)); &#160; require(&#8216;./test.txt&#8217;); ?>

为了解决问题,要么你升级PHP版本或者不让PHP文件的字符串长度为4096的倍数。

我假设你升级PHP是最佳的方案,如果不行的话,那么就得这样修改你的PHP文件。

PHP解决方法

在写入一个PHP文件时,事先判断PHP版本和文件字符串长度。

<?php &#160; $data = str_pad(&#8216;<?php\necho PHP_VERSION;&#8217;, 4096); &#160; // PHP will crash if its size is multiples of 4096 bytes. &#160; if (version_compare(PHP_VERSION, &#8217;5.3.10&#8242;, &#8216;<=&#8217;) && !(strlen($data) % 4096)) { &#160;&#160;&#160; $data = preg_replace(&#8216;/<\?php/&#8217;, &#8216;<?php &#8216;, $data); &#160; } &#160; file_put_contents(&#8216;test.php&#8217;, $data); &#160; require(&#8216;./test.php&#8217;); ?>

条件判断:

  • version_compare(PHP_VERSION, ’5.3.10′, ‘
  • !(strlen($data) % 4096),这段代码的意思字符串长度是4096的倍数

当条件满足时,用正则表达式在

(...)
Read the rest of 解决PHP文件字符串长度为4096倍数时的bug (67 words)


© lixiphp for LixiPHP - 致力于PHP高级编程!, 2013. | Permalink | No comment | Add to del.icio.us
Post tags: Bug, PHP, PHP 5.3.10, PHP 5.3.9

Feed enhanced by Better Feed from Ozh

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn