Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PILNE] Jak przeslac plik .CSV/TXT metoda POST z 1 serwera na 2-gi?
Forum PHP.pl > Forum > PHP
danielsontheweb
Witam serdecznie!

Pytanie w zasadzie jak w temacie:

Na #1 serwerze mam plik tekstowy -> *.CSV zapisany w pamieci (czyt. zmiennej) lub na dysku serwera TEMP.CSV
(dostep jako programista mam tylko do tego serwera)

Na #2 serwerze jest formularz z mozliwoscia wysylania pliku *.CSV z dysku komputera.

Problem? Potrzebuje napisac skrypt, ktory dzialajac na serwerze #1 bedzie potrafil przeslac wypelniony formularz metoda POST wraz z zalaczonym plikiem do serwera #2.

Metoda z CURL odpada gdyz admin poblokowal mi opcje CURLOPT_FOLLOWLOCATION a musze sie logowac z 2 aktywnymi sesjami i przekierowaniami. Sprawdzilem sypie sie wiec odpada... (chyba)

Znalazlem takie rozwiazanie:

http://stackoverflow.com/questions/1378543...er-without-curl - patrz. 3ci komentarz.

i chyba to jest to czego szukam aczkolwiek to tylko szkielet skryptu umozliwiajacy odczytanie (po recznym wgraniu pliku z dysku - co chce ominac) pliku obrazkowego i przeslanie go kodem binarnym.

Teraz moja prosba: prosze aby pomogl mi ktos w zedytowaniu tego skryptu tak aby wykonywal ta operacje dzialajac na bazie pliku w formie tekstowej, ktory jest zapisany w zmiennej. Powiedzmy, ze jezeli trzeba moze byc w tej zmiennej przechowywany w formie binarnej.

Jezeli ktos ma inne ciekawe pomysly, bede bardzo wdzieczny.

pozdrawiam
werdan
Troche tego nie rozumiem.



>Na #1 serwerze mam plik tekstowy -> *.CSV zapisany w pamieci (czyt. zmiennej) lub na dysku serwera TEMP.CSV
Co to znaczy "zapisany w pamięci"? Jak rozumiem na #1 jest sobie jakiś plik temp.csv

>Na #2 serwerze jest formularz z mozliwoscia wysylania pliku *.CSV z dysku komputera.
Jak rozumiem, na serwrerze #2 jest sobie form gdzie można wgrac plik z dysku?


>Potrzebuje napisac skrypt, ktory dzialajac na serwerze #1 bedzie potrafil przeslac wypelniony formularz metoda POST wraz z zalaczonym plikiem do serwera #2.
Ten zdanie nie ma nic wspolnego z pozostałymi wczesniejszymi. Na serwerze #1 stworz form i w action daj url do serwera #2 gdzie masz skrypt, który to odbierze.
Crozin
Jeżeli jedyne co blokuje Cię przed użyciem cURL-a, to brak CURLOPT_FOLLOWLOCATION możesz to szybko objeść. Jeżeli w nagłówkach odpowiedzi na żądanie HTTP znajduje się nagłówek Location wykonaj nowe żądanie na adres, który znajduje się w tym nagłówku. Innymi słowy, musisz ręcznie obsłużyć to zachowanie.
danielsontheweb
werdan:
I i II kwestie dobrze zrozumiales. Plik mam zapisany w bazie danych i pobieram jego tresc do zmiennej.
Formularz juz zrobilem i za jego pomoca bez problemu wgralem plik z dysku komputera recznie na serwer #1 i wyslalem go POST-em na serwer #2 ale mnie interesuje rozwiazanie przy, ktorym tego pliku nie bede musial za kazdym razem pobierac z bazy danych na dysk komputera i recznie wgrywac i przesylac... Chce ta czynnosc zautomatyzowac do tego stopnia aby cron odpalal skrypt, ktory systematycznie pobiera aktualna zawartosc pliku z bazy danych do zmiennej i natychmiast przesyla go post-em do serwera #2

Crozin:
Cytat
Jeżeli w nagłówkach odpowiedzi na żądanie HTTP znajduje się nagłówek Location wykonaj nowe żądanie na adres, który znajduje się w tym nagłówku.

Niestety, otrzymuje jedynie blad:
error 302 moved temporarily...

Co gorsza jest to HTTPS a nie HTTP...

Crozin
1. Przy korzystaniu z cURL-a, właściwie nie ma różnicy czy leci to po SSL-u czy nie. Kwestia dodatkowej linijki od włączenia jego obsługi.
2. 302 to nie błąd, a informacja o przekierowaniu. Znajduje się tam nagłówek Location, a w nim adres na który powinieneś wykonać następne żądanie.
danielsontheweb
Masz racje, udalo mi sie zalogowac ale teraz otrzymuje po przeslaniu curl-em POST z plikiem odpowiedz:

Cytat
HTTP 100 Continue


I nie wiem za bardzo co dalej ;/ Zauwazylem, ze jak osobiscie wrzucam plik z dysku na serwer #2 to w procesie uploadu pliku bierze udzial JS... Po analizie calego procesu debbugerem, moj skrypt wyglada to tak:

1) #1 serwer -> uruchamiam moj skrypt a on sie laczy (curl, POST) do adresu docelowego (.../import_file.php) na serwerze #2, ktory ma zauploadowac plik. Adres mam z <form action="..."> z oryginalnego formularza na stronie serwera #2.

2) #2 serwer -> plik "import_file.php" uruchamia skrypt JS, ktory przetwarza zapytanie z przeslanym POST i na koncu ma "location: import_final?d=date()"

3) finalnie proces konczy sie z tego co zauwazylem na pliku ../import_final?d=date(); Po tym, plik powinien byc wgrany...

W praktyce, juz po odwolaniu sie curl-em do pliku import_file.php + parametry oraz import_final.php + parametry, otrzymuje zwrotem takie naglowki:

Cytat
Import_file.php
GET request ..........................................: Continue: Yes
GET request with empty header ........................: Continue: Yes
POST request with empty header .......................: Continue: No
POST request with expect continue explicitly set .....: Continue: No
POST request with expect (set to nothing) as well ....: Continue: No
POST request with expect continue from earlier removed: Continue: No

import_final.php
GET request ..........................................: Continue: No
GET request with empty header ........................: Continue: No
POST request with empty header .......................: Continue: No
POST request with expect continue explicitly set .....: Continue: No
POST request with expect (set to nothing) as well ....: Continue: No
POST request with expect continue from earlier removed: Continue: No


Tak wygladaja moje zapytania - wszystkie prawie identyczne:

  1. curl_setopt($a, CURLOPT_URL, $x_url);
  2. curl_setopt($a, CURLOPT_HEADER, 1);
  3. curl_setopt($a, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.googlebot.com/bot.html)');
  4. curl_setopt($a, CURLOPT_RETURNTRANSFER, 0);
  5. curl_setopt($a, CURLOPT_COOKIEFILE, "cookie.txt");//odczytuje zapisane ciasteczka
  6. curl_setopt($a, CURLOPT_POSTFIELDS, $postFields);
  7. $result5 = curl_exec($a);
  8. echo $result5;

Crozin
1. Dowiedź się czym jest kod 100 Continue: http://en.wikipedia.org/wiki/List_of_HTTP_...x_Informational
2. Czy cURL korzysta z tego nagłówka? http://stackoverflow.com/questions/1415867...ng-100-continue - tak.
3. Wyłącz to. http://pilif.github.io/2007/02/the-return-...t-100-continue/
danielsontheweb
kazdy punkt wykonalem juz wczesniej, z tego linka juz korzystalem, patrz 3ci komentarz - http://stackoverflow.com/questions/1415867...ng-100-continue - i output w moim skrypcie - post wczesniej.

Krotko mowiac na razie nic z zalaczonych tematow nie pomoglo sad.gif
Crozin
Pokaż kod.
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.