Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Sposób na wysyłanie danych przez fsockopen()
franki01
post 27.04.2008, 10:35:34
Post #1





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

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


Witam,

Robię eksport danych pewnego sklepu. Do tej pory działał on [eksport] na tej zasadzie, że na jednym serwerze (w pliku export.php) został wygenerowany kod XML z baża danych tego sklepu (kategorie+przedmioty). Ten XML należało skopiować do textarea w pliku (import.php) na innym serwerze, a następnie z tego XML'a dane zostały wprowadzane do drugiej bazy danych.

Teraz chciałbym uprościć całą procedurę i zrobić to w ten sposób, że plik export.php wysyła już gotowy XML do pliku import.php, bez żadnych dodatkowych czynności administratora sklepu.

Na razie mam mniej więcej takie rozwiązanie:

  1. <?php
  2. # plik export.php
  3.  
  4. $fs = fsockopen('serwer.pl', 80, $errno, $errstr, 15);
  5. $req = "POST /import.php?auto=1 HTTP/1.1r\n"
  6. ."Host: serwer.plr\n"
  7. ."User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14r\n"
  8. ."Connection: closer\n"
  9. ."Content-type: application/x-www-form-urlencodedr\n"
  10. ."Content-length: ".strlen($xml)."r\n"
  11. ."r\n"
  12. .$xml;
  13. fwrite($req);
  14. fclose($fs);
  15. ?>


  1. <?php
  2. # plik import.php
  3. # i właśnie tutaj jak odebrać ten przesłany XML
  4. ?>


Chodzi głównie o to, jak w pliku import.php odebrać dane wysłane do tego pliku. Żaden element w tablicy $_SERVER w import.php nie zawiera tego XML'a. Być może w export.php też trzeba wprowadzić jakieś zmiany...

Mam nadzieję, że dość jasno opisałem problem smile.gif

Ten post edytował franki01 27.04.2008, 10:39:02
Go to the top of the page
+Quote Post
webdice
post 27.04.2008, 10:42:14
Post #2


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Moim zdaniem strasznie kombinujesz. W pliku XML dodaj pole ostatniego generowania bazy. W pliku import.php, odczytujesz plik ze zdalnego serwera i wgrywasz go do bazy.
Go to the top of the page
+Quote Post
bim2
post 27.04.2008, 10:50:22
Post #3





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


Jeśli zależy ci, że klikasz [Eksport] na danym serwerze, a nie na innym Import. To zrób tak:
Klikasz [Eksport] i skrypt robi coś na zasadzie:
  1. <?php
  2. $fs = fsockopen('serwer.pl', 80, $errno, $errstr, 15);
  3. $req = "GET /import.php HTTP/1.1r\n"
  4. ."Host: serwer.plr\n"
  5. ."User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14r\n"
  6. ."Connection: closer\n"
  7. ."Content-type: application/x-www-form-urlencodedr\n"
  8. ."Content-length: ".strlen($xml)."r\n"
  9. ."r\n"
  10. .$xml;
  11. fwrite($req);
  12. ?>


a plik import.php na serwerze innym:
$xml = file_get_contents('http://serwer1.pl/exkport_xml.php');

a w export_xml.php wyświetlasz poprostu te dane winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
franki01
post 27.04.2008, 10:50:23
Post #4





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

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


Kiedyś pamiętam, że widziałem jakiś przykład z takim działaniem. Chciałem zrobić to bez tworzenia nowych plików i odwoływania się do nich... Wiem, że jedna funkcja (lub zmienna) zawierała ten przesyłany string, tylko nie pamiętam jaka smile.gif

EDIT:
@bim2:
Takie sposoby to biorę jako ostateczność... Jednak, jeżeli nie będzie się dało nic zrobić, to będzie działało w ten sposób, że import.php będzie odwoływał się do export.php, a w export.php będzie dynamicznie tworzony ten XML bez dodatkowych plików. Bardziej mi zależy, żeby odwołanie było z export.php do import.php...

Ten post edytował franki01 27.04.2008, 10:54:56
Go to the top of the page
+Quote Post
Kicok
post 27.04.2008, 10:55:50
Post #5





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Wypadałoby trochę poczytać o protokole HTTP.

Po pierwsze to metodą GET nic w ten sposób nie prześlesz. Z POST dobrze kombinowałeś, ale nie można do niego wrzucać danych jak leci. Struktura ma być mniej więcej taka:
Kod
POST /import.php HTTP/1.1
Host: serwer.com
Content-Type: application/x-www-form-urlencoded
Content-Lenght: 12345
Connection: close

zmienna1=abcde&zmienna2=jakies%20inne%20dane&zmienna3=123456


Ten post edytował Kicok 27.04.2008, 10:56:42


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
bim2
post 27.04.2008, 11:01:43
Post #6





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


Nikt mnie chyba nie zrozumiał.

Chodziło mi o taką sytuację. Mamy serwer.pl (na nim chcemy kliknac eksport do serera1) i serwer1.pl (do tego maja zostac wyslane dane).

I teraz tak:
serwer.pl:
Klikamy [Eksport] - plik uruchamia serwer1.pl/import.php?addr=serwer1.pl/eksport_xml.php

serwer1.pl:
Został uruchomiony plik import.php, który pobiera dane
$xml = file_get_contents('http://'.$_GET['addr']);
file_put_contents('cache.xml', $xml);

Rozumiecie? Tak chyba będzie najprościej smile.gif Nie ma sensu kombinować z wysyłaniem czegoś, jeśli łatwiej to odebrać winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
franki01
post 27.04.2008, 11:02:19
Post #7





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

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


@kicok:
Właśnie się zacząłem zastanawiać, żeby zrobić to jednak w ten sposób... Chyba nie pozostaje mi nic innego.

import.php dostanie w zmiennej $_POST['data'] cały string i po sprawie...


PS Kilka osób podało dość dobre rozwiązanie, więc Was nagrodze biggrin.gif


EDIT:
@bim2
Wiem, że o to Ci chodziło, ale tutaj jest jedno niepotrzebne odwołanie, którego bym nie chciał. XML jest dość długi, więc oba serwery byłyby dość długo zajęte smile.gif

Ten post edytował franki01 27.04.2008, 11:03:48
Go to the top of the page
+Quote Post
bim2
post 27.04.2008, 11:12:03
Post #8





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


Ok, tylko pamiętaj, że maksymalna wielkość POST na większości serwerów to 8mb. Niby można zmienić w ustawieniach, ale zawsze.

Długo zajętę za pierwszym razem, mógłbyś dodać do tego cache i odwoływac się do pliku cache.xml winksmiley.jpg Wtedy nie byłoby problemu :] Tylko serwer1.pl zajęty byłby odczytywaniem tego. ;]


--------------------
Go to the top of the page
+Quote Post
franki01
post 27.04.2008, 11:45:02
Post #9





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

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


Wyżej uprościłem trochę sytuację. Naprawdę plik export.php znajduje się na serwerze za NATem. Na tym samym komputerze znajduje się baza danych pewnej firmy. Z zewnątrz nikt nie ma dostępu do tego serwera (oczywiście ze względów bezpieczeństwa). Dlatego odwołanie z import.php do export.php niezbyt wchodziłoby w grę. Chodziło o to, żeby z bazy tej firmy robić eksport do jego sklepu on-line. Dlatego najbardziej mi pasowało odwołanie z export.php... Również tworzenie dodatkowych plików nie pomogłoby przy takim czymś smile.gif
Go to the top of the page
+Quote Post
jacekl
post 4.05.2008, 18:32:18
Post #10





Grupa: Zarejestrowani
Postów: 36
Pomógł: 7
Dołączył: 4.05.2008
Skąd: Warszawa

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


Ja bym to zrobił przy użyciu mysqldump i mysql, tak jak np. tu:
http://www.daniweb.com/forums/thread83365.html#post402793

Możesz do tego użyć f-cji system, passthru lub exec. Na początku możesz mieć problemy z uruchomieniem (z uprawnieniami, ścieżkami a nawet konfiguracją PHP itp.), ale jest to chyba najłatwiejszy i najszybszy sposób osiągnięcia tego, czego Ci trzeba.

JL
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: 12.07.2025 - 15:24