PHP ini_set() 无效的原因:
如题:我租的是虚拟主机,php.ini里的upload_max_filesize是默认的2M,要直接修改php.ini文件是不可能的。我如果想上传超过2M的怎么呢?ini_set("upload_max_filesize", "8M");我试了,好象没有用!!
ini_set("upload_max_filesize", "8M");肯定不能用啊,要是随便一个用户都能修改的话,那这个虚拟主机上的其他用户不倒霉了?!!
我改过php.ini中的upload_max_filesize 有效。(假的)
========================================================================================================
ini_set,post_max_size,upload_max_filesize,magic_quotes_gpc等用ini_set设置不了!

ini_set('max_execution_time','10′);
ini_set('memory_limit','1024M');

echo 'max_execution_time = ' . ini_get('max_execution_time') . "";
echo 'memory_limit = ' . ini_get('memory_limit') . "";
echo 'post_max_size = ' . ini_get('post_max_size') . "";
echo 'upload_max_filesize = ' . ini_get('upload_max_filesize') . "";

ini_set('max_execution_time','10′);
ini_set('memory_limit','1024M');
注意:
post_max_size,upload_max_filesize用下面的方法是修改不了的.
ini_set('post_max_size','1024M');
ini_set('upload_max_filesize','1024M');
正确做法是用.htaccess文件:
php_value upload_max_filesize "80M"
php_value post_max_size "80M"
php_value max_execution_time "2000"
php_value memory_limit "150M"

补充知识点:
其实在php文档里有说明upload_max_filesize的可修改范围是PHP_INI_PERDIR。
PHP_INI_PERDIR的意思是域内指令可以在php.ini、httpd.conf或.htaccess文件中修改。
PHP_INI_SYSTEM 域内指令可以在php.ini和httpd.conf文件中修改
所以upload_max_filesize用int_set是无法修改的。只有可修改范围是PHP_INI_ALL的才可以用int_set修改。
Nginx,上传:通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题
http://hi.baidu.com/zhizheqianlv/item/d5989d506b1f6f15aaf6d702
client_max_body_size
这个可以限制

magic_quotes_gpc 用 get_magic_quotes_gpc() 获得,不能用 set_magic_quotes_gpc 修改,原因是没这个函数。而magic_quotes_runtime可以用set_magic_quotes_runtime()来设置
http://www.111cn.net/phper/php-function/34292.htm
阅读全文
背景:一些浏览器的其它协议,如自定义协议,会扫描进程的列表,及通过js读注册表(客户端会写注册表,以达到判断是否安装过客户端)等,是必须用到的。
JS操作本地注册表有很多限制,默认浏览器是没有打开JS本地脚本操作的,如果浏览器没有配置且安全级别比较高,或者杀毒和防木马软件,直接用JS操作注册表会被阻止的,为了保险期间实现这个功能“需要在登陆后先判断是否安装过客户端才能进行游戏”,最好的方式个人认为是,通过客户端实现一个浏览器的插件,然后在JS中判断插件是否已经安装,然后通过插件启动客户端或做其他的事情比较稳妥。

一般这样做,我估计百度影音通过网络浏览器到播放器(好在没有广告)就是这么干的,好使用HTA(HTML application),不然通过Web访问会出现安全提示。:
干脆在客户端游戏安装过程中,同时安装一个BHO,好处是JS可以直接调用activex判断是否安装了,而且可以通过activex直接启动客户端,并且可以把用户的登录状成直接带到客户端游戏去,省得重新输密码登录。

读取注册表的办法,比较简单
<script  language="JScript">  
     var  WshShell  =  new  ActiveXObject("WScript.Shell");  
      keyValue  =  WshShell.RegRead("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Cache\\Paths\\Directory");  
     alert(keyValue);  
</script>  
原则上,只要注册表记录的信息都可以查到。
但系统进程是在内存中,而不是在注册表也不是在硬盘上,可以使用win32 API CreateToolhelp32Snapshot 扫描系统进程,js不借助ActiveX是做不到的。

用WSH可以做很多的事...
我实践了是可以hta来读取注册表和执行程序的,找开获得23.0,打开了cmd,如下:


如果用浏览器去执行这个会出现,如下问题,也就是说浏览器想要执行EXE可执行程序得要通过ActiveX控件去做,实践如下:
http://localhost/jsReg.html
ReferenceError: ActiveXObject is not defined
[在此错误处中断]   
var WSH = new ActiveXObject("WScript.Shell");
jsReg.html (第 22 行)
ReferenceError: ActiveXObject is not defined
[在此错误处中断]   
var obj = new ActiveXObject("WScript.Shell");


参考来自:
http://www.itlead.com.cn/article/html/148/2011-07-26/content-1027.shtml








var wsh=new ActiveXObject("WScript.Shell");
wsh.AppActive("title");//激活指定title的应用程序窗口
wsh.CreateShortcut();//建立快捷方式
wsh.Popup();//提示
wsh.RegDelete();//删除注册表项
wsh.RegRead();//读取注册表
wsh.RegWrite();//写注册表
wsh.Run("c:\\test.exe");//运行程序
wsh.SendKeys();//摸拟按键
//...........

等等一堆

你想要做系统进程扫描的话,可以使用WMI对象来...

呵呵,并不是像大花猫说的,JS还是可以做的...

http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/WDdnclinicscripting.mspx

这是MS上的WMI的参考文档...
你想像一下msinfo32.exe可以做什么事,可以查看到什么系统信息,你用JS使用WMI也能做什么,但是前提是你的WMI服务要启动地哦,不过默认是启动地...


http://www.microsoft.com/china/technet/community/scriptcenter/resources/wmifaq.mspx
WMI的秘密

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi_reference.asp
WMI参考文档。。。

你一定要去看看。。
里面的示便都是用VBS做的,你自己用JS当然也一样能行。。。

来源:http://bbs.csdn.net/topics/80029089

参考:http://www.dewen.org/q/663
http://blog.csdn.net/yu555666/article/details/1563547
背景:有外包兄弟说是编码上有问题,于是从编码上想判断一下到底是什么编码,用了这个函数去判断。我倒是喜欢直接用editplus去另存为就知道文件编码,不知这样是不是100%准呢?呵呵。
  使用 mb_detect_encoding() 函数来判断字符串是什么编码的。
当在php中使用mb_detect_encoding函数进行编码识别时,很多人都碰到过识别编码有误的问题,例如对与GB2312和UTF- 8,或者UTF-8和GBK(这里主要是对于cp936的判断),网上说是由于字符短是,mb_detect_encoding会出现误判。
例如,代码如下:
$encode = mb_detect_encoding($keytitle, array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′));
if ($encode == “UTF-8″){
$keytitle = iconv("UTF-8″,"GBK",$keytitle);
}

这段代码的作用是检测字符串的编码是否UTF-8,是的话就转换为GBK。
可是当 $keytitle = “%D0%BE%C6%AC”;时。检测结果却是UTF-8.这个bug其实不算是bug,写程序时也不应当过于依赖mb_detect_encoding,当字符串较短时,检测结果产生偏差的可能性很大。
怎么解决呢,我的办法是:
复制代码 代码如下:

$encode = mb_detect_encoding($keytitle, array('ASCII','GB2312′,'GBK','UTF-8');

三个参数分别是:被检测的输入变量、编码方式的检测顺序(一旦为真,后面自动忽略)、strict模式
对编码检测的顺序进行调整,将最大可能性放在前面,这样减少被错误转换的机会。
一般要先排gb2312,当有GBK和UTF-8时,需要将常用的排列到前面。

来自:http://www.jb51.net/article/27282.htm
*********************加密、解密**************

php中加密、解密
用rawurlencode()对字符串加密,代替原始的urlencode():为了保证特殊字符,空格,回车,等操作的正确性
同时用rawurldecode()进行解码,代替urldecode(),同样理由
javascript中加密、解密
用encodeURIComponent()代替encodeURI(),加密
用decodeURIComponent()代替decodeURI(),解密

都是为了防止加密过程中对特殊字符的处理会出错的问题


来自:http://www.songxuemei.com/decode-encode/
背景:看有兄弟用“#”做PHP的注释。

PHP支持以Shell脚本风格的单行注释,这种注释方式使用“#”的形式实现,它的用法与C++语言风格注释方式相似。使用Shell脚本风格进行单行注释的PHP代码是可行的。但是不是主流就不得而知了,呵呵。
阅读全文
      今天我在调程序时,遇到了见郁闷的事,我用ajax从前台显示页面传字符串变量给处理页面,出现了件怪事,我想传的内容是abc+,但接收以后用System.out.println()输出是abc空格。反复测试好几遍,都是这个结果,真是令人郁闷。在网上搜了搜,找到了原因。
原因:   url中有些字符被转义,比如空格被编码成加号,于是传的参数明明是加号,获取的值却成了空格。如何解决呢?如果是通过url传递参数,应该对其进行必要的编码。
解决办法:
在javascript中加入  

对字符串进行处理.如:var str=URLencode("abc+")


综上,即url里有如下四个特殊字符时:(1)加号:+    (2)双引号:"    (3)单引号:'    (4)斜杠:/时,既要进行特殊处理。


搞自:http://www.blogjava.net/juhongtao/archive/2009/07/31/168639.html
更多参考:http://blog.csdn.net/aragorn_177/article/details/2612974

背景:
对方部门给一接中,没说明是urlencode直接给一个get参数过来,于是对生成的+这样的,通过get后没了,变成了空格(特别是指浏览器里),
于是得这样:


输出:
---------- 调试PHP ----------
x3LCVymudOXKl40YwZledetlpbOmC0wS823N3tptZ54JeWS38pInvk3VkRBzTXyJvqSCd9JZHTgfnRsguGyjI4p5ejA8+KhXTZlA4rQ6rmpDczbbxGfsZj+J1tC+R9hH
x3LCVymudOXKl40YwZledetlpbOmC0wS823N3tptZ54JeWS38pInvk3VkRBzTXyJvqSCd9JZHTgfnRsguGyjI4p5ejA8%2BKhXTZlA4rQ6rmpDczbbxGfsZj%2BJ1tC%2BR9hH

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


最后,其实通过测试,Curl命令行里也会对+进行urldecode进行了转码后变成了空格后进入到PHP程序变量里,于是加号没了,这种情况要想加号还在,得先通过工具urlencode一把,再传入也就出来加号了Ok了,后再一次urlencode一把就变成了%2B的+了:
相当于想通过浏览器传入urlencode的%2B,则需要在浏览器里输入对对+进行编码为%2B的码,后浏览器解码一次,还原成+号后,再编码,也就是原来输入的编码了,串还是那个串,传入编码后的被解开,再被编码的一个过程。

常常在post进行发送时用的是:

在此时,这个函数相当于一个urlencode功能,它有一个默认的参数:
int $enc_type = PHP_QUERY_RFC1738
如果 enc_type 是 PHP_QUERY_RFC1738,则编码将会以 » RFC 1738 标准和 application/x-www-form-urlencoded 媒体类型进行编码,空格会被编码成加号(+)。
-----------------------------------------
同样,那个+会变成%2B,呵呵。
有时想查找整个页面里的某个函数在哪个文件里,往往这些函数在输出时是压缩的js,且有多个,此时查找很不太方便定位文件。
为此,介绍两种办法:

1.通过firebug查找功能(较弱):
有了Firebug,查找页面上的HTML元素(尤其是 比较深层的)非常之简单!更重要的是,一旦你 找到你要的元素,Firebug...
一款快速查找页面元素的Firefox插件——FireFinder:http://www.kuqin.com/webpagedesign/20090613/56307.html
Firefox的Firebug扩展:FireScope:http://www.webjx.com/javascript/jsajax-10665_2.html
2.通过fiddler2进行查找。
当经过fiddler2访问完一个网页后,在fiddler2里ctrl+a选中所有访问的Url后,点右键,选:Decode Selected Sessions...(否则:会找不到的,因为变成的是乱码什么的。)
(代理firefox下的网络访问,后在fiddler2下进行ctrl+F查找字符中,于是可以查到这个函数、字符串在哪个文件里,很是方便).
3.Httpwatcher查找:
1)Filter->enabling Filtering->[勾选]contents is:下面什么也不选->content contains:输入查找的内容。就能查到所有请求中包含有关键字的js,html了,然后再选自己要找的某个js,再进行find查找即可。

4.chrome浏览器:F12 Ctrl+Shift+F(IOS:Cmd+Opt+F),还支持正则表达式。
摘自:http://toutiao.com/item/6205065039238889986/?iid=3127152027&app=news_article&tt_from=android_share&utm_medium=toutiao_android&utm_campaign=client_share
背景:近来看有兄弟用PHP shuffle() 函数,PHP array_keys() 函数做随机,
好像是混合用的,就查下手册了解下PHP array_keys() 函数和PHP shuffle() 函数。
-----------------------------------------------------------------------------------------------------------------------
一)array_keys定义和用法
array_keys() 函数返回包含数组中所有键名的一个新数组。
如果提供了第二个参数,则只返回键值为该值的键名。
如果 strict 参数指定为 true,则 PHP 会使用全等比较 (===) 来严格检查键值的数据类型。

输出:
---------- 调试PHP ----------
Array
(
    [0] => a
    [1] => b
    [2] => c
)
输出完成 (耗时 0 秒) - 正常终止。

二)shuffle定义和用法
shuffle() 函数把数组中的元素按随机顺序重新排列。
若成功,则返回 TRUE,否则返回 FALSE。
注释:本函数为数组中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。
注释:自 PHP 4.2.0 起,不再需要用 srand() 或 mt_srand() 函数给随机数发生器播种,现已被自动完成。
语法
shuffle(array)
参数   描述
array   必需。规定要使用的数组。

输出:
---------- 调试PHP ----------
Array
(
    [0] => Dog
    [1] => Horse
    [2] => Cat
)

输出完成 (耗时 0 秒) - 正常终止。
PHP可以使用mcrypt_encrypt进行DES加密与解密,但实际上操作,你会发现它与JAVA的DES加密出来的字符串,有些不同。基本上是前半段一样,后半段不一样。找到PHP官方网站上对这个函数的文档,有人回复了,并给出了代码。经测,这样加密解密就跟JAVA中的兼容了。

If you want to be interoperable with other PKCS  #7 padding implementations, like the Legion of the Bouncy Castle Java  cryptography APIs, you should always pad, that is a 8-byte (block size)  padding should be added, even if not necessary



来自:http://it.oyksoft.com/post/4831/
背景:Apache结合spawn-fcgi使用FastCGI的实践,和PHP启动fastCGI一个原理。
关于PHP的相关情况参考:使用spawn-fcgi管理运行php-cgi  Url: http://www.libaqiang.com/?p=78193

spawn-fcgi和nginx自带的fastcgi相比 有什么优势?
为什么在用nginx的时候还要装spawn-fcgi,nginx不是自带有这个模块吗?
nginx的fastcgi_pass模块是用于代理fcgi协议的后端。spawn-fcgi用于管理支持fcgi协议的进程,属于process manager这类,免于重造轮子。
对于PHP,推荐php-fpm,比spawn多了不少专门针对php的功能,例如slow_request等。
http://www.zhihu.com/question/19689162


一)这个用spawn-fcgi 来管理FastCGI 以达到优化Apache 下PHP性能的方法比较另类,大家权当一种参考。

方法:系统平台是CentOS 5,前提是LAMP已配置好,运行正常。

1. wget -c http://www.21andy.com/centos/5/i386/spawn-fcgi-1.6.3-1.el5.i386.rpm(也可以去官方下载源码包编译安装:http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz)
2. rpm -ivh spawn-fcgi-1.6.3-1.el5.i386.rpm
3. 使用spawn-fcgi来控制php-cgi的FastCGI进程:
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u apache -g apache -f /usr/bin/php-cgi

参数含义如下:
-f <fcgiapp> 指定调用FastCGI的进程的执行程序位置,根据系统上所装的PHP的情况具体设置。
-a <addr> 绑定到地址addr。
-p <port> 绑定到端口port。
-s <path> 绑定到unix socket的路径path。
-C <childs> 指定产生的FastCGI的进程数,默认为5。(仅用于PHP)
-P <path> 指定产生的进程的PID文件路径。
-u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,CentOS下可以使用apache用户,其他的根据情况配置,如nobody、www-data等。
4. 将这行代码加入到/etc/rc.local文件底部,这样系统启动的时候就可以同时启动PHP的FastCGI进程。


实践内容:
实践来源:http://www.phpabc.cn/apachejie-he-spawn-fcgishi-yong-fastcgi.html
(1)通过spawn-fcgi来启动php进程
/usr/local/webserver/fastcgi/spawn-fcgi/bin/spawn-fcgi  -a 127.0.0.1 -p 9000 -C 5 -u apache -g www -f /usr/local/webserver/php/bin/php-cgi          
spawn-fcgi: child spawned successfully: PID: 7551

ps aux|grep php
apache    7551 16.7  1.6  43396  6016 ?        Ssl  15:14   0:01 /usr/local/webserver/php/bin/php-cgi

cd lighttpd_fastCGI_Codes/
./configure && make && make install
/usr/bin/install -c spawn-fcgi '/usr/local/bin'
启动PHP:
/usr/local/bin/spawn-fcgi  -a 127.0.0.1 -p 9000 -C 5 -u apache -g www -f /usr/local/webserver/php/bin/php-cgi
root@192.168.137.128:~/software/lighttpd_fastCGI_Codes# ps aux|grep php  //共5个
www       9754  4.0  2.4  45112  8588 ?        Ss   15:50   0:00 /usr/local/webserver/php/bin/php-cgi
www       9756  0.0  1.1  45112  3988 ?        S    15:50   0:00 /usr/local/webserver/php/bin/php-cgi
www       9757  0.0  1.1  45112  3988 ?        S    15:50   0:00 /usr/local/webserver/php/bin/php-cgi

(2)要是自己编写一个fastcgi呢?简单如下操作(这儿好像不能像PHP一样有多个进程:fastcgi 多进程这部分,我还没研究到。可以有空再看看):
代码编写:
vi hello.c


编译:
gcc -o hello.fcgi hello.c -L /usr/local/webserver/fastcgi/fcgi/lib -lfcgi
/usr/local/webserver/fastcgi/spawn-fcgi/bin/spawn-fcgi  -a 127.0.0.1 -p 9000 -C 5 -u apache -g www -f ./hello.fcgi

启动成功没:
root@192.168.137.128:/usr/local/test# ps aux|grep hello
apache   10485  0.0  0.1   2140   416 ?        Ss   16:31   0:00 ./hello.fcgi

至于后面的ngnx配置,无非两种:
一个是直接连sock,另一个是开9002端口两者对比效率上哪个高一点儿呢?
一般来说本地的 unix sock要快一些。


参考Url:
http://blog.csdn.net/qzier_go/article/details/7340868
http://terry831010.blog.163.com/blog/static/6916117120126185428827/

二)spawn-fcgi与fcgi的运行机制分析 :在此基础上实现了守护监控功能
http://blog.csdn.net/cleanfield/article/details/6412723


背景:
群里有兄弟在问:
我在PHP.ini里 display=off屏蔽了错误,然后把错误信息 写入到LOG里
怎么搞?
一)
set_exception_handler
set_error_handler
二)php.ini里配置:
log_errors = On
error_log = /data/logs/php_error.log

阅读全文
背景:
Weibo LAMP演变——提到这zend的optimizer+快,大约在7 ~ 10% 快于APC。
阅读全文
背景:在接口有奇怪的符号,如下:
^M
^M
{"code":"0","msg":"参数无效"}
代码(把^M 和换行全替换成空: \r\n 在Unix下显示是:^M且换行了):

现在好了。没有换行也没有M了,也可:
vim编辑下,然后: :%s/\r\+$//e
如直接用PHP的trim替换后,还是有换行,只是^m没了。就是下文的直接替换:
阅读全文
方法一:yes|cp -r /x  y
cp -rf 即使使用了f 每个文件仍然会询问。 yes|可以解决这个问题。



方法二:(加右斜杠)
Linux使用cp命令直接覆盖不提示的方法
普通的cp命令使用
例如:cp abc.txt  /home
如果/home里面之前有abc.txt文件,会提示你是否要覆盖?这个时候你需要输入Y,假如文件很多的话,每复制一个文件都要输入一次Y.
下面介绍cp文件时直接覆盖不提示的方法
命令如下:
\cp abc.txt /home
直接复制abc.txt  到/home 里面,不管/home 里面之前是否有这个文件都会直接覆盖,不再出现覆盖提示!

原因:alias 成cp -r了
vi ~/.bashrc
alias cp='cp -i'
——————————————————————————————————————————————————————
新做了服务器,cp覆盖时,无论加什么参数-f之类的还是提示是否覆盖,这在大量cp覆盖操作的时候是不能忍受的。
把a目录下的文件复制到b目录
cp –r a/* b
执行上面的命令时,b存在的每个文件都会提示是否覆盖;
cp –r –f a/* b
执行上面的命令时,b存在的每个文件都不再会提示;
这是我们希望的理想状态,但是有时加了-f了,怎么还会有提示呢?原来一些服务器会默认增加别名 alias cp='cp -i',当你执行cp时,其实执行的是cp –i。
在终端执行alias就可以看出来了。
[root@devdb ~]# alias
alias cp='cp -i'
可以这样解决
[root@devdb ~]# vi ~/.bashrc
在alias cp='cp -i'前加上"#"注释掉这行,:wq!保存推出,然后重新登陆就可以了。
来自:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3637144&highlight=
http://soft.chinabyte.com/os/220/11760720.shtml
背景:用PHP的Curl调用对方的接口,居然返回 curl error: name lookup timed out,一堆错,显然是服务器间歇性抽风。

strace了下发现:



我发现抽风的服务器可以通过--connect-timeout 来减少给接口调用方直接提示:name lookup timed out,
是用curl发现这个问题的:
curl的超时时间设置:
使用curl时,有两个超时时间:一个是连接超时时间,另一个是数据传输的最大允许时间。

连接超时时间用 --connect-timeout 参数来指定,数据传输的最大允许时间用 -m 参数来指定。
例如:
curl --connect-timeout 10 -m 20 "http://XXXXXXX"
连接超时的话,出错提示形如:
curl: (28) connect() timed out!
数据传输的最大允许时间超时的话,出错提示形如:
curl: (28) Operation timed out after 2000 milliseconds with 0 bytes received

--connect-timeout时间短,对本机的接口(接口再访问其它域名的机器)多次访问出现几率大:


According to cURL Error Codes, error code 6 stands for Couldn't resolve host. The given remote host was not resolved.
So I guess your DNS was not propagating properly at times ?


Under the hood, both curl_exec and file_get_contents perform nearly identical operations; they both use libresolv to:

    connect to a name server
    issue a dns request
    process the dns response

To further debug this, you can use curl_getinfo() to get detailed statistics about your requests; you can use this to get an idea of how long each part took using:

    CURLINFO_NAMELOOKUP_TIME
    CURLINFO_CONNECT_TIME
    CURLINFO_PRETRANSFER_TIME
    ...


The value of
the ptr variable is "name lookup timed out".

I am using the curl_easy interface. I am *not* setting
CURLOPT_NOSIGNAL, and I am also *not* setting any timeout options
(such as CURLOPT_TIMEOUT). My guess is that this crash is caused by a
signal that is emitted. I suspect that I need to set CURLOPT_NOSIGNAL
to 1L and then configure libcurl to use c-ares.


---------------------------------------------------------------------------------------
linux服务器因nameservers停止工作,导致name lookup timed out的解决方法。

刚服务器上的所有在线代理网站突然出现name lookup timed out问题,网上搜索了一下原来是服务器的nameservers问题,打开/etc/resolv.conf,看到

search box.net
nameserver 66.90.68.15
nameserver 66.90.68.169 v. m$ V- V% d, p% d, e
8 {; n5 t: M) Z% W
ping了下66.90.68.15果然不工作了! k4 v! @: x, ]3 \6 Y, ]0 ?0 n
* K, `5 n( m/ H7 X& B+ ]- n2 a
随便在google里输入“free nameservers”找到这家9 U/ J% b. ]* O* E# i, \' [
http://www.resolvingnameserver.com/freerns.html
Our current set of name servers that you can use are:+ F6 I# b3 s, L* |! F
205.234.170.215
205.234.170.217
打开resolv.conf,替换掉原来的IP,上传。- t) x0 \! j8 y
8 K" g8 e; x) T" k6 d: e
重启下服务器,问题解决。
( s8 r: {0 P$ D) r& j; I7 Q
其实还有一家比较有名的我以前介绍过
http://www.opendns.com/
208.67.222.222
208.67.220.220
我自己的windows计算机上用过,不过如果网站打开慢的话会出现他们的广告,不是很爽,希望使用的这家不要出现这样的情况。
) E, ]+ k8 _1 X
2009年3月25日更新:9 F8 ~. O3 c6 U6 f
205.234.170.215
205.234.170.217
有点慢,有时还是会出现“name lookup timed out”的情况,所以我还是选择了5 }& D5 k% s8 F7 V
208.67.222.222
208.67.220.220

来自:http://www.9125.info/redirect.php?fid=5&tid=286&goto=nextnewset
背景:ts 参数  时间戳毫秒级,13位的,我用的是PHP的,发现调用失败:
以下代码有点问题:

当mtime[0]是0.012 =>> 给*1000后小数后面的第一个零给去掉了,形成了12位的,不到13位,于是rango给出一个:

估计是后面的是00,所以没显示
比如:第一个其实是:1372057395.0100
后面两个0没显示,则会显示:1372057395.01,12位。


PHP时间戳长度是10位, 如:1294890859
而PHP的microtime()得出的是:
10位的Unix时间(秒)
8位的微妙
足够你用了.截取自己要的13位就可以了.

这里可能涉及到java 时间戳和PHP时间戳 的转换问题:
java时间戳和PHP时间戳 的转换问题:
由于精度不同,导致长度不一致,直接转换错误。
JAVA时间戳长度是13位,如:1294890876859
PHP时间戳长度是10位, 如:1294890859

主要最后三位的不同,JAVA时间戳在PHP中使用,去掉后三位,如:1294890876859-> 1294890876 结果:2011-01-13 11:54:36

echo date('Y-m-d H:i:s','1294890876');


PHP时间戳在JAVA中使用,最后加三位,用000补充,如:1294890859->1294890859000
结果:2011-01-13 11:54:19
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateTime = df.format(1294890859000L);              
System.out.println(df);

来自:http://fghzhaopai.blog.163.com/blog/static/4780555620114137146287/
======================================================
Js实现:

10位的时间戳 转 脚本里乘1000 要么你直接后面加3个000 变成13位的 ,
估计也差不多 算成时间 秒位最小单位 基本没什么误差了

1s=1000ms(毫秒)=1000000(微秒)
1s=10^3ms(毫秒)=10^6μs(微秒)


IOS的  typedef long      __darwin_time_t;  /* time() */
time返回就是 long
不存在小数情况你这个IOS返回的是毫秒还是微秒?了解下。
是秒
那怎么获取到毫秒啊?
乘1000
取到的秒 是  10位的
      //阻塞父进程,直到子进程结束,不适合需要长时间运行的脚本,可使用pcntl_wait($status, 0)实现非阻塞式
      pcntl_wait($status);
-------------------------------------------------------------------------------------------------------------------------------------------------------
PHP多进程编程一

使用PHP真正的多进程运行模式,适用于数据采集、邮件群发、数据源更新、tcp服务器等环节。
PHP有一组进程控制函数(编译时需要 –enable-pcntl与posix扩展),使得php能在*nix系统中实现跟c一样的创建子进程、使用exec函数执行程序、处理信号等功能。PCNTL使用ticks来作为信号处理机制(signal handle callback mechanism),可以最小程度地降低处理异步事件时的负载。何谓ticks?Tick 是一个在代码段中解释器每执行 N 条低级语句就会发生的事件,这个代码段需要通过declare来指定。
常用的PCNTL函数
pcntl_alarm ( int $seconds )设置一个$seconds秒后发送SIGALRM信号的计数器
pcntl_signal ( int $signo , callback $handler [, bool $restart_syscalls ] )为$signo设置一个处理该信号的回调函数。下面是一个隔5秒发送一个SIGALRM信号,并由signal_handler函数获取,然后打印一个“Caught SIGALRM”的例子:


pcntl_exec ( string $path [, array $args [, array $envs ]] )在当前的进程空间中执行指定程序,类似于c中的exec族函数。所谓当前空间,即载入指定程序的代码覆盖掉当前进程的空间,执行完该程序进程即结束。


pcntl_wait ( int &$status [, int $options ] )阻塞当前进程,只到当前进程的一个子进程退出或者收到一个结束当前进程的信号。使用$status返回子进程的状态码,并可以指定第二个参数来说明是否以阻塞状态调用:
1. 阻塞方式调用的,函数返回值为子进程的pid,如果没有子进程返回值为-1;
2. 非阻塞方式调用,函数还可以在有子进程在运行但没有结束的子进程时返回0。
pcntl_waitpid ( int $pid , int &$status [, int $options ] )功能同pcntl_wait,区别为waitpid为等待指定pid的子进程。当pid为-1时pcntl_waitpid与pcntl_wait一样。在pcntl_wait和pcntl_waitpid两个函数中的$status中存了子进程的状态信息,这个参数可以用于pcntl_wifexited、pcntl_wifstopped、pcntl_wifsignaled、pcntl_wexitstatus、pcntl_wtermsig、pcntl_wstopsig、pcntl_waitpid这些函数。
例如:


子进程在输出child process等字样之后sleep了2秒才结束,而父进程阻塞着直到子进程退出之后才继续运行。
pcntl_getpriority ([ int $pid [, int $process_identifier ]] )取得进程的优先级,即nice值,默认为0,在我的测试环境的linux中(CentOS release 5.2 (Final)),优先级为-20到19,-20为优先级最高,19为最低。(手册中为-20到20)。
pcntl_setpriority ( int $priority [, int $pid [, int $process_identifier ]] )设置进程的优先级。
posix_kill可以给进程发送信号
pcntl_singal用来设置信号的回调函数
当父进程退出时,子进程如何得知父进程的退出
当父进程退出时,子进程一般可以通过下面这两个比较简单的方法得知父进程已经退出这个消息:
当父进程退出时,会有一个INIT进程来领养这个子进程。这个INIT进程的进程号为1,所以子进程可以通过使用getppid()来取得当前父进程的pid。如果返回的是1,表明父进程已经变为INIT进程,则原进程已经推出。
使用kill函数,向原有的父进程发送空信号(kill(pid, 0))。使用这个方法对某个进程的存在性进行检查,而不会真的发送信号。所以,如果这个函数返回-1表示父进程已经退出。
除了上面的这两个方法外,还有一些实现上比较复杂的方法,比如建立管道或socket来进行时时的监控等等。
PHP多进程采集数据的例子



PHP多进程编程二

php在pcntl_fork()后生成的子进程(通常为僵尸进程)必须由pcntl_waitpid()函数进行资源释放。但在 pcntl_waitpid()不一定释放的就是当前运行的进程,也可能是过去生成的僵尸进程(没有释放);也可能是并发时其它访问者的僵尸进程。但可以 使用posix_kill($cid, SIGTERM)在子进程结束时杀掉它。
子进程会自动复制父进程空间里的变量。
PHP多进程编程示例2


如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成:

pcntl_wait($status, 1);
//或
pcntl_wait($status, WNOHANG);

在上面的代码中,如果父进程退出(使用exit函数退出或redirect),则会导致子进程成为僵尸进程(会交给init进程控制),子进程不再执行。
僵 尸进程是指的父进程已经退出,而该进程dead之后没有进程接受,就成为僵尸进程.(zombie)进程。任何进程在退出前(使用exit退出)都会变成 僵尸进程(用于保存进程的状态等信息),然后由init进程接管。如果不及时回收僵尸进程,那么它在系统中就会占用一个进程表项,如果这种僵尸进程过多, 最后系统就没有可以用的进程表项,于是也无法再运行其它的程序。
预防僵尸进程有以下几种方法:
父 进程通过wait和waitpid等函数使其等待子进程结束,然后再执行父进程中的代码,这会导致父进程挂起。上面的代码就是使用这种方式实现的,但在 WEB环境下,它不适合子进程需要长时间运行的情况(会导致超时)。使用wait和waitpid方法使父进程自动回收其僵尸子进程(根据子进程的返回状 态),waitpid用于临控指定子进程,wait是对于所有子进程而言。
如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后,父进程会收到该信号,可以在handler中调用wait回收
如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD, SIG_IGN)通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收,并不再给父进程发送信号,例如:pcntl_signal(SIGCHLD, SIG_IGN);
$pid = pcntl_fork();
//....code

还有一个技巧,就是fork两次,父进程fork一个子进程,然后继续工作,子进程再fork一个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进程的回收还要自己做。下面是一个例子:

在 fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用 waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,无法正常结束,此时即使是root身份kill-9也不能杀死僵尸进 程。补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为”孤儿进程”,过继给1号进程init,init会定期调用wait回收 清理这些父进程已退出的僵尸子进程。
所以,上面的示例可以改成:

怎样产生僵尸进程的
一 个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它 的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。在Linux进程的状态中,僵尸进程是非常特殊的一种,它已 经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵 尸进程不再占有任何内存空间。它需要它的父进程来为它收尸,如果他的父进程没安装SIGCHLD信号处理函数调用wait或waitpid()等待子进程 结束,又没有显式忽略该信号,那么它就一直保持僵尸状态,如果这时父进程结束了,那么init进程自动会接手这个子进程,为它收尸,它还是能被清除的。但 是如果如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态,这就是为什么系统中有时会有很多的僵尸进程。
任何一个子进程(init 除外)在exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理。这是每个子进程在结束时都要经过的 阶段。如果子进程在exit()之后,父进程没有来得及处理,这时用ps命令就能看到子进程的状态是”Z”。如果父进程能及时 处理,可能用ps命令就来不及看到子进程的僵尸状态,但这并不等于子进程不经过僵尸状态。
如果父进程在子进程结束之前退出,则子进程将由init接管。init将会以父进程的身份对僵尸状态的子进程进行处理。
另外,还可以写一个php文件,然后在以后台形式来运行它,例如:

然后在insertLargeData.php文件中做数据库操作。也可以用cronjob + php的方式实现大数据量的处理。
如果是在终端运行php命令,当终端关闭后,刚刚执行的命令也会被强制关闭,如果你想让其不受终端关闭的影响,可以使用nohup命令实现:
[/codes]
  //Action代码
  public function createAction(){
    //....
    //将args替换成要传给insertLargeData.php的参数,参数间用空格间隔
    system('nohup php -f insertLargeData.php ' . ' args ' . '&');
    $this->redirect('/');
  }
?>
[/codes]
你还可以使用screen命令代替nohup命令。


分别来自:
http://blog.zol.com.cn/2366/article_2365152.html
http://blog.zol.com.cn/2366/article_2365155.html
背景:主要是想通过在FF浏览器的Url栏里输入这样的,看中文:javascript.alert("\u8428\u6587\u7389-\u96ea\u5c71\u4e4b\u604b");

   昨天firefox自动将我的3.6版本升级为firefox12,升级完后发现firefox12速度比firefox3.6快了许多,感觉还不错的。但是今天发现在firefox12地址栏中输入javascript:alert(123)这种javascript脚本时,无法执行,打开firebug看发现尽然出错了:uncaught exception:referenceError:alert is not defined。
使用firefox3.6直接在地址栏输入javascript脚本都是可以执行的,升级了到firefox12就不行了?

网上查了一下,说是firefox7+版本以后不支持地址栏运行javascript脚本了,需要安装tab_utilities-1.1.5-fx.xpi扩展。+_+。。。
点击这里下载或者安装tab_utilities-1.1.5-fx.xpi扩展:http://www.coding123.net/download/20120824/firefox-tab-utilities-1.1.5-fx.xpi.aspx,
就可以在firefox7+版本以上的地址栏执行javascript脚本了。

当然还有第二个方法:
You can find that here: Firefox > Web Developer > Scratchpad (Shift+F4) .[这个最好打开一个新的窗口]
试了下果然可用,是这样的:调出那个框框后,直接输入(不再要javascript了):
alert("\u8428\u6587\u7389-\u96ea\u5c71\u4e4b\u604b");
按ctrl+r 就弹出框了,如下提示:
萨文玉-雪山之恋
来自:http://www.coding123.net/article/20120824/firefox-url-address-can-not-execute-javascript.aspx
http://support.mozilla.org/zh-CN/questions/895963

最后,如果一些接口输出中文,如UTF8是三个字节组成,看不清,用那个Shift+F4调出后,直接粘贴json串进里面去,点格式美化就能显示出中文了,不用在地址栏里输出javascript:alert("ssssXXXAAA");。
问:php fpm 两周遭遇2次假死 求指点 fpm static 256个 另外开了8G的memcache
答:一般都是因为一个请求卡主了以后   这个cgi可能就卡着不动了 合理设置IO的timeout时间
问:IO的timeout时间?
答:就是读写mysql memcache等的过期时间
------
补充:
其实我觉得 如果你是nginx 的话
可以让nginx 直接读memcache 这样可以减轻 fpm 的压力
点击在新窗口中浏览此图片

nginx + lua?淘宝那个 插件吧


恩 这样确实不错

看项目吧
我们这基本纯访问的 可以搞搞这种
有复杂逻辑的还是算了
而且有人说过 万一哪一时刻 memcache 命中率低了
fpm 会暴增 会形成多米洛效应

fpm 是静态的 固定的

背景:用try catch去捕获php的curl错误,是不行的,
The PHP cURL functions do not throw exceptions, so there will never be anything to catch. You'll just have to check the return value for a boolean false.
As to why the cURL timeout does not seem to be occurring after 30 seconds, I'm not sure.


上面代码返回:
error:Could not resolve host: 12122222.com; Host not found

打开注释代码返回:
Fatal error: Uncaught exception 'Exception' with message 'Curl Has Some Wrong ,Please Check It。' in D:\wamp\www\curl_try_catch.php on line 14
Exception: Curl Has Some Wrong ,Please Check It。 in D:\wamp\www\curl_try_catch.php on line 14
---
返回一些状态码,URl如下:curl.haxx.se/libcurl/c/libcurl-errors.html
再进行捕获。
来自:
http://stackoverflow.com/questions/3987006/how-to-catch-curl-errors-in-php

You can use the curl_error() function to know if there was some error, example:

if(curl_errno($c))
{
    echo 'error:' . curl_error($c);
}
===================================================

I'm trying to debug this cURL-operation. The var_dump() is returning bool(false)
How can I make it exit the try in that case?


Why not try throwing an Exception when false is returned?



Look here: php.net/manual/en/function.curl-exec.php; basically, false means the operation failed.
Found it: echo curl_error($ch); "Couldn't connect to host"

http://stackoverflow.com/questions/7069822/curl-try-catch-problem


群讨论:
回忆未来-向东-Jàck(372647***)  上午 10:49:40
PHP try catch 能抓到Curl的timeout吗
一周工作五天(243801***)  上午 10:50:58
不能
回忆未来-向东-Jàck(372647***)  上午 10:52:15
常规处理办法是?
三德子(277940***)  上午 10:52:31
curl没有抛异常 除非你去做个errorhandler
回忆未来-向东-Jàck(372647***)  上午 10:52:39
前一段时间我写过博文,但没有根治:http://www.jackxiang.com/post/6445/
errorhandler  ?
有示例demo么。
三德子(277940***)  上午 10:53:02
在errorhandler中 抛errorexception
看手册 errorexception这一章
回忆未来-向东-Jàck(372647***)  上午 10:53:48
嗯,超时捕获有code值没?
三德子(277940***)  上午 10:53:57

一周工作五天(243801***)  上午 10:55:41
搞那么复杂干嘛  直接把 超时时间设置长些不就ok了

----------------------------------------------------------------------------------------------
强制用try catch作下实践如下:

访问:http://jackxiang.com/test/testTimeOut
Max Time Out...time out。
Error fetching remote http://jackxiang.com/test/testMaxTimeUrl [ status 0 ]
Error fetching remote http://jackxiang.com/test/testMaxTimeUrl [ status 0 ]
Operation timed out after 5007 milliseconds with 0 bytes received
其实上述说明,不在curl里捕获,在外面一层也是能捕捉到的,只是错误的message提示是:Error:Operation timed out after 5007 milliseconds with 0 bytes received!
________________________________________________________________________________________________
在生产中的代码,用try catch实现的Remote:get,来自KO框架,作了下简单修改(有时Url为空,不知是谁调的,Add Time:2014/03/26):
分页: 9/18 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 下页 最后页 [ 显示模式: 摘要 | 列表 ]