Как загрузить классы Zend при запуске php-скрипта из командной строки
У меня есть PHP-скрипт, которому нужны классы Zend. Его можно запустить в браузере, но возникают ошибки при запуске сценария из командной строки в командной строке.
require_once 'Zend/Loader.php'; // It can work in a browser but failed by command lines
Я также попробовал:
require_once 'C:\wamp\www\zf_project\library\Zend\Loader.php';
а также
ini_set('include_path',
ini_get('include_path') .
PATH_SEPARATOR .
dirname(__FILE__). DIRECTORY_SEPARATOR. 'library');
Но не удалось.
Тогда мне нужно загрузить класс:
Zend_Loader::loadClass('Zend_Rest_Client');
Как я могу использовать классы Zend?
Заранее спасибо!
2 ответа
Если все, что вам нужно, это использовать классы Zend с помощью автозагрузки - без начальной загрузки всего приложения - все, что вам нужно сделать в ZF1 (что, как вам кажется, используется):
<?php
// if ZF is not in your include path to begin with
set_include_path(implode(PATH_SEPARATOR, array('/path/to/zend/library', get_include_path())));
include 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance(); // registers autoloader
// now can access Zend classes without having to include
$client = new Zend_Http_Client(...);
Также обратите внимание, вам не нужно звонить Zend_Loader::loadClass
чтобы загрузить класс, это выполняется автоматически автозагрузчиком, когда вы используете имя класса в обычном коде, например, вызывая конструктор, как я делал выше.
Когда вы запускаете его из веб-браузера, путь включения указывается в public/index.php, а затем загружает приложение. Точно так же вы можете скопировать public/index.php (например, как setup.php) и включить его в код командной строки. Кроме того, скопируйте нужные биты начальной загрузки в этот файл.
Обратите внимание, что в ZF2 есть "консольный маршрут", позволяющий создать скрипт командной строки MVC.
Вот мой setup.php, обратите внимание, как я загружаю конфигурацию с помощью "нового Zend_Config". Просто "требует" этот файл в файле, который вы хотите запустить из командной строки (консоли).
Изменить: вы должны правильно установить APPLICATION_PATH в "/ относительный / путь / к / приложение /".
<?php
error_reporting(E_ALL & ~E_NOTICE | E_STRICT);
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/relative/path/to/application/'));
// Define application environment
define('APPLICATION_ENV', 'development');
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
require_once 'Zend/Application.php';
$app = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');
$res = $app->getOption('resources');
$config = new Zend_Config($res);