技术实践
php获取网络图片上传Linux
获取网络图片并下载然后上传服务器,在Windows没遇到什么大问题,在Linux遇到各种问题

php
/**
* 将网络图片保存 到 本地 图片
* @param $url
* @param string $save_dir
* @param string $filename
* @param int $type
* @return array
* 用法 getImage('http://webstack.cc/assets/images/logos/coolors.png')
*/
function getImage($url,$save_dir='',$filename='',$type=1){
if(trim($url)==''){
return array('file_name'=>'','save_path'=>'','error'=>1);
}
if(trim($filename)==''){//保存文件名
$ext=strrchr($url,'.');
if($ext!='.gif'&&$ext!='.jpg'&&$ext!='.png'){
return array('file_name'=>'','save_path'=>'','error'=>3);
}
$filename=str_rand().$ext;
}
// 生成文件夹
$path = 'uploads'.DS.date("Y").date("m").date("d").DS;
$save_dir = $path;
//创建保存目录
// file_exists() 函数检查文件或目录是否存在。
if(!file_exists($save_dir)&&!mkdir($save_dir,true)){
return array('file_name'=>'','save_path'=>'','error'=>5);
}
//获取远程文件所采用的方法
if($type){
$ch=curl_init();
$timeout=5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$img=curl_exec($ch);
curl_close($ch);
}else{
ob_start();
readfile($url);
$img=ob_get_contents();
ob_end_clean();
}
//fopen 如果返回false 一般就是路径或者权限问题
$fp2=@fopen(ROOT_PATH.$save_dir.$filename,'wb');
fwrite($fp2,$img);
fclose($fp2);
unset($img,$url);
return array('file_name'=>$filename,'save_path'=>DS.$save_dir.$filename,'view_path'=>config('setting.url_prefix').DS.$save_dir.$filename,'error'=>0);
}
如若出现
readdir() expects parameter 1 to be resource, boolean given 错误
检查文件是否有操作权限,如果没有执行 sudo chmod -R 777 /file/test 将test文件夹设置最高权限
fopen('wb')
fopen一些参数定义参考菜鸟教程
致命错误: Call to a member function validate() on null
看看服务器配置upload_max_filesize设置的大小是否超过了上传的大小,默认设置一般2m
如果出现nginx错误,则需要配置在http模块下配置client_max_body_size 2m
介绍linux权限的文章