80 votes

PHP Créer et sauvegarder un fichier txt dans le répertoire racine

J'essaie de créer et d'enregistrer un fichier dans le répertoire racine de mon site, mais je ne sais pas où il crée le fichier car je n'en vois aucun. Et j'ai besoin que le fichier soit écrasé à chaque fois, si possible.

Voici mon code :

$content = "some text here";
$fp = fopen("myText.txt","wb");
fwrite($fp,$content);
fclose($fp);

Comment puis-je le configurer pour qu'il soit sauvegardé sur la racine ?

0 votes

Ça me semble correct. Tant que le script est situé dans votre web Root, tout devrait bien se passer. La seule chose qui pourrait l'arrêter est vos permissions.

1 votes

Si vous avez la permission, essayez $fp = fopen("/myText.txt","wb");

0 votes

En dehors du fait que c'est une mauvaise idée et que cela semble être du piratage, assurez-vous simplement de spécifier le chemin complet et d'avoir suffisamment de permissions.

144voto

Vigrond Points 4222

Il crée le fichier dans le même répertoire que votre script. Essayez plutôt ceci.

$content = "some text here";
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . "/myText.txt","wb");
fwrite($fp,$content);
fclose($fp);

6 votes

Remarque : cette opération nécessite un droit d'écriture sur le répertoire dans lequel vous écrivez.

0 votes

Je ne peux pas écrire de contenu dans ce fichier. Comment puis-je le faire ?

16voto

cb1 Points 550

Si vous exécutez PHP sous Apache, vous pouvez utiliser la variable d'environnement appelée DOCUMENT_ROOT . Cela signifie que le chemin d'accès est dynamique et qu'il peut être déplacé d'un serveur à l'autre sans avoir à modifier le code.

<?php
  $fileLocation = getenv("DOCUMENT_ROOT") . "/myfile.txt";
  $file = fopen($fileLocation,"w");
  $content = "Your text here";
  fwrite($file,$content);
  fclose($file);
?>

0voto

Farray Points 3748

fopen() ouvrira une ressource dans le même répertoire que le fichier qui exécute la commande. En d'autres termes, si vous exécutez simplement le fichier ~/test.php, votre script créera ~/myText.txt.

Cela peut être un peu déroutant si vous utilisez une réécriture d'URL (comme dans un cadre MVC), car le nouveau fichier sera probablement créé dans le répertoire contenant le fichier index.php racine.

En outre, vous devez disposer des autorisations correctes et vous pouvez effectuer un test avant d'écrire dans le fichier. Ce qui suit vous aidera à déboguer :

$fp = fopen("myText.txt","wb");
if( $fp == false ){
    //do debugging or logging here
}else{
    fwrite($fp,$content);
    fclose($fp);
}

0voto

Abdellah Points 32

Essayez ceci :

<?php
$file = 'something.txt';

if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
?>

0voto

Gazmend Sahiti Points 99

Cette question a été posée il y a des années, mais voici une approche moderne utilisant PHP5 ou des versions plus récentes.

  $filename = 'myfile.txt'
  if(!file_put_contents($filename, 'Some text here')){
   // overwriting the file failed (permission problem maybe), debug or log here
  }

Si le fichier n'existe pas dans ce répertoire, il sera créé, sinon il sera écrasé, à moins que l'option FILE_APPEND soit activée. file_put_contents est une fonction intégrée qui est disponible depuis PHP5.

Documentation pour file_put_contents

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X