php Warning:strstr()[function.strstr]:Empty delimiter

 更新时间:2016年11月25日 17:38  点击:1861
今天在使用php中strstr函数时提示Warning:strstr()[function.strstr]:Empty delimiter错误了,后来经过反复查找得出解决办法,有需要的同学可参考。

Warning: strstr() [function.strstr]: Empty delimiter

非常奇怪,难道php函数strstr的某个参数出问题了?

于是写了个测试的例子

 代码如下 复制代码

<?php

$text=”asdfghjklqwertyuiopzxcvbnm”;
//$key=”g”;

//根据php错误提示Empty delimiter,判断应该不会是$text的值出问题,所以故意注释了key值

if(strstr($text, $key)){
echo “found it”;
}else{
echo “not found”;
}

?>

strstr()竟然不报错,于是想到$key值可能会是空串”",姑且一试。

果然strstr($text,”")时,提示出错Warning: strstr() [function.strstr]: Empty delimiter

今天在运行dedecms时出现有些页面会提示Fatal Error: Allowed memory size of 123456789 bytes exhausted了,下面我来给大家介绍如何解决些问题。

错误提示

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 3214636 bytes) in E:VertrigoServwwwinstall.php on line 488

我们直接创建一个phpinfo.php文件,写入如下代码

<?php phpinfo(); ?>

然后就可以查看到你的内存

php内存分配不足:

1、修改php.ini(推荐)   

 代码如下 复制代码
memory_limit = 12M (改大点) 

 
2、在程序里面添加如下语句   

运行时修改php的内存设置

在你的php代码中增加以下命令行即可。

 代码如下 复制代码

<?php

ini_set('memory_limit','128M');

?>

  

3、在根目录建立.htaccess文件,添加如下内容   

 代码如下 复制代码

php_value max_execution_time 1200
php_value memory_limit 200M
php_value post_max_size 200M
php_value upload_max_filesize 200M

memory_limit应该设为多少?

这个完全依赖于你的应用的要求。比如Wordpress,运行起核心代码需要32MB。Drupal 6则要求这个值最小为16MB,并推荐设置为32MB。如果你又安装不少的插件(plugins),尤其是那些要进行图像处理的模块,那么你可能需要 128MB或更高的内存。

今天在利用empty函数是出现Fatal error: Can’t use function return value in write context错误提示,觉得很怪, 这个函数我可是使用了N久了今天怎么回事,下面大家来看看我的分析过程。

错误提示

Fatal error: Can’t use function return value in write context in empty.php on line 5

我代码是这样写的

 代码如下 复制代码

$str=” “;
if(empty(trim($str))){
echo “empty”;
}

然后出现了

Fatal error: Can’t use function return value in write context in empty.php on line 5

看不出原因就上了官网查看了一下手册。

bool empty ( mixed $var )

如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,”"、0、”0″、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。 除了当变量没有置值时不产生警告之外,empty() 是 (boolean) var 的反义词。

可见empty只能用来检查变量值,不能用来检查函数的返回值。正确用法应该是

 代码如下 复制代码

$var =trim(” “);
// 结果为 true,因为 $var 为空字符串
if (empty($var)) {
echo ‘empty’;
}

empty(trim($str)这种用法是错误的。

关闭PHP错误脚本提示是程序上线了必须做的一件事情,就是不管程序怎么报错我们都不能让错误日志在服务器上给大家看到,下面我来总结两种关闭PHP错误脚本提示的具体方法。

最简单的办法就是直接在php程序代码中加入下面代码:

 代码如下 复制代码

error_reporting(E_ALL^E_NOTICE^E_WARNING);

可以关闭所有notice 和 warning 级别的错误。

把这个语句放在您脚本的功用包含文件中,通常为config.php 或者conn.php 中就可以控制输出了。

当然我也也可以在php.ini中进行设置了方法如下

打开PHP安装目录下的php.ini文件

找到display_errors = On 修改为 display_errors = off

注意:如果你已经把PHP.ini文件复制到windows目录下,那么必须同时把c:windows/php.ini里的display_errors = On 修改为display_errors = off

PHP .ini中display_errors = Off失效的解决

问题:

PHP 设置文件php .ini中明明已经设置display_errors = Off,但是在运行过程中,网页上还是会出现错误信息。

解决:

打开PHP安装目录下的php.ini文件

找到log_errors = off 修改为 log_errors = on

找到error_log = filename 修改为 error_log="D:PHPerrlogphp_error.log" (这里的目录和文件名D:PHPerrlogphp_error.log随便你取什么)

注意:如果你已经把PHP.ini文件复制到windows目录下,那么必须同时把c:windows/php.ini文件.

此外php_error.log至少要有USER的修改和写权限,否则无法输出错误日志.


经常见到error_reporting(7)直意为:设定错误讯息回报的等级。

value   constant    
  1   E_ERROR      
  2   E_WARNING      
  4   E_PARSE      
  8   E_NOTICE      
  16   E_CORE_ERROR      
  32   E_CORE_WARNING      
  64   E_COMPILE_ERROR      
  128   E_COMPILE_WARNING      
  256   E_USER_ERROR      
  512   E_USER_WARNING      
  1024   E_USER_NOTICE      
  2047   E_ALL      
  2048   E_STRICT  
   
 然而7=1+2+4
就是出错时显示1 E_ERROR    2 E_WARNING      4 E_PARSE

 代码如下 复制代码
<?php
//禁用错误报告
error_reporting(0);
//报告运行时错误
error_reporting(E_ERROR | E_WARNING | E_PARSE);
//报告所有错误
error_reporting(E_ALL);
?>
今天打帮客户整理一个网站时发现在firefox提示:内容编码错误 无法显示您尝试查看的页面,因为它使用了无效或者不支持的压缩格式了,我一看客户是php站,导致原因可能是ob_gzhandler原因,下面我来总结了解决办法。

firefox错误码:

内容编码错误

无法显示您尝试查看的页面,因为它使用了无效或者不支持的压缩格式。

请联系网站的所有者以告知此问题

 
错误原因和解决办法:

1、保证php程序没有任何警告或出错的提示

2、PHP代码ob_start('ob_gzhandler')导致的,导致的原因有两种:
      a、服务器不支持这种压缩格式,可使用function_exists('ob_gzhandler')判断,解决方法 ob_start('ob_gzhandler')改为ob_start();
      b、使用ob_start('ob_gzhandler')时候前面已经有内容输出,检查前面内容以及require include调用文件的内容。若无法找到可以在调用其它文件前使用ob_start(),调用之后使用 ob_end_clean () 来清除输出的内容;

3、set_magic_quotes_runtime()函数:
提示:Function set_magic_quotes_runtime() is deprecated,导致这个提示的原因是在PHP5.3后此特性已经关闭,在PHP6中已经完全移除此特性,也就是这个函数已经不存在了。你可以注释 或者删除掉出错的行,或者是在set_magic_quotes_runtime()前面加@符号。

4、PHP5.30版本,默认不再支 持这样的语法,输出变量需使用php echo $username;?>语法才可以。你可以通过将 php.ini 中的 short_open_tag 设置为 On,以兼容原来的语法。

php关于ob_start('ob_gzhandler')启用GZIP压缩的bug

如果使用ob_start("ob_gzhandler");
则ob_clean()后面的输出将不显示,这是个bug,
可以用ob_end_clean();ob_start("ob_gzhandler"); 代替ob_clean();
否则后面输出内容将是空。
<?php
error_reporting(E_ALL);
ob_start("ob_gzhandler");
echo "content";
ob_clean();
echo "more content";
?>
上面的代码期望输出more content实际上什么内容也不会输出。

下面就正常了
<?php
error_reporting(E_ALL);
ob_start("ob_gzhandler");
echo "content";
ob_end_clean();
ob_start("ob_gzhandler");
echo "more content";
?>

下面自定义一个回调函数再测试
<?php
function my_ob_gzhandler($buffer,$mod){
   header("Content-Encoding: gzip");
   return gzencode($buffer, 9, FORCE_GZIP);
}

error_reporting(E_ALL);
ob_start("my_ob_gzhandler");
echo "content";
ob_clean();
echo "more content";
?>
上面是正常的,但使用ob_end_clean代替ob_clean后又会导致后面的输出不会显示。

因此即使是下面的代码依然会在使用ob_clean或者ob_end_clean后会导致输出为空。
<?php
if (ini_get('zlib.output_compression')) {
   if (ini_get('zlib.output_compression_level') != 9) {
      ini_set('zlib.output_compression_level', '9');
   }
   ob_start();
} else {
   if (strstr($_SERVER['HTTP_ACCEPT_ENCODING'], "gzip")) {
      ob_start("ob_gzhandler");
   } else {
      ob_start();
   }
}
?>

最稳定的启用页面压缩的方法应该类似下面
<?php
if(extension_loaded('zlib')) {
ini_set('zlib.output_compression', 'On');
ini_set('zlib.output_compression_level', '3');
}
?>

但如果一定要使用ob_gzhandler来启用页面压缩就要注意本文的第一句话了。

事实上,下面的代码只是浏览器不显示
error_reporting(E_ALL);
ob_start("ob_gzhandler");
echo "content";
ob_clean();
echo "more content";

但如果测试一下

telnet localhost 80
GET /test.php HTTP/1.0
<Enter>
<Enter>

将会返回如下信息

HTTP/1.1 200 OK
Date: Fri, 20 Feb 2009 15:40:17 GMT
Server: Apache/2.2.6 (Win32) PHP/5.2.5
X-Powered-By: PHP/5.2.5
Vary: Accept-Encoding
Content-Length: 12
Connection: close
Content-Type: text/html

more content

失去了跟主机的连接。

可以看出more content已经输出

 

[!--infotagslink--]

相关文章

  • Pytorch 的损失函数Loss function使用详解

    今天小编就为大家分享一篇Pytorch 的损失函数Loss function使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-02
  • php提示 Warning: touch() [function.touch]: Utime failed: Permission denied in错误

    在使用php程序时提示Warning: touch() [function.touch]: Utime failed: Permission denied in错误,下面一起来看看此问题的解决办法。 使用timthumb.php出现Warni...2016-11-25
  • Warning: mssql_connect() [function.mssql-connect]:

    我是这样做的,确定mssql是正常的用户名密码也可以,但下面就是不行。 <?php教程 $con=mssql_connect( "localhost", "sa ", "123456 ") or die ('error'); ?>...2016-11-25
  • Java8通过Function获取字段名的方法(获取实体类的字段名称)

    Java8通过Function获取字段名。不用再硬编码,效果类似于mybatis-plus的LambdaQueryWrapper,对Java8通过Function获取字段名相关知识感兴趣的朋友一起看看吧...2021-09-29
  • php CURLOPT错误Warning: curl_setopt() [function.curl-setopt]:...

    在我们使用php curl函数时提示Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir...2016-11-25
  • 精读《Vue3.0 Function API》

    这篇文章主要介绍了精读《Vue3.0 Function API》,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-05-20
  • Warning: mysql_num_rows():

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in F:\myweb\lzlj\cn.php on line 23 问题是你的mysql_query()时的sql出现...2016-11-25
  • Warning: mssql_query() [function.mssql-query]:

    Warning: mssql_query() [function.mssql-query]: message: 不能用 DB-Library(如 ISQL)或 ODBC 3.7 或更早版本将 ntext 数据或仅使用 Unicode 排序规则的 Unicode 数据...2016-11-25
  • Java8特性使用Function代替分支语句

    这篇文章主要介绍了Java8特性使用Function代替分支语句,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-09
  • iconv() [function.iconv]: Detected an illegal character in

    本文章来给大家介绍iconv() [function.iconv]: Detected an illegal character in 错误的几种解决办法,有需要了解的朋友可参考。 用iconv函数将gb2312转换为utf-8...2016-11-25
  • PHP Warning: implode() [function.implode]: Invalid

    今天在做一个小的采集发布接口时发现使用implode函数老提示出错,但在网上找了一下解决不了,后来仔细看一原因是写法错误了,当然因这个问题也学了不少东西下面给各位整理...2016-11-25
  • ASP.NET MVC @Helper辅助方法和@functons自定义函数的使用方法

    本文主要介绍ASP.NET MVC中使用@Helper和@functons自定义一些代码片段,方便视图调用,从而达到减少重复代码,快速开发的目的,希望对大家有所帮助。...2021-09-22
  • Warning: mysql_fetch_array():

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in $connect=mysql_connect("localhost","root","123") or die("无法连接...2016-11-25
  • 怎么利用register_shutdown_function判断php程序是否执行完

    php中的异常捕获没有java的强大,有些情况下,需要知道某段php程序业务是否正常执行完,可以用register_shutdown_function函数来辅助实现。掌握此函数,对php学习又提高了一...2017-01-22
  • C/C++: Inline function, calloc 对比 malloc

    以下是对c/c++中的malloc函数与calloc函数的区别以及它们之间的联系进行了介绍,需要的朋友可以过来参考下...2020-04-25
  • php 5.3 闭包语法介绍 function() use() {}

    PHP 5.3 加入了闭包语法,也就是匿名函数,允许开发者申明行内函数和在变量中保存。虽然这个语法和JavaScript的闭包相比有点怪异,但是对于PHP语言来说,这是一个良好的补充...2016-11-25
  • Binary-safe function

    二进制安全功能是指在一个二进制文件上所执行的不更改文件内容的功能或者操作。这能够保证文件不会因为某些操作而遭到损坏。二进制数据是按照一串0和1的形式编码的。...2016-11-25
  • 16种C语言编译警告(Warning)类型的解决方法

    由于编译的警告各种各样,根本不可以一一罗列出来,下面只是列举出比较典型的十六种警告,还有一些警告,大家只要根据字面意思,就可以很快的查找出来,并解决之。希望对大家有所帮助。...2020-04-25
  • PHP warning Illegal offset type错误解决办法

    下面是一个朋友在使用yii时碰到PHP warning Illegal offset type错误问题的解决办法,有需要的朋友参考一下。 一句话,错在用对象作为数组的键。比如说,以下代码就会...2016-11-25
  • Warning: mysql_free_result():

    我们的网站提示这样的错误,Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource 下面有三种情况: mysql_free_result的参数不对...2016-11-25