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把这个值调大一些就可以解决这个问题了。

继续阅读

PHP设置会话(Session)超时过期时间实现登录时间限制

最近某个PHP项目用到了限制登录时间的功能,比如用户登录系统60分钟后如果没有操作就自动退出,我搜索了网络收集了有以下方法可供参考。

第一种方法即设置php.ini配置文件,设置session.gc_maxlifetimesession.cookie_lifetime节点属性值,当然也可以使用ini_set函数改变当前上下文环境的属性值:

ini_set('session.gc_maxlifetime', "3600"); // 秒
ini_set("session.cookie_lifetime","3600"); // 秒

第二种方法即设置Session时间戳,比如下面的办法。

继续阅读

Windows XP环境下快速配置IIS+PHP详细过程

昨天帮朋友配置的IIS+PHP运行环境,今天我把详细步骤记录一下供备忘。

首先环境是Windows XP Professional系统,在这个系统下仅能安装IIS 5.1,其他系统的IIS配置大同小异这里就不多说了。

1. 准备XP原版光盘或者镜像并挂载

我们需要准备一个Windows XP Professional的原版光盘,如果有的话直接把光盘插入光驱即可,然后跳过这步,当然没有的话可以去下载个原版镜像,我这里提供个信息,因涉及版权问题,大家根据下面的信息网上找一下吧。

继续阅读

关闭PHP Credits和隐藏的GUID图片Logo彩蛋的显示

今天在查询PHP官方手册时有两个函数php_logo_guidzend_logo_guid引起了我的兴趣,其函数原型以及返回内容如下:

string php_logo_guid ( void );
// Returns PHPE9568F34-D428-11d2-A769-00AA001ACF42
string zend_logo_guid ( void );
// Returns PHPE9568F35-D428-11d2-A769-00AA001ACF42

这两个函数返回的以PHPE95..开头字符串,这个字符串有什么用呢?比如php_logo_guid手册举了一个例子:

< ?php
 
echo '<img src="' . $_SERVER['PHP_SELF'] .
     '?=' . php_logo_guid() . '" alt="PHP Logo !" />';
 
?>

如果一切正常的话,页面会输出一个PHP Logo,实际上图片地址存在任意的php页面后跟?=PHPE9568F34-D428-11d2-A769-00AA001ACF42这样的guid串,如果PHP是默认配置的话每个PHP页面都能找到,比如说有index.php,可以尝试访问index.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42,再看一下zend_logo_guid显示的图片,现在有些眼熟了吧,没错这些图片都被phpinfo()输出信息所调用。

我们可以在PHP 源码的 ext/standard/info.h 中找到相关标识图片GUID的定义:

继续阅读

Debian下使用apt-get安装 Nginx + MySQL + PHPMyAdmin 备忘

首先添加必要的apt源,并使用下面的命令使服务器保持最新:

apt-get update
apt-get upgrade

假设服务器没有配置Web服务和MySQL数据库,首先安装Web服务,这里首选Nginx:

apt-get install nginx

其次安装MySQL数据库,尝试使用下面的命令(其间可能需要交互输入密码):

apt-get install mysql-server

接下来简单介绍一下PHP的安装,这里使用FastCGI模式,仍然使用apt-get命令,配置来至lowendscript,其中部分配置对于小内存VPS进行了优化,建议按要求修改,例如PHP_FCGI_CHILDREN和PHP_FCGI_MAX_REQUESTS等参数值:

继续阅读

博客基本恢复运行

今天早上的MySQL的崩溃让我下定决心要升级老旧的MySQL,哪知道遇到了一堆麻烦的事情,也让我感到服务器升级前一定要慎重再慎重的重要性。

首先就是MySQL就够我折腾的了,升级到5.5版本,本来以为只需要apt-get install就可以解决的问题,但是出现了杯具的错误,首先是Unable to set password for the MYSQL root…This may happened because the account already has a password…subprocess installed post-installation script return error exit。然后mysqld守护进程启动失败!于是想是不是MySQL 5.1没有卸载干净?本来是想直接从5.1升级的,结果死活升级不了,于是使用apt-get dist-upgrade,但是提示需要REMOVE mysql-server,下定决心后按下y回车,然后老旧的MySQL华丽丽的被卸掉了。好了,后来我采取下面两句罗列并删除所有和mysql有关的package:

dpkg --get-selections | grep 'mysql-' | awk '{print $1}'
# purge表示清除配置文件,也就是彻底删除
apt-get purge package1 package2 ...

继续阅读

解决PHP加速器eAccelerator导致php-cgi占用内存过多的问题

一台小内存的VPS,总共才128MB保证内存(Guaranteed RAM),最大256MB的突发内存(Burstable RAM),今天调用free,发现内存占用达到150MB~170MB,这还了得,长期占用服务商的突发内存也会被K掉的,使用ps aux分析当前的进程列表,找到php-cgi这个进程占用了至少50MB~60MB的内存,这个是PHP的FastCGI服务,我已经将其控制在两个进程范围内了,除了master进程,另外一个php-cgi就占用了大量的内存,看来要好好精简一下了。

首先去掉不必要的扩展,一些当前站点并没有使用到的扩展程序,可以省略,这么一去除,感觉内存没下降多少,我又查阅了一下当前加载的扩展找到了eAccelerator,前面我写过一篇文章《Debian/CentOS VPS安装PHP加速器eAccelerator笔记》介绍关于eAccelerator,以及如何获取安装等信息。其实我们可以从其源代码包中找到control.php。将这个文件复制到Web服务器目录下,并且通过浏览器执行,得到一些关于eAccelerator的信息,其中一项Total memory标记的是32MB,下面还有个Memory in use标记的是50%左右已经使用,假如这时再浏览新的PHP页面,这个数据还将上升,直到占满Total memory为止。

继续阅读

解决PHP编译cURL的reinstall the libcurl问题

今天正好要用到PHP的curl功能,发现服务器上的PHP并没有配置curl,进而查询PHP官方文档,得知编译PHP时需要带上 –with-curl参数,才能把curl模块编译进去。我现在PHP已经编译安装进服务器了,不想再重新编译了,于是参考下面有网友评论的办法,单独编译curl模块,然后make install

首先需要下载官方的PHP源代码,然后定位到扩展目录下的curl,旧版本的PHP扩展目录可能是extensions,新版应该是ext。

cd /tmp
wget http://cn.php.net/get/php-5.3.10.tar.bz2/from/cn2.php.net/mirror
mv mirror php-5.3.10.tar.bz2
tar vxf php-5.3.10.tar.bz2
cd php-5.3.10/ext/curl
phpize
./configure
make install

继续阅读

隐藏Nginx和PHP版本号

配置完一台服务器后,并不是就可以高枕无忧了,前不久刚刚爆发的PHP 5.3.9版本的漏洞也搞得人心惶惶,所以说经常关注安全公告并及时升级服务器也是必要的。一般来说,黑客攻击服务器的首要步骤就是收集信息,比如说你的软件版本,这些将成为下一步有针对性攻击的依据。所以说一定程度的隐藏这些信息就显得非常有必要了,本文将简单介绍如何在网络上隐藏Nginx版本号以及PHP的版本号。

1.隐藏Nginx版本号,Nginx的版本号主要在两个地方会有,一个是HTTP header,有个Server:nginx/1.x.x类似会暴露Web服务器所用软件名称以及版本号,这个也是大多数Web服务器最容易暴露版本号的地方,第二个地方是Nginx出错页面,比如404页面没有找到等,这是如果用户没有指定页面的话,那么Nginx自己的页面会有版本戳记。

不过幸运的是对于这两个地方的版本号隐藏,Nginx都提供了简单的办法一步到位,参考server_tokens。通过在配置文件的http节配置server_tokens off来达到我们目的。

继续阅读

解决PHP下APC由pcre.h导致编译make failed问题

今天尝试着编译了PHP的APC模块,当然可以直接下载tgz压缩包然后编译安装,或者通过PECL命令安装,我这里选择pecl命令安装,首先输入pear命令检查是否已经安装了pear环境,如果没有则需要安装php-pear,当然这里pear和pecl两个命令是不一样的,不过都是安装的php-pear这个包。

1
2
3
# 安装pear
apt-get update
apt-get install php-pear

好了接下来可以通过下面的命令安装apc了:

1
2
3
4
5
# 安装apc
# 先检查一下是否在库里并获得一些信息
pecl search apc
# 正式安装
pecl install apc

安装时几个选项yes或者no,大家根据需要选择吧,接下来我要说下安装时遇到的问题,安装出现fatal error: pcre.h: No such file or directory错误:

继续阅读