在网上抓取一个图片保存到本地的php函数怎么写? $data=file_get_conents($url);writetofile($address,$data);function writetofile()........ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 file_get_conents是读取字符串的,不是读二进制数据的,你可以用他读取网上的一个图片试试,失败的 下载phpbb,打开admin/admin_users.php文件研究。(本来把代码帖上来的,但太长,帖部分吧) else if( !empty($user_avatar_url) ) { // // First check what port we should connect // to, look for a :[xxxx]/ or, if that doesn't // exist assume port 80 (http) // preg_match("/^(http:\/\/)?([\w\-\.]+)\:?([0-9]*)\/(.*)$/", $user_avatar_url, $url_ary); if( !empty($url_ary[4]) ) { $port = (!empty($url_ary[3])) ? $url_ary[3] : 80; $fsock = @fsockopen($url_ary[2], $port, $errno, $errstr); if( $fsock ) { $base_get = "/" . $url_ary[4]; // // Uses HTTP 1.1, could use HTTP 1.0 ... // @fputs($fsock, "GET $base_get HTTP/1.1\r\n"); @fputs($fsock, "HOST: " . $url_ary[2] . "\r\n"); @fputs($fsock, "Connection: close\r\n\r\n"); unset($avatar_data); while( !@feof($fsock) ) { $avatar_data .= @fread($fsock, $board_config['avatar_filesize']); } @fclose($fsock); if( preg_match("/Content-Length\: ([0-9]+)[^\/ ][\s]+/i", $avatar_data, $file_data1) && preg_match("/Content-Type\: image\/[x\-]*([a-z]+)[\s]+/i", $avatar_data, $file_data2) ) { $file_size = $file_data1[1]; $file_type = $file_data2[1]; switch( $file_type ) { case "jpeg": case "pjpeg": case "jpg": $imgtype = '.jpg'; break; case "gif": $imgtype = '.gif'; break; case "png": $imgtype = '.png'; break; default: $error = true; $error_msg = (!empty($error_msg)) ? $error_msg . "<br />" . $lang['Avatar_filetype'] : $lang['Avatar_filetype']; break; } if( !$error && $file_size > 0 && $file_size < $board_config['avatar_filesize'] ) { $avatar_data = substr($avatar_data, strlen($avatar_data) - $file_size, $file_size); $tmp_filename = tempnam ("/tmp", $this_userdata['user_id'] . "-"); $fptr = @fopen($tmp_filename, "wb"); $bytes_written = @fwrite($fptr, $avatar_data, $file_size); @fclose($fptr); if( $bytes_written == $file_size ) { list($width, $height) = @getimagesize($tmp_filename); if( $width <= $board_config['avatar_max_width'] && $height <= $board_config['avatar_max_height'] ) { $user_id = $this_userdata['user_id']; $avatar_filename = $user_id . $imgtype;。直到} file_get_contents(PHP 4 >= 4.3.0, PHP 5)file_get_contents -- 将整个文件读入一个字符串说明string file_get_contents ( string filename [, int use_include_path [, resource context]] )和 file() 一样,只除了 file_get_contents() 将文件返回为一个字符串。 file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。 注: 该函数可安全用于二进制对象。提示: 如果“fopen wrappers”已经被激活,则在本函数中可以把 URL 作为文件名来使用。请参阅 fopen() 函数来获取怎样指定文件名的详细信息以及支持 URL 协议的附录 L列表。注: Context 支持是 PHP 5.0.0 新加的。 如果是linux系统 可以使用php运行系统命令wget <?$s=file_get_contents('http://community.csdn.net/images/CSDN_logo.GIF');$fh=fopen('logo.gif','w');fwrite($fh,$s);fclose($fh);?>没问题唉,谁说不能保存二进制的?打PP 版本>5file_get_contents.file_put_contents就行了, // ######### 获取远程文件的大小 #############################################################// 范例:remote_image_upload("http://image2.sina.com.cn/sms/sinapic/27115050-index.jpg", "C:/apache/htdocs/1r1.jpg", 300000)function remote_filesize($url){ $urlinfo = parse_url($url); if ($urlinfo['scheme'] != 'http') { return false; } else if (empty($urlinfo['port'])) { $urlinfo['port'] = 80; } if ($fp = fsockopen($urlinfo['host'], $urlinfo['port'], $errno, $errstr, 30)) { fwrite($fp, 'HEAD ' . $url . " HTTP/1.1\r\n"); fwrite($fp, 'HOST: ' . $urlinfo['host'] . "\r\n"); fwrite($fp, "Connection: close\r\n\r\n"); while (!feof($fp)) { $headers .= fgets($fp, 4096); } fclose ($fp); $headersarray = explode("\n", $headers); foreach($headersarray as $header) { if (strpos($header, 'Content-Length') === 0) { $matches = array(); preg_match('#(\d+)#', $header, $matches); return sprintf('%u', $matches[0]); } } return false; } else { return false; }}// ########################################################################################// ######### 上传文件(文件来自远程文件) #################################function remote_image_upload($url = '', $uploadfile, $maxsize){ $url = trim($url); if ($url AND $url != 'http://www.') { if ($filesize = remote_filesize($url)) { $filetolarge = false; if ($filesize > $maxsize) { $filetolarge = true; } else { @ini_set('user_agent', 'PHP'); $handle = @fopen($url, 'rb'); if (!$handle) { return false; } while (!feof($handle)) { $contents .= fread($handle, 8192); if (strlen($contents) > $maxsize) { $filetolarge = true; break; } } fclose($handle); } if ($filetolarge OR (strlen($contents) > $maxsize)) { return false; } } else { return false; } $filename = tempnam(ini_get('upload_tmp_dir'), 'hzw'); $fp = @fopen($filename, 'wb'); @fwrite($fp, $contents); @fclose($fp); } if (!file_exists($filename)) { return false; } if (copy($filename, $uploadfile)) { @unlink($filename); return true; } else { @unlink($filename); return false; }}// ######################################################################################## 来来来!~~大家看下这么恶搞的php 如何搭建 PHP的开发环境?包括数据库和开发工具 求救!!!!服务器被攻击了 (重新开帖)请教在WINDOWS+APACEH的环境下如何配置非线程安全的PHP环境 关于php cookie操作的问题 如何制定PHP学习计划 如何截取一个字符串的前n个字符? 小问题_$谢谢 php代码修改求助 PHP和jsp哪个好学呢? 关于类的应用(讨论)都有分! 为什么我的PHPMYADMIN传到LIUNX上就运行不了啊。
else if( !empty($user_avatar_url) )
{
//
// First check what port we should connect
// to, look for a :[xxxx]/ or, if that doesn't
// exist assume port 80 (http)
//
preg_match("/^(http:\/\/)?([\w\-\.]+)\:?([0-9]*)\/(.*)$/", $user_avatar_url, $url_ary); if( !empty($url_ary[4]) )
{
$port = (!empty($url_ary[3])) ? $url_ary[3] : 80; $fsock = @fsockopen($url_ary[2], $port, $errno, $errstr);
if( $fsock )
{
$base_get = "/" . $url_ary[4]; //
// Uses HTTP 1.1, could use HTTP 1.0 ...
//
@fputs($fsock, "GET $base_get HTTP/1.1\r\n");
@fputs($fsock, "HOST: " . $url_ary[2] . "\r\n");
@fputs($fsock, "Connection: close\r\n\r\n"); unset($avatar_data);
while( !@feof($fsock) )
{
$avatar_data .= @fread($fsock, $board_config['avatar_filesize']);
}
@fclose($fsock); if( preg_match("/Content-Length\: ([0-9]+)[^\/ ][\s]+/i", $avatar_data, $file_data1) && preg_match("/Content-Type\: image\/[x\-]*([a-z]+)[\s]+/i", $avatar_data, $file_data2) )
{
$file_size = $file_data1[1];
$file_type = $file_data2[1]; switch( $file_type )
{
case "jpeg":
case "pjpeg":
case "jpg":
$imgtype = '.jpg';
break;
case "gif":
$imgtype = '.gif';
break;
case "png":
$imgtype = '.png';
break;
default:
$error = true;
$error_msg = (!empty($error_msg)) ? $error_msg . "<br />" . $lang['Avatar_filetype'] : $lang['Avatar_filetype'];
break;
} if( !$error && $file_size > 0 && $file_size < $board_config['avatar_filesize'] )
{
$avatar_data = substr($avatar_data, strlen($avatar_data) - $file_size, $file_size); $tmp_filename = tempnam ("/tmp", $this_userdata['user_id'] . "-");
$fptr = @fopen($tmp_filename, "wb");
$bytes_written = @fwrite($fptr, $avatar_data, $file_size);
@fclose($fptr); if( $bytes_written == $file_size )
{
list($width, $height) = @getimagesize($tmp_filename); if( $width <= $board_config['avatar_max_width'] && $height <= $board_config['avatar_max_height'] )
{
$user_id = $this_userdata['user_id']; $avatar_filename = $user_id . $imgtype;。直到
}
(PHP 4 >= 4.3.0, PHP 5)file_get_contents -- 将整个文件读入一个字符串
说明
string file_get_contents ( string filename [, int use_include_path [, resource context]] )
和 file() 一样,只除了 file_get_contents() 将文件返回为一个字符串。 file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。 注: 该函数可安全用于二进制对象。提示: 如果“fopen wrappers”已经被激活,则在本函数中可以把 URL 作为文件名来使用。请参阅 fopen() 函数来获取怎样指定文件名的详细信息以及支持 URL 协议的附录 L列表。注: Context 支持是 PHP 5.0.0 新加的。
$s=file_get_contents('http://community.csdn.net/images/CSDN_logo.GIF');
$fh=fopen('logo.gif','w');
fwrite($fh,$s);
fclose($fh);
?>
没问题唉,谁说不能保存二进制的?打PP
file_get_contents.
file_put_contents就行了,
// 范例:remote_image_upload("http://image2.sina.com.cn/sms/sinapic/27115050-index.jpg", "C:/apache/htdocs/1r1.jpg", 300000)
function remote_filesize($url)
{
$urlinfo = parse_url($url);
if ($urlinfo['scheme'] != 'http')
{
return false;
}
else if (empty($urlinfo['port']))
{
$urlinfo['port'] = 80;
}
if ($fp = fsockopen($urlinfo['host'], $urlinfo['port'], $errno, $errstr, 30))
{
fwrite($fp, 'HEAD ' . $url . " HTTP/1.1\r\n");
fwrite($fp, 'HOST: ' . $urlinfo['host'] . "\r\n");
fwrite($fp, "Connection: close\r\n\r\n");
while (!feof($fp))
{
$headers .= fgets($fp, 4096);
}
fclose ($fp);
$headersarray = explode("\n", $headers);
foreach($headersarray as $header)
{
if (strpos($header, 'Content-Length') === 0)
{
$matches = array();
preg_match('#(\d+)#', $header, $matches);
return sprintf('%u', $matches[0]);
}
}
return false;
}
else
{
return false;
}
}
// ########################################################################################// ######### 上传文件(文件来自远程文件) #################################
function remote_image_upload($url = '', $uploadfile, $maxsize)
{
$url = trim($url);
if ($url AND $url != 'http://www.')
{
if ($filesize = remote_filesize($url))
{
$filetolarge = false;
if ($filesize > $maxsize)
{
$filetolarge = true;
}
else
{
@ini_set('user_agent', 'PHP');
$handle = @fopen($url, 'rb');
if (!$handle)
{
return false;
}
while (!feof($handle))
{
$contents .= fread($handle, 8192);
if (strlen($contents) > $maxsize)
{
$filetolarge = true;
break;
}
}
fclose($handle);
}
if ($filetolarge OR (strlen($contents) > $maxsize))
{
return false;
}
}
else
{
return false;
}
$filename = tempnam(ini_get('upload_tmp_dir'), 'hzw');
$fp = @fopen($filename, 'wb');
@fwrite($fp, $contents);
@fclose($fp);
}
if (!file_exists($filename))
{
return false;
}
if (copy($filename, $uploadfile))
{
@unlink($filename);
return true;
}
else
{
@unlink($filename);
return false;
}
}
// ########################################################################################