仅使用Cron执行PHP文件

我有一个PHP脚本需要每天执行一次,太平洋时间凌晨3:05。 我目前在我的网站的根目录中有脚本(例如, http://example.com/script .php ),因此,任何在浏览器中导航到它的人都可以执行它。 我的服务器布局如下:</ p>

/ home / [user] /example.com / </ strong> </ p>

example.com </ em>文件夹是该域的根目录。 我阅读了另一个关于此的帖子:</ p>

PHP&amp; cron:安全问题 </ p>

据说我应该将脚本移到公共目录之外,所以在我的情况下我会把它移到 [user] </ em>文件夹。 目前我的Cron作业命令如下所示:</ p>

/ usr / local / php5 / bin / php /home/[user]/example.com/script.php </ p>

(我当然使用伪名称。)我是否只需移动文件并将命令更改为:</ p>

/ usr / local / php5 / bin / php /home/[user]/script.php


nn

它会正常运行,但公众无法使用吗? 由于脚本已经通过Cron运行,它已经使用绝对路径(而不是相对路径)设置到它需要包含的文件,所以这应该是一个简单的移动和编辑,对吧?</ p>
< / DIV>

展开原文

原文

I've got a PHP script that needs to be executed once a day, at 3:05am Pacific time. I've currently got the script in the root of my site (as in, http://example.com/script.php), and as such, it's executable by anyone who navigates to it in their browser. My server is laid out like this:

/home/[user]/example.com/

Where the example.com folder is the root of that domain. I read the other thread about this:

PHP & cron: security issues

where it was said that I should move the script outside the public directory, so in my case I would move it to the [user] folder. Currently my Cron job command looks like this:

/usr/local/php5/bin/php /home/[user]/example.com/script.php

(I'm using pseudo-names of course.) Would I simply move the file and change the command to:

/usr/local/php5/bin/php /home/[user]/script.php

And it would run normally, yet be unavailable to the public? Since the script is already running through Cron, it's already set up using absolute paths (instead of relative ones) to the files that it needs to include, so this should be a simple move and edit, right?

douaonong7807
douaonong7807 你总是可以创建简单的脚本并测试你的cron条目。cron条目不一定是3:05。
9 年多之前 回复
douhunkuang8955
douhunkuang8955 我有共享主机,但我可以移动公共目录之外的文件。我可以访问/home/[user],它位于公共目录树之外,所以我可以在那里移动它。尝试它的唯一问题是我不知道它是否在明天凌晨3:05之前有效。
9 年多之前 回复
duanrong5927
duanrong5927 试试吧,看看?除非您具有共享主机并且无法将文件移动到公共目录之外,否则不应存在任何问题。
9 年多之前 回复
dqc22586
dqc22586 试试看看?应该是这样
9 年多之前 回复

3个回答



我最终做的只是将它移出公共目录,进入我的主文件夹。 CRON仍然可以从那里访问和执行它。 谢谢你的帮助。</ p>
</ div>

展开原文

原文

What I ended up doing was just moving it out of the public directory, into my home folder. CRON is still able to access and execute it from there. Thanks for the help guys.

duanpai1033
duanpai1033 为什么这会被贬低?
3 年多之前 回复



您有多种选择:</ p>


  • 将其移出您的网络目录 </ li>
  • 添加一些检查,例如:</ p>

     &lt;?php 
    
    

    if(!isset($ argv))
    die(“无法运行!”);
    </ code> </ pre> </ li>

  • 检查脚本运行的模式:</ p>

     <  code> $ isCLI =(php_sapi_name()=='cli'); 
    if(!$ isCLI)
    die(“无法运行!”);
    </ code> </ pre> </ li>
    </ ul>
    </ div>

展开原文

原文

You have several options:

  • move that out of your web directory
  • add some checking, eg:

    <?php
    
    if( ! isset($argv) )   
        die("cannot run!");
    
  • check what mode your script run:

    $isCLI = ( php_sapi_name() == 'cli' );
    if( !$isCLI )
        die("cannot run!");
    

douye1940
douye1940 使用php_sapi_name()+1
9 年多之前 回复
dthok9648
dthok9648 根据配置,$ argv通过register_globals设置。 我不会依赖它;)寻找使用过的sapi(PHP_SAPI ==='cli')感觉更安全。
9 年多之前 回复
douwojiao5919
douwojiao5919 啊,是的,你是对的。
9 年多之前 回复
drkbpwk609294
drkbpwk609294 您需要做的就是检查是否设置了$ argv。 它不会在常规Web请求上设置。
9 年多之前 回复



你能否告诉我们脚本的用途,如果它正在做一些简单的事情,例如mysql修剪:</ p>
\ n

  5 3 * * * * root mysql -u username -e“UPDATE users SET days = days-1;”
</ code> </ pre>

可能是 更好,同样:</ p>

  5 3 * * * * root / usr / local / php5 / bin / php -r“$ normal ='php'; code(); $ 这里“
</ code> </ pre>

可以解决这个问题吗?</ p>
</ div>

展开原文

原文

Can you tell us about the purpose of the script, if it's doing simple stuff for example mysql pruning:

5 3 * * * * root mysql -u username -e "UPDATE users SET days = days-1;"

might be better, similarly:

5 3 * * * * root /usr/local/php5/bin/php -r "$normal = 'php';code();$here"

may do the trick?

dongma1666
dongma1666 它并不复杂,但它不仅仅是简单的mysql操作。 它从外部API获取信息,读取信息,格式化,检查重复条目,然后将其插入数据库(如果不存在重复)。 这是我需要用PHP做的事情,以防万一有什么事情发生且Cron没有执行,所以我必须强制更新(今天早上发生)
9 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问