![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
Witam
Napisalem skrypt ktory pobiera dane z pewnej stronki do ktorej bedzie mialo dostep wiele osob. Skrypt wyglada nastepujaco : Kod <?php $code = $_POST['kod']; $name = $_POST['imie']; fopen('test.xml', 'a'); $file='test.xml'; chmod($file,0666); $filename = 'test.xml'; $data = '<?xml version="1.0" encoding="utf-8"?><zapytanie><imie>'.$name.'</imie><kod>'.$code.'</kod></zapytanie>'; //$file_path = ".;c:\Program Files\WebServ\cUrl"; if(!function_exists('file_put_contents')) { function file_put_contents($filename, $data) { $fp = fopen($filename, (!$file_append ? 'w+' : 'a+')); if(!$fp) { trigger_error('file_put_contents cannot write in file.', E_USER_ERROR); return; } fwrite($fp, $data); fclose($fp); } } file_put_contents($filename, $data); $ch = curl_init(); //curl_setopt($ch, CURLOPT_HEADER, 1); //curl_setopt($ch, CURLOPT_NOBODY, 1); $data = array('xml' => file_get_contents('test.xml')); curl_setopt($ch, CURLOPT_URL, 'http://[jakishost]/test/zgloszenie.php'); //curl_setopt($ch, CURLOPT_URL, 'http://[jakishost]/test/weryfikacja.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($ch); echo $output; if (curl_errno($ch)) { echo 'Błąd #' . curl_errno($ch) . ': ' . curl_error($ch); } curl_close($ch); $file2 = 'back.xml'; $fo = fopen($file2, "a"); flock($fo, 2); fwrite($fo, $output); flock($fo, 3); fclose($fo); ?> Sprawa wyglada tak , ze uzytkownik wpisuje swoje imie oraz unikatowy kod do formularza.Wciskajac przycisk akceptacji uruchamia powyzszy skrypt.Skrypt zapisuje jego dane w pliku xml i wysyla na inny serwer. Na owym serwerze jest skrypt zgloszenie.php ktory odsyla takze xml-a z odpowiedzia czy zgloszenie jest poprawne (weryfikuje kod). Odeslany plik xml jest zapisywany przez moj skrypt do pliku back.xml. Moje pytanie brzmi. Czy istnieje w tym przypadku zagrozenie, iz korzystanie dwoch czy wiecej osob z tego skryptu jednoczesnie moze zaklocic jego dzialanie? Czy istnieje mozliwosc nadpisania danych zapisywanych w pliku test.xml jednego uzytkownika przez drugiego? Jesli tak to jak sie przed tym ustrzec ? Ten post edytował Wolfie 17.12.2008, 10:42:35 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Oczywiście, że istnieje możliwość nadpisania, i tak się stanie, ponieważ nazwa nie jest unikalna dla każdego użytkownika.
Musisz dla każdego użytkownika nadać unikalny kod, który będzie nazwą pliku. Czyli np:
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
Rozumiem.
Czyli w ten sposob powstanie mi na dysku mnóstwo plików a tego chciałem uniknąć. Tylko nie rozumiem dlaczego ten ciag znajduje sie miedzy dwoma zmiennymi ? W takim razie musze nadawac najlepiej unikalne id losowo ? Czy to jest dobry pomysl ? Przed chwila wpadlem na pomysl zeby pliki xml generowac dynamicznie tzn bez zapisywania w pliku na dysku, wtedy nie byloby problemu z zapisywaniem wielu plikow na dysku. Gdzie moge znalezc informacje jak generowac dynamicznie xml i od razu wysylac na serwer bez zapisywania na dysku? Ten post edytował Wolfie 17.12.2008, 11:46:55 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Cytat Czyli w ten sposob powstanie mi na dysku mnóstwo plików a tego chciałem uniknąć. Masz wybor - albo dzialajacy skrypt albo 1 plik na dysku. Cytat W takim razie musze nadawac najlepiej unikalne id losowo ? Czy to jest dobry pomysl ? Nie mozesz uzyc bazy? Autoincrement itd? XML mozesz tez w bazie trzymac. edit: po edicie wyzej Ziomek, z tego co widze to niepotrzebnie XMLa do pliku zrzucasz - wyrzuc zapisywanie i zobacz co ci zostalo. Ten post edytował dr_bonzo 17.12.2008, 11:49:51 -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
Wyrzucilem zapisywanie i zostalo cos takiego :
Kod <?php $code = $_POST['kod']; $name = $_POST['imie']; $data = '<?xml version="1.0" encoding="utf-8"?><zapytanie><imie>'.$name.'</imie><kod>'.$code.'</kod></zapytanie>'; $ch = curl_init(); //curl_setopt($ch, CURLOPT_HEADER, 1); //curl_setopt($ch, CURLOPT_NOBODY, 1); //$data = array('xml' => file_get_contents('test.xml')); curl_setopt($ch, CURLOPT_URL, 'http://[jakishost]/test/zgloszenie.php'); //curl_setopt($ch, CURLOPT_URL, 'http://[jakishost]/test/weryfikacja.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //echo $data; //die(); $output = curl_exec($ch); echo $output; if (curl_errno($ch)) { echo 'Błąd #' . curl_errno($ch) . ': ' . curl_error($ch); } curl_close($ch); $file2 = 'back.xml'; $fo = fopen($file2, "w+"); flock($fo, 2); fwrite($fo, $output); flock($fo, 3); fclose($fo); ?> Niestety cos jest nie tak z wysylanymi danymi , tak jakby wysylaly sie same znaczniki bo od drugiego serwera dostaje w opowiedzi puste znaczniki xml. Choc sprawdzilem echo $date po cUrl i wszystko wyglada prawidlowo. Plick back.xml tez dostaje same znaczniki bez tresci w odpowiedzi. Gdzie tu moze byc jakis blad ? Ten post edytował Wolfie 17.12.2008, 12:29:53 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Dzizez, zobacz jak sie przekazuje dane do: curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
-------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
No tak , tylko ze ja juz nie chce przesylac pliku a same dane ktore sa zawarte w zmiennej $data
W ten sposob zlikwiduje koniecznosc zapisywania wielu plikow na dysku i nie bede musial kontrolowac id uzytkownikow A CURLOPT_POSTFIELDS sluzy do przesylania plikow z tego co widze. Przerobilem kod w ten sposob : Kod $xml = array('xml' => $data); curl_setopt($ch, CURLOPT_URL, 'http://[jakishost]/test/zgloszenie.php'); //curl_setopt($ch, CURLOPT_URL, 'http://[jakishost]/test/weryfikacja.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); echo $xml; $output = curl_exec($ch); echo $output; if (curl_errno($ch)) { echo 'Błąd #' . curl_errno($ch) . ': ' . curl_error($ch); } curl_close($ch); Teraz wszystko dziala Dzieki! Ten post edytował Wolfie 17.12.2008, 12:41:35 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
EHHH, RTFM
Twoj orginalny kod:
Gdzie tutaj przesylasz plik? przesylanie pliku teoretycznie bylo by podobne do:
-------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
Tak jak napisalem wyzej uzylem tablicy w postaci :
Kod $xml = array('xml' => $data); I jest wszystko ok. Dzieki. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Tja, tylko moja odpowiedz pojawila sie przed twoja edycja posta wiec...
-------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
Zauwazylem pewien blad.
Mianowicie kwestia wyglada tak, ze gdy uzywam komendy : Kod $xml = array('xml' => $data); to przesyla mi sie cala tablica , a ja chce przeslac tylko string xml , poniewaz drugi serwer odbirac moze tylko "czysty" plik xml a gdy wysylam tablice serwer odsyla mi blad. Poprosze o jakies wskazowki |
|
|
![]()
Post
#12
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Jak tablica ci sie przesyla? Zgodnie z manualem na drugim serwerze dostaniesz
$_POST['xml' ] == $data (czyli string z xmlem) -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
Masz racje , przeoczylem blad w swoim skrypcie , odwolywal sie nie do tego skryptu do ktorego powinen na drugim serwerze stad myslalem ze pojawia sie blad.
Pozdro |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 18:34 |