PHPMailer检查is_file
的每个附件(在addAttachment
函数中,在class.phpmailer.php文件中):
if (!@is_file($path)) {
throw new phpmailerException($this->lang('file_access') . $path, self::STOP_CONTINUE);
}
我的问题是,我可以使工作is_file
只给完整的本地路径文件,而不是网址:
is_file('C:/wamp/www/myFolder/rocks.png'); //True
is_file('http://localhost/myFolder/rocks.png'); //False :(
所以我不能从远程服务器附加任何文件。
我做错了什么?可能是许可问题?
编辑:
我知道还有其他方法可以检查文件是否存在。
但是is_file
在PhpMailer library中,我不想碰它,我想知道是否有可能使用它的方法使它工作。
谢谢。
4条答案
按热度按时间kuhbmx9i1#
它不需要解决方法,您只是在远程资源上使用一个显式针对本地文件的函数。要附加远程资源而不涉及本地文件,只需执行以下操作:
我不推荐这种直接内联的方法,因为它使错误处理更加困难(例如,如果URL无法响应)。
这实际上是this question的副本。
dm7nw8vv2#
在后面的代码中,它使用
file_get_contents()
来包含附件的内容。虽然file_get_contents()
支持HTTP,但is_file()
不支持。如果你不想修改PhpMailer,你必须自己从HTTP下载文件并提供临时路径到PhpMailer。发送后你可以删除临时文件。
类似于以下内容(来自PHP manual: sys_get_temp_dir和Download File to server from URL):
然后您可以附加
$tempFile
,发送邮件和unlink($tempFile)
。gmxoilav3#
引用PHP docs:
从PHP 5.0.0开始,此函数也可以用于一些URL Package 器。请参阅支持的协议和 Package 器以确定哪些 Package 器支持stat()系列功能。
在标准流中,以下流支持stat()
而以下则不
虽然以下是有限的
falq053o4#
我只是Web开发的初学者,也许我错了,但我有这样的代码工作($filePath1 = DIR ."/files/”. $_FILES ['foto-item']['name'];)
“DIR”表示文件的绝对路径。它在本地和远程服务器上都有效