phpInfo.netLes ArchivesLes éléPHPants

  
  Accueil
  Trucs & Astuces
  Scripts
  Regex
  Annuaire
  Articles

.
      
 Astuces   PHP  Fichiers/Répertoires


Droit sur des fichiers[30-08-2002]
Posté par Kraft

chmod() ne fonctionne pas toujours, comme sous windows par exemple.
Néanmoins, on peut associer des droits à un dossier en le créant.
Toutefois, pour des raisons de sécurité, PHP ne permet pas certaines autorisations un peu excessives comme tous droits (777).

Pour passer cette barrière, il suffit d'utiliser umask()

Exemple:

<?
// à la place de chmod($path, 0777)
umask(0000);
mkdir($path, 0777);
?>

et le dossier sera en 777.

Lecture de fichier[01-05-2002]
Posté par Mathieu Delestre

Ce script permet de mettre le contenu d'un fichier dans une variable. Simple mais efficace, et surtout tellement pratique.

<?php

//utilisation:
//$mavar = read_file("./data/monfichier.ext");

Function read_file($file)
{
    
$fp = fopen($file,"r");
    
$return = fread($fp,filesize($file));
    
fclose($fp);
    return
$return;
}

?>


[2 commentaires]

Création de fichier .ra[25-03-2002]
Posté par Yves Tannier

Je vous propose un moyen simple de streamer en HTTP des fichiers RealMedia si vous
n'avez pas de serveur Real.
Le principe consiste à créer avec PHP un fichier .ra contenant le lien vers votre votre clip .rm que vous aurez préalablement mis sur votre serveur.

<?

//---- le repertoire où se trouve vos fichiers .rm
$repmedia = "http://media.domaine.tld/real";

//---- si le fichier .ra n'existe pas il est crée puis
//---- lu, sinon il est lu directement
if(!file_exists("$titre.ra"))
{
  
$fichier = fopen ("$titre.ra" , "w+");
  
fputs($fichier, "$repmedia/$titre.rm");
  
fclose ($fichier);
  
header("Location:$titre.ra");
}
else
{
  
header("Location:$titre.ra");
}

//---- le lien d'écoute sur vos pages est de la forme
//---- live.php3?titre=letitre (titre sans l'extension)
?>


Nombre de fichiers *.php dans un répertoire[06-01-2002]
Posté par Matt

Voici une fonction qui vous permettra de trouver le nombre de fichiers *.php (ou une autre extension) dans un dossier :


function Compte_Fichiers($dossier, $ext)
{
  $rep=dir($dossier);
  while($fichier = $rep->read())
  {
    if(ereg(".php", $fichier)==FALSE)
    {
      if($fichier!="." && $fichier!="..")
      {
        ++$cpt;
      }
    }
  }
  return "$cpt";
}


[3 commentaires]

Forcer le download d'un fichier[26-11-2001]
Posté par phachp

Voici un script pour forcer le téléchargement d'un fichier .doc .jpg .xls ouvert automatiquement par le navigateur.

Dans la page où se trouve le lien hypertexte du fichier à télécharger :

$filename = "nom du fichier à downloader";
$chemin = "chemin complet vers le fichier/".$filename;

<a href="download.php?chemin=<?=$chemin?>&filename=<?=$filename?>">download</a>

Dans le fichier download.php ecrire ce simple code :

<?

header
("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=".$filename);
readfile($chemin.$filename);

?>


[1 commentaire]

Fonction de création de fichier de log[09-09-2001]
Posté par Didier

Il peut être interessant de consigner des messages dans un fichier de log.
La ligne <? logerr("erreur n° XXXX dans la fonction YYYYY)?> sera consignée dans un fichier de log avec la date et l'heure.

<?
function logerr($chaine)
{
$ficlog="appli.log";
$fp = fopen ("$ficlog","a+");
$date=date("D M j G:i:s T Y");
$chaine="$date : $chainen";
$ligne = fputs($fp,$chaine);
fclose($fp);
}
?>

On peut aussi diviser les fichiers de log en changeant les arguments et les gérer dans la fonction <? logerr("erreur n° XXXX dans la fonction YYYYY,"/var/log/fonctionYYYYY.log")?>.

<?
function logerr($chaine,$ficlog)
{
$fp = fopen ("$ficlog","a+");
$date=date("D M j G:i:s T Y");
$chaine="$date : $chainen";
$ligne = fputs($fp,$chaine);
fclose($fp);
}
?>


[1 commentaire]

Nb de fichiers avec extension dans répertoire[26-08-2001]
Posté par Christophe C.

<?
$monrepertoire
="forum/";

$rep=opendir($monrepertoire);
$ext=".dat";
$long_ext=strlen($ext);
$i=0;
$cpt=0;
while(
$fichier=readdir($rep))
{
  
$long_file=strlen($fichier)-$long_ext;

  if ((
$fichier!=".") and ($fichier!="..") and (substr
      
($fichier,$long_file,$long_ext)==$ext))
    
$cpt++;
}
print
$cpt;
?>

J'ai galéré pour trouver une fonction qui donne le nombre de fichiers avec une certaine extension dans un répertoire alors autant que ca profite !

Cet exemple me donne le nombre de fichiers .dat dant le repertoire /forum. Les variables à changer sont $monrepertoire et $ext.

Lire le contenu d'un répertoire en le triant de A à Z[12-08-2001]
Posté par Fabrice Potec

Cette fonction permet de lire le contenu d'un répertoire puis de le trier en ordre croissant (A-Z) ou décroissant (Z-A) avant de l'afficher.

<?
function DirTri($rep,$tri)
{
  
$Array = array(); $dir = opendir($rep);
  
$i=0;
  while (
$File = readdir($dir)){
    if(
$File != "." && $File != ".." && $File != "index.htm")
    {
      
$Array[] = "$File";
    }
    
$i++;
  }
  
closedir($dir);

  if(
$tri == 'DESC'){
    
rsort($Array);
  }else{
    
sort($Array);
  }
  
$Max = count($Array);

  for(
$i = 0; $i != $Max; $i++){
    echo
"<a href=\"$rep"."$Array[$i]\">$Array[$i]</a><br>";
  }
  echo
"<br><br>".$Max." fichier(s)" ;
}

// utilisation de la fonction
// param.1 : chemin du répertoire ("." si il s'agit du rép. courant)
// param.2 : ASC ou DESC (A-Z ou Z-A)
DirTri(".","ASC");

?>

Les fonctions de tri sont "sort()" pour le tri croissant et "rsort()" pour le tri décroissant, pas très dur en soit mais pratique ;).

[1 commentaire]

Transfert serveur/serveur[31-03-2001]
Posté par Tom

Voilà une petite fonction qui permet de copier un fichier d'un serveur à un autre en utilisant d'un coté un pointeur de fichier, et de l'autre, les fonctions FTP de PHP4.
Vu que l'on ne peut pas le faire plus simplement (erreurs incompréhensibles), et que j'ai pas mal galéré dessus, voilà le truc pratique pour faire du 'backupage' sur d'autres serveurs 8-)

<?
function ftp_copy($host, $user, $pass, $path, $name, $url)
{
    
$url = eregi_replace(" ", "%20", $url);
    
$fd = @fopen($url, "rb");
    
$tmp = tmpfile();
    while(!
feof($fd))
    {
        
fwrite($tmp, fread($fd, 1));
    }
    
fclose($fd);
    
rewind($tmp);
    
$fp = ftp_connect($host);
    
$log = ftp_login($fp, $user, $pass);
    if (!empty(
$path))
        
ftp_chdir($fp, $path);
    
ftp_fput($fp, $name, $tmp, FTP_BINARY);
    
ftp_quit($fp);
    
fclose($tmp);
    
    return
true;
}
?>

Puis on appelle la fonction par :

<?
ftp_copy
("ftp.machin.com",
         
"test", "test", "",
         
"index.html", "http://www.truc-bidule.com/index.html");
?>

Par contre, je vous conseille d'exécuter ce script à partir d'un serveur ayant une bonne bande passante, car le fichier est d'abord stocké dans un fichier temporaire sur la machine exécutant le script, puis envoyé par FTP sur l'autre site.

[4 commentaires]

Pour récupérer le contenu d'un fichier dans une variable[19-03-2001]
Posté par Perrich

<?
function readFileIntoBuffer( $filename )
{
  @
$fp = fopen( $filename, "r");
  if (
$fp )
  {
    
$val = fread( $fp, filesize( $filename ));
    
fclose ( $fp );
    return
$val;
  }

  return
false;
}
?>

Exemple :

<?
  $var
= readFileIntoBuffer( 'monfichier.txt' );
?>


[1 commentaire]

Pour lire le contenu d'un fichier et ...[21-01-2001]
Posté par Perrich

Voici une fonction qui permet de lire le contenu d'un fichier et de retourner ce contenu. Si un problème survient la fonction retourne false.

<?
function readFileIntoBuffer( $filename )
{
    @
$fp = fopen( $filename, "r");
    if (
$fp )
    {
        
$val = fread( $fp, filesize( $filename ));
        
fclose ( $fp );
        return
$val;
    }
    return
false;
}
?>

Exemple d'utilisation :

1/ lecture et affichage

<?
echo readFileIntoBuffer( 'monfichier.txt' );
?>

2/ place le contenu dans une variable

<?
$buffer
= readFileIntoBuffer( 'monfichier.txt' );
if (
$buffer )
{
   
// traitement du fichier
}
?>


[1 commentaire]

Télécharger un fichier image[06-12-2000]
Posté par Perrich

Si vous voulez télécharger un fichier image sans l'afficher, il suffit d'utiliser un script du genre :

<?
  $filename
= 'fichier.jpg';

  
header("Content-disposition: filename=$filename");
  
header("Content-type: application/octetstream");
  
header("Pragma: no-cache");
  
header("Expires: 0");

  
readfile( $filename );
?>

Pour l'appeler il suffit de faire script.php et vous allez télécharger ce fichier.

[2 commentaires]

PHP4 - Upload de gros fichiers[20-11-2000]
Posté par Jerôme

Attention si vous voulez permettre l'upload de 'gros' fichiers, il faut modifier le paramètre post_max_size dans votre fichier php.ini. Sinon les fichiers de plus de 8Mo (valeur par défaut de ce paramètre) ne seront jamais uploadés !

[1 commentaire]

Nom du répertoire courant[22-09-2000]

Pour connaître le nom du répertoire courant au script PHP en cours d'exécution :

<?
  
echo ($repertoire = dirname( $PATH_TRANSLATED ));
?>


[1 commentaire]

Afficher un texte au hasard[09-09-2000]
Posté par Julien

Il est possible avec PHP de tirer au hasard un élément d'un fichier texte. Un élément correspond à une ligne du fichier et peut être du texte, du code HTML, etc...
Chaque élément doit impérativement se terminer par un retour à la ligne.

<?
$cpt
= 0;
$fp = fopen("fichier.txt", "r");
while (!
feof($fp)) {
  
$enr = fgets($fp, 4096);
  
$tab[] = $enr;
  
$cpt++;
}
srand((double)microtime()*1000000);
$nbr = rand(0, ($cpt-1));
echo
"$tab[$nbr]";
?>


Log simple des visites dans fichier TXT[24-05-2000]
Posté par LoL

Un petit code à insérer en début de script PHP pour mettre à jour un journal des connexions :

<?
  $fp
= fopen("info_visiteur.txt", "a");
  
fputs($fp, date("Y/m/d H:i")." #".gethostbyaddr($REMOTE_ADDR)."\n");
  
fclose($fp);
?>


Dernière modification d'un fichier[21-05-2000]

Ce petit script vous montre comment afficher la date de la dernière modification du fichier courant :

<?
  
echo "Dernière modification : " .
    
date("D m/d/Y h:i:s a", filemtime($PATH_TRANSLATED));
?>


[1 commentaire]

Mettre un fichier entier dans une variable[21-05-2000]

Il est possible de mettre le contenu d'un fichier dans une seule variable avec l'instruction suivante :

<?
    $var
= fread(fopen($fichier,"r"), filesize($fichier));
?>


Uploader un fichier[21-05-2000]

L'exemple ci-dessous montre comment permettre à l'utilisateur d'envoyer un fichier sur le serveur.

<?
if ($Fichier && $Fichier != "none") {

  echo
"<H1> Votre fichier : </H1>";
  echo
"Fichier sur serveur : $Fichier<BR>";
  echo
"Fichier envoyé      : $Fichier_name<BR>";
  echo
"Taille              : $Fichier_size<BR>";
  echo
"Type                : $Fichier_type<BR>";

  
copy($Fichier, $Fichier_name);
}
?>

<FORM ENCTYPE="multipart/form-data" ACTION="upload.php3" METHOD="POST">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="100000">
Envoyer le fichier : <INPUT NAME="Fichier" TYPE="file">
<INPUT TYPE="submit" VALUE="Envoyer le fichier">
</FORM>?>


[1 commentaire]

Afficher le nom des fichiers d'un répertoire[19-05-2000]

Ce petit script permet d'afficher la liste des fichiers contenus dans le répertoire /etc :

<?
$nomRepertoire
= "/etc";
$dossier = opendir($nomRepertoire);
while (
$Fichier = readdir($dossier)) {
  if (
$Fichier != "." && $Fichier != "..") {
    
$nomFichier = $nomRepertoire."/".$Fichier;
    echo
$nomFichier."<BR>";
  }
}
closedir($dossier);
?>


Synseo