如何从图像变量(SESSION)存储和获取图像?

时间:2016-08-15 10:38:11

标签: php

这是我的代码,test1.php有效,test2.php无效。

test1.php:

<?php

session_start();

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

$text = rand(1000,9999);
$font_size = 5;

$image_width = imagefontwidth($font_size) * strlen($text);
$image_height = imagefontheight($font_size);
$image = imagecreate($image_width, $image_height);

imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, 0, 0, 0);

imagestring($image, $font_size, 0, 0, $text, $text_color);

$_SESSION['image'] = $image;

$image_session = $_SESSION['image'];
imagejpeg($image_session);

?>

test2.php:

<?php
session_start();

header('Content-type: image/jpeg');
$image_session = $_SESSION['image'];
imagejpeg($image_session);

?>

如您所见,test1.php创建一个随机图像。 我可以用:

<img src="test1.php">

在任何页面中显示来自test1.php的图像。 但是,我想在其他php文件中使用if else语句。

例如:

如果用户单击“提交”按钮并且不输入任何内容(无应答),则图像仍然相同,他们必须回答相同的问题。如果失败,图像将会改变。

我不想使用javascript来阻止用户输入任何内容并将图像存储在磁盘中。

所以,我认为我需要一个变量来存储可以再次使用的图像。 但我发现我不能使用上述方法。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

imagecreate()返回表示给定图片的资源。 PHP的会话无法存储资源类型的变量(更确切地说 - PHP无法在脚本结束时序列化它们),请参阅http://php.net/manual/en/function.session-register.php

  

注意:目前无法在a中注册资源变量   会话。 ...

您可以将图像序列化为字符串并将此字符串存储到会话中(未测试):

test1.php:

...

ob_start();
imagejpeg($image);
$contents = ob_get_contents();
ob_end_clean();
$_SESSION['image'] = $contents;

test2.php:

header('Content-type: image/jpeg');
die($_SESSION['image']);

答案 1 :(得分:0)

在不了解情况的情况下,你不能做像

这样的事情
session_start();

$_SESSION['randomValue'] = mt_rand(1000,9999);

if(someValueIsEntered){
     $_SESSION['randomValue'] = mt_rand(1000,9999);
}

echo "<img src='test.php?random=".$_SESSION['randomValue']."'/>";

test.php的

$randomValue = filter_input(INPUT_GET, 'random');

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

$text = $randomValue;
$font_size = 5;

$image_width = imagefontwidth($font_size) * strlen($text);
$image_height = imagefontheight($font_size);
$image = imagecreate($image_width, $image_height);

imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, 0, 0, 0);

imagestring($image, $font_size, 0, 0, $text, $text_color);

imagejpeg($image);

多个参数示例:

将有关图像的信息存储在数组中。

session_start();

if(!isset($_SESSION['imageData']){
    $_SESSION['imageData'] = array(
                                   "random" => mt_rand(1000,9999),
                                   "x1" => mt_rand(0,10),
                                   "x2" => mt_rand(0,10)
                                   );
}

if(someValueIsEntered){
    //Randomize array again.
}

$imageString = "test.php";
foreach ($_SESSION['imageData'] as $key => $value) {
    $index = current($array);

    if($index == 0) {
       $seperator = "?";
    } else {
       $seperator = "&";
    }

    $imageString .= $seperator.$key."=".$value;
}

echo "<img src='".$imageString."'/>";

然后在test.php中调用它们。