![]() |
![]() ![]() |
![]() |
![]()
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:
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 ![]() Ten post edytował franki01 27.04.2008, 10:39:02 |
|
|
![]()
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.
|
|
|
![]()
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:
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 ![]() -------------------- |
|
|
![]()
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
![]() 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 |
|
|
![]()
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."
|
|
|
![]()
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 ![]() ![]() -------------------- |
|
|
![]()
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 ![]() 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 ![]() Ten post edytował franki01 27.04.2008, 11:03:48 |
|
|
![]()
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 ![]() -------------------- |
|
|
![]()
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ś
![]() |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.07.2025 - 15:24 |