ZendMailStorageImap.php正在挂断我的服务器


Is ZendMailStorageImap.php hanging up my server?

我正在努力学习/理解通过IMAP检索电子邮件的Zend框架。我们的网络主机在我们的网络服务器上没有启用IMAP扩展,我安装了osTicket。我想用相关的Zend_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.com/support/"

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

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

包括存储''映像。。。

它不显示数组或消息计数的getcwd()或var_dump。我甚至尝试更改if语句,验证include_oonce是否有效,以在成功但未显示的情况下回显语句。

脚本是否挂在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没有看到脚本运行?

看起来您试图遵循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的副本(假设您没有将其用于其他用途)。