作者: 烟圈 时间: 2005-12-24 12:03:10 标题: 一个自动保存远程图片的类
程序写得不怎么完善,如朋友修改后请发我一份。
[PHP]
<?
/*
远程图片自动保存到服务器上
参数:
$info 需要处理的内容
$dir 图片保存的目录
$url 新图片链接地址
返回值:
Array[0] 所取得的图片 多个图片之间 *** 分隔.
Array[1] 处理后的内容
调用试例
$u_images = new u_images();
$arr_imgs = $u_images->get_img($content, 'new_images/' , 'http://www.abc.com/');
$images = $arr_imgs[0];
$content = $arr_imgs[1];
邮箱:userden@126.com
*/
class u_images
{
//保存图片
function get_img($info,$dir,$url)
{
$imgs = $this->url($info);
$index = 1;
$n_file_date = date("YmdHis");
$sav_root = str_replace("//","/",$_SERVER['DOCUMENT_ROOT'] . "/") . $dir;
for($i=0;$i<sizeof($imgs);$i++)
{
$img_post = strrpos($imgs[$i],".");
$img_ext = substr($imgs[$i],$img_post,strlen($imgs[$i]) - $img_post);
$n_file = $n_file_date . $index . $img_ext;
$file_name = $this->save_file($imgs[$i],$n_file,$sav_root);
if($file_name)
{
$index++;
$value .= $file_name . "***";//需返回的数据
$info = str_replace($imgs[$i],$url . $dir . $file_name,$info);//对内容进行处理
}
}
$image_value[0] = $value;
$image_value[1] = $info;
return $image_value;
}
//取得字等中包含的所有图片地址
function url($info)
{
$arr_imgs = array();
$i = 0;
preg_match_all("'src[\s\r\n]?=[\s\r\n]?[\\\]?[\'|\"]?(.*?\.(jpg|gif|png))[\\\]?[\'\"]?'si", $info, $arrimgs, PREG_SET_ORDER);
foreach($arrimgs AS $value)
{
$arr_imgs[$i++] = $value[1];
}
return $arr_imgs;
}
//保存文件
function save_file($img,$n_file_name,$sav_root)
{
$file = @fopen($img,"rb");
if($file)
{
if($n_file = fopen($sav_root.$n_file_name,"w"))
{
while(!feof($file))
{
$buffer = fread($file,40960);
fwrite($n_file, $buffer);
}
fclose($n_file);
fclose($file);
return $n_file_name;
}
else
{
return false;
}
}
else
{
return false;
}
}
}
?>
[/PHP]
作者: phphp 时间: 2005-12-24 12:20:42
我有一个好点的, 要的话QQ:107197046
作者: meteor_shower 时间: 2005-12-24 12:27:00
樓上的貼出你代碼來﹐俺也看看
作者: 烟圈 时间: 2005-12-24 13:22:00
贴出来分享一下~
作者: psdshow 时间: 2005-12-24 13:36:08
贴出来嘛
别不舍得啊^_^
作者: wleige 时间: 2005-12-24 14:06:11
还要千呼万唤始出来吗?
作者: meteor_shower 时间: 2005-12-24 14:11:42
是不是在放蛇?
作者: 豆角 时间: 2005-12-24 15:02:10
留名
作者: 星际 时间: 2005-12-24 16:18:47
[QUOTE][i]最初由 phphp 发布[/i]
[B]我有一个好点的, 要的话QQ:107197046 [/B][/QUOTE]
有好的帖出来哦,
让俺们都看看。
整个QQ多麻烦...:D
作者: phphp 时间: 2005-12-24 17:23:20
[url]http://www.phpx.info/happy/showthread.php?s=&threadid=108573[/url]
改好了给我一份
作者: niexa123 时间: 2005-12-25 00:50:55
收下
作者: Xiaolin.Net 时间: 2005-12-25 20:08:53
不错,收藏一下
作者: namelessxp 时间: 2005-12-26 15:32:15
[code]
<?php
/**
* 当前文件简称
*
* 详细说明
* @file $Source$
* @package 包
* @author 作者 <邮件>
* @version $Id$
*/
@set_time_limit(0);
$baseurl = 'http://editplus.com/others.html';
$arrUrl = parse_url($baseurl);
for($i=0;$i<257;$i++) echo ' ';
echo '<br />';
$arrUrl['uri'] = ($arrUrl['path'] ? $arrUrl['path']:'') . ($arrUrl['query'] ? '?'.$arrUrl['query']:'') . ($arrUrl['fragment'] ? '#'.$arrUrl['fragment']:'');
echo 'fetching...'.$i.'<br />';
flush();
ob_flush();
$arrUrl['port'] = $arrUrl['port'] ? $arrUrl['port'] : '80';
$strRequest = "GET ".$uri." HTTP/1.1\r\n";
$strRequest .= "Host: ".$arrUrl['host']."\r\n";
$strRequest .= "Accept: */*\r\n";
//$strRequest .= "Accept-Encoding: gzip, deflate\r\n";
if($strRef!='') {
$strRequest .= "Referer: $strRef";
}
$strRequest .= "User-Agent: Mozilla/4.0 (compatible; MSIE 4.00; Windows 2000)\r\n";
$strRequest .= "Pragma: no-cache\r\n";
$strRequest .= "Cache-Control: no-cache\r\n";
$strRequest .= "Connection: close\r\n\r\n";
//open socket
@$fp = fsockopen($arrUrl['host'],$arrUrl['port'],$intError, $strError, 50) or die("cann't connect to ".$arrUrl['host'].".\n".$intError.': '.$strError);
//send request
@fwrite($fp,$strRequest);
//deal with response
$bolHeader = true;
$content = NULL;
$headers = NULL;
//$block = fgets($fp,4096);
while($block = fgets($fp,4096)){
if($bolHeader){
if($block=="\r\n"){
$bolHeader = false;
}
$headers .= $block;
}else{
$content .= $block;
}
//$block = $bolHeader ? fgets($fp,4096) : fread($fp,4096);
}
fclose($fp);
if($content){
preg_match_all('/<a\s+?.*?href=((?:[^<>]+(?:"[^"]*"|\'[^\']*\')?)+)>/is',$content,$matches);
//echo '<plaintext>';
}
$hrefs = $matches[1];
if(is_array($hrefs) && count($hrefs)>0){
foreach($hrefs as $key => $val){
$val = trim($val);
$href = (substr($val,0,1)=='"' || substr($val,0,1)=="'") ? substr($val,1,strlen($val)-2) : $val;
$filename = substr($href,strrpos($href,'/')+1);
$ext = substr($filename,strrpos($filename,'.')+1);
$ret = @fetchSingle($href);
if($ret && strstr(',ext,zip,rar,',','.$ext.',')){
$content = str_replace($href,$filename,$content);
}
flush();
ob_flush();
}
}
$fp = fopen('index.htm','w');
if($fp){
echo '<br />store index file';
flock($fp,2);
fwrite($fp,$content);
fclose($fp);
}
exit;
function fetchSingle($href,$force=false){
if(!trim($href)) return false;
@$arrUrl = parse_url($href);
if($arrUrl['scheme'] != 'http') return false;
echo '<br />fetching...'.$href;
@$filename = substr($href,strrpos($href,'/')+1);
if(file_exists($filename) && filesize($filename)>100) {
echo '...exist...ignore';
return true;
}
$ext = strtolower(substr($filename,strrpos($filename,'.')+1));
$arrUrl['uri'] = ($arrUrl['path'] ? $arrUrl['path']:'') . ($arrUrl['query'] ? '?'.$arrUrl['query']:'') . ($arrUrl['fragment'] ? '#'.$arrUrl['fragment']:'');
$uri = $arrUrl['uri'];
$arrUrl['port'] = $arrUrl['port'] ? $arrUrl['port'] : '80';
$strRequest = "GET ".$uri." HTTP/1.1\r\n";
$strRequest .= "Host: ".$arrUrl['host']."\r\n";
$strRequest .= "Accept: */*\r\n";
//$strRequest .= "Accept-Encoding: gzip, deflate\r\n";
if($strRef!='') {
$strRequest .= "Referer: $strRef";
}
$strRequest .= "User-Agent: Mozilla/4.0 (compatible; MSIE 4.00; Windows 2000)\r\n";
$strRequest .= "Pragma: no-cache\r\n";
$strRequest .= "Cache-Control: no-cache\r\n";
$strRequest .= "Connection: close\r\n\r\n";
//open socket
@$fp = fsockopen($arrUrl['host'],$arrUrl['port'],$intError, $strError, 50);
//send request
$content = $bolHeader = false;
if($fp){
@fwrite($fp,$strRequest);
//deal with response
$bolHeader = true;
$content = NULL;
$headers = NULL;
@$block = fgets($fp,4096);
while($block){
if($bolHeader){
if($block=="\r\n"){
$bolHeader = false;
}
$headers .= $block;
}else{
$content .= $block;
}
$block = $bolHeader ? fgets($fp,4096) : fread($fp,4096);
}
@fclose($fp);
if($content && $filename && strstr(',zip,rar,exe,',','.$ext.',')){
$fp = fopen($filename,'w');
fwrite($fp,$content);
fclose($fp);
}
return true;
}
return false;
}
/**
* $Log$
*/
?>
[/code]
我的,抓Editplus语法文件用过的,呵呵
标题: 一个自动保存远程图片的类 (查看完整版)
