Выполнить файл PHP только с Cron - PullRequest
0 голосов
/ 21 июня 2011

У меня есть PHP-скрипт, который нужно выполнять раз в день, в 3:05 по тихоокеанскому времени. В настоящее время у меня есть скрипт в корне моего сайта (например, http://example.com/script.php),, и поэтому он исполняется любым, кто переходит на него в своем браузере. Мой сервер выглядит так:

/ дом / [пользователь] /example.com/

Где папка example.com является корнем этого домена. Я читал другую ветку об этом:

PHP & cron: проблемы безопасности

где было сказано, что я должен переместить скрипт за пределы общедоступного каталога, поэтому в моем случае я бы переместил его в папку [user] . В настоящее время моя команда задания Cron выглядит следующим образом:

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

(я, конечно, использую псевдонимы). Могу ли я просто переместить файл и изменить команду на:

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

И он будет работать нормально, но будет недоступен для публики? Поскольку скрипт уже выполняется через Cron, он уже настроен с использованием абсолютных путей (а не относительных) к файлам, которые он должен включать, так что это должно быть простое перемещение и редактирование, верно?

Ответы [ 3 ]

7 голосов
/ 21 июня 2011

У вас есть несколько вариантов:

  • уберите это из вашего веб-каталога
  • добавить некоторые проверки, например:

    <?php
    
    if( ! isset($argv) )   
        die("cannot run!");
    
  • проверьте, в каком режиме работает ваш скрипт:

    $isCLI = ( php_sapi_name() == 'cli' );
    if( !$isCLI )
        die("cannot run!");
    
0 голосов
/ 05 августа 2011

В итоге я просто переместил его из общедоступного каталога в мою домашнюю папку. CRON все еще может получить доступ и выполнить его оттуда. Спасибо за помощь, ребята.

0 голосов
/ 21 июня 2011

Можете ли вы рассказать нам о назначении скрипта, если он делает простые вещи, например, обрезка mysql:

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

может быть лучше, аналогично:

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

может сделать трюк?

...