【问题标题】:how to use refresh html header through php through shell如何通过shell通过php使用刷新html标头
【发布时间】:2015-02-20 18:21:34
【问题描述】:

我写了一个自动刷新的php脚本来做一个很长的过程。 为此,我使用:

header('refresh: '.$refresh_time);

每次刷新之间的时间会根据发生的情况而改变

它在经典浏览器上运行良好,但我现在需要从 shell 执行这个脚本。 为此,我尝试了:

php my_php_script.php

但这不起作用,因为它只执行了 1 次脚本(是的,这里没有刷新)。

那么,是否可以通过在命令外壳中调用脚本来使用 php 中发送的标头?

  • 如果是,请赐教。
  • 如果没有,那就完蛋了!!!!该死的,我会更改我的代码!

感谢您的帮助!

【问题讨论】:

  • 我猜这是不可能的,因为从命令行执行此脚本不会将标头发送到浏览器。
  • 您可以使用curl 命令并访问带有标题的url(在您的情况下为php)。
  • 刷新标头由您的浏览器解析。浏览器在header('refresh: '.$refresh_time); 中设置的时间间隔过后再次请求该站点。如果您在没有完整浏览器的情况下执行文件,它将不会被刷新。
  • @Jigar:所以我必须做一个 shell 脚本来调用 curl -i my_php_script.php 取决于从以前的 curl -i my_php_script.php 获得的刷新头?
  • @ByteHamster:我尝试过 lynx,但没有取得多大成功 :(

标签: php html shell header


【解决方案1】:

您可以通过在 php 文件中使用 shell 命令来实现这一点。您可以使用以下代码在 shell 中执行完全相同的操作。

$refresh_time = rand(2,10);
sleep($refresh_time);
$command     = "php my_php_script.php > /dev/null &";
shell_exec($command);

【讨论】:

  • 不错,但刷新延迟取决于将要发生的事情......而且知道它会做什么的是 php 脚本......
  • @LittleGecko 这只是为了演示,您可以使用 php 逻辑代替 rand 函数,如果需要,您还可以通过 shell 命令传递参数
【解决方案2】:

在 Linux 系统上,您可以使用cron。而在 Windows 上,您可以使用windows schedule task

基本上,您可以告诉他们何时执行您的脚本。每分钟、每天、每周等。

在 Google 上搜索以了解更多详情。

棘手的部分是更改时间间隔,对此无济于事。如果我找到相同的解决方案,一定会通知您。

【讨论】:

  • 所使用的刷新时间在 2 到 10 秒之间,而不是一分钟。如果每分钟执行一次 cron,执行整个过程将花费太长时间
  • 啊。是的,我怀疑 cron 是否会下降超过一分钟。忽略我的回答:)
  • 但我喜欢 curl 的想法 :)
【解决方案3】:

我回答了我的问题,但我要感谢大家提供的有用提示。

由于无法通过 shell 调用 php 来使用 HTML 标头,因此我编写了一个脚本来发送刷新标头并在再次调用 php 脚本之前休眠所需的时间。

#!/bin/bash

my_bash_function()
{
  response="$(curl -vs http://localhost/my_php_script.php) 2>&1"
  refresh_regex="refresh:[[:space:]]([0-9]+)\s*"
  numeric_regex="^[0-9]+$"

  if [[ "$response" =~ $refresh_regex ]] ; then
    refresh="${BASH_REMATCH[1]}"
    if [[ "$refresh" =~ $numeric_regex ]] ; then
      sleep $refresh
      my_bash_function
    fi
  fi
}

my_bash_function

这样,它允许我不更改 php 脚本并简单地使用它作为 curl 或 php 命令可以响应刷新头。

我错了吗?

编辑:我错了! curl - 我不接缝以正确执行 php 代码,但只执行标题需要的内容。 curl -vs 接缝可以工作,但要获得标题输出,我必须添加 2>&1

致谢:Jigar、Pavan Jiwnani

【讨论】:

  • 有 2 个数字测试,但由于某种原因,我更喜欢 1 in 而不是通过第一个测试(这证明了我对我的正则表达式技能的信心)
猜你喜欢
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 2013-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多