fopen();本地文件上的“不接受远程主机文件访问”?

2022-08-30 16:31:23

我正在使用Tcpdf模块和PHP从订购系统创建dymanic PDF发票。

然后,脚本应将发票保存到名为“发票”的文件夹中。该文件夹存在,并且具有“所有人”(Windows)的完全权限。

我使用的代码是这样的:

$pdf->Output('invoices/Delivery Note.pdf', 'F');

这将使用 fopen 来保存文件。

但是,我得到的错误是:Warning: fopen(): remote host file access not supported, file://invoices/Delivery Note.pdf

这是一个本地文件,而不是远程文件。

我试图像这样添加一个/前缀:

$pdf->Output('/invoices/Delivery Note.pdf', 'F');

但后来我得到这个错误:Warning: fopen(file:///invoices/Delivery Note.pdf): failed to open stream: No such file or directory

我创建了该文件,并将其留空,但错误与上面相同。

有谁知道为什么我会收到此错误?


答案 1

从php-Script中,您可以使用:

$pdf->Output(__DIR__ . '/invoices/Delivery Note.pdf', 'F');

答案 2

在vtiger 6.2中升级到tcpdf 6.2.6后,我遇到了同样的问题,发送带有pdf的电子邮件。

所以我改变了文件:

 libraries/tcpdf/include/tcpdf_static.php

我已经在fopenLocal()中注释了代码并更改了行

 fopen($_SERVER['DOCUMENT_ROOT'].$filename, $mode);

看:

  /**
         * Wrapper to use fopen only with local files
         * @param filename (string) Name of the file to open
         * @param $mode (string) 
         * @return Returns a file pointer resource on success, or FALSE on error.  
         * @public static
         */
        public static function fopenLocal($filename, $mode) {
    //      if (strpos($filename, '://') === false) {
    //          $filename = 'file://'.$filename;
    //      } elseif (strpos($filename, 'file://') !== 0) {
    //          return false;
    //      }
            return fopen($_SERVER['DOCUMENT_ROOT'].$filename, $mode);
        }

更改此内容后,它起作用了。


推荐