php – REMOTE_ADDR为空,不包含在SERVER数组中
发布时间:2020-12-13 21:40:47 所属栏目:PHP教程 来源:网络整理
导读:搬到新服务器后,我遇到了一个奇怪的问题.用于获取邮件的cron检查授权的IP,其中一个默认为127.0.0.1 它在移动后停止工作,因为未填充REMOTE_ADDR变量.它是从浏览器调用时,但不是从cron内部运行或从php运行控制台时.我转储了$_SERVER变量,这是cron / console的
搬到新服务器后,我遇到了一个奇怪的问题.用于获取邮件的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,strlen($mask)),$mask)) { return true; } 解决方法
$_SERVER [‘REMOTE_ADDR’]变量由于Apache运行,从命令行运行,不会设置此变量,以及许多其他变量.
此外,即使已设置,REMOTE_ADDR也将始终是运行cron的计算机的本地IP,因为您无法远程运行它. [编辑] 为了保持一致性,这是使用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'])) { .... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |