Comment supprimer un fichier en PHP? Dislink PHP - Supprimer des fichiers Comment supprimer un fichier php

PHP est un langage de programmation principalement utilisé pour créer des pages Web dynamiques. Ainsi que tout autre langage de programmation, PHP contient beaucoup d'opportunités, parmi lesquelles sont très utiles. Par exemple, la possibilité de supprimer un fichier que vous pouvez utiliser dans vos scripts.

Ce conseil vous aidera à apprendre comment supprimer le fichier en php En utilisant une fonction dissimuler.

Instruction étape par étape:

Vous pouvez utiliser la fonction pour supprimer un fichier en php dissimuler. Sur l'exemple d'un script simple, nous analyserons le travail dissimuler:

  1. Créez un fichier texte dans un éditeur de texte (VI / Vim, Nano, Gedit ou simplement dans le cahier standard).
  2. Cadran ou simplement copier le code suivant:$ file \u003d "exemple.log";
    dislink ($ dossier);
    ?>
  3. Enregistrer (par exemple, sous le nom testtunlink.php) et placez le fichier de script créé sur votre serveur Web Test. Dans le même répertoire, créez un exemple d'exemple.Log avec n'importe quel contenu. C'est nous la supprimerons.
  4. Exécutez le script en l'appelant dans le navigateur et en regardant à nouveau dans le répertoire, vous constaterez que l'exemple de fichier.Log n'est plus là. Dissimuler Fait son travail!

Comment ça marche:

La première ligne du code de script: déterminez le type de notre script.

La deuxième ligne de code: Après avoir démarré le script créé par nous, la variable de fichier sera attribuée à la valeur. exemple.log. (Notez que le fichier avec le même nom doit être présent dans le même répertoire que le script que nous avons créé. Il suffit de le créer avec n'importe quel contenu!).

La troisième ligne de code: Supprimer le fichier exemple.log en le transmettant comme un argument de fonctionL.

La quatrième ligne du code de script: la fin du code PHP.

Souvent, lors de la création d'un programme, il est nécessaire de supprimer des fichiers (les causes peuvent être les plus différentes) et, dans ce cas, UNLKINK PHP vient nous aider. Aujourd'hui, nous apprendrons à supprimer des fichiers dans PHP et à considérer plusieurs exemples.

Supprimer des fichiers en utilisant UNLKINK PHP

Pour supprimer des fichiers, la fonction Dislink () est utilisée. La syntaxe de cette fonctionnalité est la suivante:

dislink (Nom du fichier)

Cette fonction est logique et donc, dans le cas d'une suppression réussie du fichier, renvoie true et en cas d'échec - Faux. Faire l'objet d'une utilisation dislink () Par example:

Il convient de noter que lors de la rechargement de cette page, le programme donnera une erreur. Cela est dû au fait que lorsque la fonction est d'abord appelante, elle a déjà supprimé le fichier et la prochaine fois qu'il ne peut pas le détecter.

Il existe plusieurs façons de résoudre ce problème. Par exemple, vous pouvez utiliser une architecture interne plus complexe du programme, en utilisant des déclarations conditionnelles si elles sont conditionnelles. Ou il suffit de mettre le symbole @ devant la fonction elle-même pour ignorer les erreurs émergentes. Dans ce cas, même si le fichier n'est pas détecté, l'erreur ne sera pas initiée:

Supprimer des fichiers en PHP avec Dislink n'est pas du tout difficile, comme on dit, casser - ne pas construire. La prochaine fois, nous apprendrons à vérifier l'état des fichiers.

Essayons de résoudre une tâche simple pour supprimer un fichier ou plusieurs fichiers avec PHP. En général, il n'y a rien de compliqué ici, mais il y a beaucoup de détails, ainsi que des options de solution que vous devez savoir. Dans mon article, je ne m'engage pas à argumenter l'immense, mais exprimer quelques questions et apporter quelques exemples, je pense que je peux. Continuons?

Fonction PHP Unlink ()

Et je vais commencer par les fonctions PHP Unlink (), qui supprime également le fichier:

bool dissimuler(chaîne $ Nom de fichier [ ressource $ contexte])

Ici $ Nom de fichier - chemin vers le fichier et $ Contexte (facultatif) - Description des contextes pour travailler avec des threads (Pris en charge de PHP, à partir de 5.0.0). La fonction renvoie true en cas d'achèvement ou de faux réussi en cas d'erreur.

Un exemple d'utilisation de fonctions PHPLLink ():

$ nom de fichier \u003d "./path/to/file.txt";

Pourquoi cette fonction est-elle appelée Dislink ()?

Le fait est que dans le système de fichiers UNIX, il existe une distinction entre l'emplacement physique des fichiers sur le support et la structure de répertoire correspondante. Par conséquent, lors de la sauvegarde d'un fichier à un point spécifique du système de fichiers, ce point de l'arborescence de répertoire est associé à l'emplacement de stockage physique du fichier. En d'autres termes, le chemin du fichier dans UNIX in Unix est en fait un identifiant unique pour l'un de ces nœuds.

Il convient de noter ici que dans UNIX, vous pouvez associer plusieurs de ces points avec les mêmes données. Les données TAKI existeront jusqu'à ce qu'il y ait au moins un lien avec eux. Mais si tous les liens sont détruits, les données elles-mêmes seront détruites. Ainsi, la fonction Dislink () est conçue pour supprimer exactement les liens et déjà à la suite des données de fichier.

Il n'y a pas de telle chose dans Windows et la fonction Dislink () supprime le fichier. De plus, certaines versions PHP pour Windows ne prend pas en charge Dislink (). Dans ce cas, la commande del est utilisée via System () ou Exec (), par exemple:

$ FileName \u003d "/2014/04/file.txt";
si (Isset ($ _ env ["windir"])) (
@Exec ("del". Nom de fichier $);
Si (File_Exists (Nom de fichier $)) Die ("Erreur supprimer le fichier");
) Sinon si (! (@ Dislink ($ fichier fichier))) (
DIE ("Erreur supprimez le fichier");
}

Dans ce cas, la variable d'environnement $ _Env ["Windir"] peut servir marqueur Utilisation d'une plate-forme Windows et vérifiez l'exécution d'une suppression de fichier via la fonction PHP File_Exists (), qui effectue l'existence du fichier.

Comment supprimer le (s) fichier (s) dans PHP?

Dans certains cas, il peut s'avérer que la fonction Dislink () n'aura pas accès à la suppression du fichier, c'est-à-dire Nous avons une erreur : Permission refusée.. Cela peut être associé à la mauvaise manière de déposer ou du manque de droits d'accès.

Une option intéressante de travailler avec les chemins vers le fichier est l'utilisation de fonctions GetCwD PHP () (Obtient le nom du répertoire de travail actuel) et chdir () (Modifie le répertoire actuel sur le spécifié), par exemple:

$ File_path \u003d "chemin / à";
$ file_name \u003d "/2014/04/file.txt";
$ old \u003d getcwd ();
if (! (@ CHDIR ($ file_path))) Die ("Erreur Ouvrir le chemin");
if (! (@ Dislink ($ file_name)))) Die ("Erreur de suppression du fichier");
cDIR ($ old);

Comme vous pouvez le constater, alors quelque chose de plus facile à naviguer et à suivre le problème. Dans le même temps, il ne sera pas superflu après que la suppression revienne au catalogue en dollars actuel.

En ce qui concerne les problèmes d'accès, vous pouvez essayer d'utiliser PHP-Fonction Chmod () (Modifie le mode d'accès au fichier), par exemple:

$ nom de fichier \u003d "/2014/04/path/to/file.txt";
@chmod (Nom $ FileName, 0666);
si (! (@ Unlink ($))) Die ("Erreur supprimer le fichier");

Si tu as besoin supprimer tous les fichiers du répertoire Il est pratique d'utiliser une combinaison de fonctions PHP Array_map () (Applique la fonction de rappel à tous les éléments du tableau) et glob () (Trouve les chemins de fichiers correspondant au modèle), par exemple:

array_map ("Dislink", Glob ("Certains / dir / *. txt"));

Résoudre le problème de multithreading lors de la suppression des fichiers

Il est beaucoup plus difficile en matière de grands sites où le nombre de requêtes simultanées (flux) au script est grand. Il existe un certain nombre de solutions ici. Je n'en donnerai qu'un seul d'entre eux, le principal sur l'utilisation sémaphore.

En tant que tel, sémaphore Sert de particulier marqueur traiter. Lors de la capture du sémaphore dans un processus, sa valeur diminue par unité et lorsqu'elle est libérée - augmente par une. Dans le même temps, si la valeur actuelle du sémaphore est nulle, le processus ne sera pas en mesure de la capturer et cela s'attendra à la libération du sémaphore.

Pour la ressource de sémaphore, la fonction SEM_GET () est utilisée. Une fonction peut être obtenue par un sémaphore avec une valeur qui diffère d'un, puis le sémaphore sera capable de capturer le sémaphore. La capture utilise la fonction SEM_ACQUIRE (). Exemple:

$ SEM \u003d SEM_GET (1);
si (SEM_ACQUIRE ($ SEM) && File_exists (Nom de fichier $)) @unlink ($ FileName);
sEM_REMOVE ($ SEM);

Faites attention au fait qu'un chèque supplémentaire est utilisé ici pour exister File_exists (). Le fait est que lorsque le premier fil capturera le sémaphore, supprime le fichier et relâchera le sémaphore, le second flux pourra continuer à exécuter sans supprimer un fichier qui n'est plus.

Un rôle important est joué par la fonction SEM_REMOVE (), qui permet au sémaphore occupé. Si le sémaphore n'est pas libéré, le courant parallèle restera dans l'état de veille jusqu'à la fin du travail actuel. Par conséquent, la fonction doit être en dehors de la condition.

J'ai tout sur ceci. J'espère que mon article vous a été utile ou simplement informatif. Merci pour l'attention. Bonne chance!

à 8:00 Modifier le message

il y a 8 ans.

Supprimé un fichier volumineux mais ne voyant aucune augmentation de l'espace libre ou de la diminution de l'utilisation du disque? Utiliser UNIX ou UNE AUTRE POSIX OS?

Le Dislink () ne consiste pas à supprimer le fichier, il s'agit de supprimer un nom de fichier. Le Manpage dit: `` Dislink - Supprimer un nom et éventuellement le fichier qu'il fait référence à ".

La plupart du temps, un fichier n'a qu'un seul nom - en supprimant, il supprimera également (libre, trafiquant) le `corps» du fichier (avec une mise en garde, voir ci-dessous). Cela "SUE Le cas simple et habituel.

Cependant, il convient parfaitement à un fichier pour avoir plusieurs noms (voir la fonction de lien ()), dans les mêmes répertoires ou différents. Tous les noms se réfèrent au corps du fichier et «gardez-le en vie», pour ainsi dire. Ce n'est que lorsque tous les noms sont supprimés, le corps du fichier est réellement libéré.

La mise en garde:
Un organisme de fichier peut * aussi * être "gardé en vie" (toujours en utilisant DiskSpace) par un processus qui détient le fichier ouvert. Le corps ne sera pas distribué (ne libérera pas d'espace disque) tant que le processus le maintient ouverte. En fait, il existe une manière fantaisie de ressusciter un fichier supprimé par une erreur mais toujours ouverte par un processus ...

Il ya 10 ans.

J'ai travaillé sur un peu d'essai où un fichier de sauvegarde a été créé avant de modifier le fichier texte principal. Le fichier principal sera supprimé (non associé) et le fichier de sauvegarde est renvoyé à la place.

Cependant, je me suis brisé la tête pendant environ une heure sur la raison pour laquelle je ne pouvais pas obtenir mes persmissions de droit de dissuader le fichier principal.

Enfin, je savais ce qui n'allait pas: parce que je travaillais sur le dossier et que je n'avais pas encore fermé le dossier, il était toujours en cours d'utilisation et de succès ne pouvait pas être supprimé :)

J'ai donc pensé à mentionner cela ici, d'éviter d'autres de faire la même erreur:

// Fermer Fermer le fichier
fcfrose ($ PF);

// alors dissimulez :)
dislink ($ quelqueèrement);
?>

Il y a 14 ans.

Pour supprimer tous les fichiers d'une extension particulière, supprimer, supprimer tous les caractères génériques, une manière très simples est d'utiliser la fonction Glob. Dis que je voulais supprimer tous les JPGS .........

Foreach (glob ("* .jpg") comme $ nom de fichier) (
Echo "$ taille du nom de fichier". FILLESIZE ($ FileName). "\\ n";
dislink ($ nom de fichier);
}

?>

Il ya 10 ans.

À toute personne qui a eu un problème avec les autorisations refusé une erreur, elle a parfois été causée lorsque vous essayez de supprimer un fichier que dans un dossier HIGER dans la hiérarchie à votre répertoire de travail (c'est-à-dire lorsque vous essayez de supprimer un chemin qui commence. AVEC "../").

Donc, pour contourner ce problème, vous pouvez utiliser CHDIR () pour modifier le répertoire de travail dans le dossier où le fichier que vous souhaitez déverrouiller est situé.

$ old \u003d getcwd (); // enregistrer le répertoire actuel
cHDIR ($ path_to_file);
dislink ($ nom de fichier);
cDIR ($ old); // restaurer l'ancien répertoire de travail
?>

il y a 4 ans.

OSX, lors de la lutte contre une erreur "autorisation refusée", assurez-vous que le répertoire a des autorisations d'écriture pour l'utilisateur PHP exécutant.

En outre, si vous comptez sur les ACL et que vous souhaitez supprimer un fichier ou un symbole symbolique, le répertoire contenant doit avoir une autorisation «DELETE_CHILD». Si vous accordez uniquement «Supprimer» au dossier qui vous permettra de supprimer le dossier du conteneur lui-même, mais pas les objets à l'intérieur.

il y a 4 ans.

Cela peut sembler évident, mais je me déchirais les cheveux avec ce problème - assurez-vous que le fichier vous "rétile de supprimer n'est-ce pas utilisé. J'avais un script qui faisait l'analyse d'un fichier texte et que c'était censé la supprimer après avoir terminé, mais a continué à obtenir une erreur de refuser une autorisation, car je n'avais pas explicitement fermé le dossier, il était donc techniquement "utilisé" même si l'analyse a été "utilisée" ACHEVÉE.

Il y a 11 ans.

Le poste de Ggarciaa ci-dessus a déjà une petite erreur, le fermé doit être utilisé même si $ deleter est faux











}

Fermé ($ DH);
Si ($ DELETEME) (
@ rmdir ($ dir);
}
}

?>

9 monhs il y a.

Traitement «Ressource Indisponible» Erreur par Dislink () comme exception à l'aide d'essayer d'attraper

Même IS_File () ou fichier est existant () vérifiera que le fichier existe ou non, il y a des chances que le fichier est utilisé par certaines applications qui empêcheront la suppression et le dissimulation () affichera une erreur "Ressource indisponible".

Donc, après avoir essayé de nombreuses méthodes telles que: `is_resource ()`, `is_watable ()`, `stream_get_meta_data ()` ... etc, j'ai atteint le seul meilleur moyen de gérer les erreurs tout en "supprimant" * un fichier soit * * N'existe pas ** ou ** existe mais être utilisé par une application **

fonction delete_file ($ pfilename)
{
Si (fichier_exists ($ pfilename)) (
// ajouté par muhammad.begawala
// "@" arrêtera d'afficher une erreur "Ressource Indisponible" à cause du fichier est ouvert certains où.
// "Dislink ($ pfilename)! \u003d\u003d true" vérifiera si le fichier est supprimé avec succès.
// Lancer une exception afin que nous puissions gérer facilement l'erreur au lieu d'afficher les utilisateurs.
Si (@unlink ($ pfilename)! \u003d\u003d vrai)
Jeter une nouvelle exception ("Impossible de supprimer le fichier:" $ Pfilename. "Veuillez fermer toutes les applications qui l'utilisent.");
}
Retourne vrai;
}

/ * \u003d\u003d\u003d Usage \u003d\u003d\u003d * /

essayer (
Si (delete_file ("hello_world.xlsx") \u003d\u003d\u003d true)
Echo "fichier supprimé";
}
attraper (exception $ e) (
Echo $ e--\u003e getMessage (); // Imprimer un message d'exception défini ci-dessus.
}

Il y a 11 ans.

La publication de Ggarciaa ci-dessus a une petite erreur, elle ignorera les chaînes de fichiers et de répertoires évaluées comme FALSE (c'est-à-dire "0")

Le code fixe est ci-dessous (faux! \u003d\u003d)

// Ggarciaa à Gmail Dot Com (04-juillet-2007 01:57)
// je devais vider un répertoire, mais le garder
// donc j'ai légèrement modifié la contribution de
// Stefano à Takys Dot It (28 décembre 2005 11:57)
// une fonction récurrente courte mais puissante
// qui fonctionne également si les DIRS contiennent des fichiers cachés
// $ dir \u003d le répertoire cible
// $ DELETEME \u003d si true Supprimer aussi $ DIR, si faux leve seul

Fonction Sureremoveir ($ DIR, $ DELETEME) (
Si (! $ DH \u003d @ Opendir ($ DIR)) retour;
Tandis que (faux! \u003d\u003d ($ obj \u003d readdir ($ DH))) (
Si ($ obj \u003d\u003d "." || $ obj \u003d\u003d "..") Continuer;
si ( [Email protégé] Dislink ($ Dir. "/" $ Obj)) teheremoveir ($ dir ". /". $ Obj, vrai);
}
Si ($ DELETEME) (
fermé ($ DH);
@ rmdir ($ dir);
}
}

// teheremoveir ("vide", faux);
// teheremoveir ("removeme", vrai);

?>

il y a 8 ans.

Unlinkk peut échouer après avoir utilisé des commandes ODBC sur le fichier.

Ni. NI. A fait l'affaire.

SEUL. Libéré le fichier de telle sorte qu'il puisse être supprimé par la suite ...

Nous continuons la leçon qui est dédiée au sujet " Travailler avec des fichiers PHP" Si vous n'avez pas lu le précédent, je recommande de lire, mais ceux qui lisent, allumant. Dans cette leçon, vous apprendrez à supprimer le fichier créé ou existant à l'aide de PHP, de copier ou de renommer, bloquez le fichier.
Eh bien, si vous êtes prêt, alors au combat ...

Suppression d'un fichier sur PHP

Si vous devez supprimer n'importe quel fichier, utilisez la fonction PHP Dislink ():

Dislink (nom de fichier);

Nom de fichier - Ici, spécifiez le nom du fichier à supprimer.

Notons-nous, nous devons supprimer le fichier "fichier.txt", un exemple de remplissage sera ceci:

Unlink ("file.txt");

Code prêt:



Si le fichier "fichier.txt" était présent, le script est supprimé.

Copier un fichier sur PHP

Si vous avez besoin d'un seul fichier pour recharger le contenu dans un autre fichier, utilisez la copie de la fonction PHP ().

Copier ("fichier1", "fichier2");

Fichier1 - Le nom du fichier d'où le texte sera copié
- File2 - Nom du fichier où le texte sera copié

Par exemple, créez un fichier appelé "file2.txt" sur le serveur local dans le dossier "Test-1". Laissez le fichier être vide. Maintenant insérer ce code copier ("fichier.txt", "file2.txt"); Dans le code PHP "fichier.php":



Qu'avons-nous fait? Créé via le fichier php appelé "File.txt", enregistré dans le fichier "File.txt" via php " Je suis heureux de vous voir sur le site du blog "Affiche le résultat dans le navigateur, copié le texte du fichier" File.txt "et inséré dans le fichier" File2.txt ". Ne croyez pas que tout s'est passé? Vous souvenez-vous que le fichier "file2.txt" était vide ?! Ouvrez-le! Et que voyez vous? Oui, à droite, le texte qui était dans le fichier "fichier.txt":

Renommer le fichier sur php

Pour faire renommer le fichier, utilisez la fonction PHP Renommer ():

Renommer ("fichier1", "file2");

Fichier1 - Le nom du fichier à remplacer ( renommer)
- File2 - Ici, vous devez donner un nouveau nom de fichier

Exemple de remplissage ceci:

Renommer ("fichier2..txt");

Voici un code prêt:



Fichier "File2.txt" est renommé sur le fichier "Site.txt".

À ce sujet, je pense que vous devriez terminer notre leçon. Mais ce n'est pas tout, dans la prochaine leçon, continuera de travailler avec des fichiers.

Avez-vous aimé l'article? Partager avec des amis: