file_get_contents 和 curl 区别

1、file_get_contents 每次请求都会重新做DNS查询,并不对 DNS信息进行缓存。但是CURL会自动对DNS信息进行缓存。对同一域名下的网页或者图片的请求只需要一次DNS查询。这大大减少了DNS查询的次数。所以CURL的性能比file_get_contents 好很多。
2、file_get_contents 在请求HTTP时,使用的是http_fopen_wrapper,不会keeplive。而curl却可以。这样在多次请求多个链接时,curl效率会好一些。
3、curl 可以模拟多种请求,例如:POST数据,表单提交等,用户可以按照自己的需求来定制请求。file_get_contents 也支持,但是配置更繁琐。
4、curl 支持更多协议,有http、https、ftp、gopher、telnet、dict、file、ldap;模拟 Cookie 登录,爬取网页;FTP 上传下载。
5、file_get_contents 建立远程连接失败会产生 Warning 警告;而 curl 则是把请求失败的状态码放入请求结果返回。

分类至 PHP
0条评论

用PHP进行HTTP认证

如果你有一个简单的页面需要做登录认证,也就是需要一个登录框,但是自己又懒得写一堆HTML和CSS,那么你可以借用浏览器的HTTP认证。
我们可以用PHP的 header() 函数来向客户端浏览器发送401状态信息,使浏览器弹出一个用户名/密码输入窗口。当用户输入用户名和密码提交后,浏览器将用户名和密码转码后添加到HTTP请求头发送给服务器,而PHP脚本将接收到用户名和密码存储到两个变量里:$_SERVER['PHP_AUTH_USER']、$_SERVER['PHP_AUTH_PW'] 。
浏览器支持两种常见的认证方法,分别是“Basic”和“Digest”。

分类至 PHP
0条评论

PHP借助文件锁实现命令行脚本单例模式

思路其实很简单:用fopen打开一个文件,然后用flock获取该文件的独占锁,当前脚本还没跑完时,会一直持有这个锁,另一个脚本尝试获取锁就会返回失败并退出,从而达到控制同一时间只有一个脚本实例在执行的效果。封装代码如下...

分类至 PHP
0条评论

PHP获取客户端真实IP

按顺序依次判断$_SERVER['HTTP_X_FORWARDED_FOR']、$_SERVER['HTTP_CLIENT_IP']、$_SERVER['REMOTE_ADDR']这三个变量,如果有值就马上返回。翻开PHP手册,查看$_SERVER数组的解释,你会发现,手册里居然没有HTTP_X_FORWARDED_FOR、HTTP_CLIENT_IP这两个元素,只有REMOTE_ADDR的解释。首先,$_SERVER数组以HTTP_开头的元素,是来自客户端的header头信息,也就是说,它们是客户端传给服务器的。因此,这些值是可以伪造的,是不安全的!但是,这并不代表它们就没有用处。

分类至 PHP
1条评论

PHP命令行模式下的多进程脚本

我们可以利用PHP的PCNTL模块,写多进程脚本,我整理了一个模板。当前,这个模块不支持Windows系统,需要Linux系统才支持(即非Unix类系统不支持此模块)。还有就是,在编译PHP的时候要加上 --enable-pcntl 选项它才会被编译。在Webserver环境下(如Apache、Nginx等),运行此模块会有不可预料的结果,因此,你只能在命令行模式下执行。

分类至 PHP
0条评论