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

继续阅读

ASP/VBScript巧用CAPICOM实现随机数、Hash(MD5/SHA1)和Base64编解码

其实很早就想介绍这个Windows内置的ActiveX/COM组件,我前面有一篇文章介绍如何借用.NET Framework实现类似于SHA1和MD5哈希算法,如果大家对此感兴趣也可以看一下。

好,言归正传,今天我要介绍的是如何让VBScript利用Windows原生自带的CAPICOM组件来实现随机数、Hash(MD5/SHA1)以及Base64算法,当然在VBScript的世界里,这些算法都有免组件的纯代码实现,当然使用组件的好处就是代码简洁和运行效率的提高,所以我们不妨尝试一下。
既然今天介绍的主角是CAPICOM,当然我们要推荐参考微软的MSDN文档,大家不妨先大致浏览一番,可能大家很快发现下面这段提示:

CAPICOM is a 32-bit only component that is available for use in the following operating systems: Windows Server 2008, Windows Vista and Windows XP. Instead, use the .NET Framework to implement security features.

继续阅读

PHPWord解决中文乱码并导出生成Word2007(docx)格式文档

最近一个项目开发要用到PHP技术导出Word文档,比较了几种方案,首先是使用Microsoft Office自带的ActiveX/COM组件,比如Word.Application,这种方式的优点是格式兼容度高,可以生成纯doc的Word2003格式文档,缺点一是比较占资源(调用会启动一个WINWORD.EXE进程),不适合Web多用户访问使用;二是PHP这种Web开发技术大多数是跑在Linux服务器上,当然也就无法使用Windows下的技术了,平台可移植和兼容性不好。第二种生成Word的方案是生成Word兼容的网页格式,然后以Word方式打开,这种方案总体上感觉怪怪的,毕竟文件格式是HTML的,而且格式兼容度不好,不过这种方式的优点是节省服务器资源,能够快速生成;最后一种方案也就是今天的主角,采用PHPWord生成Word2007(docx)格式的文档,现在基本上微软Office Word 2003以后的版本均兼容这种格式了,对于2003版本来说,仅需要下载安装个兼容格式包(下载地址),也能正常打开这类文件,当然如果你使用的是最新版本的Office(包括但不限于Office 2007、Office 2010)则不需要安装此格式包。

继续阅读

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时间戳,比如下面的办法。

继续阅读

MySQL TIMESTAMP column with CURRENT_TIMESTAMP

在部署程序时遇到的一个问题,MySQL定义举例如下:

CREATE TABLE `example` (
  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `lastUpdated` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

这段SQL是我从项目中摘取出来的,在测试机器上一切正常,但是部署到生产机器上MySQL报错:

ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause.

继续阅读

浅议Web在线交易系统涉及的安全场景

之前一次课程的作业,我想存着还不如贴出来供大家拍砖。当然很多是一些个人想法,可能叙述得比较乱,不当之处还望批评指正。

现有的简单的在线交易场景如下图所示:

简单在线交易流程示意图

其中涉及到的数据安全和个人隐私主要有:客户账户和密码,信用卡及相关个人信息。

继续阅读

Cookie安全及Cookie跟踪技术导致个人隐私的泄漏

这篇文章是我所选修课程的作业,简单介绍了XSS、Cookie、Web安全威胁和个人隐私泄露问题,个人见解仅供参考,如有不当之处还望批评指正。

大家上网肯定对于HTTP并不陌生,完整的网址开头大多就是以http://开始的(当然不全是,加密的SSL浏览技术的网址是以https://开头的),HTTP表明的就是Hypertext Transfer Protocol超文本传输协议,大多数网页就靠它传输并呈现在我们的面前了。

现在的问题在于HTTP是建立在TCP/IP基础上的,我们知道TCP/IP协议是无状态协议(Stateless),这里的无状态就是说TCP/IP协议不保存连接的客户端的状态,更通俗一点是TCP/IP比较健忘,比如刚才客户端通过TCP/IP对服务器发送了一条消息,然后断开连接后再一次的连接服务器再发一条消息,这里同样的客户端,服务器并不知道这两条消息来自同一客户端,每次连接的建立服务器将认为是新客户端发起的请求。

继续阅读

Python利用htpasswd配置mini_httpd的基本认证授权(Authorization Basic)

前面我讲解了如何将树莓派(Raspberry Pi)打造成无线路由,感觉每次通过命令ssh管理显麻烦,于是自己动手编写Web界面,主要是使用Python编写的CGI程序,这里用到了mini_httpd这款轻量的Web服务器,本来想装nginx的,但是想想还是精简一些吧,毕竟资源有限,况且Web管理界面仅我一个人访问。

CGI应用跑起来了,但问题来了,如何实现普通路由的那种打开页面就弹出输入用户名密码的对话框?

这里主要用到HTTP协议的一个知识,那就是HTTP基本认证

继续阅读

解决客户端AJAX脚本失效或禁用导致显示JSON的问题

今天浏览oschina.net的《网站出bug了??还是被人黑了啊??》发现的这个问题,发表评论采用了Ajax技术,但是直接提交Ajax没有起作用,导致返回了原本由JavaScript处理的JSON结果,出现这种情况多数是因为页面JavaScript加载失败或者用户禁用了脚本所致,回想到我以前的设计,有个小技巧可以解决这个问题,现与大家分享下:

基本思路就是在Ajax提交前加入自定义的HTTP请求header,然后结果处理页判断是否有这个header,如果有就说明对方是通过Ajax提交的数据,显示JSON结果;如果没有则说明Ajax没有起作用,然后就直接输出用户友好的标准结果页。

继续阅读

利用SQL注入获得教育考试院查询中心管理员账户密码

突然想起年初时到某省教育考试院查询考试成绩无意间发现的漏洞,通过漏洞可以获取管理员账号和密码哈希,后来提交到WooYun网站了,过了很长时间没有关注这个事情,今天偶然想起,于是去看看厂商处理得怎么样,当时漏洞提交的地址在《江苏教育考试院查询中心查询中心管理员账号密码泄露漏洞》,看样子厂商早已经修复了,漏洞细节早已经公开,我在这里再叙述一遍留作备忘吧。

漏洞所在URL地址http://stat.jseea.cn/jseea_query/input.do?catlog=1&database=21%2Cdb_169,通过测试猜测到江苏省教育考试中心查询系统采取分数据库操作,各个数据库的选择通过Query String参数database来实现,其中以database=21%2Cdb_169为例,21表示查询模板(用于生成各类表单供用户填写),%2C表示编码的逗号,db_169表示数据库名称,上述解码后为21,db_169,当数据库名称不存在时构造SQL语句出现错误,程序崩溃(显示Java错误)可以看到SQL语句:

继续阅读