【问题标题】:Save image from PHP URL - returns empty image从 PHP URL 保存图像 - 返回空图像
【发布时间】:2017-04-14 13:35:07
【问题描述】:

我正在做一个小项目,我从电子身份证读取数据。

值得一提的是,我正在使用 LightOpenID PHP 库来获取 $attributes[''] 以及来自 eID 的所有数据。

现在我无法保存显示在 http://my-url.com/photo.php 上的图像

photo.php 包含:

<?php
session_start();

$photo = $_SESSION['photo'];

header('Content-Type: image/jpeg');

echo($photo);

变量$photo 包含来自index.php$_SESSION['photo']

function base64url_decode($base64url) {
    $base64 = strtr($base64url, '-_', '+/');
    $plainText = base64_decode($base64);
    return ($plainText);
}

$encodedPhoto = $attributes['eid/photo'];
$photo = base64url_decode($encodedPhoto);
$_SESSION['photo'] = $photo;

图像在 index.php (&lt;?php echo '&lt;img src="photo.php"/&gt;'; ?&gt;) 和 photo.php 上都完美可见。

我已经阅读了一些类似的主题并尝试了以下方法:

  1. cURL
$ch = curl_init();    
curl_setopt($ch, CURLOPT_URL, 'http://my-url.com/photo.php');     
$fp = fopen('./photo/' . $filename . '.jpg', 'wb');      
curl_setopt($ch, CURLOPT_FILE, $fp);      
curl_setopt($ch, CURLOPT_HEADER, 0);      
curl_exec($ch); curl_close($ch);      
fclose($fp);
  1. File_put_contents
 $input = "my-url.com/photo.php";
 $output = './photo/' . $filename . '.jpg';
 file_put_contents($output, file_get_contents($input));
  1. 复制

甚至尝试了基本副本:

copy( "http://my-url/photo.php", './photo/' . $filename . '.jpg');

所有 3 种方法都会在我想要的目录中创建一个 empty .jpg 文件。

如果我需要提供任何额外的代码,请告诉我。 希望有人能指出我的错误

【问题讨论】:

  • 我不确定,但要做到这一点,您是否需要在 curl 中设置会话 cookie,以便它知道如何设置会话并获取图像?
  • $filename 实际上应该包含什么?你使用它,但我没有看到任何定义它的地方......你有没有尝试强制标头?
  • 这是在同一个网络服务器上吗?您是否有理由通过卷曲服务器来执行此操作,为什么不再次将图像从会话中拉出?
  • $filename 包含一系列从身份提供的数字。图像的名称类似于 ex.: 93062339141.jpg。我将尝试设置 cookie 和强制标头。我会保持更新。
  • 您可以通过 url 传递文件名。例如使用网址:my-url.com/photo.php?filename=your-file-name。然后你必须更新 photo.php 以便它检查文件名是否在 url 中给出

标签: php html image curl


【解决方案1】:

终于找到了解决办法。

我只对 base64url 解码一次:

function base64url_decodeOnce($base64url){
    $base64 = strtr($base64url, '-_', '+/');
    return ($base64);
}

这样我就可以将 $base64 输出用于:

$data = 'data:image/jpeg;base64,' . $base64data .'\'';
list($type, $data) = explode(';', $data);
list(, $data)      = explode(',', $data);
$data = base64_decode($data);
file_put_contents('./photo/' . $filename . '.jpg', $data);

【讨论】:

    猜你喜欢
    • 2010-10-17
    • 2012-09-21
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2011-09-22
    • 2015-07-25
    相关资源
    最近更新 更多