PHP: Как работать с путём включения Cron-скрипта? - PullRequest
0 голосов
/ 19 ноября 2018

Я установил cron-скрипт, который запускается каждую минуту на CPanel моего веб-хоста. Cron работает правильно, но я столкнулся с проблемой, связанной с путем к скрипту, которую я не знаю, как ее решить. Большая часть моего сайта использует / home / mysite / public_html / в качестве корневого пути, но скрипт cron использует / home / mysite / в качестве корневого пути без части public_html.

Это вызывает много проблем с включением файлов, так как я вынужден исправить это в моих загрузчиках классов, проверяя как путь по умолчанию, так и альтернативный путь с префиксом public_html /:

spl_autoload_register(function($class){
    $className = str_replace("\\", "/", $class);
    $classPath = "{$className}.php";
    $altClassPath = "public_html/{$classPath}";
    if(file_exists($classPath)) require $classPath;
    elseif(file_exists($altClassPath)) require $altClassPath;
    else throw new ClassNotFoundException("Fatal Error: Class {$class} either does not exist, or has its include path mis-configured!");
});

Это кажется утомительным и подверженным ошибкам, и мне это совсем не нравится. Есть ли лучший способ справиться с этой проблемой? Я попытался использовать set_include_path в скрипте cron, но, похоже, с автозагрузчиком это тоже не помогает.

1 Ответ

0 голосов
/ 15 января 2019

Была такая же проблема минуту назад. Это кажется простым, но это часто бывает труднее всего получить, потому что все это знают, поэтому никто не говорит об этом вслух.

В моем случае это решило использование так называемой магической константы PHP. Переменная:

__DIR__

И содержит путь к сценарию, в котором он используется. Независимо от того, запущен ли он напрямую или включен в какой-либо другой файл php. Таким образом, вы можете использовать его для записи относительных путей, которые всегда начинаются там, где находится ваш файл. Вот так:

 include(__DIR__ . "/../somewhere/something.php");

Еще несколько полезных магических констант

...