2017-01-06 9 views
1

php-ews을 기존 OOP 이외 웹 사이트에서 구현합니다.php-ews : 클래스에 대한 전체 경로를 사용할 때 'SoapClient'클래스를 찾을 수 없습니다.

쉘에서 독립 실행 형 PHP 스크립트를 실행해도 문제가 없습니다. (즉 new \jamesiarmes\PhpEws\Client)

use \jamesiarmes\PhpEws\Client; 
use \jamesiarmes\PhpEws\Request\CreateItemType; 

그러나 나는 웹 사이트에 내 경우-문을 use을 사용할 수 없습니다, 그래서 전체 경로를 사용하여 모든 클래스 앞에 추가 :

독립 PHP 스크립트는 use 사용합니다.

이제이 오류가 발생합니다.

Fatal error: Class 'SoapClient' not found in /home/project/master/vendor/jamesiarmes/php-ntlm/src/SoapClient.php on line 13

은 그 비누 확장이 설치되어 확인했습니다. 도와주세요. 감사. 쉘에서

if ($_REQUEST['action'] == 'export-form-test') { 

    require_once 'vendor/autoload.php'; 

/* 
use \jamesiarmes\PhpEws\Client; 
use \jamesiarmes\PhpEws\Request\CreateItemType; 

use \jamesiarmes\PhpEws\ArrayType\NonEmptyArrayOfAllItemsType; 
use \jamesiarmes\PhpEws\ArrayType\NonEmptyArrayOfAttendeesType; 

use \jamesiarmes\PhpEws\Enumeration\BodyTypeType; 
use \jamesiarmes\PhpEws\Enumeration\CalendarItemCreateOrDeleteOperationType; 
use \jamesiarmes\PhpEws\Enumeration\ResponseClassType; 
use \jamesiarmes\PhpEws\Enumeration\RoutingType; 

use \jamesiarmes\PhpEws\Type\AttendeeType; 
use \jamesiarmes\PhpEws\Type\BodyType; 
use \jamesiarmes\PhpEws\Type\CalendarItemType; 
use \jamesiarmes\PhpEws\Type\EmailAddressType; 
*/ 

    // Replace this with your desired start/end times and guests. 
    $start = new DateTime('tomorrow 4:00pm'); 
    $end = new DateTime('tomorrow 5:00pm'); 

    // Set connection information. 
    $host = '*********'; 
    $username = '*******'; 
    $password = '********'; 
    //$version = Client::VERSION_2016; 

    $client = new \jamesiarmes\PhpEws\Client($host, $username, $password); 

    // Build the request, 
    $request = new \jamesiarmes\PhpEws\Request\CreateItemType(); 
    $request->SendMeetingInvitations = \jamesiarmes\PhpEws\Enumeration\CalendarItemCreateOrDeleteOperationType::SEND_ONLY_TO_ALL; 
    $request->Items = new \jamesiarmes\PhpEws\ArrayType\NonEmptyArrayOfAllItemsType(); 

    // Build the event to be added. 
    $event = new \jamesiarmes\PhpEws\Type\CalendarItemType(); 
    $event->Start = $start->format('c'); 
    $event->End = $end->format('c'); 
    $event->title = 'EWS Test Event'; 

    // Set the event body. 
    $event->Body = new \jamesiarmes\PhpEws\Type\BodyType(); 
    $event->Body->_ = 'This is the event body'; 
    $event->Body->BodyType = \jamesiarmes\PhpEws\Enumeration\BodyTypeType::TEXT; 

    // Add the event to the request. You could add multiple events to create more 
    // than one in a single request. 
    $request->Items->CalendarItem[] = $event; 

    $response = $client->CreateItem($request); 

    // Iterate over the results, printing any error messages or event ids. 
    $response_messages = $response->ResponseMessages->CreateItemResponseMessage; 
    foreach($response_messages as $response_message) { 
     // Make sure the request succeeded. 
     if ($response_message->ResponseClass != ResponseClassType::SUCCESS) { 
      $return_arr['status'] = 'error'; 
      continue; 
     } 

     // Iterate over the created events, printing the id for each. 
     foreach($response_message->Items->CalendarItem as $item) { 
      $id = $item->ItemId->Id; 
      $return_arr['status'] = 'ok'; 
     } 
    } 

} 
+0

서버와 컴퓨터의 PHP 버전은 무엇입니까? 'vendor/autoload.php'파일의 위치는 어디입니까? 소스 코드를 포함 시키거나 링크시킬 수 있습니까? –

답변

1

실행 독립 PHP 스크립트는 잘 작동합니다.

하지만

은 그 비누 확장이 설치되어 확인했습니다.

어떻게 확인 했습니까? CLI 및 웹 서버 환경에 대해 서로 다른 php.ini 파일을로드 중일 수 있습니다.

(예를 들어, 내 우분투 서버에 아파치 웹 서버와 함께, 내가 가진 모두

/etc/php5/cli/php.ini

/etc/php5/apache2/php.ini)

+1

php-fpm이 제대로 다시 시작되지 않았습니다. CLI는 괜찮습니다. Stupid ... =) –

1

원래의 질문, 그러나 이것은 응답 없음 :

하지만 사용 기능을 사용할 수 없습니다. 웹 사이트에서 if-if 문을 사용하므로 전체 경로 (예 : 새로운 \ jamesiarmes \ PhpEws \ Client).

use namespaced 클래스를 가져 오는 명령문은 괄호 밖의 파일 상단에 속합니다. 그것들은 항상 "실행"됩니다. 즉, 외부 클래스 이름에 대한 현재 네임 스페이스 내에서 별칭 링크를 작성합니다 (네임 스페이스가 사용되지 않으면 루트 네임 스페이스가 사용됩니다). 현재 파일에 대한 것입니다. 영구적이거나 현재 파일 외부에 도달하지 않음 - 새 파일은 다른 use 가져 오기를 가질 수 있지만 두 파일에서 클래스를 사용하는 경우 가져 오기를 반복해야합니다.

특히 이름이 http://php.net/manual/en/language.namespaces.importing.phpuse을 사용하는 경우 네임 스페이스에 대한 내용은 http://php.net/manual/en/language.namespaces.php을 참조하십시오. 잘못된 코드 예 5를 참고로 use

<?php 
namespace Languages; 

function toGreenlandic() 
{ 
    use Languages\Danish; 

    // ... 
} 
?> 

클래스 오기 코드의 실행과 독립적이다.PHP에서 코드에서 사용되는 모든 클래스의 정규화 된 이름을 알 수 있도록 파일을 구문 분석 할 때 이미 발생합니다. 이 코드는 코드가 실행될 때만 자동로드되지만 use은 파일의 맨 위에 보관해야합니다.

+0

'function() {}'을 사용하지 않으면 어떻게 될까요? 'Languages' 네임 스페이스는'vendors/autoload'가 미리로드 된 것과 일치해야합니까? –

+0

'use'는 함수, 클래스 또는 if 블록 내에서 사용할 수 없습니다. 그리고 항상 네임 스페이스를 제공해야하며 가능한 바로 가기가 없습니다. 그러나'use'를 사용한 후에 가져온 클래스를 선행 백 슬래시가없는 이름이나, 제공 한 별칭으로 참조 할 수 있습니다. – Sven