CodeIgniter CLI, дающий ошибку system_path ", как представляется, неправильно настроен."

У меня есть задача установки cron для запуска следующего:

php /var/www/vhosts/examplesite.com/index.php cron processCategoryItemCount 

Когда я запускаю это на моем рабочем сервере (размещенном через MediaTemple dv4), в окне ssh появляется следующее сообщение:

Возможно, ваш путь к системной папке установлен правильно. Откройте следующий файл и исправьте это: index.php

Когда я запускаю команду php CLI на моем маке разработки, я вообще не получаю никаких ошибок.

Насколько я могу сказать, мой system_path установлен правильно .. вот фрагмент.

 /* *--------------------------------------------------------------- * SYSTEM FOLDER NAME *--------------------------------------------------------------- * * This variable must contain the name of your "system" folder. * Include the path if the folder is not in the same directory * as this file. * */ $system_path = 'system'; 

Ручное тестирование

Я провел некоторое тестирование, чтобы пройти через код, который использует CI для определения system_path и application_path . Из того, что я могу сказать, что он работает правильно ..

CodeIgniter использует следующий код. Для проверки пути

 // Set the current directory correctly for CLI requests if (defined('STDIN')) { chdir(dirname(__FILE__)); } if (realpath($system_path) !== FALSE) { $system_path = realpath($system_path).'/'; } // ensure there's a trailing slash $system_path = rtrim($system_path, '/').'/'; // Is the system path correct? if ( ! is_dir($system_path)) { exit("Your system folder path does not appear to be set correctly. Please open the following file and correct this: ".pathinfo(__FILE__, PATHINFO_BASENAME)); } 

В результате я сделал файл test.php и застрял в httproot ..

 <?php $system_path = 'system'; echo "index.php dir is: ".dirname(__FILE__)."\n"; chdir(dirname(__FILE__)); echo "System Dir is: ".realpath($system_path)."\n"; if ( ! is_dir($system_path)){ exit("Your system folder path does not appear to be set correctly. Please open the following file and correct this: ".pathinfo(__FILE__, PATHINFO_BASENAME)); }else{ echo "System Path Set Properly\n"; } sleep(30); 

Я выполнил это через командную строку с помощью этой команды:

 /usr/bin/php /var/www/vhosts/examplesite.com/client/stage/test.php` 

Это то, что я верну:

 index.php dir is: /var/www/vhosts/examplesite.com/client/stage System Dir is: /var/www/vhosts/examplesite.com/client/stage/system System Path Set Properly 

Итак, немного больше тестирования, и я обнаружил, что проблема заключается в этой части:

 if ( ! is_dir($system_path)) { exit("Your system folder path does not appear to be set correctly. Please open the following file and correct this: ".pathinfo(__FILE__, PATHINFO_BASENAME)); } 

Я хотел бы написать только комментарий, но я не мог …. Я новичок здесь, и у меня нет возможности добавить комментарий к вопросу.

Ну … У меня была такая же проблема 1 год назад с моим выделенным сервером.

Решение заключалось в том, чтобы оставить $ system_path пустым …

 $system_path = ''; 

вы можете попробовать это вместо этого:

 $system_path = './system'; 

Проблема связана с разрешениями. Я никогда не думал об этом, но, вытаскивая из github, если я зарегистрировал его как root, очевидно, что это root . В результате php не может выполнить должным образом.

Я побежал: chown exampleuser:psacln index.php и все хорошо сейчас!

Итак, как урок для других, сталкивающихся с этой проблемой .. если вы получаете ту же проблему, убедитесь, что права на право собственности и права прав правильные!

Еще одно лучшее решение – использовать dirname (), например,

Измените ниже 2 строки

 $system_path = 'system'; $application_folder = 'application'; 

От

 $system_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'system'; $application_folder = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'application'; 
 /* *--------------------------------------------------------------- * SYSTEM FOLDER NAME *--------------------------------------------------------------- * * This variable must contain the name of your "system" folder. * Include the path if the folder is not in the same directory * as this file. * */ $system_path = '../system'; /* *--------------------------------------------------------------- * APPLICATION FOLDER NAME *--------------------------------------------------------------- * * If you want this front controller to use a different "application" * folder then the default one you can set its name here. The folder * can also be renamed or relocated anywhere on your server. If * you do, use a full server path. For more info please see the user guide: * http://codeigniter.com/user_guide/general/managing_apps.html * * NO TRAILING SLASH! * */ $application_folder = '../application'; 

вы можете попробовать этот брат, если не работаете, добавьте еще один ./

определенно сообщение об ошибке не скажет, что если путь задан правильно 🙂

просто помогая ^ _ ^ надеюсь, что это будет

Вы уверены, что в FTP-передаче ничего не получилось? т.е. система фактически находится в том же каталоге, что и index.php?

Кроме того, вы уверены, что вызываете php с нужного места? и путь правильный?

Недавно у меня была эта проблема: CodeIgniter + Command Line + Cron + Cpanel

Попробуйте запустить его:

 /usr/local/bin/php your/path/to/index.php <controller> <method> 

Для пути это, вероятно, должен быть полный путь? а не http://www.example.com/index.php? т.е. мой – это что-то вроде:

 /usr/local/bin/php /home/account_name/public_html/index.php <controller> <method> /dev/null 2>&1 

В index.php

Я внес эти изменения и работал на меня.

 $system_path = '../system/'; $application_folder = '../application/'; 

Чтобы изменить все каталоги на 755 (-rwxr-xr-x):

 find /opt/lampp/htdocs -type d -exec chmod 755 {} \; 

Чтобы изменить все файлы на 644 (-rw-r-r–):

 find /opt/lampp/htdocs -type f -exec chmod 644 {} \; 

Исправьте codeigniter 3.0.0 distributive plz!