Composer PHP Fatal error:Allowed memory size of

 更新时间:2016年11月25日 17:37  点击:1954
在使用composer update时遇到的,详细的错误消息Composer PHP Fatal error:Allowed memory size of 536870912 bytes exhausted了,下面来一起看问题解决办法


今天在运行composer update时遇到的,详细的错误消息如下:

$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
PHP Fatal error:  Allowed memory size of 536870912 bytes exhausted
(tried to allocate 32 bytes) in phar:///usr/local/Cellar/composer/
1.0.0-alpha8/libexec/composer.phar/src/Composer/DependencyResolver/
Rule.php on line 62
 
Fatal error: Allowed memory size of 536870912 bytes exhausted
(tried to allocate 32 bytes) in phar:///usr/local/Cellar/composer/
1.0.0-alpha8/libexec/composer.phar/src/Composer/DependencyResolver/
Rule.php on line 62
一直以为是网络原因,最近连接国外的网络不是很稳定,后来根据报错的信息Allowed memory size of 536870912 bytes exhausted提示知道可能是内存分配不够,大家知道在PHP的配置文件php.ini中有限制脚本运行内存的设置memory_limit把这个值调大一些就可以解决这个问题了。


memory_limit = 1G
当然大家也许不喜欢随随便便的改动配置文件php.ini,在帖子《Composer update runs out of memory #1898》Dynom给出了个临时的解决办法:

php -dmemory_limit=1G composer.phar update

如果你是碰到无法上传文件那么可能是目录权限地设置问题,但能上小文件无法上传大文件,这个就是php.ini或环境的配置问题,下文来给各位整理此类问题的解决办法。

php.ini无法上传大文件完美解决办法

1、打开php.ini(打开方式就不用说了,百度一大堆)

2、查找post_max_size
表单提交最大数值,此项不是限制上传单个文件的大小,而是针对整个表单的提交数据进行限制的
默认为8M,设置为自己需要的值,此参数建议要设置比upload_max_filesize大一些

3、查找File Uploads
是否允许通过http上传文件的开关,确认file_uploads = on

4、查找upload_tmp_dir
文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
如果系统报错提示有“XXX临时目录XXX”的话,这个目录就需要你来设置一个有效目录,没报错就不用管

5、查找upload_max_filesize
允许上传文件大小的最大值,默认为2M,设置为自己需要的值此参数建议不要超过post_max_size值,因为它受控于post_max_size值(就算upload_max_filesize设置了1G,而post_max_size只设置了2M时,大于2M的文件照样传不上去,因为它受控于post_max_size值)

6、如果要上传大于8M的文件,还需要对下面的参数也进行设置:

查找max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒),默认30秒
max_input_time = 600 ;每个PHP页面接收数据所需的最大时间,默认60秒
memory_limit = 8M ;每个PHP页面所需要的最大内存,默认8M

nginx法上传大文件完美解决办法


1.client_body_buffer_size 尽量设置的大点,这是基于速度的考虑,如果因为设置的过小,导致上传的文件老要写磁盘,那速度就太慢了。
2.client_body_temp_path 路径要有可写权限,这个是明显的错误了。改正了就好
3.client_max_body_size 设置上传文件的最大值,这个是基于安全的考虑,我们认为正常用户不会或者基本不会上传太大的文件。
可以设置为client_max_body_size 100m;  或者按照自己的业务来设置这个值。

例子

nginx的配置。

 代码如下 复制代码

 cd /export/servers/nginx/conf/nginx.conf,在这个配置文件里面的server段里面的

location / {

    root   html;

    index  index.html index.htm;

   client_max_body_size    1000m;

  }

 加上了client_max_body_size    字段,怎么重启都不行。后来在总配置文件里面发现了分配置文件:

 代码如下 复制代码

sendfileon;
    #tcp_nopush     on;
   
    #keepalive_timeout  0;
    keepalive_timeout  65;
     
    #gzip  on;
    include domains/*;
    #include domains/chat.local;
    #include domains/chat.erp.com;
    #include domains/support.chat.com;
    #include douains/chat.com;
   
    server {
listen       80;
server_name  localhost;

于是找到了分配置文件,在分配置文件里面进行修改。分配置文件配置如下:

 代码如下 复制代码
server
{
   listen   80;
   server_name  chat.erp.360buy.com;
#  access_log    /export/servers/nginx/logs/chat.erp.360buy.com;
   location / {
   proxy_pass     http://tomcat;
client_max_body_size    1000m;
     }
}

用/export/servers/nginx/sbin/nginx -s reload重启下,上传文件的大小受限的问题就解决了。
分享下我的解决过程,希望对大家有帮助。

如果还是无法解决我们需要看看是不是php表单设置问题

这段代码分为两个文件,一个为upload.html,一个是upload.php

upload.html

 代码如下 复制代码
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="hidden" name="max_file_size" value="100000">
<input name="userfile" type="file">  
<input type="submit" value="上传文件">
</form>

其中,

请注意<form enctype="multipart/form-data"……>这是一个标签,我们要实现文件的上传,必须指定为multipart/form-data,否则服务器将不知道要干什么。
值得注意的是文件upload.html中表单选项 MAX_FILE_SIZE 的隐藏值域,通过设置其Value(值)可以限制上载文件的大小。
MAX_FILE_SIZE 的值只是对浏览器的一个建议,实际上它可以被简单的绕过。因此不要把对浏览器的限制寄希望于该值。实际上,PHP 设置中的上传文件最大值,是不会失效的。但是最好还是在表单中加上 MAX_FILE_SIZE,因为它可以避免用户在花时间等待上传大文件之后才发现该文件太大了的麻烦。
upload.php

 代码如下 复制代码
$f=&$HTTP_POST_FILES['Myfile'];
$dest_dir=’uploads’;//设定上传目录
$dest=$dest_dir.’/’.date("ymd")."_".$f['name'];//设置文件名为日期加上文件名避免重复
$r=move_uploaded_file($f['tmp_name'],$dest);
chmod($dest, 0755);//设定上传的文件的属性
或者
<?copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);?>

以上范例中 $_FILES 数组的内容如下所示。我们假设文件上传字段的名称为 userfile(名称可随意命名)

出现failed to open stream: Permission denied in是apache运行用户没用权限去访问指定的文件了,所以导致目录文件打不开了。

在打开浏览器时提示

Warning: include(/global.php) [function.include]: failed to open stream: Permission denied in \index.php on line 21

Warning: include() [function.include]: Failed opening '/global.php' for inclusion (include_path='.;C:\php5\pear') in index.php on line 21

Fatal error: Class 'fl_global' not found in \index.php on line 22

从这么多错误提示中我们可以看出一句failed to open stream: Permission denied in了,意思是说没有权限访问这个问题

linux解决办法

linux下

chmod -R 777 ./dirname 赋予目录可写权限

chmod 777 ./filename 赋予文件可写权限.

windows 2003解决办法

我是apache用户所以只需要给apache用户权限就可以了(如果是iis用户还需要在iis中设置权限哦)

例子:右击www或web目录,然后在弹出点击“安全与共享”或“属性”也可以打开之后选择安全之类的,然后增加用户并设置访问用户的权限必须选中下图所示了,注意了,我们增加访问用户必须与apache目录是一样的才可以哦。

php include提示failed to open stream: Permission denied in错误

在安装一个网站时提示Fatal error: Call to undefined function openssl_x509_parse函数了,而函数openssl_x509_read是一个php内置的函数哦,这个函数像curl需要组件支持哦,我们需要在php.ini中打开相关配置即可

具体如下

网站提示 Fatal error: Call to undefined function openssl_x509_parse()  ......


解决办法

打开php.ini,找到这一行 ;extension=php_openssl.dll,将前面的“;”去掉

再重启apache或者iis即可

再打开网站错误不提示了,为了证明是openssl.dll没开启的原因我们可以运行

 代码如下 复制代码

<?php
$data = openssl_x509_parse(file_get_contents('/path/to/cert.crt'));

$validFrom = date('Y-m-d H:i:s', $data['validFrom_time_t']);
$validTo ) date('Y-m-d H:i:s', $data['validTo_time_t']);

echo $validFrom . " ";
echo $validTo . " ";

?>

这函数看看是不是没有问题哦。

同样今天在配置 apache+php环境时折腾了很久很久,后来成功了但发现验证码图片可以生成,在登录验证时发现session为空,并没有值了,那么碰到php 验证session无效问题如何解决呢,下面一起来看看过程。

环境,我用的是apache+php环境了

如我的程序代码如下

 代码如下 复制代码

<input name="username" type="text" class="input" id="username">
<input name="password" type="password" class="input" id="password">
<input name="ver" type="text" class="input1" id="ver" size="5">
<img src="../inc/ver.php" onclick="this.src='../inc/ver.php';" />

提交之后处理文件这post.php文件

if($_SESSION['ssioner']!=$ssever){
echo("<script>alert('验证码必须由4位数字组成!');history.back();</script>");exit;  
}

结果发现一直提示验证码必须由4位数字组成,我再打印输出session

echo  $_SESSION['ssioner'];exit;

一直为空了,于时我想到了php环境配置的一个session文件目录,现在我们找到php.ini配置文件找到

upload_tmp_dir

发现这个目录是

upload_tmp_dir="D:\www.111cn.net\tp"

我检查一下我的D盘发现只有www.111cn.net文件而没有tp目录了,这样问题就找到了,于时我创建一个tp目录,重启apache发现在tp目录有sess_i40gl0p4hfep5r69j67o1k26d01文件了,这样再重新登录发现成功了。

[!--infotagslink--]

相关文章