2016-05-24 4 views
0

Ich mache ein PHP-Skript für eine JavaScipt-Website, die ich gemacht habe.Problem speichern Datei mit PHP-Skript

Ziel ist es, den Inhalt einer Zeichenfolge als eine HTML-Datei zu speichern, wenn ich auf eine Schaltfläche klicke.

Ich benutze jQuery, um eine Post-Anfrage zu machen.

Ich benutze ein Ubuntu OS mit einem Apache 2 Server. Der Ordner, an den ich schreibe, hat Berechtigungen 777 (nur zum Testen, wird dies aufheben).

Eine Voraussetzung ist, dass PHP in einer anderen Datei leben muss.

Das Problem ist, wenn ich die Anfrage mache, die Datei speichert leer.

Voraussetzung ist, dass jeder Dateiname ein Timestamp sein muss. Die Datei hat den korrekten Dateinamen, aber nicht den Inhalt.

Bisher ist hier mein Code:

<?php 

$fileName = $_GET['fileNameData']; 
$htmlImport = $_GET['htmlToSaveData']; 

$htmlToSave = (string)$htmlImport; 

$myFile = fopen($fileName, "w") or die('You do not have write permissions'); 

//fwrite($myFile, $htmlToSave); 
file_put_contents($myFile, $htmlToSave); 
fclose($myFile); 

?> 

ich die frwite Funktion versucht habe, die ich kommentiert habe aus, denselben Effekt.

Ich habe dies im Terminal durch Übergabe von Argumenten ($ argv [1] und $ argv [2]) getestet. Das funktioniert gut.

Die JS ich gemacht habe meine Seite zu laufen wie folgt aussieht:

var newURL = 'saveHTML.php/?fileNameData=' + fileName + '&htmlToSaveData=' + htmlToSave 
$.post(newURL) 
    .done(function(){ 
     alert('Your file saved as ...' + htmlToSave) 
    }) 

ich diesen Code auch versucht haben, mit dem gleichen Ergebnis:

$.post('saveHTML.php/', { 
    fileNameData : fileName, 
    htmlToSaveData : htmlToSave 
}) 

Sowohl der Dateiname und htmlToSave werden Strings, obwohl htmlToSave ziemlich lang ist und tatsächlich HTML-Text ist, den ich in eine Zeichenkette umgewandelt habe.

Hat jemand Ideen, was hier vor sich geht? Ich bin überhaupt kein PHP-Entwickler.

Ich benutze einen Rückruf, damit ich sicher sein kann, dass ich alle meine HTML gesammelt habe, bevor ich die Zeichenfolge an PHP übergeben.

Ich habe die Empfehlungen zu dieser Frage here gelesen und getestet und das war fruchtlos.

EDIT Seien Sie nicht beunruhigt über den Code, ich weiß, es ist ein Sicherheitsproblem, aber dies ist ein Lernprojekt, und dies wird nicht in Produktion sein.

+0

Als Test versuchen Sie Folgendes: 'file_put_contents ('./ test.txt', 'test text');' Wenn das fehlschlägt, haben Sie ein Berechtigungsproblem. Wenn das funktioniert, liegt ein Problem mit dem Inhalt oder dem Dateipfad vor. – Tigger

+0

Ich gab dem einen Schuss, also muss es ein Inhaltsproblem sein – JasTonAChair

Antwort

0

kann ich auf Anhieb sehen, dass Sie

haben
$myFile = fopen($fileName, "w") or die('You do not have write permissions'); 

//fwrite($myFile, $htmlToSave); 
file_put_contents($myFile, $htmlToSave); 
fclose($myFile); 

file_put_contents einen Dateinamen nimmt, kein Griff. Also würden Sie brauchen nur

file_put_contents($fileName, $htmlToSave); 

Edit: Ich habe auch das Gefühl, ich möchte darauf hinweisen, dass Sie nicht zulassen, sollten Sie Ihre Benutzer Ihre Dateien zu nennen. Sie könnten möglicherweise Ihre Maschine beschädigen.

+0

OK, aber wie die Frage sagte, habe ich auch versucht '' 'fwrite ($ myFile, $ htmlToSave); '' 'und es ist das gleiche Problem – JasTonAChair

+0

, wenn es tatsächlich die Datei erstellt, wie Sie erwähnt, aber nicht in den Inhalt setzen. Was ich oben gepostet habe, wäre der Grund dafür. Die einzige andere Sache, die ich mir vorstellen kann, wäre, dass $ htmlToSave null ist. Da Sie '$ _GET' verwenden, wird nur die' $ .get'-Ajax-Anfrage funktionieren. Die '$ .post'-Anfrage würde den' $ _POST'-Super-Global verwenden. Ich würde den Inhalt der '$ htmlToSave'-Variable ausgeben, bevor Sie Ihre Datei schreiben, um zu sehen, was sie enthält. Sie können die Rückgabedaten von Ihrem Server per Konsole protokollieren, indem Sie Ihren 'done' Callback mit' function (data) {console.log (data)} 'modifizieren. – Jacob