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

原来是apache的用户和用户组问题 参考技术A 刚才试了一下,原来是apache的用户和用户组问题

在 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的问题的主要内容,如果未能解决你的问题,请参考以下文章

怎么在linux运行php文件?

如何从 PHP 脚本运行 linux 命令 [重复]

PHP 站点在 linux 上运行,但在 windows 上不运行

在 linux bash 中运行 php 脚本(php 函数)

PHP 脚本 - 检测是不是在 linux 或 Windows 下运行?

求助:php运行linux命令行的问题