Это очередной вопрос, который можно найти по адресу Не работает cPanel cronjob на виртуальном хостинге под Codeigniter , и его стоит задать отдельно. Это контекст:
- используется структура codeigniter * Планировщик 1006 *
- определяется как контроллер и вызывается cronjob
- веб-сервер является общим хостингом, управляемым с помощью cPanel
- cronjobs работают должным образом, если определены как чистые PHP единицы вне codeigniter
- контроллер расписания, если вызывается браузером, работает нормально: https://pharmacomparison.com/adminPanel/Hello/message/federico
- тот же планировщик, если он запускается cronjobs с правильной строкой cli, завершается неудачно
- бегущая строка в cronjob: / usr / local / bin / php public_html / adminPanel / index. php Hello сообщение "federico"
- возникающая ошибка: Предупреждение: требуется (./ vendor / autoload. php): не удалось открыть поток: нет такого файла или каталога в / home / phar263d / public_html / adminPanel / index. php в строке 66
Обратите внимание: ссылка на требуемый файл "./vendor/autoload.php" работает правильно, когда планировщик вызывается прямым URL, но то же самое не удается, когда элемент управления r называется cronjob. Тот же контроллер, тот же индекс. php, тот же проект. Любые идеи? Спасибо.
PS просто в качестве ссылки здесь просто тестируемый код
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
require 'DashboardBase.php';
class Hello extends CI_Controller {
public function message($to = 'World')
{
echo "Hello {$to}!".PHP_EOL;
print "Hello {$to}!".PHP_EOL;
log_message('error',"Hello {$to}!".PHP_EOL);
}
}
?>
ОБНОВЛЕНИЕ
Я пытался заставить абсолютный путь и на самом деле эта проблема исчезает; и многие другие пути в системе CI и файлы поставщиков выглядят следующим образом:
Notice: Undefined index: log_path in /home/phar263d/public_html/adminPanel/system/core/Log.php on line 127
Notice: Undefined index: log_path in /home/phar263d/public_html/adminPanel/system/core/Log.php on line 127
Warning: mkdir(): Invalid path in /home/phar263d/public_html/adminPanel/system/core/Log.php on line 131
Notice: Undefined index: log_threshold in /home/phar263d/public_html/adminPanel/system/core/Log.php on line 138
Notice: Undefined index: log_threshold in /home/phar263d/public_html/adminPanel/system/core/Log.php on line 142
A PHP Error was encountered
Severity: Notice
Message: Undefined index: HTTP_HOST
Filename: /home/phar263d/public_html/adminPanel/application/config/config.php
Line Number: 41
Backtrace:
File: /home/phar263d/public_html/adminPanel/application/config/config.php
Line: 41
Function: _error_handler
File: /home/phar263d/public_html/adminPanel/index.php
Line: 318
Function: require_once
Hello federico!
real path /home/phar263d/public_html/adminPanel/vendor/autoload.phpHello federico!
Это означает, что когда сценарий планировщика php, вызываемый CLI / cronjobs, имеет совершенно другую среду и ссылки на базовые папки с уважением когда он запущен веб-сервером. Любая идея, как запустить планировщик PHP с помощью CLI, имеющего ту же справочную среду веб-сервера?
ВОЗМОЖНОЕ РЕШЕНИЕ
Я нашел обходной путь, но он имеет недостаток, так что это не решение проблемы. Обходной путь заключается в следующем: определите вызывающий скрипт вне пространства Codeigniter, которое вызывается cronjob. Затем скрипт запрашивает URL-адрес планировщика Codeigniter. Вот простой код скрипта, запускаемого cronjob:
<?php
$payload = file_get_contents('https://pharmacomparison.com/adminPanel/Hello/message/federico');
echo $payload;
return $payload;
?>
Проблема заключается в том, что таким образом планировщик должен быть доступен извне, иначе скрипт cronjob не сможет получить к нему доступ; это, очевидно, нарушение безопасности. Итак, что нужно, это способ сохранить среду WEB и все переменные и константы при вызове из CLI; Я нахожу странным, что нет упоминаний об этом даже в руководстве по Codeigniter. Есть идеи?