1

我正在尝试将联系表添加到我的网站。在 localhost 中它运行良好,现在在 Tiscali 服务器上移动我收到此错误:

Warning: is_writable() [function.is-writable]: open_basedir restriction in effect.    
File(/tmp) is not within the allowed path(s):
(/var/www/virtual/mydomain.it/:/usr/share/php/:/var/www/ispcp/gui/tools/filemanager/) in /var/www/virtual/mydomain.it/htdocs/prova-intro/Swift-4.1.6/lib/preferences.php on line 15`

致命错误: Uncaught exception Swift_TransportException' with message

'Expected response code 220 but got code "554",

 with message "554 santino.mail.tiscali.it ESMTP server not available from your IP "' in /var/www/virtual/mydomain.it/htdocs/prova-intro/Swift-4.1.6/lib/classes/Swift/Transport/AbstractSmtpTransport.php:422 Stack trace: #0 /var/www/virtual/mydomain.it/htdocs/prova-intro/Swift-4.1.6/lib/classes/Swift/Transport/AbstractSmtpTransport.php(315):`
Swift_Transport_AbstractSmtpTransport->_assertResponseCode('554 santino.mai...', Array)

 #1 /var/www/virtual/mydomain.it/htdocs/prova-intro/Swift-4.1.6/lib/classes/Swift/Transport/AbstractSmtpTransport.php(123): Swift_Transport_AbstractSmtpTransport->_readGreeting()
 #2 /var/www/virtual/mydomain.it/htdocs/prova-intro/Swift-4.1.6/lib/classes/Swift/Mailer.php(79): Swift_Transport_AbstractSmtpTransport->start()

 #3 /var/www/virtual/mydomain.it/htdocs/prova-intro/mail_SwiftMailer.php(129): Swift_Mailer->send(Object(Swift_Message) in /var/www/virtual/mydomain.it/htdocs/prova-intro/Swift-4.1.6/lib/classes/Swift/Transport/AbstractSmtpTransport.php on line 422`

我正在使用的参数:

 define('HOST_SMTP', 'smtp.mydomain.it');  
 define('PORT_SMTP', 465); 
 define('SECUTITY_SMTP', ssl);
 define('EMAIL_SMTP', 'info@mydomain.it');  
 define('PASSWORD_SMTP', 'xxxxxxx');  
 define('EMAIL_DESTINATARIO', $_POST['destinatario']);  
 define('MAX_DIM_FILE', 1048576); // 1mb 
4

2 回答 2

4

这种情况很少见 - 报告的从 PHP 发送邮件的错误与 MTA 无关!

Swiftmailer 正在尝试创建一个临时文件。在不深入研究源代码的情况下,如果它是明智地编写的,它应该使用 tmpnam() 或 tmpfile() (除非明确覆盖使用“系统默认临时目录”。它通过查看一些环境变量来确定这一点 - 如果这些不存在,则默认编译。

使用的目录也由sys_get_temp_dir()函数返回

(因为 swiftmailer 继续尝试发送一个它未能创建的文件,这意味着它的代码中有一个相当愚蠢的错误)。

实际上,设置 open_basedir 限制的人有责任确保正确配置其余的 PHP 设置(会话保存路径、临时目录等)。我会向他们投诉以正确修复它。

同时尝试插入

$_ENV['TMPDIR']='/var/www/virtual/mydomain.it/tmp';
$_ENV['TMP']=$_ENV['TMPDIR'];

在脚本的顶部并创建相关目录,使其可由网络服务器写入。

请注意, tmpfile() 页面上的注释中描述了相同的错误消息。

于 2012-04-05T11:55:56.913 回答
0

symcbean 的解决方案对我来说很好,除了必须使用一点putenv()才能修改环境变量。

所以我写了这样的东西:

<?php
// web/app_dev.php 
// in prod the warning should not raise an exception, 
// but this depends on the error handling

use [..]

$tmpDir = __DIR__.'/../app/cache';

putenv('TMP='.$tmpDir);
putenv('TMPDIR='.$tmpDir);
putenv('TEMP='.$tmpDir);

$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
[..]
于 2014-08-27T08:51:06.870 回答