【问题标题】:How to change port with PHP and avoid Content or Connection error in Firefox?如何使用 PHP 更改端口并避免 Firefox 中的内容或连接错误?
【发布时间】:2017-11-09 22:32:06
【问题描述】:

我有一个用 PHP 编码的服务器管理页面,其中一项功能是更改访问管理页面的端口。这是通过自调用形式 POST 方法中的数字 <input> 字段完成的。单击提交按钮时,代码将输入的数字作为要使用的端口号写入服务器的 Nginx 配置文件,然后运行命令重新启动 Nginx:

exec('sudo service nginx restart > /dev/null &');

问题是当这个命令运行时,Firefox 会抛出一个内容错误。我试图解决这个问题,改用这段代码:

$newAPort = $_POST['admin-port'];
header('Content-Length: 0');
// Restart Nginx
exec('sudo service nginx restart > /dev/null &');
sleep(15);
$newURL = 'http://'.$_SERVER[HTTP_HOST].':'.$newAPort;
header('Location: '.$newURL);

这是一些进步,Firefox 错误现在是“无法连接”,并且错误显示带有旧端口号的 URL。如何正确重定向到新端口?我以为上面的代码块可以做到,但事实并非如此。

【问题讨论】:

  • 旁注:如果$_SERVER[HTTP_HOST] 没有显示通知,则表示您正在编写禁用错误报告的 PHP。这使得它比它应该的更难。
  • 您期望由 Web 服务器启动的 PHP 脚本在 Web 服务器之间重新启动后仍然执行......?我认为这根本不可能。
  • @Alvaro - 好点,但直到今天(即将交付给客户)我有错误报告并且没有通知。通知应该是什么?
  • 通知应该是 “注意:使用未定义的常量 HTTP_HOST - 在 [...] 中假定为 'HTTP_HOST'” 除非您自己在某处实际定义了名称为 HTTP_HOST 的常量。
  • “有人告诉我,一些防火墙管理页面会启用端口更改,并在延迟后使用该端口” – 我仍然怀疑他们是否能做到这一点way ... // 我可能会先向客户端返回一个完整的 HTML 文档,可能是close the connection,然后重新启动 Web 服务器。您之前输出的所述 HTML 文档将包含元刷新,以使浏览器在 X 秒后使用新端口请求新地址 ...

标签: php firefox nginx port


【解决方案1】:

与 CBroe 的讨论朝着正确的方向发展,在对 SO 和其他地方进行了几次搜索之后,我得到了一个可行的解决方案,将其发布在此处以防它对其他人有所帮助。我的问题中的代码块被重构如下:

$rawHost = $_SERVER['HTTP_HOST']; // Get host
$onlyHost = explode(':', $rawHost)[0]; // Drop port num
$newAPort = $_POST['admin-port'];
header('Refresh:5; url=http://'.$onlyHost.':'.$newAPort, true, 301);
echo '<h3>Please wait a few seconds while the server updates...</h3>';
fastcgi_finish_request();
// Restart Nginx
exec('sudo service nginx restart > /dev/null &');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    相关资源
    最近更新 更多