我试图延迟PHP执行,直到通过JavaScript设置cookie。代码在下面,为了简单起见,我修剪了createCookie
JavaScript函数(我已经测试了函数本身并且它可以工作)。
<?php
if(!isset($_COOKIE["test"])) {
?>
<script type="text/javascript">
$(function() {
// createCookie script
createCookie("test", 1, 3600);
});
</script>
<?php
// Reload the page to ensure cookie was set
if(!isset($_COOKIE["test"])) {
header("Location: http://localhost/");
}
}
?>
起初我不知道为什么这样做不起作用,但是在使用microtime()
之后我发现<script>
之后的PHP正在之前执行 jQuery就绪函数。我大大减少了我的代码,以显示一个可以回答的简单版本,我很清楚我可以在PHP中使用setcookie()
,对cookie的要求是客户端。
我理解混合PHP和JavaScript是不正确的,但是如何使这项工作有任何帮助(是否有PHP延迟? - 我试过sleep()
,没有工作,没有想到它会起作用,因为脚本也会被延迟),我们将非常感激。
答案 0 :(得分:2)
不可能 执行您正在尝试的操作,正如其他答案所述,但对您的服务器来说,这也不是一件轻而易举的事情。等待客户端的每个请求“设置一个cookie。”
但是可以做到。
<script>
块来设置cookie。虽然PHP 在JavaScript之前执行,但所有浏览器都会逐步加载由PHP(或任何服务器端语言)生成的HTML / CSS / JavaScript内容。由于增量加载,您的PHP脚本可能会在继续之前延迟JavaScript执行某些操作(如上所述)。但是你的服务器将会遇到很多麻烦,例如,如果JavaScript请求永远不会出现,等待JavaScript在#2中打破空闲循环的时间等等。
这不是标准网页的正常执行流程。除非你真的需要这个,否则可以认为这是一个概念验证的答案。
答案 1 :(得分:1)
PHP首先在服务器上完整执行。然后它将最终的HTML / Javascript / CSS输出发送到浏览器。浏览器接收并执行任何Javascript。
根本不可能来执行您尝试使用该代码执行的操作。 PHP和Javascript在完全不同的环境中运行完全不同的时间。一旦Javascript设置cookie以启动另一个 PHP脚本,您需要向服务器发起另一个请求。使用Javascript重定向或查看AJAX。
答案 2 :(得分:1)
如果要在PHP之前执行JavaScript,则必须将其分为两个请求。您可以在一个请求中加载JavaScript,并在设置cookie后执行Ajax请求。请记住,在执行客户端代码之前,将处理所有服务器端代码。
我不得不问..你为什么要这样做?你想要完成什么?
答案 3 :(得分:1)
可以使用setcookie
setcookie("test",1,time()+3600);
答案 4 :(得分:0)
PHP在服务器端执行,客户端的JS执行。在来自浏览器的单个GET请求中,PHP将在JS之前始终执行。
答案 5 :(得分:0)
这不能在单个请求中完成。 PHP首先运行,然后运行JavaScript。即使是增量加载也无济于事,因为cookie是通过标头发送的,而且那些已经在PHP运行时发送过。
但是,您可以让JavaScript设置Cookie,然后在使用location.reload()
完成后重新加载页面。然后,PHP只需要打印JavaScript,如下所示:
<?php
if(!isset($_COOKIE["test"])) {
?>
<script type="text/javascript">
$(function() {
// createCookie script
createCookie("test", 1, 3600);
// reload the page, which would send the cookie at the next request
location.reload();
});
</script>
<?php
// stop execution and wait for JavaScript to call you again.
exit;
}
?>