Как загрузить классы 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);
Другие вопросы по тегам