Profilo di 磊Mrgaolei的BlogFotoBlogElenchi Strumenti Guida

Blog


17 dicembre

PHP 中保存一个远程图片/文件到本地的更有效方法

网上搜索了很多方法,大多数是:

ob_start();       # 开启缓冲
readfile($url);    # 输出远程文件的二进制到缓存中
$img = ob_get_contents();    # 把这些二进制存入变量
ob_end_clean(); # 清空缓存
$fp = fopen(“c:/123”, "w”);
fwrite($fp, $img);                 # 保存到硬盘
fclose($fp);

这个方法不好,首先用ob_start()局限性大,况且必须写在第一行,否则高版本PHP无效,会将二进制输出到浏览器,也就是没有开启缓冲区,导致浏览器僵死。

其实最简单最安全的方法是:

copy($url, “c:/123”);

从PHP 4.3.0开始,copy函数支持从网络上copy,所以用这个方法代替上述方法。前提是PHP配置文件需要打开fopen。

PHP 正则表达式学习小结(1)

一、模式修正符号

preg_match(“/^a/i”, $subject, &$matches);

这条正则表达式中红色的i便是模式修正符号,i是不区分大小写,经常用。今天用到了一个s,含义是让任意匹配符.支持换行。例如要匹配一段html,中间包含若干空格回车,直接(.*)是得不到的,默认.不匹配空格回车,加上模式修正符号s就可以实现,例如:

preg_match(“/<html>(.*?)<body>/s”, $subject, &$matches);

该正则表达式得到<html>和<body>之间的内容。

二、任意空白符号\s

匹配的内容前后后很多换行空格?用\s吧,将匹配所有空格换行。例如:

preg_match(“/<html>\s+(.*?)</body>/i”, $subject, &$matches);

该正则将不要<html>后面的所有空格换行。