Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Dynamiczne przenoszenie plików php/pdf
frankiejojo
post 30.06.2017, 17:44:41
Post #1





Grupa: Zarejestrowani
Postów: 111
Pomógł: 2
Dołączył: 20.07.2014

Ostrzeżenie: (0%)
-----


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ś?
Go to the top of the page
+Quote Post
trueblue
post 30.06.2017, 18:03:35
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1827
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Nie copy, a file_put_contents.


--------------------
Go to the top of the page
+Quote Post
frankiejojo
post 30.06.2017, 18:40:04
Post #3





Grupa: Zarejestrowani
Postów: 111
Pomógł: 2
Dołączył: 20.07.2014

Ostrzeżenie: (0%)
-----


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.

Ten post edytował frankiejojo 30.06.2017, 18:43:34
Go to the top of the page
+Quote Post
trueblue
post 30.06.2017, 18:42:12
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1827
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Problem w tym, że nie czytasz dokładnie dokumentacji.


--------------------
Go to the top of the page
+Quote Post
frankiejojo
post 30.06.2017, 19:08:24
Post #5





Grupa: Zarejestrowani
Postów: 111
Pomógł: 2
Dołączył: 20.07.2014

Ostrzeżenie: (0%)
-----


$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."
Go to the top of the page
+Quote Post
trueblue
post 30.06.2017, 19:17:05
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1827
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Nie ma znaczenia, czy dopisujesz czy nadpisujesz, bo tworzysz nowe pliki.
A co mówi manual na temat drugiego parametru ($current)?


--------------------
Go to the top of the page
+Quote Post
frankiejojo
post 30.06.2017, 19:26:08
Post #7





Grupa: Zarejestrowani
Postów: 111
Pomógł: 2
Dołączył: 20.07.2014

Ostrzeżenie: (0%)
-----


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

Ten post edytował frankiejojo 30.06.2017, 19:28:04
Go to the top of the page
+Quote Post
trueblue
post 30.06.2017, 19:30:28
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1827
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A jak myślisz, dlaczego plik ma 0 bajtów?


--------------------
Go to the top of the page
+Quote Post
frankiejojo
post 30.06.2017, 19:56:19
Post #9





Grupa: Zarejestrowani
Postów: 111
Pomógł: 2
Dołączył: 20.07.2014

Ostrzeżenie: (0%)
-----


Tego nie wiem.
Go to the top of the page
+Quote Post
trueblue
post 30.06.2017, 19:58:00
Post #10





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1827
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


W poście wyżej napisałeś czym jest drugi parametr funkcji oraz jaką Ty mu nadajesz wartość.


--------------------
Go to the top of the page
+Quote Post
frankiejojo
post 1.07.2017, 10:56:11
Post #11





Grupa: Zarejestrowani
Postów: 111
Pomógł: 2
Dołączył: 20.07.2014

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
trueblue
post 1.07.2017, 11:09:57
Post #12





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1827
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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?

Ten post edytował trueblue 1.07.2017, 11:11:46


--------------------
Go to the top of the page
+Quote Post
frankiejojo
post 1.07.2017, 12:25:27
Post #13





Grupa: Zarejestrowani
Postów: 111
Pomógł: 2
Dołączył: 20.07.2014

Ostrzeżenie: (0%)
-----


Dzięki.
Faktycznie nie zrozumiałem instrukcji.
brzmi ona:
file_put_contents($nazwa_pliku, $zawartosc);
Dzięki za cierpliwość.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 7.07.2025 - 23:26