0

我正在为下载文件制作一个 php 脚本,但有一个奇怪的问题。

结果是我有一个 A 类,它包含文件下载方法,然后我需要使用“require_once”将该文件放入名为 init.php 的文件中,主脚本需要 init.php创建类的实例和用户必须访问的实例。init.php 是启动我的系统并加载它的配置的那个。

好的,类工作正常,但是当文件为文件目标内容生成输出时,问题就来了。

这是我班级的方法:

public function descargar ($nombreDescarga = null) 
{
    if ($this->id === null || $this->formato === null || $nombreDescarga === null || 
        gettype($nombreDescarga) != "string" || strlen($nombreDescarga) == 0) 
    {
        return 1;
    }

    $ruta = RUTA_SISTEMA . "/" . RUTA_ASIGNACIONES . "/asign-" . $this->id . "." . $this->formato;
    $tamano = @filesize($ruta);

    /**
    * Comprobamos si el archivo existe.
    */

    if ($tamano === false) 
    {
        return 2;
    }

    /**
    * Saneamos el nombre de salida del archivo.
    */

    $nombreDescarga = Framework\sanearNombreArchivo($nombreDescarga . "." . $this->formato);

    /**
    * Colocamos los headers necesarios.
    */

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . $nombreDescarga);
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . $tamano);

    /**
    * Abrímos el archivo y lo enviamos al navegador.
    */

    $contenido = @file_get_contents($ruta);

    if ($contenido === false) 
    {
        return 3;
    }

    echo $contenido;

    return 0;
}

好的,这是下载文件,放置标题,然后输出文件内容的常用方法(其余的是纯验证)但是当文件被下载时文件的内容而不是:

ÈFÃË‹Átí#ª6˜²"wÇ9Ê´ÀÄ:0t

结果是:

�F�ˋ�t�#�6��"w�9����:0t

我已经尝试为下载制作一个单独的脚本,并且效果很好,文件以正确的字符下载,我只是发现当我包含 init.php 文件时出现问题,似乎有双字符集或其他东西和文件结束搞砸了。我注意到函数 file_get_contents 返回了正确的字符串内容,因为我尝试使用 fopen 和 fwrite 函数将字符串保存到一个新文件中,该文件被复制了正确的字符。

在我看来,将产生输出的主脚本的字符集有问题,我尝试通过设置“header('Content-Type: application/octet-stream; charset=UTF-8');” 在我的方法中没有运气。

第一次看到这样的东西,很奇怪,大家多多指教,谢谢!

4

1 回答 1

0

固定的!!!

问题是下一个:

在我的 init.php 文件中,我需要更多文件,其中一个文件(名为 CONFIG.class.php 的文件)具有 UTF-8 编码,我真的认为所有文件都以 ANSI 编码(是的,它们除了这个),然后我将使用 Notepad++ 的文件编码更改为 ANSI,瞧!有效..

感谢大家的建议:)

于 2013-10-18T19:26:58.657 回答