2013-11-25 1 views
2

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'); 

가 어떻게 젠드 클래스를 사용할 수 있습니다

그럼 클래스를로드해야합니까?

미리 감사드립니다.

답변

0

웹 브라우저에서 실행할 때 include 경로가 public/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

전체 응용 프로그램이 모두 당신이 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_SOPARATOR, array (D : \ wspace \ www \ workspace \ zf_proj \ library ', get_include_path())); 포함'Zend/Loader.php '; Zend_Loader :: getInstance(); // 오토로더 등록 Zend_Loader :: loadClass ('Zend_Rest_Client'); // 이것이 내가 필요한 것입니다. 그러나 오류가 발생했습니다 : 예기치 않은 ';'(첫 번째 줄) 누락 된 것이 있습니까? – asdk77

+1

@ asdk77이 대답은'set_include_path' 행에')'이 없어진 것입니다. 내가 고쳐 줄게 – Phil

+0

고마워! 그러나 "오토로더"를 사용해야 할 것 같습니다. – asdk77

관련 문제