php exec函数无法执行的问题

本文的测试环境为windows7+php5+apache,使用casperjs对网页进行截图。主要症状是在windows的dos窗口执行casperjs --version命令没有问题,但是在php文件中,使用:

exec('casperjs ' . $filename . $argments. ' 2>&1', $output, $val);

总是没有结果。可以使用以下方法排查:

首先在命令行之后加入 2>&1 把控制台显示的提示信息输出来,查看到底是什么错误。设置后发现是系统无法识别casperjs命令,提示不是有效的命令。

检查windows的环境变量,确保系统下的PATH而不是用户下的PATH中包含casperjs和phantomjs的命令路径,windows xp的系统环境变量需要重启电脑后才能生效,另外此时也需要重启apache服务器才能看到修改后的效果,可以使用:

echo exec('echo %PATH% 2>&1', $output);

查看是否含有casperjs和phantomjs的路径,如果存在就进行下一步。

再次执行上一个命令,如果仍然提示不是有效的命令,需要将caperjs.exe的用户组中加入IUSR_***,并赋予执行和读取权限。

再次执行,结果出现,完美。

部署android环境遇到的几个问题

1.Eclipse没有自动换行功能,需要安装插件:

安装方法:
使用 Eclipse 的自动升级功能(【 Help 】→【 Sofeware updates 】→【 Find and Install 】→【 search for new features to install 】,点击【 New Remote Site 】按钮),在“ Name ”中填入“ wordwrap ”,“ URL ”中填入“ http://ahtik.com/eclipse-update/ ”

 

2.更新SDK的好地方:http://www.androiddevtools.cn/

化工大学镜像: ubuntu.buct.edu.cn  80端口

 

3. Eclipse主题的插件:

http://eclipse-color-theme.github.io/update/

IIS突然出现Service Unavailable错误

服务器一直正常运行,今天突然打电话说,出现了Service Unavailable错误。而且另一方网管说是系统资源吃紧了,服务不过来的原因。

直接重启IIS,肯定会释放进程池资源,不过重启过后没有改变。这时查日志就是最好的了。

打开系统日志,发现默认应用进程池无法启动,原因是HTTP 筛选器 DLL C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_Rewrite.dll 加载失败, 明白了原因,就去干掉它。在web扩展里试图删除这个rewrite,一直不行,后来发现对整个默认网站的筛选器去掉这个rewrite扩展,重启IIS后就可以访问了。


为什么会加载失败呢?一般原因就是权限问题,更改ISAPI_Rewrite.dll权限,加入Service组。

似乎更改之后并没有太大用处,程序本身又没有用rewrite,索性删掉了。

这又是一个开始

博客写了很多了,理念也一直再变。以前觉得功能要强大,现在觉得要简洁,要简洁!简洁才是极致的优雅。

以前搭了个博客叫 u9blog.cn,现在看来这么奇葩的名字我竟然会注册?后来我在想大约对事物的认识和理解在迅速变化。所以才有重大的改变。

后来我又搭建了一个博客,叫 ifixedbug.com, 我把这个名字告诉吴俊,吴俊觉得这个名字很吊,想拿去用。本来我觉得这个名字一般,突然他觉得好,我自然内心也觉得很好了。然后让他帮我备了案,我拿来用stblog架了博客,感觉还是挺不错的。

我想自己用Codeigniter写个blog程序,自己写的好处是可以随便改,知道是怎么一个设计过程,可以个性化定制,啥都能做。程序员的偏执在于看不惯别人的写法和架构,总是认为别人的代码不够优雅,架构很屎,设计很烂。其实这都是无关乎大雅的问题,让你自己去写你也未必真能写出来。因为你也会觉得没时间,没精力,你也知道哪里写的不好,不过你真的不想再去修改它了,你当初的激情已经完成被释放了。

所以,不管了,就先用Stblog吧,这个程序算是我的启蒙程序,当时我写arimlab.com的代码时,依照stblog,依葫芦画瓢,终得一个还可以看的cms系统,虽然问题多多,功能简单。对stblog的感激还是有的,原作者已经不再更新该blog,好像回国去了广州创业了。所幸有新的粉丝把它升级成2.0以上,我觉得还不错,除了UI需要再设计一下外。

感谢某boy给我推荐了CI,感谢CI带来了stblog,感谢stblog让我进入了php世界,虽然我还是一个菜鸟。

CSS之Position详解

CSS的很多其他属性大多容易理解,比如字体,文本,背景等。有些CSS书籍也会对这些简单的属性进行大张旗鼓的介绍,而偏偏忽略了对一些难缠的属性讲解,有避重就轻的嫌疑。CSS中主要难以理解的属性包括盒型结构,以及定位。正如positioniseverything,本文将主要讲述关于position的理解,力求让您看完本文后对position有着最全面的认识。

position的四个属性值:

    relative
    absolute
    fixed
    static

下面分别讲述这四个属性。

<div id="parent">
     <div id="sub1">sub1</div>
     <div id="sub2">sub2</div>
</div>




1. relative

relative属性相对比较简单,我们要搞清它是相对哪个对象来进行偏移的。答案是它本身的位置。在上面的代码中,sub1和sub2是同级关系,如果设定sub1一个relative属性,比如设置如下CSS代码:

#sub1
{
    position: relative;
    padding: 5px;
    top: 5px;
    left: 5px;
}




我们可以这样理解,如果不设置relative属性,sub1的位置按照正常的文档流,它应该处于某个位置。但当设置sub1为的position为relative后,将根据top,right,bottom,left的值按照它理应所在的位置进行偏移,relative的“相对的”意思也正体现于此。

对于此,您只需要记住,sub1如果不设置relative时它应该在哪里,一旦设置后就按照它理应在的位置进行偏移。

随后的问题是,sub2的位置又在哪里呢?答案是它原来在哪里,现在就在哪里,它的位置不会因为sub1增加了position的属性而发生改变。

如果此时把sub2的position也设置为relative,会发生什么现象?此时依然和sub1一样,按照它原来应有的位置进行偏移。

注意relative的偏移是基于对象的margin的左上侧的。

2. absolute

这个属性总是有人给出误导。说当position属性设为absolute后,总是按照浏览器窗口来进行定位的,这其实是错误的。实际上,这是fixed属性的特点。
当sub1的position设置为absolute后,其到底以谁为对象进行偏移呢?这里分为两种情况:

(1)当sub1的父对象(或曾祖父,只要是父级对象)parent也设置了position属性,且position的属性值为absolute或者relative时,也就是说,不是默认值的情况,此时sub1按照这个parent来进行定位。

注意,对象虽然确定好了,但有些细节需要您的注意,那就是我们到底以parent的哪个定位点来进行定位呢?如果parent设定了margin,border,padding等属性,那么这个定位点将忽略padding,将会从padding开始的地方(即只从padding的左上角开始)进行定位,这与我们会想当然的以为会以margin的左上端开始定位的想法是不同的。

接下来的问题是,sub2的位置到哪里去了呢?由于当position设置为absolute后,会导致sub1溢出正常的文档流,就像它不属于 parent一样,它漂浮了起来,在DreamWeaver中把它称为“层”,其实意思是一样的。此时sub2将获得sub1的位置,它的文档流不再基于 sub1,而是直接从parent开始。

(2)如果sub1不存在一个有着position属性的父对象,那么那就会以body为定位对象,按照浏览器的窗口进行定位,这个比较容易理解。

3. fixed

fixed是特殊的absolute,即fixed总是以body为定位对象的,按照浏览器的窗口进行定位。

4. static

position的默认值,一般不设置position属性时,会按照正常的文档流进行排列。