从PHP URL保存图像 - 返回空图像

时间:2017-04-14 13:35:08

标签: php html image curl

我正在开展一个小项目,在那里我从电子身份证中读取数据。

值得一提的是,我正在使用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(<?php echo '<img src="photo.php"/>'; ?>)以及photo.php上都是完全可见的。

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

  1. 卷曲
  2. $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
    2.  $input = "my-url.com/photo.php";
       $output = './photo/' . $filename . '.jpg';
       file_put_contents($output, file_get_contents($input));
      
      1. 复制
      2. 甚至试过一个基本的副本:

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

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

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

1 个答案:

答案 0 :(得分:0)

终于找到了解决方案。

我只使用:

解码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);