这是我的代码,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来阻止用户输入任何内容并将图像存储在磁盘中。
所以,我认为我需要一个变量来存储可以再次使用的图像。 但我发现我不能使用上述方法。
我怎样才能做到这一点?
答案 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中调用它们。