0

我有这段代码可以很好地获取用户时区并在 php 中回显。之前还有一条警告信息。

<script type="text/javascript"
src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js">
</script> <script> var timezone =
Intl.DateTimeFormat().resolvedOptions().timeZone; alert(timezone);
</script>
<?php
$time= "<script>document.writeln(timezone);</script>";
echo $time;

我想将此回声存储在文件 time.txt 中

我试过这个:

$file_name = 'time.txt';
//opens the file.txt file or implicitly creates the file
$myfile = fopen($file_name, 'w') or die('Cannot open file: '.$file_name);
// write name to the file
fwrite($myfile, $time);
// close the file
fclose($myfile);

但它不起作用。

有什么解决办法吗?

4

1 回答 1

2

看起来你想要的是让 PHP 用 timezone 变量的结果写入文件,即它是一个包含时区名称的文本文件。

可能您看到的是 PHP 编写该 JavaScript 行,即<script>document.writeln(timezone);</script>

正确的?

发生的事情是 PHP在 JavaScript 运行之前完全执行。您的第一个示例正在运行,因为 PHP 执行,包括编写一行 JavaScript,然后 JavaScript 执行,包括该行,您会看到结果。

您在第二个示例中尝试执行的操作是不可能的。PHP 正在执行,包括将那行 JavaScript 写入(到文件),然后 JavaScript 执行,但当然不是在那个文本文件中。

您的两个选择是找到一种不同的方法来严格在 PHP 中获取时区,或者使用 JavaScript 获取它,然后使用 AJAX 触发 PHP 的稍后运行,即在 JavaScript 运行之后。

编辑

您的 JavaScript 将像以前一样获取时区。然后它将它发送到一个单独的文件中输出它:

var url = '..'; // url of a php file that JUST processes the file write
$.ajax({
  type: "POST",
  url: url,
  data: {
        'timezoneToPrint' : timezone
    }
});

在您刚刚调用的另一个 PHP 文件中,您现在可以将其打印到文件中

if($_POST['timezoneToPrint']){
   // ..write the file here, the timezone is in $_POST['timezoneToPrint']
}
于 2020-02-01T15:02:10.263 回答