php运行网站内存不足提示 Fatal error Allowed memory size

 更新时间:2016年11月25日 17:37  点击:1661
有些朋友新配置的环境或自己新写的程序运行时会碰到fatal error: Allowed memory size of 134217728 bytes exhausted错误了,这种问题一个是程序写得不好导致的,另一个是环境配置不好也会出现,像php5.1.27+apache2.2.3好像在windows2003中就会出现bug不管你怎么修复都无法解决Fatal error Allowed memory size 这个问题了,只在重启 配置 新环境与php版本才可以。

解决方法有多种,下面我根据不同权限的站长来介绍

有服务器管理权限可以修改php.ini文件

可以直接在 php.ini 把 memory_limit = 8M ; 调大至12M或更大。(注意:后面为M不是MB哦)

没有服务器管理权限

1.php中直接修改内存但需要你php支持ini_set函数,这个函数如果在php.ini禁止使用那么此方法将无效。

ini_set('memory_limit','12M');//当然可以设置为一个更大的值


2.htaccess方式,这种一般的空间主机都支持

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

<FilesMatch ".(php|html?)$">

php_value memory_limit 20000000

</FilesMatch>

注意:一般的话,8M是标准,但有些时候8M是不够用的。

友情提示:Fatal error: Allowed memory size of 8388608 bytes exhausted。表示配置的memory_limit值为8M。解决方法也是用上面介绍的方法来解决。memory_limit值要一点一点加调试成功即可

导入php中文乱码问题一般就是字符集编码问题了,只有字符集编码问题才会导致中文乱码了,这是我总结了所有在php开发中看到中文乱码问题的根本原因了,下面我整理了一些关于php中文乱码问题解决办法与例子,希望能解决各位的朋友哦。

1.mysql+php中文乱码

出现这种问题是数据库连接与网页编码不统一导致了

解决办法

在mysql 连接时我们在后面设置一句

mysql_query("SET NAMES GBK");

例子

在连接数据库的语句中.

 代码如下 复制代码

mysql_connect('localhost','user','password');

mysql_select_db('my_db');

mysql_query("set names 'utf8'"); //select 数据库之后加多这一句

2.PHP中文文件名输出乱码

出现文名乱码是我们环境不支持中文所导致了或编码问题我们只要进行转换字符编码为uft8即可

 代码如下 复制代码

$file_name="我的文件.jpg";
$file_name=iconv("utf-8","gb2312",$file_name);   //解决中文乱码问题
echo '$file_name';

3.json_encode中文乱码问题

1.json_encode UTF8码中文后的字符串不可阅读
2.json_encode 多级数组中文乱码问题
3.json_encode 数组中包含换行时错误问题
4.json_encode 数组中键为中文的问题

 代码如下 复制代码


function _encode($arr)
{
  $na = array();
  foreach ( $arr as $k => $value ) { 
    $na[_urlencode($k)] = _urlencode ($value); 
  }
  return addcslashes(urldecode(json_encode($na)),"rn");
}

function _urlencode($elem)
{
  if(is_array($elem)){
    foreach($elem as $k=>$v){
      $na[_urlencode($k)] = _urlencode($v);
    }
    return $na;
  }
  return urlencode($elem);
}

3.HTML内容编码

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />,这里我们指定了浏览器在解析HTML时使用UTF-8编码 。如果这里没有指定,浏览器会使用自己缺省的编码。不同的浏览器缺省编码会有所不同,比如IE6是GB2312,FireFox是UTF-8。所以,上面这段代码如果没有,在FireFox会显示正常,在IE6就会显示乱码。

4.php内容乱码

在php中我们只要在文件头加上

 代码如下 复制代码

<?php 
header("Content-type:text/html;charset=utf-8"); 

?> 

5.url中文乱码的兼容性

在url地址里出现中文参数,接收页面出现乱码,这个是经常遇到的问题

最基本的解决办法是链接里加上urlencode,接收页面会自动解码或者加上urldecode

但是有时候链接来自多个地方,有的意见urlencode了,有点没有

比如在谷歌浏览器(chrome)地址栏里敲入中文,传递的过程浏览器会自动给你编码

而IE核心缺不然

这就导致同一个接收页面在谷歌浏览器里可以正常显示,而在IE浏览器则是乱码。

解决方法:

 代码如下 复制代码

$keyboard2 = iconv("gb2312","UTF-8",$keyboard);

if($keyboard2)
$keyboard=$keyboard2;

6.htmlentities汉字中文乱码

htmlentities函数作用在汉字变量中的时候会出现乱码
 
$resultsText = str_replace("[QUERY]", htmlentities($(www.111cn.net)query), $resultsText);
 
正确的做法是改变htmlentities的默认参数

htmlentities($query,ENT_COMPAT,'UTF-8')

7.PHP下载文件名中的中文乱码

 代码如下 复制代码

$filename = "中文 文件名.txt";
$encoded_filename = urlencode($filename);
$encoded_filename = str_replace("+", "%20", $encoded_filename);

在使用php date函数获取当前日期时发现与我们正常的时间日期不符了,有几个小时差另了,那么此问题我要来如何解决呢?下面我来给各位详细介绍data日期不对解决办法。

例子。

echo $showtime=date("Y-m-d H:i:s");

2014-06-06 10:44:47

而真正的时间是

2014-06-06 18:44:47

从上面来看是相差8小时了,经过百度搜索发现是现,PHP默认设置的时间是以格林威治时区为标准的了,我们只要改成北京时间即可。

不能修改php.ini,则需要在关于时间的初始化的语句的上面加上 date_default_timezone_set (XXX);

能修改php.ini。那么你就可以将php.ini里的date.timezone = ??? 改成date.timezone = PRC

然后再测试

<?php
    date_default_timezone_set('PRC');//使用PHP的date函数获取时间之前,先将时区设置为北京时区
    echo "当前时间为:".date('Y-m-d H:i:s');//获取当前时间
?>

当前时间为:2014-06-06 18:44:47

在php中碰到中文文件名乱码一般都是初学者了,因为我们一般不会使用中文文名了,因为大家都知道php对中文支持不友好,那么我们要如何解决php中文文件名乱码问题呢?下面一聚教程小编给各位整理了一些方法,下面一起来看看。

原因是编码问题,所以要转码,用户PHP里面的 iconv 函数就可以解决:

iconv(“当前使用的编码如:utf-8″,”要转换的编码如:GB2312″,”文件名”);
实例:

 代码如下 复制代码

$file_name="我的文件.jpg";
$file_name=iconv("utf-8","gb2312",$file_name);   //解决中文乱码问题
echo '$file_name';

例子

 代码如下 复制代码

<?php
//执行创建中文名html文件
file_put_contents(PHPCMS_PATH.'test/'.iconv('UTF-8', 'GBK', '中文名').'.html', 'xxxxxxxxxxx');

?>

另一种解决中文乱码问题在于

 代码如下 复制代码

$sFileName = "sda.php";
$sOriginalFileName = $sFileName;
$sExtension = s str($sFileName, (strrpos($sFileName, '.') + 1));//找到扩展名
$sExtension = strtolower($sExtension);
$sFileName = date("YmdHis").rand(100, 200).".".$sExtension; //这样就是我们的新文件名了,全数字的不会有乱码了哦。

我们还可以使用urlencode来进行编译

如  urlencode('中文');

例子

 代码如下 复制代码

$file = "/tmp/中文名.tar.gz";

$filename = basename($file);

header("Content-type: application/octet-stream");

//处理中文文件名
$ua = $_SERVER["HTTP_USER_AGENT"];
$encoded_filename = urlencode($filename);
$encoded_filename = str_replace("+", "%20", $encoded_filename);
if (preg_match("/MSIE/", $ua)) {
 header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
} else if (preg_match("/Firefox/", $ua)) {
 header("Content-Disposition: attachment; filename*="utf8''" . $filename . '"');
} else {
 header('Content-Disposition: attachment; filename="' . $filename . '"');
}

header('Content-Disposition: attachment; filename="' . $filename . '"');
header("Content-Length: ". filesize($file));
readfile($file);

注意:我的服务器是windows xp、apache,估计xp字符集是gbk。因为我的php代码保存为utf-8格式的,在给文件名命名时会出现乱码的情况,所以可以用iconv()函数将原本的utf-8格式的文件名转换为gbk格式的。

比较悲剧的是今天使用了cdn+文件缓存,结果网站出现一些内容不正常了,我折腾了半天没发现问题于时重启了服务器,结果重启之后apache 弹出错误应用程序 httpd.exe,版本 2.2.22.0,错误模块 php5ts.dll提示了,我查看了一下系统日志发现一段长长的代码,如下所示

apache错误提示

事件类型: 信息
事件来源: Application Error
事件种类: (100)
事件 ID: 1004
日期:  2014-6-27
事件:  15:55:13
用户:  N/A
计算机: xxxx
描述:
报告队列中的错误: 错误应用程序 httpd.exe,版本 2.2.22.0,错误模块 php5ts.dll,版本 5.2.17.17,错误地址 0x000acde5。

有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
数据:
0000: 41 70 70 6c 69 63 61 74   Applicat
0008: 69 6f 6e 20 46 61 69 6c   ion Fail
0010: 75 72 65 20 20 68 74 74   ure  htt
0018: 70 64 2e 65 78 65 20 32   pd.exe 2
0020: 2e 32 2e 32 32 2e 30 20   .2.22.0
0028: 69 6e 20 70 68 70 35 74   in php5t
0030: 73 2e 64 6c 6c 20 35 2e   s.dll 5.
0038: 32 2e 31 37 2e 31 37 20   2.17.17
0040: 61 74 20 6f 66 66 73 65   at offse
0048: 74 20 30 30 30 61 63 64   t 000acd
0050: 65 35                     e5     

直接百度搜索问题

解决版本有两个:

1.复制php5ts.dll到apaceh的bin目录下或者系统目录下c:/windows/system32后,重启系统。

2.php目录下的libmysql.dll拷贝到到系统目录system32下就好了。

突然出这个问题也担心是中毒了所以对服务器进行了一些限制操作,在php.ini中加上了

disable_functions =  phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen

然后重启apache,问题解决了

[!--infotagslink--]

相关文章