La création d'un fichier dans un dossier qui n'existe pas encore en php

je veux que mon script php crée un fichier de sortie dans un dossier basé sur la date. La façon dont je fais ceci est que c'est supposé obtenir le nom de fichier/foldername à partir d'un fichier texte produit par un autre programme que je suis incapable d'éditer.

donc le fichier dans lequel il saisit les données ressemble à ceci:

data/newfolder/10302008/log_for_Today.txt | 24234234

seulement avec plusieurs lignes, j'ai juste besoin du script pour le parcourir ligne par ligne, saisir le dossier / nom de fichier et créer un fichier vide avec ce nom emplacement.

Les répertoires sont tous 777. Maintenant, je sais comment créer un nouveau fichier exe dans un dossier mais n'arrive pas à comprendre comment créer le dossier puis le fichier exe à l'intérieur de celui-ci, des idées?

19
demandé sur Ryan Gates 2008-11-11 23:49:07

5 réponses

if(!file_exists(dirname($file)))
    mkdir(dirname($file), 0777, true);
//do stuff with $file.

Utiliser le troisième paramètre mkdir (), ce qui lui permet de créer des répertoires de façon récursive.

56
répondu gnud 2008-11-11 21:07:05

$directories = explode( '/', $path );

vous pouvez diviser le chemin pour avoir des noms de répertoire. Ensuite, passez par le tableau et créez les répertoires définissant chmod 777. (Le système de l'utilisateur qui exécute php doit avoir la capacité de le faire.)

$file = array_pop( $directories );
$base = '/my/base/dir';

foreach( $directories as $dir )
{

   $path = sprintf( '%s/%s', $base, $dir )
   mkdir( $path ); 
   chmod( $path, 777 );
   $base = $path;

}

// file_put_contents or something similar
file_put_contents( sprintf( '%s/%s', $base, $file ), $data );

le problème ici est que vous pourriez ne pas définir chmod à partir de votre script php.

une alternative pourrait être D'utiliser FTP. L'utilisateur passe les données de connexion FTP au script et il utilise la fonctionnalité FTP pour gérer fichier.

http://www.php.net/FTP

4
répondu okoman 2008-11-11 21:06:14

créer les dossiers manquants en utilisant mkdir (), puis créer le fichier vide en utilisant touch ().

Vous pouvez utiliser des chemins absolus dans les deux cas, ce qui signifie:

mkdir('data');
mkdir('data/newfolder');
mkdir('data/newfolder/10302008');
touch('data/newfolder/10302008/log_for_Today.txt');

si vous êtes curieux de savoir où il sera, vous pouvez utiliser getcwd () pour vous indiquer le répertoire de travail.

2
répondu jishi 2008-11-11 21:00:48

c'est un peu trop tard mais j'ai trouvé cette question et j'ai une solution pour ça, voici un exemple de code et ça fonctionne bien pour moi Peu importe la profondeur de votre fichier. Vous devez changer le séparateur de répertoires pour les lignes 1 et 3 Si vous l'exécutez sur Windows server.

$pathToFile = 'test1/test2/test3/test4/test.txt';
$fileName = basename($pathToFile);
$folders = explode('/', str_replace('/' . $fileName, '', $pathToFile));

$currentFolder = '';
foreach ($folders as $folder) {
    $currentFolder .= $folder . DIRECTORY_SEPARATOR;
    if (!file_exists($currentFolder)) {
        mkdir($currentFolder, 0755);
    }
}
file_put_contents($pathToFile, 'test');

meilleures salutations, Georgi!

1
répondu 2015-05-19 22:39:39

tu ne Peux pas le faire par la création de la dir avec mkdir (http://nl.php.net/manual/en/function.mkdir.php), puis la commande chmod 777 (http://nl.php.net/manual/en/function.chmod.php) le changement de répertoire avec chdir (http://nl.php.net/manual/en/function.chdir.php) et ensuite créer le fichier (touche)?

0
répondu Overbeeke 2008-11-11 20:55:24