在这种特殊情况下,在PHP脚本之间传递值
Passing values between PHP scripts in this particular situation
所以在我的HTML标记中,我有一个像这样的图像标记:
<img src="image_generation.php" alt="template" id="image" />
"src"属性链接到一个PHP脚本,该脚本使用其中定义的几个变量生成图像,这些变量大多是随机生成的。
现在,我想做的是访问页面中的那些随机变量,其中包括图像生成脚本。我想我可以发送cookie并在图像标签后访问它们,因为从技术上讲,它们应该可以随时用于包含文件。我不想发送太多信息,只想发送几个(10-20)变量。不确定在这种情况下会话是否是更好的选择,因为我必须发送几个cookie。会话也带来了一个问题,因为include脚本获得了旧会话,我必须刷新页面才能获得以前生成的图像的值。我想我也可以在include脚本中设置一个数据库并访问数据库,但变量是临时的,我必须删除它们,这对我来说似乎很麻烦。
图像生成脚本以结束
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
在头调用之前,任何内容都不能发送到浏览器,否则图像将不会显示。如果我使用cookie或会话,image_generation.php
将必须发送图像并设置cookie/会话。
没有一个选项(cookie、会话或DB)真正让我信服,因为在这种特殊情况下,每个选项都有问题。你能想办法解决这个问题吗?谢谢
主要编辑#1:包含脚本在不刷新/设置cookie的情况下获取先前生成的图像的会话和/或在发送图像之前/之后包含脚本中的会话而不进行输出缓冲不会造成问题。
您可以使用$_SESSION
,但要使会话在包含<img>
标记的同一脚本中可用(该标记在图像脚本之前执行),您需要通过JavaScript进行AJAX调用。在window.onload
上运行的AJAX处理程序应该可以访问图像脚本创建的$_SESSION
,因为图像在执行时应该已经完全加载。
示例PHP处理程序getsession.PHP:
header('Content-type: application/json');
// Simply part of the session into JSON
// Obviously you would want to limit this to only the variables
// that should be sent back, so you don't expose the session on the client side!
echo json_encode(array($_SESSION['var1'],$_SESSION['var2']));
exit();
AJAX调用示例(使用jQuery,因为它很容易上手)
// Variable to hold the object returned by PHP
var imgPHPSession;
$(window).load(function() {
$.ajax({
url: 'getsession.php',
dataType: 'json',
success: function(data) {
imgPHPSession = data;
}
});
});
更新:
这完全可以在PHP中完成,但需要稍微更改设计,以便通过主脚本在$_SESSION
中创建生成图像所需的变量。然后,它们在$_SESSION
中可用于image_generation.php,以便根据需要使用,但主脚本已经知道了。
更新2:
由于镜像变量包含如何创建的信息,如果镜像不是太大,您实际上可以在主脚本中创建它并将其存储到磁盘。image_generation.php脚本仍然可以用作<img src>
,但其目的是从磁盘中检索正确的图像,并将其提供给浏览器,并在不再需要时将其从磁盘中删除。$_SESSION
然后可用于主脚本和图像脚本。
您可以将参数传递给src属性,例如:
<img src="image_generation.php/user/1/name/tom/param1/variable2"
或
<img src="image_generation.php?user=1&name=tom
这个解决方案让你忘记会话,cookie-它是无状态的
Php可以通过ob_*函数对缓冲区进行巧妙的处理,因此在脚本开始时,您可以调用ob_start()来缓冲每个Php输出,这可以避免所有"Header already send"错误。
您的image_generation.php不需要发送任何cookie。该脚本将接收带有sessionid的cookie(浏览器将cookie信息附加到服务器的每个请求),这使得在php端识别用户会话成为可能——之后您可以访问每个会话参数。
- 如何在弹出脚本到内容脚本之间发送消息并返回
- Firefox插件SDK:在侧边栏和主脚本之间通信对象
- 什么's使用链接和脚本标记引用JavaScript源之间的区别
- 什么's使用脚本标记调用文件和ajax之间的区别
- Chrome审核:在外部CSS文件之间的头中发现了1个内联脚本块&”;
- 函数在两个或多个脚本之间进行访问
- 歌剧扩展脚本和它们之间的通信
- 我如何向这个脚本添加一个点击按钮循环URL函数(按给定顺序在URL之间切换),或者这可能吗
- Chrome扩展:内容脚本和background.html之间的通信
- 一个用户脚本的两个实例如何在帧之间进行通信
- 在这种特殊情况下,在PHP脚本之间传递值
- Chrome扩展:在内容脚本和网页之间进行通信'的脚本
- Chrome扩展:在后台页面和网站页面脚本之间进行通信的最佳方法
- 如何在Chrome扩展弹出窗口和内容脚本之间发送消息
- 从java脚本到C#的回调,C#和java脚本之间的异步编程
- 如何识别源自JS脚本的http请求与HTML
- 脚本标记,脚本标记之间有 src 和代码
- 任意运行时脚本元素和 DOM 元素之间的连接
- 不了解插件和脚本之间的区别
- 如何在内容脚本和面板之间进行通信