【问题标题】:PHP - is_file says file does not exists but it doesPHP - is_file 说文件不存在,但确实存在
【发布时间】:2018-07-15 01:47:27
【问题描述】:

我正在尝试将 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
            )

    )

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

【问题讨论】:

  • 使用file_exists($file);
  • @Akintunde007 不幸的是,这给出了相同的结果。
  • 也许分隔输入数据中这些条目的换行符不只是 \n ...所以你可能在前两个的末尾留下了一个 \r,这当然使 PHP 不是找到那些文件。第三个文件不会有这个问题,因为可能在那一行之后没有更多的换行符。
  • @CBroe 这个工作非常感谢你:D

标签: php joomla


【解决方案1】:

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

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

文件来自文本框

假设您的意思是 HTML textarea 元素 - 所有现代浏览器都会在 textarea 中发送 \r\n 换行 - 因此,如果您只从那里获取内容,那么在 "\r\n" 处爆炸应该可以工作。如果您不确定事先使用的确切换行格式,也可以使用 preg_split 解决方案,如下所示,https://stackoverflow.com/a/36851287/1427878

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 2017-10-19
    • 2016-03-08
    相关资源
    最近更新 更多