Estoy usando la Tcpdf módulo y PHP para crear dymanic PDF de las facturas de un sistema de pedidos.

La secuencia de comandos debe guardar la factura, en una carpeta llamada «facturas». La carpeta existe, y hay permisos para «todos» (Windows).

El código que estoy usando es este:

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

Este utiliza fopen para guardar el archivo.

Sin embargo el error que estoy recibiendo es: Warning: fopen(): remote host file access not supported, file://invoices/Delivery Note.pdf

Este es un archivo local, no un solo control remoto.

He intentado añadir un prefijo /como esta:

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

pero luego me sale este error en su lugar: Warning: fopen(file:///invoices/Delivery Note.pdf): failed to open stream: No such file or directory

He creado el archivo, y lo dejó vacío, pero el mismo error que el anterior.

¿Alguien sabe por qué estoy recibiendo este error?

OriginalEl autor user2924019 | 2015-03-04

6 Comentarios

  1. 21

    De php-Script puede utilizar:

    $pdf->Output(__DIR__ . '/invoices/Delivery Note.pdf', 'F');
    esta es una respuesta mejor que la seleccionada como se sigue trabajando después de la actualización TCPDF. Gracias!
    Aunque estoy de acuerdo que comentar el código en tcpdf_static.php es una mala idea, yo diría que la especificación de la ubicación de salida en relación a DOCUMENT_ROOT es una idea mejor que la especificación de la ubicación de salida relativa a la ubicación del script que se está ejecutando. No mucho en ello, aunque supongo.

    OriginalEl autor Gerd

  2. 7

    Después de actualizar a la tcpdf 6.2.6 en vtiger 6.2 he tenido el mismo problema, el envío de e-mail con el pdf.

    Así que he cambiado el archivo:

     libraries/tcpdf/include/tcpdf_static.php

    He comentó el código en fopenLocal() y cambiar la línea

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

    ver:

      /**
             * 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);
            }

    Después de cambiar esto, funcionó.

    Esto funcionó para mí – muchas gracias!
    Usted no necesita comentario el código en tcpdf_static.php porque proporcionar un nombre de archivo con un nombre de ruta de acceso absoluta, que DOCUMENT_ROOT le dará, es todo lo que se necesita.
    Solución de trabajo!
    Guardar el día de mi 2 años más tarde! Gracias!

    OriginalEl autor user 1007017

  3. 3

    similar a user1007017, pero basta con comentar la línea como se muestra a continuación (tcpdf 6.2.11)

    public static function fopenLocal($filename, $mode) {
            if (strpos($filename, '://') === false) {
                //$filename = 'file://'.$filename;
            } elseif (stream_is_local($filename) !== true) {
                return false;
            }
            return fopen($filename, $mode);
        }

    OriginalEl autor Hilarius L. Doren

  4. 0

    He encontrado el problema fue que la ruta de acceso para fopen tiene que ser desde la raíz del documento, y no desde el script PHP ubicación.

    C:\Website\www\script\invoice\invoice.pdf

    Por ejemplo, si el script de PHP que está dentro de la «secuencia de comandos» en la carpeta, y desea crear el pdf dentro de la «factura» de la carpeta, la secuencia de comandos debe tener «\script\factura\factura.pdf».

    OriginalEl autor user2924019

  5. 0

    Sugiero utilizar la siguiente como la Erge también ha sugerido, pero asegúrese de utilizar una ruta absoluta:

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

    La ruta de acceso debe ser una ruta absoluta & no una ruta de acceso relativa. Este PHP informe de error se explica por qué: https://bugs.php.net/bug.php?id=28820

    La razón rutas relativas no son compatibles con el archivo://contenedor llega a un acuerdo en cómo las rutas de acceso UNC son tratados con (y más específicamente, cómo se fuzzily interpretado como \ para las instalaciones de windows).

    Por Ejemplo:

    file://foo/bar

    Podría ser interpretado como un URI relativo: foo/bar desde el directorio de trabajo actual, O podría ser interpretado como una ruta UNC: \foo\bar (compartir bar en equipo foo).

    Para este y un par de razones internas de la file://contenedor está limitado a las rutas absolutas cuando se llama explícitamente. Para las rutas de acceso relativas utilizar realpath() {como lo hizo en su informe}, u omitir el explícito nombre de la archivo wrapper.

    Usted puede, a continuación, evitar la modificación de la TCPDF código y preocuparse de las actualizaciones en sustitución de su código modificado.

    OriginalEl autor mattferderer

  6. -2

    probar este

    $pdf->Output($_SERVER['DOCUMENT_ROOT'].'/invoices/Delivery Note.pdf', 'F');
    Sigue el mismo error: Warning: fopen(file://E:/Websites/*******/www/invoices/Delivery Note.pdf): failed to open stream: No such file or directory
    echo $_SERVER[‘DOCUMENT_ROOT’].’/facturas, Nota de Entrega.pdf’, a continuación, golpeó impreso url en el explorador de windows y compruebe usted obtener archivo o no.
    El archivo no está siendo creado. La ruta de acceso es correcta
    Yo también solía tocar() con la misma ruta de acceso para crear un archivo vacío, funciona, pero fopen puedo acceder a ella todavía
    He intentado de esta manera antes de leer este post y no funciona

    OriginalEl autor Navjot Singh

Dejar respuesta

Please enter your comment!
Please enter your name here