Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dynamiczne przenoszenie plików php/pdf
Forum PHP.pl > Forum > Przedszkole
frankiejojo
Mam funkcję, która w pętli generuje wezwania do zapłaty, chodzi o to by te wezwania gdzieś zapisać by móc je wydrukować.
  1. // Funkcja do generowania pdf
  2. <?php
  3. function pdf_replace( $wzor, $zamiana, $lancuch )
  4. {
  5. $dlug = strlen( $wzor );
  6. $wyrreg = '';
  7. for ( $i = 0; $i<$dlug; $i++ )
  8. {
  9. $wyrreg .= $wzor[$i];
  10. if ($i<$dlug-1)
  11. $wyrreg .= '(\)-?[0-9]+\()?';
  12. }
  13. return ereg_replace ( $wyrreg, $zamiana, $lancuch );
  14. }
  15. $plik = 'plik.pdf';
  16. header( 'Content-type: application/pdf' );
  17. $nazwa_pliku = 'Wezwanie.pdf'; // To wzorzec
  18. // Potem mamy zwykłą pętle
  19. for ($a=0; $a <$ile_znalezionych1; $a++)
  20. {
  21. $wiersz1 = mysqli_fetch_assoc($wynik1);
  22. $nr_kontrahenta = stripslashes($wiersz1['nr']);
  23. // Potem tworzymy pdfa
  24. $fp = $nr_kontrahenta.'.pdf';
  25. header( 'Content-Disposition: filename='.$fp.'');
  26. $wyswietl = file_get_contents($nazwa_pliku);
  27. // zamiana symboli zastępczych w szablonie na dane
  28. $wyswietl = pdf_replace( '<<nr_kontrahenta>>', $nr_kontrahenta, $wyswietl );
  29.  
  30. //Zapis pliku
  31. $newfile = 'przeznaczenie/'.$fp;
  32. if (!copy($fp, $newfile)) {
  33. echo "failed to copy $file...\n";
  34. }
  35. }

i teraz chodzi o to, że zapis pliku nie działa.
Jak przetestowałem go osobno to oczywiście chodził - natomiast w pętli nie działa.
Podejrzewam, że jednak problem, może tkwić w tym, że plik $fp istnieje wirtualnie i do momentu, w którym go gdzieś nie zapiszę on "nie istnieje" - tyle, że nie wiem jak go zapisać sad.gif
Podpowie ktoś?
trueblue
Nie copy, a file_put_contents.
frankiejojo
Problem w tym, że file_put_contents($file, $current); ma dwie zmienne. Jak dam jedną to błąd,
a jak jako zmienną dam pustą $current =''; to zapisuje mi puste pliki.
trueblue
Problem w tym, że nie czytasz dokładnie dokumentacji.
frankiejojo
$current ='';
file_put_contents($fp, $current,FILE_APPEND);
Spróbowałem w ten sposób - File_Append -wg manuala powoduje dopisanie a nie nadpisanie danych.
Powstałe w ten sposób pliki mają wielkość 0 - słownie zero. Więc możliwe, że ta funkcja nie przechwytuje plików po prostu tworzy w pętli pliki również możliwe jest że nie tą dokumentację szukam.
Jednak nie tyle interesuje mnie funkcja file_put_contents co 'PHPowy odpowiednik funkcji save as."
trueblue
Nie ma znaczenia, czy dopisujesz czy nadpisujesz, bo tworzysz nowe pliki.
A co mówi manual na temat drugiego parametru ($current)?
frankiejojo
Korzystam z http://php.net/manual/en/function.file-put-contents.php
Podane przeze mnie określenie $current jest z przykładu. W opisie funkcji jest to Data.

data

The data to write. Can be either a string, an array or a stream resource.

If data is a stream resource, the remaining buffer of that stream will be copied to the specified file. This is similar with using stream_copy_to_stream().

You can also specify the data parameter as a single dimension array. This is equivalent to file_put_contents($filename, implode('', $array)).

Czyli po naszemu
Dane mogą być stringiem lub tablicą (jednowymiarową) albo strumieniem (ale nie wiem o jaką rzeczkę chodzi - String i Tablica - to znam)

Napisałeś "Nie ma znaczenia czy nadpisujesz ... bo tworzysz nowe pliki" tyle, że jeżeli zapisany plik ma wielkość 0 tzn został tylko utworzony a zawartości brak
trueblue
A jak myślisz, dlaczego plik ma 0 bajtów?
frankiejojo
Tego nie wiem.
trueblue
W poście wyżej napisałeś czym jest drugi parametr funkcji oraz jaką Ty mu nadajesz wartość.
frankiejojo
Faktycznie, napisałem, że $current jest dopisywany lub nadpisywany w pliku.
tj.
file_put_contents($fp, $current,FILE_APPEND); - to mi dopisze do pliku,
jak dam bez file append to mi nadpisze,
file_put_contents($fp, $current);
Czyli po naszemu jeżeli
$fp =1;
$current = 2;
to bez file append wynikiem będzie 2 a z file append 12.
tak więc jak zapisać wychwycony plik dalej nie wiem sad.gif

Faktycznie, napisałem, że $current jest dopisywany lub nadpisywany w pliku.
tj.
file_put_contents($fp, $current,FILE_APPEND); - to mi dopisze do pliku,
jak dam bez file append to mi nadpisze,
file_put_contents($fp, $current);
Czyli po naszemu jeżeli
$fp =1;
$current = 2;
to bez file append wynikiem będzie 2 a z file append 12.
Na ten moment funkcja wg mnie działa tak, że tworzy pusty plik, do którego dopisuje pauzę czyli też nic.

tak więc jak zapisać wychwycony plik dalej nie wiem sad.gif
trueblue
A w jakiej zmiennej w Twoim kodzie podanym w pierwszym poście masz zawartość zmienionego PDFa?

P.S. Czy "Save as" ma działać tak, że zapisuje zmieniony plik na serwerze pod inną nazwą, czy ma wyskakiwać okienko z możliwością zapisania na dysku?
frankiejojo
Dzięki.
Faktycznie nie zrozumiałem instrukcji.
brzmi ona:
file_put_contents($nazwa_pliku, $zawartosc);
Dzięki za cierpliwość.
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.