jemdev / fichier
文件下载 / 文件上传管理
Requires
- php: >=5.4.0
This package is auto-updated.
Last update: 2024-09-13 08:10:26 UTC
README
- 作者:Jean Molliné
- 许可证:CeCILL V2
- 先决条件
- PHP >= 5.4
- 联系:消息
- GitHub:github.com/jemdev/fichier
- Packagist:packagist.org/packages/jemdev/fichier
警告
注意,此类不提供任何保证。由于修复一个长期存在的错误需要太长时间,因此为了满足内部需求而迅速开发,它首先满足了我的需求。如果建议的改进保持了使用的简单性,将予以考虑。
安装
使用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); }
总之
此系统在日常使用中非常基础。如果您有任何改进建议,请随时提出,只要它们不会使使用过程变得复杂。
英文用户注意
我的英语水平不足以撰写良好的英文文档。但是,如果您是母语为英语且法语理解良好,请随意进行翻译。享受这个库吧。