require_once 似乎无效。我试图使用Zend库来发送邮件,但有些东西不起作用。我正在使用我的网络托管服务器提供商,所以我必须将库放在一个子目录中(不安装任何框架)。
// $path= dirname(__FILE__)."/ZendLibrary:".get_include_path() ;
$path= "./ZendLibrary".PATH_SEPARATOR.get_include_path() ;
set_include_path($path);
//echo $path ;
echo "Spot 0" ;
require_once 'Zend/Mail.php';
echo "Spot 1" ;
我收到了“Spot 0”消息但我没有收到“Spot 1”消息。我只选择了两个Zend库:
ZendLibrary/Zend/Mail/* (directory)
ZendLibrary/Zend/Mime/* (directory)
ZendLibrary/Zend/Mail.php (script)
ZendLibrary/Zend/Mime.php (script)
ZendLibrary是我脚本所在目录中的一个文件夹。会发生什么事?
更新#1:
我的问题是,当我运行 require_once 时,代码会停止正常工作。它不会回显“Spot 1”消息。我已经尝试了 set_include_path 的绝对路径,我试图在没有内部require_once语句的情况下加载.php库脚本,但没有任何东西可以使它工作。由于我的测试是从互联网上的网络托管网站运行的,我无法访问日志!..还是我?
$path= realpath(dirname(__FILE__).'/ZendLibrary').PATH_SEPARATOR.get_include_path() ;
// $path= "./ZendLibrary".PATH_SEPARATOR.get_include_path() ;
set_include_path($path);
答案 0 :(得分:1)
Zend Mail有一些dependencies。 硬依赖
软
最好的是PHP中的add all Zend library to the include path,所有组件都会自动加载依赖项。
答案 1 :(得分:0)
您还没有遇到所有依赖项...至少您还需要Zend_Exception
(框架中所有特定于组件的异常都会扩展为此形式)但我非常确定还有其他Mail
和{ {1}}取决于。为了方便自己,我还会抓住Mime
并将其用于自动加载。
<强>更新强>:
我看了一下,好像你还需要Zend/Loader
和Zend/Validate
这是Zend/Loader
组件中某个类所必需的 - 虽然Mail只使用{{1 (这取决于Validate和Validate
的抽象类和接口),所以你可以逃脱而不是抓住Zend/Validate/Hostname
,但你可能也会利用它用于通用自动加载。
作为一个建议,你可以使用Zend_Validate_Ip
] 1代替......你将成为避免依赖地狱的罢工,无论如何我更喜欢它。只有它是用于发送邮件的,而Zend/Loader
也可以让你在本地或远程服务器上读取邮件存储。
答案 2 :(得分:0)
之前我使用Zend_Mail和SMTP独立,这里是我需要的文件。如果你只想使用sendmail,我也会把它减少到你所需要的。
如果您想使用Sendmail,那是最简单的。您的依赖项是:
使用这些文件,这是一个使用示例:
<?php
// optionally
// set_include_path(get_include_path() . PATH_SEPARATOR . '/path/to/Zend');
require_once 'Zend/Mail.php';
require_once 'Zend/Mail/Transport/Sendmail.php';
$transport = new Zend_Mail_Transport_Sendmail();
$mail = new Zend_Mail();
$mail->addTo('user@domain')
->setSubject('Mail Test')
->setBodyText("Hello,\nThis is a Zend Mail message...\n")
->setFrom('sender@domain');
try {
$mail->send($transport);
echo "Message sent!<br />\n";
} catch (Exception $ex) {
echo "Failed to send mail! " . $ex->getMessage() . "<br />\n";
}
如果您需要SMTP,那么正如prodigitalson所示,您还有一些依赖关系。除了上述内容,您至少需要:
然后你可以这样做:
<?php
require_once 'Zend/Mail.php';
require_once 'Zend/Mail/Transport/Smtp.php';
$config = array(//'ssl' => 'tls',
'port' => '25', //465',
'auth' => 'login',
'username' => 'user',
'password' => 'password');
$transport = new Zend_Mail_Transport_Smtp('smtp.example.com', $config);
$mail = new Zend_Mail();
$mail->addTo('user@domain')
->setSubject('Mail Test')
->setBodyText("Hello,\nThis is a Zend Mail message...\n")
->setFrom('sender@domain');
try {
$mail->send($transport);
echo "Message sent!<br />\n";
} catch (Exception $ex) {
echo "Failed to send mail! " . $ex->getMessage() . "<br />\n";
}
答案 3 :(得分:0)
<强>答案:强>
我的ISP(也是网络托管)设置为禁用 require_once 。我能够在VirtualBox上设置一个Unbuntu虚拟机并设置一个Web服务器。我在我的Unbuntu中复制了我的测试网站的内容,并发现require_once确实按预期工作!这也许可以解释为什么服务器端包含对我来说也不起作用。以下是一个有用的检查,它表明我的文件在预期的位置。
$file = 'ZendLibrary/Zend/Mail.php';
if ((!is_file($file)) or (!is_readable($file)))
die("File does not exists or is not readable.");
现在我必须找出它被禁用的原因,如何启用它,或者只是切换网络托管公司。 更新:我必须每年为提供商支付20美元的费用才能启用PHP(在这种情况下可以包含)。
This site可以告诉你更多相关信息。