1

Web サイトにお問い合わせフォームを追加しようとしています。ローカルホストでは問題なく動作しましたが、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'];

スクリプトの上部で関連するディレクトリを作成し、Webサーバーで書き込み可能にします。

同じエラーメッセージが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 に答える