2010-09-23 6 views
35

Quelle approche quelqu'un pourrait-il suggérer pour enregistrer la page en cours en tant que fichier HTML sur le serveur? Dans ce cas, notez également que la sécurité est et non un problème. J'ai passé des heures interminables à chercher ce que je cherchais et je n'ai rien trouvé.Enregistrer la page actuelle au format HTML sur le serveur

Votre aide est très appréciée, merci!

Modifier

Merci à tous pour votre aide, il a été très apprécié.

+1

vous a posé la même question il y a seulement 14 heures: [Source Saving of Self (PHP)] - pourquoi ne pas essayer d'obtenir une réponse là-bas au lieu de l'afficher à nouveau? (http: // stackoverflow.com/questions/3769504/save-source-of-self-php) – oezi

+1

oezi - Eh bien, il semble que j'avais raison de créer cette nouvelle question. J'ai une bonne réponse ... Nouvelle question, différentes personnes, réponses différentes. Vous pouvez continuer et fermer cette question maintenant. –

+0

Ces questions ne sont pas exactement les mêmes. Ils sont très similaires mais diffèrent dans la cible: ici c'est le serveur, dans l'autre question c'est le navigateur lui-même. – nalply

Répondre

59

Si vous vouliez enregistrer la sortie d'une page dans un fichier, vous pouvez utiliser la mise en mémoire tampon pour cela. La fonction que vous devez utiliser est ob_start et ob_get_contents. Ceci enregistrera le contenu de la page dans le fichier yourpage.html.

+2

Merci beaucoup. Tu viens de me sauver la vie. – asdfkjasdfjk

+0

J'ai aussi eu la même question. Merci d'avoir répondu. * MAIS * où est ce 'yourpage.html' sauvé? Je n'ai pas pu trouver le fichier dans mon dossier de répertoire – AlwaysANovice

+2

@Walahh A moins que 'chdir' n'ait été appelé, il devrait être dans le même dossier que le script demandé. Si vous ne savez pas ce que c'est, vous pouvez appeler 'getcwd'. – HoLyVieR

3

Utilisez JavaScript pour envoyer document.getElementsByTagName('html')[0].innerHTML en tant que valeur d'entrée masquée ou en ajax sur le serveur. Ceci est plus utile que la mise en mémoire tampon de sortie si le contenu est ensuite traversé/modifié par JavaScript, ce qui pourrait ne pas intéresser le côté serveur.

+0

Merci, BalusC. Donc si j'utilise var $ s = document.getElements ... (en php) je peux alors écrire tout var dans un fichier sur le serveur? –

+0

JavaScript s'exécute sur webbrowser, pas sur webserver. Connaissez-vous JS? Quoi qu'il en soit, compte tenu de votre commentaire, je pense que cette réponse n'est finalement pas ce dont vous avez besoin :) Vous préférez probablement sauvegarder la page HTML générée directement par PHP, pas la page HTML actuellement ouverte (dans tout son état client actuel). Vérifiez la réponse de Holyvier. – BalusC

+0

Merci BalusC :) –

9

Je pense que nous pouvons utiliser Output Control Functions de PHP, vous pouvez utiliser d'abord enregistrer le contenu dans la variable et ensuite les enregistrer dans le nouveau fichier, la prochaine fois, vous pouvez le tester le fichier html existe, puis rendre le reste générer la page.

<?php 
$cacheFile = 'cache.html'; 

if ((file_exists($cacheFile)) && ((fileatime($cacheFile) + 600) > time())) 
{ 
    $content = file_get_contents($cacheFile); 
    echo $content; 
} else 
{ 
    ob_start(); 
    // write content 
    echo '<h1>Hello world to cache</h1>'; 
    $content = ob_get_contents(); 
    ob_end_clean(); 
    file_put_contents($cacheFile,$content); 
    echo $content; 
} 
?> 

Exemple tiré de: http://www.php.net/manual/en/function.ob-start.php#88212

+0

Merci Chetan :) –

+0

Vous êtes les bienvenus .. –

1

Je pense que vous avez besoin curl, de sorte que vous pouvez enregistrer la sortie de toutes les pages. Utilisez curl avec returntransfer vrai. et faites ce que vous voulez avec la sortie.

+0

Merci, Satya. :) –

3

Si vous cherchez à enregistrer la page html complète avec css, des images et des scripts dans un seul fichier html, vous pouvez utiliser cette classe, je l'ai écrit:

Cette classe peut enregistrer des pages HTML complètes avec images, CSS et JavaScript.

Il prend l'URL d'une page donnée et la récupère pour la stocker dans un fichier donné.

La classe peut analyser le code HTML et déterminer quelles images, CSS et JavaScript fichiers dont il a besoin, de sorte que ces fichiers sont également téléchargés et enregistrées dans la page HTML enregistré dans un fichier local.

En option, il peut ignorer le code JavaScript, conserver uniquement le contenu de la page et compresser la page résultante en supprimant les espaces.

http://www.phpclasses.org/package/8305-PHP-Save-HTML-pages-complete-with-images-CSS-and-JS.html

0
//function to use curl to get the content of the page. 
//parameter used url and $data for the posting credentials to retrieve information. 

function httpPost($url, $data){ 
    $curl = curl_init($url); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

    $response = curl_exec($curl); 
    curl_close($curl); 
    return $response; 
} 

// 
$filename="abc.html"; // whatever name you want. 
$myfile = fopen($filename, "w") or die("Unable to open file!"); 
$txt = httpPost(<url>, ""); //<url> replace by url you want. 
fwrite($myfile, $txt); 
fclose($myfile); 
Questions connexes