2017-10-05 2 views
0

La question est simple mais je vais donner quelques informations de fond pour faire, je l'espère, répondre plus facilement. Donc, je travaille avec le framework ELGG et je prends des informations à partir d'un formulaire et des zones de texte dans l'espoir d'imprimer ces données dans un simple fichier texte. Malheureusement, pour une raison quelconque, cela m'a donné beaucoup de problèmes et je n'arrive pas à comprendre pourquoi, peu importe où je regarde.Quel est le problème avec mon code php 'Save File'?

code

est comme suit

<?php 

error_reporting(E_ALL); 
//Get the page 
$title = get_input('title'); 
$body = get_input('body'); 
$date = date("l jS F Y h:i A"); 

//remove any possible bad text characters 


$FileName = $title . ' ' . $date; 
//print to file 
//get filename and location to save 
$folderName = '/Reports/' . $FileName . '.txt'; 
$ReportContent = "| " . $body . " |"; 

//write to the file 
file_put_contents($folderName, $ReportContent, 0); 

//error check to see if the file now exists 
if (file_put_contents($folderName, $ReportContent)) { 
    system_message("Report Created (" . basename($folderName) . ")"); 
    forward(REFERER); 
} else { 
    register_error("Report (" . basename($folderName) . ") was not saved!"); 
    forward(REFERER); 
} 

Alors, que ci-dessus doit faire est de saisir le texte du titre et la boîte corps (qui je peux confirmer le fait du titre au moins), puis enregistrez-le sous le répertoire/reports/folder (le chemin complet du plugin est Automated_script_view/reports/si nécessaire). Pourtant, je vais toujours obtenir l'erreur de registre, et je n'arrive pas à trouver pourquoi.

Je crois que cela a à voir avec la déclaration du dossier (/ reports /), comme si j'enlève cette partie, il passe et soumet, bien qu'il ne semble pas réellement enregistrer n'importe où.

Un conseil tout serait très apprécié!

+0

file_put_contents devient un lien absolu. Donc, il va essayer d'enregistrer dans/Reports où il n'a probablement pas les permissions pour le faire (ou peut-être que le dossier n'existe même pas.) Ajouter un point au début pour le faire par rapport au chemin d'exécution du script – LordNeo

+0

vous appelez file_put_contents deux fois: une fois pour l'écriture et l'autre pour tester si elle a écrit, les deux fois, c'est écrire, ce qui est un peu inutile, vous devriez utiliser le retour du premier appel pour tester le résultat – waterloomatt

Répondre

0

La fonction file_put_contents (fichier, données, mode, contexte) renvoie le nombre de caractères écrits dans le fichier en cas de succès, ou FALSE en cas d'échec. Notez les corrections suivantes et votre script fonctionnera correctement:

1 Votre nom de fichier a un caractère "illégal" ":" provenant de la partie $ date de la chaîne que vous concaténez pour former le nom de fichier.

2 Retirez file_put_contents($folderName, $ReportContent, 0); Puisque la fonction retourne un nombre entier, simple d'utilisation:

if(file_put_contents($folderName, $ReportContent) > 0){ 
//true 
}else{ 
//false 
} 
+0

ou mieux pour vérifier avec '! == false' – Sysix

+0

Rien ne va pas avec puisque si (int x) retournera vrai – Nditah

+0

non ce n'est pas faux :) mais de la logique pense que c'est mieux :) – Sysix