是Zend \ Mail \ Storage \ Imap.php挂断了我的服务器吗?

时间:2013-12-17 18:49:48

标签: php email zend-framework zend-framework2 gmail-imap

我正在尝试学习/了解Zend Framework,以便通过IMAP检索电子邮件。我们的Web主机没有在我们的Web服务器上启用IMAP扩展,并且我安装了osTicket。我想用osnd_Mail引用来替换osTicket中的IMAP函数引用,但为了做到这一点,我需要更好地理解Zend_Mail。

我有Zend Framework 2.2.5,并尽力阅读文档,但大多数文档都是针对以前的版本,而我正在尽力调整阅读更新版本,那里是一些我不理解的事情。

我已经创建了一个测试脚本来帮助我入门,但我不了解这里发生了什么,并希望有一个方向。这是我的脚本(个人详细信息显然已被匿名修改):

<?php
/*******************************************************
* simple php script to verify zend mail functionality  *
*                                                      *
********************************************************/

define('ROOT_DIR',$_SERVER['DOCUMENT_ROOT'].'/');
define('SUPPORT_DIR',ROOT_DIR.'support/');
define('INCLUDE_DIR',SUPPORT_DIR.'include/'); 
define('ZEND_DIR',INCLUDE_DIR.'zend/library/'); //ZendFramework-2.2.5

$root = ROOT_DIR;
$support = SUPPORT_DIR;
$incl = INCLUDE_DIR;
$zendir = ZEND_DIR;

var_dump($root);
echo "\n";
var_dump($support);
echo "\n";
var_dump($incl);
echo "\n";
var_dump($zendir);
echo "\n";

echo "Include Imap... ";
include_once(ZEND_DIR.'Zend/Mail/Storage/Imap.php');
if ((include_once(ZEND_DIR.'Zend/Mail/Storage/Imap.php')) !== 1)
{
    echo 'Include Imap failed.';
    echo "<br>";
}

chdir($zendir);
echo getcwd() . "\n";

$mail_config = array(
    'host' => 'imap.gmail.com',
    'user' => 'support@gmail.com',
    'password' => 'password',
    'ssl' => 'SSL',
    'port' => 993
);

var_dump($mail_config);
echo "\n";

$mail = new Zend_Mail_Storage_Imap($mail_config);
var_dump($mail);

echo "\n";
var_dump($count = $mail->countMessages());

?>

这似乎运行没有任何错误,除了include_once语句后没有任何反应。这是返回到我的屏幕的内容:

  

string(57)“/ usr / home / username / public_html / domain.com /”

     

string(65)“/ usr / home / username / public_html / domain / support /”

     

的字符串(73)   “/usr/home/username/public_html/domain.com/support/include /”

     

的字符串(86)   “/usr/home/username/public_html/domain.com/support/include/zend/library /”

     

包含Storage \ Imap ...

它不显示数组或消息计数的getcwd()或var_dump。我甚至尝试更改我的if语句,验证include_once是否有效,如果成功并且没有显示,则回显一个语句。

脚本是否在zend \ mail \ storage \ imap.php中挂起?我在这里做得不好?就像我说的那样,我正在努力学习它并且一直在寻找使用v2.2.5的代码示例的高低,但我显然遗漏了一些东西。它是什么?

编辑:

phpinfo()没有显示我的错误日志的位置,所以我在测试脚本的开头添加了以下内容:

ini_set('track_errors', 1);
error_reporting(E_ALL|E_STRICT);
error_log($php_errormsg,3,"/usr/home/username/public_html/domain.com/support/test/error_log.log");

它创建了“error_log.log”文件,就在它应该的位置,但它是空的并且Runscope没有看到脚本运行?

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试遵循ZF1示例但使用ZF2,这是可以理解的,但遗憾的是无法使用。

首先,安装Composer - http://getcomposer.org/ - 它只会让一切变得更轻松。我建议选择'全局'安装选项(这个答案的其余部分假定你已经完成)。

在项目的根文件夹中,创建一个composer.json文件(列出项目的依赖项)。在其中,放:

{
    "require": {
        "php": ">=5.3.3",
        "zendframework/zend-mail": "2.*"
    }
}

这列出了Zend Mail作为依赖项以及PHP 5.3.3(ZF2至少需要它)。

运行composer install来安装这些。下载文件时会看到一些输出。一旦完成,它应该已经创建了一个名为vendor的文件夹,它安装了ZF2邮件类。

然后可以将整个脚本简化为:

<?php
require 'vendor/autoload.php';

$mail_config = array(
    'host' => 'imap.gmail.com',
    'user' => 'support@gmail.com',
    'password' => 'password',
    'ssl' => 'SSL',
    'port' => 993
);

$mail = new \Zend\Mail\Storage\Imap($mail_config);

$count = $mail->countMessages();
var_dump($count);

您可以删除放入zend/library/的ZF2副本(假设您没有将其用于其他任何内容)。