Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Odbieranie danych przez $_GET, Niecodzienny temat
xamrex
post 19.04.2018, 19:18:41
Post #1





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


Witam,
Czy jest możliwość przesłania danych, które nie sa znakami asci i zawierają znak & poprzez $_GET

Sprawa wygląda tak. Postawiłem stronę WWW - strona2.php
  1. <?php
  2.  
  3. $myfile = fopen("fota.txt", "w") or die("Unable to open file!");
  4. $txt = $_GET["data"];
  5. fwrite($myfile, $txt);
  6. fclose($myfile);
  7. ?>

I teraz jak wejdę na www.mojastrona.pl/strona2.php?data=123
to później jak wejdę na www.mojastrona.pl/fota.txt
to mam w niej zawartość 123.

Ale co jeśli chciałbym wysłać jakieś dane które nie są znakami ASCI oraz dodatkowo mogą zawierać znaki takie jak . ? &
Wtedy będzie to źle 'zrozumiane' przez serwer i jeśli chciałbym wysłać taką paczkę danych:
Tajne&dane to w pliku fota.txt będę miał tylko tajne
Da się jakoś sprawić, żeby znak & był ignorowany?

Generalnie posiadam moduł Wifi ESP8266, który można fajnie programować i który służy do łączenia się z internetem, i chciałbym wysłać nim dane, ale moga one zawierać znak &, więc musiałbym wymyślić coś innego.
Ktoś wie jak to rozwiązać?
EDIT:
Myślę, że można znaleść jakiś algorytm, który zakodowałbymi dane tak, żeby wynikiem były tylko znaki alfabetu. wtedy mógłbym to przesłać. Czy to dobry pomysł?

Ten post edytował xamrex 19.04.2018, 19:44:44
Go to the top of the page
+Quote Post
Azek
post 19.04.2018, 19:53:02
Post #2





Grupa: Zarejestrowani
Postów: 57
Pomógł: 3
Dołączył: 28.12.2011

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


Myślę, że to może pomóc: base64_encode($str). Po otrzymaniu przez get odkodujesz za pomocą: base64_decode($str)

Ten post edytował Azek 19.04.2018, 19:54:29
Go to the top of the page
+Quote Post
Pyton_000
post 19.04.2018, 20:19:26
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


http://php.net/manual/en/function.urlencode.php
Go to the top of the page
+Quote Post
xamrex
post 20.04.2018, 08:20:06
Post #4





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


Hej.
Pomysł z base64 wydawał się świetny.
Myślałem,że już wszystko rozwiązane, ALE
bo zakodowaniu tego w base64 ( a nawet przed zakodowaniem) dane które chce przesłać mają ok 28kb.
Jak wysyłam je w polu adresu dostaję komunikat:
Request-URI Too Long
The requested URL's length exceeds the capacity limit for this server.

Wiem, że można zmienić ustawienia serwera ale na pewno na to administrator się nie zgodzi.
WIęc jedyne rozwiązanie któe widzę, to wysyłanie tych danych w paczkach:<

No chyba, że ma ktos jakis pomysł jeszcze?
Go to the top of the page
+Quote Post
markuz
post 20.04.2018, 08:24:24
Post #5





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


Nie możesz ich wysłać metodą POST?

Ten post edytował markuz 20.04.2018, 08:24:40


--------------------
Go to the top of the page
+Quote Post
Pilsener
post 20.04.2018, 08:25:56
Post #6





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Cytat
Czy jest możliwość


Nie ma takiej możliwości, bo GET nie służy do przesyłania danych.
Go to the top of the page
+Quote Post
lolo121
post 21.04.2018, 23:53:25
Post #7





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.09.2014

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


Cytat(xamrex @ 20.04.2018, 09:20:06 ) *
Hej.
Pomysł z base64 wydawał się świetny.
Myślałem,że już wszystko rozwiązane, ALE
bo zakodowaniu tego w base64 ( a nawet przed zakodowaniem) dane które chce przesłać mają ok 28kb.
Jak wysyłam je w polu adresu dostaję komunikat:
Request-URI Too Long
The requested URL's length exceeds the capacity limit for this server.

Wiem, że można zmienić ustawienia serwera ale na pewno na to administrator się nie zgodzi.
WIęc jedyne rozwiązanie któe widzę, to wysyłanie tych danych w paczkach:<

No chyba, że ma ktos jakis pomysł jeszcze?


zamiast & spróbuj w adres dać %26
Go to the top of the page
+Quote Post
xamrex
post 22.04.2018, 08:23:03
Post #8





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


Hej,
Cytat(markuz @ 20.04.2018, 09:24:24 ) *
Nie możesz ich wysłać metodą POST?

Nie, niestety nie mogę ;( MOduł na to nie pozwala

Stanęło na tym, zę będę dane kodował base64, i wysyłał po kilka razy.
Na serwerze gdzie mam stornę, max długość adresu to 8kb, więc będę 3-4x musiał wysłać te moje dane.
Chyba nic innego nie wymyślę.
Go to the top of the page
+Quote Post
LowiczakPL
post 24.04.2018, 21:47:13
Post #9





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

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


... przecież moduł Wifi ESP8266 może przesyłać POST

Czego używasz Arduino?

  1. #include <ESP8266HTTPClient.h>
  2. #include <ESP8266WiFi.h>
  3.  
  4. ...
  5. int httpCode = http.POST("Message from ESP8266");
  6. ...



albo

  1. #include <ESP8266WiFi.h>
  2. ...
  3. client.println("POST / HTTP/1.1");
  4. ...



--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post
xamrex
post 24.04.2018, 21:50:56
Post #10





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


Witam serdecznie
Udało mi się wysłać dane metodą POST, ale niestety dalej są problemy.
Generalnie moja storna wygląda tak:
  1. <?php
  2. $dane = $_POST['data'];
  3. $myfile = fopen("zdj.jpg", "w") or die("Unable to open file!");
  4. fwrite($myfile, $dane);
  5. fclose($myfile);
  6. echo"Dane przeslano! - ";
  7. $ilosc=strlen($dane);
  8. echo $ilosc;
  9. ?>


I teraz dla testów uzywam oprogramowaia ZOC7terminal i gdy nim wysyłam dane:
  1. POST /jomla/strony.php HTTP/1.1
  2. Content-Type: application/x-www-form-urlencoded
  3. Host: mojastrona.pl
  4. Content-Length: 15
  5.  
  6. data=0123456789

To tworzy się plik zdj.jpg z zawartością : 0123456789.

Problem jest jeśli chce wysłać dane binarne.
Tzn prawie wszystko działa, ale gdy wysyłam 0x26 czyli znak '&' to do pliku zdj.jpg lecą wszystkie dane do momentu wystąpienia tego znaku.

Pomyślałem, że zmodyfikuję nagłówek i puszczę coś takiego:
  1. POST /jomla/strony.php HTTP/1.1
  2. Content-Type: application/octet-stream
  3. Host: mojastrona.pl
  4. Content-Length: 15
  5.  
  6. data=0123456789

ale po czymś takim to w ogóle plik zdj.jpg ma 0 bajtów (nic do niego nie leci)

DOmyślam, się, że winny jest ten nagłowek Content-Type: application/octet-stream i jeśil go ustawię to do $dane = $_POST['data'];nic nie przychodzi
Pomożecie jakoś?

P.S
wiem, ze mogę użyć Base64 tak jak radziliście, ale może da się to jakoś obejść?
Bo chyba da się wysłać dane z pełnym zakresie od 0x00 do 0xff na serwer przez post
Go to the top of the page
+Quote Post
LowiczakPL
post 24.04.2018, 22:07:41
Post #11





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

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


binarne dane przesyłaj "Content-Transfer-Encoding: binary"
ale jak przesyłasz obrazek to dodaj nagłówek "Content-Type: image/jpeg"

przykład jak wysłać pliki

https://tttapa.github.io/ESP8266/Chap12%20-...o%20Server.html

Ten post edytował LowiczakPL 24.04.2018, 22:13:44


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post
xamrex
post 24.04.2018, 22:41:49
Post #12





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


Cytat(LowiczakPL @ 24.04.2018, 23:07:41 ) *
binarne dane przesyłaj "Content-Transfer-Encoding: binary"
ale jak przesyłasz obrazek to dodaj nagłówek "Content-Type: image/jpeg"

przykład jak wysłać pliki

https://tttapa.github.io/ESP8266/Chap12%20-...o%20Server.html

Jak dodam ten nagłówek encoding:binary, czyli mój nagłówek będzie wyglądał tak:
  1. POST /jomla/strony.php HTTP/1.1
  2. Content-Type: application/x-www-form-urlencoded
  3. Host: mojastrona.pl
  4. Content-Transfer-Encoding: binary
  5. Content-Length: 15
  6.  
  7. data=0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29

To w pliku zdj.jpg będę miał wartości tylko 0x21 0x22 0x23 0x24 0x25


Natomiast jak zmienię nagłówek na:
  1. POST /jomla/strony.php HTTP/1.1
  2. Content-Type: application/octet-stream
  3. Host: mojastrona.pl
  4. Content-Length: 15
  5.  
  6. data=0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29

to w pliku zdj.jpg nie mam nic.


Wydaje mi się, że $_GET odbiera tylko dane jak ten nagłówek jst Content-Type: application/x-www-form-urlencoded.
jednak tym sposobem nie prześlę znaku '&'

Ten post edytował xamrex 24.04.2018, 22:42:18
Go to the top of the page
+Quote Post
LowiczakPL
post 25.04.2018, 05:36:57
Post #13





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

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


no ale data ty musisz wypełnić swoimi odpowiednimi danymi dostosowanymi do nagłówka.

Znasz C czy raczej nie?


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post
xamrex
post 25.04.2018, 06:49:12
Post #14





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


Znam
Cytat
no ale data ty musisz wypełnić swoimi odpowiednimi danymi dostosowanymi do nagłówka.

Jak to?
Nagłówki wysyłam przed 'contentem'

Czyli wysyłam te swoje nagłówki:
  1. POST /jomla/strony.php HTTP/1.1
  2. Content-Type: application/x-www-form-urlencoded
  3. Host: mojastrona.pl
  4. Content-Transfer-Encoding: binary
  5. Content-Length: 15
  6. //tutaj dwa razy \r\n
  7. data=0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29


No i jeśli robie to w taki sposób, to do pliku strony.php dane które są odbierane przez $_POST['data']; to tylko dane do cyfry 0x26

No i nie wiem jak to rozwiązać.
Mógłbyś mnie bardziej nakierować?

Ten post edytował xamrex 25.04.2018, 06:49:51
Go to the top of the page
+Quote Post
Pyton_000
post 25.04.2018, 07:13:13
Post #15





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


A

$postdata = file_get_contents("php://input");
file_put_contents('zdj.jpg', $postdata);

Go to the top of the page
+Quote Post
xamrex
post 25.04.2018, 17:02:22
Post #16





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


Pyton, spróbuję po 18:00 i dam znać ;-)
Byłoby super gdyby sie udało ;-)

Cytat(Pyton_000 @ 25.04.2018, 08:13:13 ) *
A

$postdata = file_get_contents("php://input");
file_put_contents('zdj.jpg', $postdata);

Super działa.
Naprawdę bardzo bardzo dziękiuję exclamation.gif!
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: 18.04.2024 - 13:01