linux运行php的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux运行php的问题相关的知识,希望对你有一定的参考价值。
<?php
class Log
const LOGFILE = 'curr.log'; //建一个常量,代表日志文件的名称
// 写日志的
public static function write($cont)
$cont .= "\r\n";
// 判断是否备份
$log = self::isBak(); // 计算出日志文件的地址
$fh = fopen($log,'ab');
fwrite($fh,$cont);
fclose($fh);
// 备份日志
public static function bak()
$log = '/home/han/Documetns/www/1119/' . 'data/log/' . self::LOGFILE;
$bak = '/home/han/Documetns/www/1119/' . 'data/log/' . date('ymd') . mt_rand(10000,99999) . '.bak';
return rename($log,$bak);
// 读取并判断日志的大小
public static function isBak()
$log = '/home/han/Documetns/www/1119/' . 'data/log/' . self::LOGFILE;
if(!file_exists($log)) //如果文件不存在,则创建该文件
touch($log); // touch在linux也有此命令,是快速的建立一个文件
return $log;
// 要是存在,则判断大小
// 清除缓存
clearstatcache(true,$log);
$size = filesize($log);
if($size <= 1024 * 1024) //大于1M
return $log;
// 走到这一行,说明>1M
if(!self::Bak())
return $log;
else
touch($log);
return $log;
log::write('记录');
?>
我定义了一个log类,最后用log::write();把记录两字写入 $log = '/home/han/Documetns/www/1119/' . 'data/log/中
我在终端下运行这个php文件是能写入数据并得到文件的,但用浏览器打开就不能。不产生文件,也没报错
浏览器能运行其它php文件,php环境是debian + apache + php5 + mysql
在 linux/apache 服务器上的 cron 作业上运行 script.php,但限制对 php 文件的公共访问
【中文标题】在 linux/apache 服务器上的 cron 作业上运行 script.php,但限制对 php 文件的公共访问【英文标题】:Run a script.php on cron job on linux/apache server but restrict public access to the php file 【发布时间】:2011-05-16 00:01:57 【问题描述】:我有这个 script.php 文件,我想在我的 linux/apache 服务器上作为 cron 作业运行。
但是,我不希望公众访问 www.mycompanyname.com/script.php 并同时运行脚本。
我们如何防止这种情况发生?我们如何将脚本限制为仅对服务器的访问? 是使用 chmod 还是在 .htaccess 文件中设置一些东西?
有什么建议吗?
【问题讨论】:
【参考方案1】:您可以在script.php
...中的第一行 PHP...
if (PHP_SAPI !== 'cli')
exit;
如果有人通过 HTTP 访问您的脚本,我相信 PHP_SAPI
将是 cgi
,而不是 cli
,导致您的脚本立即退出。
当然,这取决于你的 cron 调用 php script.php
。
您也可以发送...
header('HTTP/1.0 404 Not Found');
...当然,也可以将其放在您的网络根目录之外。
【讨论】:
【参考方案2】:您可能有一个类似public_html
的目录,其中包含所有的php。把它放在那个目录之外。
【讨论】:
哦,听起来很合乎逻辑,我从没想过.. 我可能忘记了 public_html 是映射到主机名而不是外部目录的根目录。由于我的 script.php 需要 apache 才能运行,我推测 public_html 之外的目录仍然可以运行? 当然!您只需要在目录中为您的用户提供权限(我假设 cron 以您的用户身份运行)【参考方案3】:如果您将脚本放在 webroot 文件夹之外,它将无法通过您的网络服务器访问。 例如 您的 webroot 位于 /var/www/public_html/ 您将 script.php 放在该文件夹之外,例如:/var/www/
【讨论】:
【参考方案4】:方法一。
如果您直接从 Cron 作业执行 PHP,例如php /path/to/your_script.php 然后在 PHP 脚本的顶部添加以下行:
if (php_sapi_name() !='cli') exit;
方法二。
如果 Cron 作业使用 wget、curl 或 lynx 通过其 URL 运行您的脚本,则将此代码插入您的 PHP 脚本顶部(将用户代理字符串更改为只有您知道的字符串):
if ($_SERVER['HTTP_USER_AGENT'] != 'yourSecretAgent') exit;
您还必须在 Cron 作业中设置用户代理;在这个 wget 示例中:
wget -O - --user-agent=“yourSecretAgent” http://example.com/your_script.php
【讨论】:
以上是关于linux运行php的问题的主要内容,如果未能解决你的问题,请参考以下文章
PHP 站点在 linux 上运行,但在 windows 上不运行
在 linux bash 中运行 php 脚本(php 函数)