Fatal Error: Allowed memory size of 123456789 bytes exhausted

 更新时间:2016年11月25日 17:38  点击:1585
今天在运行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或更高的内存。

在php中urlencode()函数函数是把中文转换成字符串编码,这样就不会导致中文url在浏览器中打开乱码或出错的问题了,下面我来给大家介绍在使用 urlencode()编码是一些具体细节。

urlencode
(PHP 4, PHP 5)

urlencode — 编码 URL 字符串

Report a bug 说明
string urlencode ( string $str )
此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。

Report a bug 参数

str
要编码的字符串。

Report a bug 返回值

返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。

么是URLEncode:

本工具分别实现两种方式的Encode与Decode。

中文 -> GB2312的Encode -> %D6%D0%CE%C4
中文 -> UTF-8的Encode -> %E4%B8%AD%E6%96%87

Html中的URLEncode:
编码为GB2312的html文件中,
/中文.rar -> 浏览器自动转换为 -> /%D6%D0%CE%C4.rar
注意:Firefox对GB2312的Encode的中文URL支持不好,因为它默认是UTF-8编码发送URL的,但是ftp://协议可以,我试过了.我认为这应该算是Firefox一个bug.

编码为UTF-8的html文件中,
/中文.rar -> 浏览器自动转换为 -> /%E4%B8%AD%E6%96%87.rar

PHP中的URLEncode:

 代码如下 复制代码

//GB2312的Encode
echo urlencode(“中文-_. “).”n”; //%D6%D0%CE%C4-_.+
echo urldecode(“%D6%D0%CE%C4-_. “).”n”; //中文-_.
echo rawurlencode(“中文-_. “).”n”; //%D6%D0%CE%C4-_.%20
echo rawurldecode(“%D6%D0%CE%C4-_. “).”n”; //中文-_.
?>

除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。
urlencode和rawurlencode的区别:
urlencode 将空格则编码为加号(+)
rawurlencode 将空格则编码为加号(%20)

如果要使用UTF-8的Encode,有两种方法:


一、将文件存为UTF-8文件,直接使用urlencode、rawurlencode即可。
二、使用mb_convert_encoding函数。

 代码如下 复制代码

$url = ‘/中文.rar’;
echo urlencode(mb_convert_encoding($url, ‘utf-8′, ‘gb2312′)).”n”;
echo rawurlencode(mb_convert_encoding($url, ‘utf-8′, ‘gb2312′)).”n”;
//http%3A%2F%2Fud03.kinoko.name%2F%E4%B8%AD%E6%96%87.rar
?>

实例:

 代码如下 复制代码

function parseurl($url=”")
{
$url = rawurlencode(mb_convert_encoding($url, ‘gb2312′, ‘utf-8′));
$a = array(“%3A”, “%2F”, “%40″);
$b = array(“:”, “/”, “@”);
$url = str_replace($a, $b, $url);
return $url;
}
$url=”ftp://ud03:password@ud03.kinoko.name/中文/中文.rar”;
echo parseurl($url);
//ftp://ud03:password@ud03.kinoko.name/%D6%D0%CE%C4/%D6%D0%CE%C4.rar
?>

JavaScript中的URLEncode:

 代码如下 复制代码

%E4%B8%AD%E6%96%87-_.%20%E4%B8%AD%E6%96%87-_.%20

encodeURI 不对下列字符进行编码:“:”、“/”、“;”、“?”、“@”等特殊字符。

 代码如下 复制代码

/%E4%B8%AD%E6%96%87.rarhttp%3A%2F%2Fud03.kinoko.name%2F%E4%B8%AD%E6%96%87.rar


Note:

注意:小心与 HTML 实体相匹配的变量。像 &amp、&copy 和 &pound 都将被浏览器解析,并使用实际实体替代所期待的变量名。这是明显的混乱,W3C 已经告诫人们好几年了。参考地址:» http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2。

PHP 通过 arg_separator.ini 指令,支持将参数分割符变成 W3C 所建议的分号。不幸的是大多数用户代理并不发送分号分隔符格式的表单数据。较为简单的解决办法是使用 &amp; 代替 & 作为分隔符。你不需要为此修改 PHP 的 arg_separator。让它仍为 &,而仅使用 htmlentities() 或 htmlspecialchars() 对你的 URL 进行编码。

今天在使用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

今天在利用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);
?>
[!--infotagslink--]

相关文章