背景:一天突然发现访问网站特别的慢,怎么办?原因是啥,不知道,此时,祭出CURL,加上相关的数据输出,特别是对于DNS慢这种问题最难查,居然被我碰到了,time_namelookup 这个参数很重要,DNS解析时间,从请求开始到DNS解析完毕所用时间(记得关掉 Linux 的 nscd 的服务测试),当然,查dns更为直观的是用curl的-H参数(http://jackxiang.com/post/4423/),不用dns解析时的一个指标,再就是用dns解析的一个指标,一对比就出来了,该命令在windows下使用也没问题。
DNS解析时的时间:

5.011:5.011:5.020:5.020:
不用DNS相当于写死Host解析时的办法:

0.003:0.003:0.026:0.026

time_namelookup时间5.011太长了,说明DNS有问题,一查果然有问题,由于此内网DNS解析了单位办工机器,还解析线上服务器内部域名,压力太大导致,为此,新加了一台dns服务器,减轻压力,解析的速度上去了,也就好了。

相关参数解释:
time_connect  建立到服务器的 TCP 连接所用的时间
time_starttransfer  在发出请求之后,Web 服务器返回数据的第一个字节所用的时间
time_total  完成请求所用的时间
time_namelookup  DNS解析时间,从请求开始到DNS解析完毕所用时间(记得关掉 Linux 的 nscd 的服务测试)
speed_download  下载速度,单位-字节每秒。(注意它是字节)
[/codes]

来个实例:

加上字节:



time函数实现时间:




粘贴好像会报错,直接给个DownLoad:

sh curlExecuteTime.sh  -n 12 "http://localhost"
**春(**春) 11:11:56
time_connect: 0.001
time_namelookup: 0
time_total: 0.01419
**春(**春) 11:12:18
这个结果按说是没问题的吧
向东(向东) 11:12:34
没问题,你要想获取接口返回修改下这儿:curl -o /dev/null -s -w \
向东(向东) 11:12:42
它定向到null了。
向东(向东) 11:21:16
c=`curl -o /tmp/$i.txt -s -w \
这样就可以在tmp下生成1.txt 2.txt了,呵呵。
DownLoad:




零:可以直接用shell实现,用vim列模式/行模式进行批量输入,当然也可以用shell的for循环,如出现301错误需要输出头-i,如下:


一:PHP下的Curl获取时间 :


二:Shell下的curl原理:
curl -o /dev/null -s -w '连接时间:%{time_connect},传输时间:%{time_starttransfer}:%{time_total}' "http://jackxiang.com"

POST示例(不用-o写入文件,直接看):

用法及返回结果如下:
lvyaozu@lvyaozu-desktop:~/shell$ ./requesturl.sh -n20 http://www.baidu.com
Request url: http://www.baidu.com
Request number: 20
Request Failed: 0
——Average Value——
time_connect: 0.1614
time_total: 0.1693
time_namelookup: 0.0088
————————-
请求参数:
-n 指定发送多少次请求,默认为10
返回结果为 curl -w 选项返回值,以下摘自curl官方文档:
http://curl.haxx.se/docs/manpage.html
time_connect The time, in seconds, it took from the start until the TCP connect to the remote host (or proxy) was completed.
time_total The total time, in seconds, that the full operation lasted. The time will be displayed with millisecond resolution.
time_namelookup The time, in seconds, it took from the start until the name resolving was completed.
代码如下:


我的实践如下:
sh curlExecuteTime.sh  -n 12 "http://jackxiang.com/getAlbumsByUId?appkey=100&userid=21240168&sortby=hot"
Request url: hhttp://jackxiang.com/getAlbumsByUId?appkey=100&userid=21240168&sortby=hot
Request number: 12
Request Failed: 0
------Average Value------
time_connect: 0.001
time_namelookup: 0.001
time_total: 0.0760833
-------------------------

来自:http://renxiangzyq.iteye.com/blog/782773



1、开启gzip请求
curl -I http://www.sina.com.cn/ -H Accept-Encoding:gzip,defalte

2、监控网页的响应时间
curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" "http://www.kklinux.com"

3. 监控站点可用性
curl -o /dev/null -s -w %{http_code} "http://www.kklinux.com"

4、以http1.0协议请求(默认为http1.1)
curl -0 ..............


监控站点首页下载时间:

curl -o /dev/null -s -w ‘%{time_total}’ http://www.miotour.com

curl -o /dev/null -s -w ‘%{http_code}’ http://www.miotour.com

curl -o /dev/null -s -w %{http_code}:%{time_connect}:%{time_starttransfer}:%{time_total} http://www.miotour.com

结果:2.547

-s 静默输出;没有-s的话就是下面的情况,这是在脚本等情况下不需要的信息。

[ec2-user@ip-10-122-250-19 ~]$ curl -o /dev/null  -w ‘%{time_total}’ http://www.miotour.com
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100 67770    0 67770    0     0  19228      0 –:–:–  0:00:03 –:–:– 20705
结果:3.524
监控首页各项时间指标:

curl -o /dev/null -s -w ‘%{time_connect}:%{time_starttransfer}:%{time_total}’ http://www.miotour.com

结果:                                                0.244:                             1.044:                         2.672

时间指标解释 :

time_connect    建立到服务器的 TCP 连接所用的时间

time_starttransfer    在发出请求之后,Web 服务器返回数据的第一个字节所用的时间

time_total   完成请求所用的时间

在 发出请求之后,Web 服务器处理请求并开始发回数据所用的时间是

(time_starttransfer)1.044 - (time_connect)0.244 = 0.8 秒

客户机从服务器下载数据所用的时间是

(time_total)2.672 - (time_starttransfer)1.044 = 1.682 秒

指定特定主机IP地址访问网站

curl -x 61.135.169.105:80 http://www.baidu.com

curl -x 61.135.169.125:80 http://www.baidu.com


摘录来自:http://blog.163.com/dingding_jacky/blog/static/166912787201242440274/
Nginx里有一个PHP的接口,发现是PHP的超时,于是经过strace时发现:


经过xdebug发现它是由于数据库访问这个函数超时引起的,有5秒到15秒之多,但是把这个SQL贴在终端里访问,发现它很快才几毫秒。
用下面的sleep代码也能形成TimeOut,如下:


我在想,是192.168.109.8访问192.168.109.7上中间有时会有波动造成的,还是因为PHP连接时超时呢?需要进一步了解啊。



有一个域名反解的配置把这个去掉:
skip-name-resolve

修改配置文件添加并需要重启:



修改my.cnf的配置文件添加并需要重启,试试:
[mysqld]
skip-name-resolve


感觉通过一个脚本访问好像好了,需要时间验证,脚本:
http://www.jackxiang.com/post/6421/

nginx里的keepalive-timeout选项

  此选项说的是可使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,keepalive-timeout功能可避免建立或重新建立连接。

  涉及的选项还有stub_status on,能看到waiting值也和keepalive-timeout设置有关
nginx不像apache,直接有指令keep-alive off/on;它使用的是keepalive_timeout [time],默认的时长为75,可以在http、server、location使用此指令。
在本机进行的模拟测试:
nginx.conf
keepalive_timeout 600;
curl -i Url //i 显示Http头
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 05 Jun 2013 07:57:06 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: no-cache
Pragma: no-cache



nginx.conf指定的VHOST中添加了规则:
location /gtj/ {
    alias C:/phpApp/gtj/;
    keepalive_timeout  0;
    expires 5m;
}
客户端请求后,可以用httpwatch抓取返回的头部信息:
Http头:
connection close

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 05 Jun 2013 07:59:40 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: close
Vary: Accept-Encoding
Cache-Control: no-cache
Pragma: no-cache


阅读全文
背景:缩进使用4个空格,而不是 tab。这是PHP编程规范手册中的一句话。

     今天重装了一下Zend Studio,在编码时发现回车缩进是tab制表符,颇为不爽,记得很久很久以前哥写代码是不缩进的,后来经老师提醒,改用tab缩进,一直这样编码了很长时间。后来看到一篇介绍代码格式的文章才知道各类文本编辑器对于tab制表符的长度规定不一样,这就导致同样缩进的代码在不同系统或者编辑器上缩进长短不一,影响代码风格的一致性。所以推荐用空格取代tab,一般取4个空格,这样代码就美观多了。

实践Ok如下:
在编辑器里,窗口->首选项->PHP->code style->formatter->Edit->Indentation->General settings Tab size: 4.

参考来自:http://wangye.org/blog/archives/541/
==========================================================================================
editplus中tab转换为空格:
缩进使用4个空格,而不是 tab。这是PHP编程规范手册中的一句话。
之所以这样,是因为tab在不同的编辑器代表的空格是不一样的,为了排版不出现混乱,规范中建议直接使用空格。
但是直接用空格的话,我们在写代码的时候经常会需要缩进,不用TAB的话工作量是巨大的。

其实,我们完全可以用EditPlus解决这个问题。

写代码的时候放心去用TAB,写完代码后,用鼠标选择全部代码,右击->format(格式)->tabs to spaces(制表符转为空格),这样就可以把所有的tab改为spaces了。

实践Ok如下:
右键,格式,制表符转为空格。

来自:http://hi.baidu.com/amenmen/item/e7c9588eca8f48d65f0ec120
=========================================================================================
Notepad++
设置->首选项->语言->右下角,以空格取代打勾。
来自:http://bbs.phpchina.com/thread-220762-1-1.html
=========================================================================================

在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:
set ts=4  (注:ts是tabstop的缩写,设TAB宽4个空格)
set expandtab

对于已保存的文件,可以使用下面的方法进行空格和TAB的替换:
TAB替换为空格:
:set ts=4
:set expandtab
:%retab!

空格替换为TAB:
:set ts=4
:set noexpandtab
:%retab!

加!是用于处理非空白字符之后的TAB,即所有的TAB,若不加!,则只处理行首的TAB。

在.vimrc文件中输入如下文本:
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab
set nu
set autoindent
set cindent

其中:Tabstop:表示一个 tab 显示出来是多少个空格的长度,默认 8。
Softtabstop:表示在编辑模式的时候按退格键的时候退回缩进的长度,当使用 expandtab 时特别有用。
Shiftwidth:表示每一级缩进的长度,一般设置成跟 softtabstop 一样。 当设置成 expandtab 时,缩进用空格来表示noexpandtab 则是用制表符表示一个缩进。
Nu:表示显示行号。
Autoindent:表示自动缩进。
Cindent:是特别针对C语言自动缩进。

来自:http://blog.163.com/panda_sha/blog/static/478281962011616124316/

==========================================================================================
在eclipse中设置tab的长度:
在eclipse中设置tab size的地方有多个
1:window——preference——General——Editor——Text Editor设置页面:Display Tab Width
2:window——preference——Java——Code Style——Formatter设置页面,Edit,在弹出的Editor profile窗口中,Indentation卡片,设置Indentation Size和Tab Size。
3:如果安装了Myeclipse,那么在window——preference——Myeclipse——Editor——Common Editor Preference中Apperance卡片,设置Tab Size。

来自:http://taoistwar.iteye.com/blog/369956
背景:很多PHPer想PHP也像Java / c++ 一样能支持多线程,于是就有了,在新的版本里加了这样一个扩展,之所以它能行,因为Linux本身就支持,用C扩展一下就可以了,这样用到底成熟不,还是值得时间和对这种应用的需求程度进行检验。

扩展地址:
http://pecl.php.net/package/pthreads

阅读全文
膘叔(19129***)  上午 09:51:54
求科谱:msg_stat_queue中,那个qnum最大只有40,也就是我同时只能最大处理40个队列,能不能再大一点?
维尼熊(380139***)  上午 09:53:19
可以
膘叔(19129***)  上午 09:53:37
怎么调整?
维尼熊(380139***)  上午 09:53:52

/proc/sys/fs/mqueue/msg_max

[root@test ~]# cat /proc/sys/fs/mqueue/msg_max
10

阅读全文
经常在运行php程序的时候,想知道某个程序到底运行了多久。这样可以查找一些程序运行的效率问题。
一)最近写了一个程序运行的时间计算类,供大家参考:


调用:


二)不用配置Host得到该测试机的访问速度:

如:我想测试一下那个Host为:C:\Windows\System32\drivers\etc\hosts
72.46.130.186  jackxiang.com 的访问速度,用PHP可以用如下代码:


参考来自:http://luzhongxi.blog.163.com/blog/static/200944287201210268201082/


背景:外包项目代码审查主要是对delete相关,where里的索引,再就是对相关函数的检查,其SQL注入等,一般框架有很好的支持和过滤,这块弱化,但上线得提交一下安全扫描来弥补,对这些函数最好是用linux的grep来实现,简单点的如下:。

更详细的去svn目录的(新版本的svn好像没有了),最好去那个开发的目录grep,否则出一堆乱七八糟的东东出来:

当然也可以自己编写脚本实现,用一个系统来完成也成。
阅读全文
在某个项目中需要分析 PHP 代码,分离出对应的函数调用(以及源代码对应的位置)。固然这使用正则也可以实现,但无论从效率还是代码复杂度方面考虑,这都不是最优的方式。

查询了 PHP 手册,发现实在 PHP 已经内置解析器的接口,那就是 PHP Tokenizer,这工具正是我想要的。使用 PHP Tokenizer 能简单、高效、正确的分析出 PHP 源代码的组成。

实例:



---------- 调试PHP ----------
1 - T_OPEN_TAG  <?php
1 - T_ECHO  echo
1 - T_WHITESPACE  
1 - T_CONSTANT_ENCAPSED_STRING  "string1"
1 - T_CONSTANT_ENCAPSED_STRING  "string2"
1 - T_WHITESPACE  
1 - T_CLOSE_TAG  ?>

输出完成 (耗时 0 秒) - 正常终止

参考:http://php.mirror.camelnetwork.com/manual/zh/ref.tokenizer.php
目录情况:里面的php文件都在下面
root@192.168.136.128:~/software/xhprof-0.9.2# ls
CHANGELOG  CREDITS  examples  extension  LICENSE  README  xhprof_html  xhprof_lib
文件来源:把上面的文件都放在/data0/htdocs/tools.jackxiang.com/xhprof/下
Host:192.168.136.128  tools.jackxiang.com
htdocs:/data0/htdocs/tools.jackxiang.com
访问地址:
http://tools.jackxiang.com/xhprof/xhprof_html/index.php?run=528c8c8a00e2b&source=hx
程序编写:

访问:http://tools.jackxiang.com/index.php



背景:以前用xdebug,现在听群里说有这么个玩意,是轻量级的,于是找了下,说是这xhprof比xdebug提示更明显,前面有一篇文章说过,我在此也再作下备注。
有人说自从xhprof出来之后分析PHP性能方便多了
以前都是自己写Trace工具,手工打点,记录 trace信息:
http://www.yiibase.com/php/view/180.html

作者:老王
调试PHP时,XDebug一直是大众的不二选择,搭配上Webgrind,可以获得不错的效果。今天看某人的栖息地里的介绍,才发现了XHProf,于是体验了一下,感觉很酷,与XDebug相比,运行更轻便,表现更易懂,下面记录一下体验过程。

安装XHProf:
wget http://pecl.php.net/get/xhprof-0.9.2.tgz
tar zxf xhprof-0.9.2.tgz
cd xhprof-0.9.2
cp -r xhprof_html xhprof_lib <directory_for_htdocs>
cd extension
phpize
./configure
make
make install

编辑php.ini:
[xhprof]
extension=xhprof.so
;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
;
xhprof.output_dir=<directory_for_storing_xhprof_runs>

重启服务让修改生效,现在就可以使用XHProf了,不过为了显示效果更炫,最好继续安装Graphviz。
安装Graphviz:
wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
tar zxf graphviz-2.24.0.tar.gz
cd graphviz-2.24.0
./configure
make
make install

安装完成后,会生成/usr/local/bin/dot文件,你应该确保路径在PATH环境变量里,以便XHProf能找到它。
使用XHProf:
// start profiling
xhprof_enable();

// run program
....

// stop profiler
$xhprof_data = xhprof_disable();

//
// Saving the XHProf run
// using the default implementation of iXHProfRuns.
//
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new XHProfRuns_Default();

// Save the run under a namespace "xhprof_foo".
//
// **NOTE**:
// By default save_run() will automatically generate a unique
// run id for you. [You can override that behavior by passing
// a run id (optional arg) to the save_run() method instead.]
//
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");

echo "---------------\n".
"Assuming you have set up the http based UI for \n".
"XHProf at some address, you can view run at \n".
"http://<xhprof-ui-address>/index.php?run=$run_id&source=xhprof_foo\n".
"---------------\n";

如此一来,会在上面设定的xhprof.output_dir目录里生成名字类似49bafaa3a3f66.xhprof_foo的数据文件,可以很方便的通过Web方式浏览效果:

http://<xhprof-ui-address>/index.php?run=49bafaa3a3f66&source=xhprof_foo

目前显示的是表格形式的显示,点击页面上的[View Full Callgraph],就能看到精美的图片显示了。

补充:发现一个名为XLOG:http://tekrat.com/php/xlog/  的扩展,看上去不错,可以记录URL信息。和XDEBUG这样的扩展相比,XLOG更轻便,所以部署在生产服务器上不会对性能造成过大影响。

来源:http://hi.baidu.com/thinkinginlamp/item/6488cd3bc8e0f6be134b14cb

___________________________
简述:XHProf是一个分层PHP性能分析工具。它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。一个函数的开 销,可细分成调用者和被调用者的开销,XHProf数据收集阶段,它记录调用次数的追踪和包容性的指标弧在动态callgraph的一个程序。它独有的数 据计算的报告/后处理阶段。在数据收集时,XHProfd通过检测循环来处理递归的函数调用,并通过给递归调用中每个深度的调用一个有用的命名来避开死循 环。XHProf分析报告有助于理解被执行的代码的结构,它有一个简单的HTML的用户界面( PHP写成的)。基于浏览器的性能分析用户界面能更容易查看,或是与同行们分享成果。也能绘制调用关系图。

环境:CentOS 5.5 x64

安装:
cd /root/tools
wget http://pecl.php.net/get/xhprof-0.9.2.tgz
tar zxf xhprof-0.9.2.tgz
cd xhprof-0.9.2
cd extension
/elain/apps/php/bin/phpize
./configure --with-php-config=/elain/apps/php/bin/php-config
make && make install
cd ../../

#2.安装Graphviz
wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.28.0.tar.gz
这个能下载:http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
目前最新:http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.34.0.tar.gz
tar zxf graphviz-2.28.0.tar.gz
cd graphviz-2.28.0
./configure --prefix=/elain/apps/graphviz
make  && make install
cd ..
ln -s /elain/apps/graphviz/bin/* /bin/
安装完成后,会生成/usr/local/bin/dot文件,你应该确保路径在PATH环境变量里,以便XHProf能找到它。
文库:http://wenku.baidu.com/view/d2908ba9d1f34693daef3e84.html


#3.安装libpng
wget http://cdnetworks-kr-2.dl.sourceforge.net/project/libpng/libpng15/1.5.2/libpng-1.5.2.tar.gz
tar zxf libpng-1.5.2.tar.gz
cd libpng-1.5.2
./configure --prefix=/elain/apps/libpng
make && make install
cd ..

编辑php.ini
vi  /elain/apps/php/etc/php.ini

extension = "xhprof.so"

[xhprof]
xhprof.output_dir="/elain/logs/xhprof/log"

重启php即可
来自:http://elain.blog.51cto.com/3339379/632303
1.php 接口类:interface

其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候php接口类就起到作用了,当我们定义了一个接口类时,它里面的方式是下面的子类必须实现的,比如 :



我声明一个shop接口类,定义了三个方法:买(buy),卖(sell),看(view),那么继承此类的所有子类都必须实现这3个方法少一个都 不行,如果子类没有实现这些话,就无法运行。实际上接口类说白了,就是一个类的模板,一个类的规定,如果你属于这类,你就必须遵循我的规定,少一个都不 行,但是具体你怎么去做,我不管,那是你的事,如:



你想想,在一个多人合作的大项目里面,有了接口类是多么的方便,这样你就不用去问别人,你的某某功能的方法名是什么了,当然如果你们喜欢这样我也没有办法。



结论 : 接口类就是一个类的领导者,指明方向,子类必须完成它指定方法。

2.php 抽象类 : abstract

其实抽象类和接口类有一部分很像,记得在哪里看见这样一句话,抽象类就把类像的部分抽出来,这句看上去很搞笑,其实它说出了抽象类的真理,抽象类的 作用是,当你发现你的很多类里面用很多方法你不断的在重复写,那你就可以考虑使用抽象类了,你可能会说“我不是可以重写一个类每个公共类我个实例化一个这 个公共类,调用相同的方法就可以了”,这里是可以,实际上抽象类做的工作也就是这个,不过他省去了你实例化的这个步骤,让你就像直接调用本类方法一样方 便,而且你还可以重载这个方法。如:




    这里是一个例子,想上面一样我定义了一个商店类,抽出了它所有像的部分,买(buy),卖(sell),看(view),并且抽象类里都实现了这些方法,那么继承它的子类就自动获得了这些方法,子类就做它自己独特的东西,介绍代码的重复,提高复用性。
结论: 抽象类就是一个类的服务提供商,拥有众多服务,你不用必须用,当需要的时候你来用就可以,如果你觉得不提供服务不满意,你还可以自己来做。而abstract function 方法和interface有些相似,就是父类中生声明的方法,子类中必须实现,但是没有用abstract声明的方法将成为子类的公共方法,没有必要在子类中必须实现

转自:http://blog.csdn.net/hyholine/article/details/7270392
最近公司需要通过web界面修改squid.conf,然后保存配置文件的同时重启动squid,web服务器是nginx+php,文件用户和组都是www。
首先编辑 /etc/sudoers 使用 visudo来编辑
/etc/sudoers的权限是440:
-r–r—– 1 root root 3248 Oct 18 23:47 /etc/sudoers
需要chmod u+w /etc/sudoers
修改完毕之后再chmod -w /etc/sudoers
因为如果/etc/sudoers的权限不是440,那么sudo会报错:
[root@hn ~]# sudo
sudo: /etc/sudoers is mode 0640, should be 0440
sudo: no valid sudoers sources found, quitting

在最下面添加一行

nobody ALL=NOPASSWD:/usr/local/squid/sbin/squid -k reconfigure

然后注释掉文件中的Defaults requiretty这行
否则会出现sudo: sorry, you must have a tty to run sudo的错误
保存退出即可
测试
写一个php文件,内容如下


来自:http://tunps.com/php-sudo-root-privilege-program
背景:PHP 5.1.6,我这儿有一个需求用Nginx上传模块上传,但是发现用rename有些问题,于是修改为了:copy又可以了。
打听了一下:说是那个移动到的目标的磁盘是挂载的。

Download:
http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gz
configure and make :


在 PHP 4.3.3 之前,linux系统下rename()是无法跨分区操作的。
有人出现:
而如果在不同的分区,就会失败。不过从其它分区rename()至/tmp/临时目录可以成功,但是再rename()回来就直接提示失败。


网上也没有找到比较合适的解释与解决方案。
其中虽然有效但是感觉不太完美的是将rename()函数替换为 system("mv ".$src." ".$Dest)

这个我编写了PHP的测试脚本验证过,利用PHP内置的chmod()函数将对应的目录的权限设置为0777后,再执行rename(),错误依旧。chown()没有测试。
并且ls -al 察看对应路径的属性,已经被成功修改了。
应该可以确认是有chmod()的权限的。

实践如下:


后来,经实际测试rename不行,于是改用copy函数,并删除掉源,估计和该环境是挂载的目标磁盘有关,后发现是权限问题加上:755权限可以,究竟是什么问题无法得知:

修改为:

Ps:nginx和php都是ww权限在运行。
再试:

再加上:


move_upload_file无法移动文件。

打开错误:


问题根本原因想到想不到滴:
我都说这个rename函数怎么好像有问题哩,原来是这样:
这个rename的目标目录有一个另外的转码的程序在看护是一个daemon,一发现我这边有一个文件上传后rename过去就给转走了,于是给我测试造成一种rename函数有问题有时有(当时这个程序没有取走),有时无(一上传到这个目录刚好被这个程序给取走了),于是觉得这个rename不靠谱,实际上就是这个视频转码的程序。
有一个思路上的问题:
视频转码,我思想上是要是视频文件才转,后来才发现不用是视频文件的后缀,只要在上传时插入数据库后,所有放到那边的文件都给移走了,如果转失败也是在转码那边删除,造成这个目录不可能有一个文件存在,就是.exe的.dll的也会移走,问题得到了解决。

害我找了一上午看这个问题,不过收获到的非PHP的知识,更多的是一种排查问题的思路,EOF。


后记:
Rango  下午 02:37:50
有nginx么?
可以用nginx的上传模块
那个比较强
回忆未来-向东-Jàck  下午 02:38:51
是么,我也用,你有那个的生产环境的配置么?
我感觉那个好像上传时是一点一点的写,它是先把上传的文件内容放内存缓冲么?
Rango  下午 02:39:15
是的。
先到缓存,缓存满了,就写文件
这样效率非常高
文件上传完了,再通知PHp
背景:想调试一下Flash的上传,用Firebug抓包上传的Url抓不到,于是找了下其他的插件,如下。
DownLoad Url:http://www.o-minds.com/payment/flashfirebug?m=1
FlashFirebug是一款可以让开发者在浏览器中直接调试Flash程序的Firefox扩展。通过这款扩展,开发人员可以像在浏览器中调试HTML/JS/CSS那样来直观的进行AS3的调试,操作界面则与Firebug一致。通过这款扩展,Firebug可以覆盖几乎全部的Web开发人员调试需求。

使用Flashfirebug需要安装firefox(当然!)、firebug以及debug版本的flash播放器.

FlashFirebug下载地址:https://addons.mozilla.org/en-US/firefox/addon/161670/

官方网站/使用帮助:http://www.o-minds.com/products/flashfirebug

本文来自:http://blog.sina.com.cn/s/blog_532751d90100r189.html



在adobe的网站上,有几种debug版本
http://www.adobe.com/support/flashplayer/downloads.html
第一个是IE的插件,
Download the Windows Flash Player 10.2 ActiveX control content debugger (for IE) (EXE, 2.99MB)
第二个是firefox的插件,
Download the Windows Flash Player 10.2 Plugin content debugger (for Netscape-compatible browsers) (EXE, 2.95MB)
安装了以上2个插件后,便可以用IE和firefox调试了。
第三个应该是桌面版本
Download the Windows Flash Player 10.2 Projector content debugger (EXE, 6.36MB)
到底是用IE还是firefox可以在window-> preference ->General->Web Browser 里选择合适的浏览。
我安装了chrome firefox ie,但选择里面没有chrome。但要用chrome来调试swf,也需要安装 for Netscape-compatible browsers 这个插件就行了。
C:/Program Files/Mozilla Firefox/plugins/NPSWF32.dll
Flash Builder cannot locate the required debugger version of Adobe Flash Player. You might need to install the debugger version of the Flash Player or reinstall Flash Builder.
来自:http://blog.csdn.net/lijiecong/article/details/6312382
Zend Optimizer 源代码开源

年前 Zend 公司称有意将 Zend Optimizer 开源(详情),而 Zend 已经将源码提交到 Github 上,网址是

https://github.com/zend-dev/ZendOptimizerPlus/



目前正在开发阶段的 PHP 5.5 将集成 Zend Optimizer+。
这个消息是由 Zend 公司的 CTO Zeev Suraski 宣布的。Zend Optimizer+ 是代码缓存优化工具,以前是收费产品 Zend Server 的一部分,最近开源了。通过对 PHP 文件生成的字节码的优化,Zend Optimizer+ 能提高解释器的性能。同时,它也能在共享的内存中保存预编译的字节码。
网上有很多LNMP/LAMP一键安装脚本,编译安装参数还要修改脚本,此脚本整合了LAMP和LNMP,在任何一台有网络的Red hat 或者centos 服务器上自动配置LNMP或者LAMP,用户可以自定义编译参数也可以使用此脚本默认的参数编译安装。还可以单独安装mysql、nginx、apache、php。
使用方法:将下面代码保存一个文件,例如inst_lanmp.sh 上传到服务器上执行。
此脚本在CentOS 6.0  X864环境下通过:使用效果如下:
点击在新窗口中浏览此图片
点击在新窗口中浏览此图片
代码如下:阅读全文
方法一:
一般个人Blog博客难免会碰到要搬家或者换空间的事情,Blog搬家其实是件非常简单的事情,可能你没搬过空间,如果你安装这个方法搬空间,你会觉得Blog搬家没想象那么难。
Blog博客搬家最主要的就两点,一个是网站的文件,一个是网站的数据,那么Blog换空间只要搞定这两步就OK了,现在就开始搬家。
第一步:把Blog原来的所以文件全部下载到本地,通过FTP或者登录空间进行在线下载都可以;
第二步:把下载好的文件全部文件全部上传到新空间制定文件夹;
第三步:下载原来数据库,进入旧网站的phpmyadmin管理界面下载全部的数据,方法是登录phpmyadmin,点击数据库,会出现一个界面,如图:
选择全部,然后把所以的数据导出到本地,保存成.sql格式,保存到本地后是个txt格式,如下图:
第四步:下载好之后,登录新空间的phpmyadmin数据库管理界面,把刚才下载好的.sql导入到新的数据库;
第五步:把网站的ip解析到新的空间上,这样Blog搬家就搞定了。
网络上关于Blog博客搬家的教程很多,基本上所以的搬家方法都是按照这样的做,只要空间没问题的话,一般不会出问题,如果出问题的话,按照个Blog搬家方法一定可以,祝你搬家成功。

方法二:
使用phpmyadmin同步功能迁移mysql数据库:
估计很多人都有在用,但是可能很多人都没有注意到phpmyadmin的同步功能。

其实这个同步功能非常简单、好用,可以实现单个数据表或整个数据库的同步功能,非常不错哦。

首先,需要登录phpmyadmin,然后在页面右上角找到“同步”,接下来,同步页面中会显示数据库和目标数据库,需要设置一下源数据库的IP、用户名及密码,然后选择一下本地数据库名称。这里注意一点,源数据库指的是你要导出的数据库,目标数据库指的是你要导入的数据库,所以,源数据库要选择“远程服务器”,目标数据库就要选择“当前服务器”了。配置好源数据库和目标数据库后,点击右下角的“执行”。一般来说,从源数据库同步到目标数据库,是不需要在目标数据库建表的,phpmyadmin的同步功能会自动建立数据表,所以我们只需要建立数据库就可以了,不需要其他设置、操作。

然后再点击右下角的“同步数据库”。如果当前目标数据库中存在数据,先勾选左下角的“你希望删除当前目标表中的所有数据吗?”-> 再点击右边“应用选中的修改”之后再选择“同步数据库”。
OK,接下来就等着吧,完成之后会有相应提示“已根据源数据库同步目标数据库”
注意:同步功能默认只有localhost,不能修改,这里需要在 config.inc.php里添加一个参数:
$cfg['AllowArbitraryServer'] = true;
这样就可以输入目标地址了。

转载请说明来自:jackxiang.com网站。
WSO是一个PHP shell后门,提供了一个接口,用于各种远程操作。它可以从远程执行代码,执行一切暴力破解的服务器,提供服务器信息,等等。
DownLoad:
http://www.unhonker.com/wp-content/uploads/2012/12/wso2.5.1.zip

来自:http://www.unhonker.com/information/835.html
当有人想要实现并发功能时,他们通常会想到用fork或者spawn threads,但是当他们发现php不支持多线程的时候,大概会转换思路去用一些不够好的语言,比如perl。
其实的是大多数情况下,你大可不必使用fork或者线程,并且你会得到比用fork或thread更好的性能。
它运行的很好,但是在fsockopen()分析完hostname并且建立一个成功的连接(或者延时$timeout秒)之前,扩充这段代码来管理大量服务器将耗费很长时间。
因此我们必须放弃这段代码;我们可以建立异步连接-不需要等待fsockopen返回连接状态。PHP仍然需要解析hostname(所以直接使用ip更加明智),不过将在打开一个连接之后立刻返回,继而我们就可以连接下一台服务器。

PHP5中可以使用新增的stream_socket_client()函数直接替换掉fsocketopen()。PHP5之前的版本,你需要自己动手,用sockets扩展解决问题。

php中stream_socket_client的多路复用采集网站数据,同时开多少个比较合适呢,要求在最短时间内采集最多数据:
分页: 10/18 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 下页 最后页 [ 显示模式: 摘要 | 列表 ]