我得到這些錯誤:「無法打開所需的文件」的錯誤,但該文件是有
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);
}
}
}
?>
我們需要MailComponent.php –
的代碼'的main()'函數是PHP解釋器本身的功能。即使解析或執行代碼也有問題。 – Broncha
PHP是由一些真正知道自己在做什麼的人開發的。我懷疑他們的錯誤信息可能是假的?我們的人必須更好地理解事物。 –