Je veux décompresser un fichier et cela fonctionne bien
system('unzip File.zip');
Mais j'ai besoin de passer le nom du fichier via l'URL et je ne peux pas le faire fonctionner, c'est ce que j'ai.
$master = $_GET["master"];
system('unzip $master.zip');
Qu'est-ce que je rate? Je sais que ce doit être quelque chose de petit et de stupide que je néglige.
Merci,
system("unzip $master.zip");
devrait fonctionner.Réponses:
Je peux seulement supposer que votre code provient d'un tutoriel quelque part en ligne? Dans ce cas, bon travail en essayant de le découvrir par vous-même. D'un autre côté, le fait que ce code puisse être publié en ligne quelque part comme la bonne façon de décompresser un fichier est un peu effrayant.
PHP a des extensions intégrées pour gérer les fichiers compressés. Il ne devrait pas être nécessaire d'utiliser des
system
appels pour cela.ZipArchive
docs est une option.En outre, comme d'autres l'ont commenté,
$HTTP_GET_VARS
est obsolète depuis la version 4.1 ... qui était il y a très longtemps. Ne l'utilisez pas. Utilisez$_GET
plutôt le superglobal.Enfin, faites très attention à accepter toute entrée transmise à un script via une
$_GET
variable.TOUJOURS ASSAINIR L'ENTRÉE UTILISATEUR.
METTRE À JOUR
Selon votre commentaire, la meilleure façon d'extraire le fichier zip dans le même répertoire dans lequel il réside est de déterminer le chemin d'accès dur au fichier et de l'extraire spécifiquement à cet emplacement. Donc, vous pourriez faire:
la source
$zip->extractTo('./');
Cependant, ce n'est probablement pas le cas. Une meilleure option consiste à déterminer l'emplacement du fichier zip dans le système de fichiers et à l'extraire à cet endroit. Je mettrai à jour ma réponse pour le démontrer.Fatal error: Class 'ZipArchive' not found
erreur que j'essaie ce script :-( Y a-t-il une option à ce stade?zlib
bibliothèque sous-jacente pour effectuer à peu près toutes les opérations de compression / décompression avec PHP. Même pour effectuer des appels système, vous devez disposer de la bibliothèque sous-jacente. C'est une chose très omniprésente cependant, et ne pas l'avoir est l'exception. Si vous êtes sur l'hébergement mutualisé, ils devraient l'installer pour vous. Sinon, google juste quelque chose comme "Comment installer le support des fonctions Zip pour PHP"S'il vous plaît, ne le faites pas comme ça (en passant GET var pour faire partie d'un appel système). Utilisez ZipArchive plutôt .
Ainsi, votre code devrait ressembler à:
Et pour répondre à votre question, votre erreur est «quelque chose $ var quelque chose d'autre» devrait être «quelque chose $ var quelque chose d'autre» (entre guillemets).
la source
Utiliser
getcwd()
pour extraire dans le même répertoirela source
Essayez simplement ceci yourDestinationDir est la destination vers laquelle extraire ou supprimez -d yourDestinationDir pour extraire vers le répertoire racine.
la source
yourDestinationDir
commesession_save_path() . DIRECTORY_SEPARATOR . "$name" . DIRECTORY_SEPARATOR
où$name
est le dossier cible pour décompresser dans le dossier de session.J'ai mis à jour la réponse de @rdlowrey à un code plus propre et meilleur, cela décompressera un fichier dans le répertoire actuel en utilisant
__DIR__
.la source
PHP a sa propre classe intégrée qui peut être utilisée pour décompresser ou extraire le contenu d'un fichier zip. La classe est ZipArchive. Ci-dessous se trouve le code PHP simple et basique qui va extraire un fichier zip et le placer dans un répertoire spécifique:
Si vous voulez des fonctionnalités avancées, voici le code amélioré qui vérifiera si le fichier zip existe ou non:
Source: Comment décompresser ou extraire des fichiers zip en PHP?
la source
J'ai mis à jour la réponse de Morteza Ziaeemehr à un code plus propre et meilleur, cela décompressera un fichier fourni dans le formulaire dans le répertoire actuel en utilisant DIR .
la source
Changez juste
À celui-ci
ou celui-ci
system("unzip {$master}.zip");
la source
vous pouvez utiliser la fonction préemballée
Comment l'utiliser.
la source
Utilisez ci-dessous le code PHP, avec le nom de fichier dans le paramètre URL "nom"
la source
Fonction PHP simple à décompresser. Veuillez vous assurer que l'extension zip est installée sur votre serveur.
la source
Utilisez simplement ceci:
dans votre code
$master
est passé sous forme de chaîne, le système recherchera un fichier appelé$master.zip
la source
'unzip' $master
ne fonctionnerait pas sauf si vous avez ajouté un espace après la décompression et ajouté un point après le guillemet simple. Il aurait été beaucoup plus facile de suggérersystem("unzip $master.zip")
des guillemets doubles, ou au moins une réponse valide.$_GET
chaîne de requête et injecter son propre code à l'system
appel