技术实践

php获取网络图片上传Linux

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

羊先生的头像
羊先生2019.11.18 · 2 分钟阅读 · 238 阅读
php获取网络图片上传Linux封面
文章正文还需 2 分钟
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权限的文章

Linux查看、修改文件读写权限
Linux常用命令:chmod修改文件权限 777和754