代码之家  ›  专栏  ›  技术社区  ›  Nick v. D.

PHP-is\u文件表示文件不存在,但确实存在

  •  1
  • Nick v. D.  · 技术社区  · 6 年前

    我正在尝试将3个pdf文件附加到电子邮件中,我遇到的问题是,is\u file在前两个文件上给出了false,但第三个文件有效。这些文件来自文本框,并按如下方式分解:

    $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
                )
    
        )
    

    但前两个文件不会附加到发送的电子邮件中。

    1 回复  |  直到 6 年前
        1
  •  2
  •   C3roe    6 年前

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

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

    文件来自文本框

    假设你指的是HTML textarea 元素-所有现代浏览器都会在文本区域中发送换行符-因此,如果您仅从那里获取内容,则 "\r\n" 应该有用。如果您不确定之前使用的确切换行格式,也可以使用preg\u拆分解决方案,如下所示, https://stackoverflow.com/a/36851287/1427878