Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Zaspis wykonywanego pliku
Forum PHP.pl > Forum > PHP
b_chmura
Witam

Bylibyście wstanie oświecić mnie jak zapisać wynik pliku na którym aktualnie działamy?

Tok działania:
W pliku plik.php wykonujemy szereg zadań. Jeśli plik nie zwróci nam żadnego błędu jego wynik zapisujemy do plik.html.

plik.php
Kod
<html>
<head>
<title>Tytul</title>
<body>
<div>cos tam</div>
<?php
function b_echo($in)
{
  echo '<b>'.$in.'</b>';
}

b_echo('Witaj swiecie!');
?>
</body>
</html>
<?php
function save($filename)
{
  //jak ma wyglądać ta funkcja by zapisać do pliku to co mamy wyżej?
}
save('plik.html');
?>


plik plik.html wyglądałby tak:
Kod
<html>
<head>
<title>Tytul</title>
<body>
<div>cos tam</div>

<b>Witaj swiecie!</b>

</body>
</html>
Daimos
jesli PHP5 to file_put_contents" title="Zobacz w manualu PHP" target="_manual
a zeby pobrac dane do zapisu to file_get_contents" title="Zobacz w manualu PHP" target="_manual i w sciezce podaj http://adrespliku
powinno dzialac

ale najlepiej by bylo zrobic wszystko tak, zeby zmiescic to w jedna zmienna i pozniej wyswietlac, wtedy zapis bez problemu
np.:
  1. <?php
  2. $wynik = '
  3. <html>
  4. <head>
  5. <title>Tytul</title>
  6. <body>
  7. <div>cos tam</div>';
  8.  
  9. function b_echo($in)
  10. {
  11. return '<b>'.$in.'</b>';
  12. }
  13.  
  14. $wynik .= b_echo('Witaj swiecie!');
  15.  
  16. $wynik .= '</body>
  17. </html>';
  18. file_put_contents... bla bla bla i 
  19. echo $wynik;
  20.  
  21. ?>
drPayton
Albo tak:
  1. <?php ob_start(); ?>
  2. <html>
  3. <head>
  4. <title>Tytul</title>
  5. <body>
  6. <div>cos tam</div>
  7. <?php
  8. function b_echo($in)
  9. {
  10. echo '<b>'.$in.'</b>';
  11. }
  12.  
  13. b_echo('Witaj swiecie!');
  14. ?>
  15. </body>
  16. </html>
  17.  
  18. <?php
  19. $wynik = ob_get_flush();
  20.  
  21. function save($filename)
  22. {
  23. file_put_contents($filename, $GLOBALS['wynik']);
  24. }
  25. save('plik.html');
  26. ?>


Efekt plik.html
  1. <title>Tytul</title>
  2. <div>cos tam</div>
  3. <b>Witaj swiecie!</b></body>
  4. </html>

snitch.gif
b_chmura
drPayton - Nie wiedzieć czemu ale jeśli w pliku wywołam przykładowo funkcje drzewa katalogów (podam niżej) file_put_contents wyświetla mi ostrzeżenie:
Cytat
Warning: file_put_contents(xxx) [function.file-put-contents]: failed to open stream: Permission denied in /xxx/xxx/xxx/xxx.xxx on line xxx


Funkcja:
  1. <?php
  2. function all_dir($katalog = './', $cat = '', $idR = '')
  3. {
  4. $dir = sort_scandir($katalog, 1);
  5. $cat .= $katalog;
  6. $cnt = $cntP = 1;
  7.  
  8. foreach($dir as $file)
  9. {
  10. if(is_dir($file))
  11. { 
  12. $id = $idR.$cnt;
  13. echo '<div class="file">- '.cut($file).' <a onClick="javascript: ShowHide('dir_'.$id.'''button_'.$id.'');" id="button_'.$id.'">+</a> <span id="filesize">'.$id.'</span> <span style="display: none;" id="dir_'.$id.'">'."\n";
  14. all_dir($file.'/', $cat, $id.'.');
  15. echo '</span></div>';
  16. $cnt++;
  17.  
  18. }
  19. else
  20. {
  21. echo '<div class="file">- <a href="'.pl($cat.$file).'" title="'.$file.'">'.cut($file).'</a> <span id="filesize">('.r_filesize($file).') '.$idR.$cntP.'</span></div>'."\n";
  22. $cntP++;
  23. }
  24. }
  25. chdir('../');
  26. }
  27. ?>
Daimos
a prawa dobre nadales?
b_chmura
W rzeczy samej, problem występuje przy wywołaniu w/w funkcji.
phpion
Wg mnie sprawa leży w odpowiednich uprawnieniach dla plików/katalogów. Pokaż jak masz ponadawane prawa.
b_chmura
phpion.com - najczęściej tworzyłem nowy katalog 777

odwoływałem się
  1. <?php
  2. save('nazwa_katalogu/nazwa_pliku.html');
  3. ?>


próbowałem też stworzyć już plik nazwa_pliku.html z chmod 666 ale także nie skutkowało

Powtarzam że jeśli nie wywołam w/w funkcji plik się prawidłowo zapisuje
Cienki1980
Przenoszę na prośbę autora.
b_chmura
dochodzę do wniosku że może to być spowodowane chdir() przetestuje i dam znać

EDIT:
Tak jak myślałem problem pojawia się przez chdir() - czemu wcześniej nie przyszło mi to do głowy...

Trzeba będzie się zastanowić jak przerobić funkcję nie korzystając z chdir - ma ktoś może jakieś pomysły?
drPayton
A do czego ma służyć chdir w tym miejscu?
b_chmura
w funkcji sort_scanddir chdir zmienia katalog na ten podany w $katalog

  1. <?php
  2. function sort_scandir($in, $chdir = 0)
  3. { 
  4. $sd = scandir($in);
  5.  
  6. if($chdir == 1){chdir($in);}
  7.  
  8. foreach($sd as $file)
  9. {
  10. if(is_dir($file))
  11. {
  12. $ARRfile['1'][] = $file;
  13.  
  14. }
  15. if(is_file($file))
  16. {
  17. $ARRfile['2'][] = $file;
  18. }
  19. }
  20. foreach($ARRfile as $file)
  21. {
  22. foreach($file as $file)
  23. {
  24. $out[] = $file;
  25. }
  26. }
  27. return $out;
  28. }
  29. ?>


EDIT
Temat uznaje za zamknięty
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.