2013-11-25 235 views
2

我有一個PHP腳本,需要Zend類運行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類?

在此先感謝!

回答

0

當您從Web瀏覽器中運行,包含路徑在公共/ index.php文件設置,然後引導應用程序。同樣,您可以複製public/index.php(例如setup.php)並將其包含在您的命令行代碼中。另外,將您需要的引導位複製到該文件中。

注意,在ZF2有「控制檯路線」,讓您創建MVC的命令行腳本。

這裏是我的setup.php,注意我是如何加載與「新Zend_Config的」配置。只需要'將'這個文件放在你想從命令行(控制檯)運行的文件中。

編輯:您必須在'/ relative/path/to/application /'中正確設置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); 
+0

我打算通過命令行來運行在命令提示的腳本:../php.exe ../*.php。我該如何改變我的腳本並讓它以這種方式工作?謝謝! – asdk77

+0

@ asdk77添加了示例。只需要在你的file.php文件中,你應該能夠運行它爲「php your-file.php」。 – imel96

+0

謝謝你的回答!我複製了上面的文件,並將其保存爲'cli.php',並將腳本保存在同一個文件夾中。然後,我在腳本的開頭添加了「require_once'cli.php'」,並在命令提示符下運行它。錯誤發生:「致命錯誤:require_once():無法打開所需的'Zend/Applic.ation.php'」。有什麼我錯了嗎?我正在使用ZF 1.12.3。 – asdk77

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加載類,這是自動由自動當您通過調用構造函數,我在前面已經做了正常的代碼中使用的類名,例如完成。

+0

感謝您的回覆!我試過這個方法:'set_include_path(implode(PATH_SEPARATOR,array('D:\ wamp \ www \ workspace \ zf_proj \ library',get_include_path())); include'Zend/Loader.php'; Zend_Loader :: getInstance (); //註冊自動加載器Zend_Loader :: loadClass('Zend_Rest_Client'); //這是我需要的'但是發生錯誤:意外';'(第一行)有什麼我失蹤? – asdk77

+1

@ asdk77這個答案只是在'set_include_path'行缺少一個關閉')'。我會修復它 – Phil

+0

謝謝!但似乎需要使用「自動加載器」。 – asdk77