2010-01-01 10 views
1

J'ai actuellement:php fopen - nom du fichier

<?php 
    if (isset($_POST["submitwrite"])) { 
     $handle = fopen("writetest.txt","w+"); 
     if ($handle) { 
      fwrite($handle, "Dan"."¬".$_POST["username"]."¬".$_POST["pollname"]."¬".$_POST["ans1"]."¬".$_POST["ans2"]."¬".$_POST["ans3"]."¬".time()); 
      fclose($handle); 
     } 
    } 
?> 

Cependant, je dois régler le nom de fichier pour être dynamique, au lieu de « writetest.txt » Je voudrais qu'il soit: nom d'utilisateur + pollname + temps .txt en prenant les variables $ _post.

Je voudrais également changer le répertoire dans lequel ces fichiers sont stockés dans/résultats.

Aidez s'il vous plaît ...

+1

Alors, quelle est la question? – notnoop

Répondre

1

Vous voulez dire quelque chose comme ça?

$filename = '/results/' . $_POST['username'] . '/' . $_POST['pollname'] . '/time.txt'; 
if (isset($_POST["submitwrite"])) { 
    $handle = fopen($filename,"w+"); 
    // etc... 

Ou est-ce que je ne vous comprends pas?

Modifier
Pour répondre à la question BalusC a souligné, c'est une solution plus complète.
Il s'assure que les valeurs $_POST['username'] et $_POST['pollname'] sont valides, elles ne créeront donc pas de code invalide ou potentiellement dangereux $filename.

<?php 
$basedir = '/results'; 
$basename = 'time.txt'; 

// Get user and poll names 
$username = $_POST['username']; 
$pollname = $_POST['pollname']; 

// Counteract the old magic_qutoes feature, if needed. 
if(get_magic_quotes_gpc()) { 
    $username = stripslashes($username); 
    $pollname = stripslashes($pollname); 
} 

// Validate user and poll names. 
$regexp = '/^[\w\d\_\-\. \']+$/iu'; 
if(!preg_match($regexp, $username) || !preg_match($regexp, $pollname)) { 
    echo 'Username or pollname is invalid. Aborting!'; 
} 
else { 
    // Compile the complete file name 
    $filename = $basedir . '/' . $username . '/' . $pollname . '/' . $basename; 

    // Write to the file 
    if (isset($_POST["submitwrite"])) { 
     $handle = fopen($filename,"w+"); 
     if ($handle) { 
      fwrite($handle, "Dan"."¬".$_POST["username"]."¬".$_POST["pollname"]."¬".$_POST["ans1"]."¬".$_POST["ans2"]."¬".$_POST["ans3"]."¬".time()); 
      fclose($handle); 
     } 
    } 
} 
?> 
+0

Perfecto! Certains comment vous avez réussi à me comprendre ... – CLiown

+0

Que se passerait-il s'il y a un utilisateur avec le nom d'utilisateur '" foo /../bar "'? – BalusC

+0

@BalusC: Autoriser seulement a-z, 0-9 et _ et - dans les noms d'utilisateur? – Midas

1

fopen crée (tente au moins) le fichier si elle n'existe pas, donc $ filename = $ username. $ pollname. $ heure. '.SMS'; $ handle = fopen ($ filename, 'w +');

fonctionnera bien. Par ailleurs, w + place le pointeur au début du fichier. Si le fichier contient déjà des données, il le tronquera en premier. Si vous souhaitez ajouter des données au fichier, vous pouvez utiliser 'a +'