Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP使用GET属性从URL创建图像文件_Php_Image - Fatal编程技术网

PHP使用GET属性从URL创建图像文件

PHP使用GET属性从URL创建图像文件,php,image,Php,Image,对不起,伙计们,如果是重复的,我找不到类似的话题。因此,假设有一个包含图像内容的URL,名为“www.test.com/test.jpg”。 我想用php将图像保存到一个文件夹中,所以我使用 file_put_contents('test.jpg', 'www.test.com/test.jpg'); 它工作正常,将图像保存到当前文件夹。但是,如果图像URL如下所示: www.test.com/test.jpg?id={1a2b3c-4d5e6f} 我无法使用文件内容保存图像。如果我

对不起,伙计们,如果是重复的,我找不到类似的话题。因此,假设有一个包含图像内容的URL,名为“www.test.com/test.jpg”。 我想用php将图像保存到一个文件夹中,所以我使用

  file_put_contents('test.jpg', 'www.test.com/test.jpg');
它工作正常,将图像保存到当前文件夹。但是,如果图像URL如下所示:

  www.test.com/test.jpg?id={1a2b3c-4d5e6f}
我无法使用文件内容保存图像。如果我试图删除?id={1a2b3c-4d5e6f}部分,浏览器将无法打开该图像。有没有办法让拯救成功

$variable="www.test.com/test.jpg?id={1a2b3c-4d5e6f}";
$variable=substr($variable, 0, strpos($variable, "?")); // www.test.com/test.jpg
file_put_contents('test.jpg', $variable);

试试这个。

解决方案:首先,获取数据的函数:

    function getData($url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 ); 

        $data = curl_exec( $ch ); 
        curl_close($ch);  

        if ($data) return $data; 
        else die("no data - ".$url);
    }
然后使用:

 file_put_contents('test.jpg', getData(..URL..));

不要将URI用作文件名。这方面的潜在问题超出了您已经发现的范围

相反,类似于以下的方法将起作用

$uri = 'http://www.test.com/test.jpg?id={1a2b3c-4d5e6f}';
$data = file_get_contents($uri);
file_put_contents(md5($uri),$data);
如果需要图像的原始URI,请将其存储在DB或文本文件中,并引用回MD5。类似的东西可能会工作(无需测试)


您用来生成图像的代码是什么?当您尝试打开图像时会得到什么?404?或者是一个损坏的映像?我得到这个->HTTP status 400-type status report-客户端发送的请求在语法上不正确()。即使没有查询字符串?查询字符串实际上在语法上是不正确的,您必须对大括号进行URL编码。您确定返回的图像没有真正损坏吗?我认为这是解决方法,而不是解决方法。但将您从web检索的数据存储在具有公共访问权限的文件夹中是有风险的:如果有人屏蔽URL或劫持连接,他们可能会在您的系统上放置恶意代码并执行它。因此,请确保将图像存储在不执行脚本的文件夹中。删除?id=部分后,图像的URL将被破坏。
$uri = 'http://www.test.com/test.jpg?id={1a2b3c-4d5e6f}';
$uriMd5 = md5($uri);
$data = file_get_contents($uri);
file_put_contents($uriMd5,$data);
file_put_contents($uriMd5.'.txt',$uri);