Salvare pagina din php in fisier html

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
adrian_ady
Mesaje: 80

Salvare pagina din php in fisier html

Cum salvez pagina php a facturii ca file html intr-un folder "facturi/" cu numele preluat dintr-un camp din pagina, sa zicem <?=$nume?> ? Asta crezand ca este pasul de urmat dar daca nu, care?
O pagina clasica PHP:

Cod: Selectaţi tot

<?php
require_once("../------------.php");
-----------
?>
<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
----------------------
<body>
----------
</body>
</html>

MarPlo Mesaje: 4343
Salut
Poti sa folosesti urmatorul cod intr-un fisier php separat. In el incluzi fisierul php al carui continut vrei sa-l salvezi.

Cod: Selectaţi tot

<?php
$dir = 'facturi/';  // where to save
$file_html = 'fisier.html';  // name of the saved file

// preia continutul realizat de un fisier php
ob_start();
include 'test.php';
$content = ob_get_clean();

// salveaza continutul
if(file_put_contents($dir . $file_html, $content)) echo 'The file: '. $dir . $file_html .' is saved';
else  echo 'The file: '. $dir . $file_html .' cannot be saved';
Sau, o alta varianta, cu acest cod, tot intr-un fisier php separat.

Cod: Selectaţi tot

<?php
$dir = 'facturi/';  // where to save
$file_html = 'fisier.html';  // name of the saved file

// preia continutul de la pagina php (adresa URL completa)
$content = file_get_contents('http://localhost/test.php');

// salveaza continutul
if(file_put_contents($dir . $file_html, $content)) echo 'The file: '. $dir . $file_html .' is saved';
else  echo 'The file: '. $dir . $file_html .' cannot be saved';
- "test.php" e pagina php pe care vrei sa o salvezi.

adrian_ady Mesaje: 80
Offf, mereu am probleme. Acum am in pagina factura doua butoane: un submit pt. inserare date in mysql, celalalt pentru salvare factura in html. Indiferent ce fac mai intai, datele de pe factura se pierd si nu mai sunt valabile pentru al doilea click. Ma gandeam sa salvez mai intai in db dupa care pagina sa preia datele din tabel dar in cazul in care factura are mai multe randuri devine naspa... Cum fac sa salvez totul cu un singur click?

MarPlo Mesaje: 4343
Daca pagina php pe care vrei sa o salvezi ca html e aceeasi cu cea in care ai codul de salvare in baza de date, ar functiona sa adaugi codul de salvare pt. fisier html in acelasi fisier php.
Ca exemplu, asa:

Cod: Selectaţi tot

<?php
// retine in memorie datele de iesire la browser de aici in colo
ob_start();

$dir = 'facturi/';  // where to save
$file_html = 'fisier.html';  // name of the saved file

// Aici codul de adaugare date in baza de date
// Apoi cel html
?>
<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
----------------------
<body>
<?php
echo 'Ceva afisat in browser';
?>
</body>
</html>
<?php
// preia datele de iesire retinute in memorie
$content = ob_get_clean();

// salveaza continutul, returneaza mesaj in caz de eroare
if(!file_put_contents($dir . $file_html, $content)) echo 'The file: '. $dir . $file_html .' cannot be saved';

// afiseaza in browser continutul salvat
echo $content;
?>

adrian_ady Mesaje: 80
Pana acum nu-mi era prea clar rolul functiei ob_start(). Acum e clar.

Din pacate nu salveaza si datele. Pana acum nu verificasem insa am facut toate testele, cu modulul in pagina, cu modulul preluat dintr-un alt file, cu si fara inserare date in db(crezand ca poate interfera in vreun fel) insa degeaba, variabilele nu le salveaza.
Ma uitam acum in browser la sursa paginii(factura.php), nu se vede nicio variabila deci sunt motive ca nici la salvarea paginii html sa nu fie vizibile.
Totusi la print se vad corect...
Si acum mai vad ceva, salveaza fisierul html ori de cate ori accesez pagina factura.php , suprascrie continutul.

MarPlo Mesaje: 4343
Exemplu complet dat mai sus functioneaza, poti sa-l testezi separat, adaugi variabile in codul php, apoi orice "echo" la acea variabila (dupa ob_start()) va fi la urma adaugat in $content (cu ob_get_clean()), care e salvat in html si afisat in pagina.

Ca sa salveze fisierul html doar cand sunt trimise datele de formular, pui o conditie if() care sa execute file_put_contents() doar cand e trimis unul din datele formularului.
Cam asa:

Cod: Selectaţi tot

if(!isset($_POST['field_name'])) {
  if(!file_put_contents($dir . $file_html, $content)) echo 'The file: '. $dir . $file_html .' cannot be saved';
} 

adrian_ady Mesaje: 80
Si totusi nu salveaza valorile. Am incercat si cu echo si cu tot, nu preia valorile calculate.

Cod: Selectaţi tot

</body>
</html>

<?
// salveaza continutul
if(isset($_POST['Salveaza'])) {
$content = ob_get_clean();
  if(!file_put_contents($dir . $file_html, $content)) echo 'Factura nu poate fi salvata';
  else echo $content;
}
?>

MarPlo Mesaje: 4343
Vezi cum functioneaza acest cod intr-un fisier php separat. Sigur va salva si afisa valoarea variabilei $site cu ce este adaugat in formular.

Cod: Selectaţi tot

<?php
// retine in memorie datele de iesire la browser de aici in colo
ob_start();

$dir = 'facturi/';  // where to save
$file_html = 'fisier.html';  // name of the saved file

// Variabila care trebuie salvata si afisata (din formular sau 'site')
$site = isset($_POST['site']) ? $_POST['site'] : 'site';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Titlu</title>
<meta charset="utf-8">
</head>
<body>
<?php
// afiseaza variabila
echo $site;
?>
<form action="" method="post">
 <input type="text" name="site" value="https://marplo.net/" />
 <input type="submit" name="save" value="Send" />
</form>
</body>
</html>
<?php
// preia datele de iesire retinute in memorie
$content = ob_get_clean();

// salveaza continutul (va contine si valoarea din formular), returneaza mesaj in caz de eroare
if(isset($_POST['save'])) {
  if(!file_put_contents($dir . $file_html, $content)) echo 'Factura nu poate fi salvata';
}

echo $content;
?>

adrian_ady Mesaje: 80

Cod: Selectaţi tot

<?php
// afiseaza variabila
echo $site;
?>
Scuze, ce trebuie sa inteleg aici? 'afiseaza variabila' este spatiul unde trebuie sa inserez eu variabilele de memorat sau este explicatia echo $site? Am facut cateva probe lasand 'site' peste tot si necompletand nimic in spatiul de mai sus dar nu a dat rezultate. Daca trebuie sa trec ceva mai sus, imi dai un exemplu?

MarPlo Mesaje: 4343
In acel script nu spun unde sa inserezi variabile, e doar explicatia liniei de cod; un exemplu care arata cum sunt salvate in fisierul html, si sunt afisate in pagina valorile variabilelor din codul php (Daca li-se aplica "echo" sau "print", ca sa fie afisate).
- Deci, valorile de memorat in ob_start() (si puse in $content) sunt cele la care dai "echo" ori "print", sau orice text /mesaj care urmeaza a fi vizibil in pagina.
In rest, foloseste exemplu, fa probe si afiseaza variabilele unde stii ca-ti trebuie.

andras Mesaje: 430
Am testat si eu exemplul si merge fara probleme.

adrian_ady Mesaje: 80
Am inteles. Mai jos numai partea ce tine de 'echo'. Multumesc muuuuuuult.

Cod: Selectaţi tot

<?php
ob_start();

$dir = 'dir/'; // directory
$file_html = "name.html";  // name of the saved file

$sub_total = isset($_POST['inp_subtotal']) ? $_POST['inp_subtotal'] : 'inp_subtotal';
// la fel pentru celelalte variabile
?>
<!DOCTYPE html>
----------------------
<div id="subtotal"><?if ($sub_total > 0) echo $sub_total; else echo '0.00';?></div>
--------------------

Subiecte similare