jemdev/fichier

文件下载 / 文件上传管理

1.x-dev 2024-05-13 07:25 UTC

This package is auto-updated.

Last update: 2024-09-13 08:10:26 UTC


README

警告

注意,此类不提供任何保证。由于修复一个长期存在的错误需要太长时间,因此为了满足内部需求而迅速开发,它首先满足了我的需求。如果建议的改进保持了使用的简单性,将予以考虑。

安装

使用Composer,在composer.json的require部分添加以下内容:

{  
    "jemdev/fichier": "1.x-dev"  
}  

简介

此类允许通过表单发送文件。可以是文本文件、办公文档或图像。

一些额外的方法允许裁剪图像甚至创建缩略图,同时按比例减小原始图像的尺寸。

使用方法

每个文件都需要单独处理,以防某些参数(例如目标位置)对每个文件来说是特定的。从一个jemdev\fichier\upload的实例开始,如果需要,首先定义参数。请注意,设置参数的方法可以链式调用。

基本使用

在不进行特定配置的情况下,使用非常简单

/* Création de l'instance */
$oUpload = new jemdev\fichier\upload();
/* Enregistrement du fichier vers le répertoire de stockage */
$sauvegarde = $oUpload->enregistrerFichier($_FILES['fichier'], $home .'temp'. DS);
/* Vérification des erreurs et récupération des messages s'il y a lieu */
if(false === $sauvegarde)
{
    $erreur = '<pre>'. print_r($oUpload->getErreurs(), true) .'</pre>'. PHP_EOL;
}

如果通过具有multiple属性的file类型字段选择了多个文件,那么$_FILES的内容可能如下所示

Array(
    [fichier] => Array(
        [name] => Array(
            [0] => sites_publics.rar
            [1] => stats_jemweb.info.txt
            [2] => ZSST-20130331-140024.7z
        )
        [type] => Array(
            [0] => application/octet-stream
            [1] => text/plain
            [2] => application/octet-stream
        )
        [tmp_name] => Array(
            [0] => C:\Windows\Temp\phpD031.tmp
            [1] => C:\Windows\Temp\phpD042.tmp
            [2] => C:\Windows\Temp\phpD053.tmp
        )
        [error] => Array(
            [0] => 0
            [1] => 0
            [2] => 0
        )
        [size] => Array(
            [0] => 140763
            [1] => 29446
            [2] => 2025976
        )
    )
)

每个文件将在自动循环中处理并存储在同一个地方。如果需要为每个文件执行特定的处理并更改实例的参数,则需要在循环之前执行循环。循环的每一轮将处理一个类似于此的数组

Array(
    [name]     => sites_publics.rar
    [type]     => application/octet-stream
    [tmp_name] => C:\Windows\Temp\phpD031.tmp
    [error]    => 0
    [size]     => 140763
)

因此,可以在循环之前预先准备一个数组,每个文件一个数组,如下所示

$oUpload = new jemdev\fichier\upload();
foreach($_FILES['fichier']['name'] as $k => $fichier)
{
    $infos = array(
        'name'      => $_FILES['fichier']['name'][$k],
        'type'      => $_FILES['fichier']['type'][$k],
        'tmp_name'  => $_FILES['fichier']['tmp_name'][$k],
        'error'     => $_FILES['fichier']['error'][$k],
        'size'      => $_FILES['fichier']['size'][$k]
    );
    /* On trie le lieu de stockage en fonction du type */
    $aType = explode('/', $_FILES['fichier']['type'][$k]);
    $repertoireCible = $home .'temp'. DS . $aType[0] . DS;
    $sauvegarde = $oUpload->enregistrerFichier($infos, $repertoireCible);
    if(false === $sauvegarde)
    {
        /* En cas d'erreur, on récupère le message et on arrête le traitement desfichiers */
        $erreur = '<pre>'. print_r($oUpload->getErreurs(), true) .'</pre>'. PHP_EOL;
        break;
    }
}

请注意,如果目标目录不存在,它将被创建。默认情况下,该目录的权限设置为0755(chmod),文件的权限设置为0644。在保存之前可以更改此模式。例如,如果希望文件权限为0777

$oUpload = new jemdev\fichier\upload();
$oUpload->setDroitAccesFichier(0777);
//... la suite du code de traitement ne change pas.

图像处理

发送的文件可以是图像,如果需要,也可以调整大小。还可以在单独的目录中独立于原始文件生成缩略图。

注意

在发送多个文件时,无法访问图像处理方法。

可以预先指定正常图像的最大尺寸以及缩略图的最大高度。在这种情况下,原始图像的裁剪将按比例。

用于记录图像的相同原则适用于图像的记录:可以添加创建缩略图的功能,通过指定一个不同的存储目录来实现,例如在包含正常图像的目录中的子目录。

对于单个文件,可以创建缩略图,只需指定缩略图目录的路径即可,以下代码示例中包含注释。

// Définition du répertoire de destination de l'image normale.
$repImgs  = $home .'temp'. DS .'image'. DS;
// Définition du répertoire des miniatures.
$repMinis = $repImgs .'minis'. DS;
// On définit les dimensions maximum pour les images (hauteur, largeur, et hauteur miniature)
$oUpload->setImageInfo(350, 600, 100);
// On enregistre le fichier
$enreg = $oUpload->enregistrerFichier($_FILES['image'], $repImgs);
if(false !== $enreg)
{
    // Redimensionnement éventuelle de l'image si ses dimensions originales dépassent les
    // maximums définis ci-dessus, la création de la miniature sera alors automatique
    // si on précise le premier paramètre à TRUE et qu'on indique le répertoire de
    // destination.
    $oUpload->creerVignette(true, $repMinis);
}
else
{
    // En cas d'erreur, on affiche les messages stockés.
    echo('<pre class="vardumpdebug">'. PHP_EOL);
    var_dump($oUpload->getErreurs());
    echo("</pre>". PHP_EOL);
}

总之

此系统在日常使用中非常基础。如果您有任何改进建议,请随时提出,只要它们不会使使用过程变得复杂。

英文用户注意

我的英语水平不足以撰写良好的英文文档。但是,如果您是母语为英语且法语理解良好,请随意进行翻译。享受这个库吧。