web-dev-qa-db-fra.com

Enregistrer la page actuelle au format HTML sur le serveur

Quelle approche quelqu'un pourrait-il suggérer pour enregistrer la page actuelle en tant que fichier HTML sur le serveur? Dans ce cas, notez également que la sécurité n'est pas pas un problème.

J'ai passé des heures interminables à chercher cela et je n'ai rien trouvé.

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

Modifier

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

38
anon271334

Si vous vouliez enregistrer la sortie d'une page dans un fichier, vous pouvez utiliser la mise en mémoire tampon pour ce faire. Les fonctions que vous devez utiliser sont ob_start et ob_get_contents .

<?php
// Start the buffering //
ob_start();
?>
Your page content bla bla bla bla ...

<?php
echo '1';

// Get the content that is in the buffer and put it in your file //
file_put_contents('yourpage.html', ob_get_contents());
?>

Cela enregistrera le contenu de la page dans le fichier yourpage.html.

63
HoLyVieR

Je pense que nous pouvons utiliser Fonctions de contrôle de sortie de PHP, vous pouvez d'abord utiliser enregistrer le contenu dans la variable puis les enregistrer dans le nouveau fichier, la prochaine fois, vous pouvez le tester, le fichier html existe, puis rendre cela autrement recréer 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

9
Chetan Sharma

Utilisez JavaScript pour envoyer document.getElementsByTagName('html')[0].innerHTML comme valeur d'entrée cachée ou par ajax côté serveur. Ceci est plus utile que la mise en mémoire tampon de sortie si le contenu est ensuite traversé/modifié par JavaScript, dont le côté serveur peut ne pas avoir de notion.

3
BalusC

Dans le cas où vous cherchez à enregistrer une page html complète avec css, images et scripts dans un seul fichier html, vous pouvez utiliser cette classe que j'ai écrite:

Cette classe peut enregistrer des pages HTML complètes avec des 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 les images, les fichiers CSS et JavaScript dont elle a besoin, afin que ces fichiers soient également téléchargés et enregistrés dans la page HTML enregistrée 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

3
Sarfraz

Je pense que vous avez besoin d'une boucle pour pouvoir enregistrer la sortie de n'importe quelle page. Utilisez curl avec returntransfer true. et faites ce que vous voulez avec la sortie.

1
Satya Prakash
//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);
1
shaan gola