我可以在不启用fopen包装的情况下使用URL作为imagecreatefromjpeg()的源吗


Can I use a URL as the source for imagecreatefromjpeg() without enabling fopen wrappers?

我知道可以使用imagecreatefromjpeg()、imagecreatefrompng()等,并使用fopen()将URL作为"文件名",但由于安全问题,我无法启用包装器。有没有一种方法可以在不启用的情况下将URL传递给imagecreatefromX()?

我也尝试过使用cURL,这也给我带来了问题:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.../image31.jpg"); //Actually complete URL to image
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
$image = imagecreatefromstring($data);
var_dump($image);
imagepng($image);
imagedestroy($image);

您可以使用cURL下载文件,然后将结果管道传输到imagecreatefromstring中。

示例:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $imageurl); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // good edit, thanks!
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); // also, this seems wise considering output is image.
    $data = curl_exec($ch);
    curl_close($ch);
    $image = imagecreatefromstring($data);

您甚至可以使用stream_wrapper_register为'http'实现一个基于cURL的流包装器。

您可以始终将图像(例如使用cURL)下载到一个临时文件,然后从该文件加载图像。