web-dev-qa-db-fra.com

Enregistrement d'un fichier texte sur le serveur à l'aide de JavaScript

Est-il possible d'enregistrer du texte dans un nouveau fichier texte en utilisant JavaScript/jQuery sans utiliser PHP? Le texte que j'essaie d'enregistrer peut contenir des entités HTML, JS, HTML, CSS et PHP que je ne veux pas échapper ou utiliser urlencode!

Si cela n'est possible qu'en utilisant PHP comment puis-je passer le texte à PHP sans l'encoder?

21
user2202413

Vous devez avoir un script côté serveur pour gérer votre demande, cela ne peut pas être fait en utilisant javascript.

Pour envoyer des données brutes sans URIencoding ou échapper des caractères spéciaux au php et l'enregistrer en tant que nouveau fichier txt, vous pouvez envoyer une requête ajax en utilisant la méthode post et FormData comme:

JS:

var data = new FormData();
data.append("data" , "the_text_you_want_to_save");
var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new activeXObject("Microsoft.XMLHTTP");
xhr.open( 'post', '/path/to/php', true );
xhr.send(data);

PHP:

if(!empty($_POST['data'])){
$data = $_POST['data'];
$fname = mktime() . ".txt";//generates random name

$file = fopen("upload/" .$fname, 'w');//creates new file
fwrite($file, $data);
fclose($file);
}

Modifier:

Comme Florian l'a mentionné ci-dessous, la solution de secours XHR n'est pas requise car FormData n'est pas pris en charge dans les anciens navigateurs ( compatibilité des navigateurs de formdata ), vous pouvez donc déclarer la variable XHR comme suit:

var xhr = new XMLHttpRequest();

Veuillez également noter que cela ne fonctionne que pour les navigateurs prenant en charge FormData tels que IE +10.

39
razzak

Il n'est pas possible d'enregistrer du contenu sur le site Web en utilisant uniquement des scripts côté client tels que JavaScript et jQuery, mais en soumettant les données dans une AJAX POST vous demande pourrait exécuter l'autre moitié très facilement côté serveur.

Cependant, je ne recommanderais pas d'avoir un contenu brut tel que des scripts si facilement inscriptibles sur votre hébergement car cela pourrait facilement être exploité. Si vous souhaitez en savoir plus sur AJAX POST, vous pouvez lire la page de l'API jQuery:

http://api.jquery.com/jQuery.post/

Et voici certaines choses que vous devez savoir si vous souhaitez toujours enregistrer des fichiers de script bruts sur votre hébergement. Vous devez être très prudent avec la sécurité si vous manipulez des fichiers comme celui-ci!

Téléchargement de fichier (la plupart de cela s'applique si vous envoyez également du texte brut si javascript peut choisir le nom du fichier) http://www.developershome.com/wap/wapUpload/wap_upload.asp?page=securityhttps://www.owasp.org/index.php/Unrestricted_File_Upload

4
Joe F