REMOTE_ADDR 为空,不包含在 SERVER 数组中

2023-12-09

搬到新服务器后我遇到了一个奇怪的问题。用于获取邮件的 cron 会检查授权 IP,其中之一默认为 127.0.0.1

移动后它停止工作,因为 REMOTE_ADDR 变量未填充。它是从浏览器调用时调用的,但不是从 cron 内部运行或使用 php 从控制台运行时调用的。我转储了 $_SERVER 变量,这就是 cron/console 中的所有内容

(
   [SHELL] => /bin/sh
   [MAILTO] => *removed*
   [USER] => *removed*
   [PATH] => /usr/bin:/bin
   [PWD] => /home/*removed*
   [SHLVL] => 1
   [HOME] => /home/*removed*
   [LOGNAME] => *removed*
   [_] => /usr/local/bin/php
   [PHP_SELF] => /home/*removed*/public_html/support/cron.php
   [SCRIPT_NAME] => /home/*removed*/public_html/support/cron.php
   [SCRIPT_FILENAME] => /home/*removed*/public_html/support/cron.php
   [PATH_TRANSLATED] => /home/*removed*/public_html/support/cron.php
   [DOCUMENT_ROOT] =>
   [REQUEST_TIME] => 1300522141
   [argv] => Array
       (
           [0] => /home/*removed*/public_html/support/cron.php
       )

   [argc] => 1
)

if(!$cron->isValidIp($_SERVER['REMOTE_ADDR'])) {
    echo sprintf("[ERROR]: Your IP %s is not authorized to run scheduled tasks.  Please notify your administrator.",
        $_SERVER['REMOTE_ADDR']
    );

        // [JAS]: Test all our IPs for a wildcard match
        if(is_array($this->valid_ips))
        foreach($this->valid_ips as $mask) {
            if(empty($mask)) continue;
            if(0 == strcmp(substr($ip,0,strlen($mask)),$mask)) {
                return true;
            }

The $_SERVER['REMOTE_ADDR']由于 Apache 从命令行运行,所以填充了该变量,该变量以及许多其他变量都不会被设置。

另外,即使设置了,REMOTE_ADDR 也将始终是运行 cron 的计算机的本地 IP,因为您无法远程运行它。

[edit]

为了保持一致性,这里有一个使用 php_sapi_name 的示例

if(php_sapi_name() === 'cli') {
    // You're running locally from the CLI
} else {
    // You're running remotely, check against list of authorized ip addresses.
}

就您而言,您可以将 if 更改为:

if(php_sapi_name() != 'cli' && !$cron->isValidIp($_SERVER['REMOTE_ADDR'])) {
    ....
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

REMOTE_ADDR 为空,不包含在 SERVER 数组中 的相关文章

随机推荐

  • 如何针对 64 位优化 .NET 网站和应用程序?

    如何在 NET 2 0 Web 应用程序和控制台 表单应用程序中充分利用 64 位架构 我认为在 32 位与 64 位架构方面 您的托管 NET 代码中没有太多可以优化的地方 这是因为大多数差异和优化很可能已经由底层虚拟机实现 正如中提到的
  • 一段时间后显示 UIAlertView

    我试图在一段时间后显示 UIAlertView 比如在应用程序中执行某些操作后 5 分钟 如果应用程序已关闭或在后台运行 我已经通知用户 但我想在应用程序运行时显示 UIAlertView 我尝试按如下方式调度异步 但警报永远弹出 NSTh
  • URL 以句点结尾的 WebClient 问题

    我正在运行以下代码 using WebClient wc new WebClient string page wc DownloadString URL 要访问股价网站的 URL http www shareprice co uk 如果您将
  • JPA:级联删除不会删除子级

    编辑 修改问题以更好地反映问题 最初发布的问题here 我有一个父母 Context 和一个孩子 User 实体 多对一关系 父级上的级联 REMOVE 不会删除子级 代码如下 Owning side child Entity public
  • 如何在Python中获取CSV文件的总行数?

    我正在使用 python Django 框架 来读取 CSV 文件 如您所见 我仅从该 CSV 中提取了 2 行 我一直在尝试做的是将 CSV 的总行数存储在变量中 如何获得总行数 file object myfilePath fileOb
  • OpenCart - 不发送电子邮件(通知或联系页面)

    据我所知 我的邮件设置配置正确 但我没有收到任何电子邮件 不是通过联系表单收到的 也没有收到新客户或下的任何订单的电子邮件 这是我当前的设置 我试过了 更改为 SMTP 我收到错误 我的主机 IXWebHosting 说我 需要在应用程序内
  • 在react-native中使用函数的区别

    假设我有一个向其传递函数的组件 export default class SomeComp extends Component constructor props super props someFunc gt return render
  • 在 JTextArea 中插入文本

    我正在用Java开发一个简单的应用程序 我想知道是否有任何方法可以在文本区域内插入附加文本 句子中间的某个位置 该文本区域不是空的 在光标所在的位置某些组件的点击 有人可以指导我如何完成它吗 如果这是一个JTextArea组件你可以使用 a
  • 普遍适用

    如何制作适用于 iphone 和 ipad 的通用应用程序 我们如何检测设备是 iPhone 还是 iPad 最简单的方法是使用UI USER INTERFACE IDIOM UIUserInterfaceIdiomPad and UI U
  • CSS 选择器中的逗号是什么意思? [复制]

    这个问题在这里已经有答案了 当我拥有时这意味着什么 A B A C some styles 这是否意味着B类没有样式定义 这意味着两者 A B and A C共享相同的声明块 逗号表示将该块中的声明应用于这两个选择器 而逗号后面的换行符并不
  • 在我的应用程序中使用锁屏?

    我想让我的应用程序在多任务处理时使用锁定屏幕上的音频按钮 是的 就像潘多拉一样 我想要使 用什么 API See the 多媒体远程控制文档 基本上 你只需要调用 beginReceivingRemoteControlEvents在您的共享
  • 通过迁移向列添加默认值

    如何通过迁移向已存在的列添加默认值 我能找到的所有文档都会向您展示如何在该列尚不存在的情况下执行此操作 但在本例中它确实存在 您应该这样做 change column users admin boolean default gt false
  • 反引号作为语法运算符

    刚刚遇到了一些对我来说似乎很奇怪的事情 反引号的功能类似于语法运算符 applyOp Int gt Int gt Int gt Int gt Int gt Int applyOp x op y x op y gt applyOp 2 5 7
  • 无法对多个 GWT 应用程序使用相同的 cookie

    我正在开发一个应用程序网络 我想向我的用户提供多个应用程序 他们只需注册 登录一次 并通过同一登录名使用所有应用程序 为了实现这一点 我创建了一个 cookie 在其中存储用户的会话 ID 他在登录时收到 每次用户打开应用程序时 启动模块都
  • Microsoft Graph:将文件上传到共享库而不是用户库?

    在有关的文档中Upload 列出了这些请求选项 PUT me drive items parent id filename content PUT me drive root parent path filename content PUT
  • 高图表中的不同标记大小?

    对于高图中的散点图 我希望不同的系列具有不同的标记半径 这可能吗 plotOptions series marker enabled true symbol circle radius 15 使用以下方法不起作用 plotOptions s
  • 如何获取使用 UrlFetchApp.fetch(photoLink) 获得的 jpeg 图像的大小(以像素为单位)?

    在以 HTML 格式发送电子邮件的脚本中 我添加了存储在公共共享文件夹中的图像 我使用得到的斑点UrlFetchApp fetch photoLink 但图像不一定具有正确的尺寸 因此在 html 代码中我使用宽度和高度属性 目前使用固定值
  • 检索 WordPress 根目录路径?

    如何检索 WordPress CMS 中根目录的路径 查看 WordPress 根目录中的 wp config php 文件底部 您会发现如下内容 if defined ABSPATH define ABSPATH dirname FILE
  • 已发布的 https://docs.google.com/spreadsheets 重定向到其他网址(CSV 数据)

    我们自动发布 Google 文档电子表格 一个选项卡为 CSV Google 文档提供了引用 CSV 的固定 URL 我们将此 CSV 导入到另一个用于产品数据导入的工具中 突然 这个 URL 被 Google Spreadsheet 重定
  • REMOTE_ADDR 为空,不包含在 SERVER 数组中

    搬到新服务器后我遇到了一个奇怪的问题 用于获取邮件的 cron 会检查授权 IP 其中之一默认为 127 0 0 1 移动后它停止工作 因为 REMOTE ADDR 变量未填充 它是从浏览器调用时调用的 但不是从 cron 内部运行或使用