2017-04-14 56 views
1

我正在从一个小型项目中读取电子身份证数据。从PHP URL保存图像 - 返回空图像

可能值得一提的是,我使用LightOpenID PHP库从eID获取所有数据的$attributes['']

现在我卡住试图挽救其显示在http://my-url.com/photo.php

photo.php包含图像

<?php 
session_start(); 

$photo = $_SESSION['photo']; 

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

echo($photo); 

变量$photo包含$_SESSION['photo']这来自指数。 php

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. 卷曲
$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); 
  • 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种方法在目录中创建一个空的.JPG文件我也想要它们。

    让我知道如果我需要提供任何额外的代码。 希望有人能指出我的错误

    +1

    我不知道,但要做到这一点,不是吗

    我与解码base64url只有一次需要在curl中设置会话cookie,以便知道如何设置会话并获取图像? –

    +1

    '$ filename'实际上应该包含什么?你使用它,但我没有看到它定义的任何地方......并且你试着强制标题? – OldPadawan

    +1

    这是在同一个网络服务器上?你是否有理由通过卷曲服务器来做到这一点,为什么不把图像再次从会话中拉出来呢? –

    回答

    0

    终于找到了解决办法。

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