2013-03-31 20 views
1

我得到這些錯誤:「無法打開所需的文件」的錯誤,但該文件是有

PHP Fatal error: main() [function.require]: Failed opening required '/usr/share/pear/Mail.php' (include_path='.:/var/www/vhosts/xxx.net/httpdocs/protected/modules/rbam/models:/var/www/vhosts/xxx.net/httpdocs/protected/extensions/translations/components:/var/www/vhosts/xxx.net/httpdocs/protected/extensions/runactions/components:/var/www/vhosts/xxx.net/httpdocs/protected/components:/var/www/vhosts/xxx.net/httpdocs/protected/models:/usr/share/pear:') in /var/www/vhosts/xxx.net/httpdocs/protected/components/MailComponent.php on line 70

首先,包含語句是不是在我MailComponent.php的70線,它是線3(但MailComponent.php正好有69行,這樣可能只是在PHP報告的方式有關該錯誤的BUG)

require_once '/usr/share/pear/Mail.php'; 

文件/usr/share/pear/Mail.php就在那裏,在/usr/share/pear/Mail.php,它屬於root但它的讀取權限大家;正如你所看到的/usr/share/pear是包含路徑。此外,這個過去一直工作到最近,我沒有觸及它。

那麼,什麼可能是問題?!?!?

編輯:我覺得這件事情有關的事實,其中所包含的文件夾是httpdocs folder之外,但爲什麼這麼和我怎麼能允許嗎? (我對此也感到困惑,我沒有任何這樣的方法;我使用Yii,雖然錯誤被報告給Yii,它有幾個main()方法在這裏和那裏(只是grepped)在我的代碼中,據稱在我的MailComponent.php中include_once是)。

<?php 

require_once '/usr/share/pear/Mail.php'; // PEAR Mail 
require_once '/usr/share/pear/Mail/mime.php'; // PEAR Mail_mime 

class MailComponent extends CApplicationComponent { 

    public $defaultHeaders=array(); 
    public $debugUsers=false; 
    public $debugAdmins=false; 
    public $debugEmail='[email protected]'; 
    public $backend='mail'; 

    public function sendMail($address, $subject, $body, $headers=array(), $isadmin=false) { 

     $actualheaders=array_merge($this->defaultHeaders, $headers); 
     $actualheaders['Subject']=$subject; 

     $mail = new Mail_mime(array(
      "text_charset" => "utf-8", 
      "html_charset" => "utf-8", 
      "eol" => "\n" 
     )); 

     $mail->setTxtBody($body); 

     if (($isadmin && $this->debugAdmins) || (!$isadmin && $this->debugUsers)) { 
      $address=str_replace('@','_AT_',$address)." <".$this->debugEmail.">"; 
      //$address=$this->debugEmail; 
     } 
     $actualheaders['To']=$address; 
     $headersencoded=array(); 
     foreach ($actualheaders as $header=>$value) { 
      $headersencoded[$header]=$mail->encodeHeader($header, $value, "utf-8", "quoted-printable"); 
     } 
     //$to=$mail->encodeHeader('To',$address,"utf-8", "quoted-printable"); 
     $to=$headersencoded['To']; 
     [email protected]$mail->get(); 
     $actualheaders=$mail->headers($headersencoded); 
     @$factory=& Mail::factory($this->backend); 
     @$ret=$factory->send($to,$actualheaders,$msg); 
     if ($ret instanceof PEAR_Error) Yii::log('ERROR SENDING MAIL TO '.$to, 'error'); 
     return $ret;  
    } 

    public function notifyAdmins($role, $area, $subjectcode, $bodycode, $params=array()) { 
     $admins=Yii::app()->authManager->getUsers($role); 
     $users=array(); 
     foreach ($admins as $userid) { 
      $user=User::model()->findByPk($userid); 
      if ($user===null) continue; 
      if ($user->current_area_id!=$area->id) continue; 
      if ($user->email===null || ($email=trim($user->email))=='') continue; 
      $lang=$user->preferredLanguage; 
      $params['{CHANNEL_NAME}']=I::tattr($area->partialRoot, 'menu.home', $lang); 
      $params['{USER}']=$user->getActualDisplayName(); 
      $subject=I::t($subjectcode,$lang,$params); 
      $body=I::t($bodycode,$lang,$params); 
      $this->sendMail($email, $subject, $body, array(), true); 
     } 
    } 

} 

?> 
+1

我們需要MailComponent.php –

+1

的代碼'的main()'函數是PHP解釋器本身的功能。即使解析或執行代碼也有問題。 – Broncha

+1

PHP是由一些真正知道自己在做什麼的人開發的。我懷疑他們的錯誤信息可能是假的?我們的人必須更好地理解事物。 –

回答

0

您確定正在加載「MailComponent.php」文件的正確版本嗎?如果,如你所說,這個文件有69行,並且錯誤出現在第70行,我會首先懷疑錯誤是指其他一些MailComponent.php文件。

+0

這是正在加載的人。我用一個可行的解決方法編輯它,所以它生效。 我認爲最後一行+ 1只是因爲PHP的解析和錯誤處理(組合)的方式是錯誤的 - 就像無效代碼導致文件末尾的解析錯誤一樣,儘管在這種情況下存在沒有語法錯誤,因此錯誤,無論它是什麼,都可以並應該正確報告 – matteo

+0

也許它與自動裝載器或某事有關(即,在解析所有文件後,所需文件的實際加載被推遲到,因爲它們沒有加載如果不使用,或類似的東西)。我對自動加載器的工作原理沒有透徹的理解。 – matteo

相關問題