PHP - is_file 说文件不存在但确实存在

PHP - is_file says file does not exists but it does

我正在尝试将 3 个 pdf 文件附加到电子邮件中,我遇到的问题是 is_file 对前两个文件给出了错误,但第三个文件有效。这些文件来自一个文本框,展开如下:

$pdfs = explode("\n", $string);

然后我将它放在一个 foreach 循环中以附加到这样的电子邮件中:

foreach($pdfs as $pdf) {
        if (is_file(JPATH_ROOT . $pdf)) {
            $mail['attachment'][] =
                array('name' => basename($pdf), 'file' => JPATH_ROOT . $pdf);
        }
    }

当我 运行 此代码时,我只附加了第三个 pdf 文件,但是如果我删除 is_file() 它们在数组中但不会附加到已发送的电子邮件。 所以结果是:

[attachment] => Array
    (
        [0] => Array
            (
                [name] => pdf_file_1.pdf
                [file] => /home/psinke/domains/*****/public_html/pdf_file_1.pdf
            )

        [1] => Array
            (
                [name] => pdf_file_2.pdf
                [file] => /home/psinke/domains/*****/public_html/pdf_file_2.pdf
            )

        [2] => Array
            (
                [name] => pdf_file_3.pdf
                [file] => /home/psinke/domains/*****/public_html/pdf_file_3.pdf
            )

    )

但是前两个文件没有附加到发送的电子邮件中。

可能在输入数据中分隔这些条目的换行符不仅仅是 \n ...所以您可能在前两个条目的末尾留下了 \r,这当然使得 PHP找不到那些文件。

第三个文件不会有这个问题,因为在那一行之后可能没有换行符了。

The files come from a textbox

假设您指的是 HTML textarea 元素 - 所有现代浏览器都会发送 \r\n 作为文本区域中的换行符 - 所以如果您只从那里获取内容,则在"\r\n" 应该可以。如果您不确定事先使用的确切换行符格式,您也可以使用 preg_split 解决方案,如下所示,