[PHP] Binary data ontvangen in php

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
Is dit mogenlijk?

Een C++ client stuurt binary data naar een php bestand op een web server.
Op welke manier / via welke funtie kan ik die data dan opvragen?

www.dannyhiemstra.nl


Acties:
  • 0 Henk 'm!

  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 08:38
Ik neem aan dat dit bij een niet-continu-draaiend script alleen mogelijk is dmv. GET of POST data.

Correct me if I'm wrong.

Acties:
  • 0 Henk 'm!

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
Het wordt gepost door het C++ programma.
Alleen het probleem is in php komt wel een post aan maar zonder variablen..

www.dannyhiemstra.nl


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 12-09 01:23
Haal je de naam ook wel uit de $_FILES var? Binary data kun je niet ontvangen via gewone post/get lijkt mij.

http://www.php.net/manual...s.file-upload.post-method

[ Voor 30% gewijzigd door Postman op 30-12-2002 20:06 ]


Acties:
  • 0 Henk 'm!

  • eXtReMeBiE
  • Registratie: Februari 2002
  • Laatst online: 07-09 13:29
Ik heb met PHP wel de functie pack() gevonden, maar volgens mij doet die het omgekeerde van wat jij wilt: normaal naar binary...
Ik zal nog even doorzoeken, want als dit mogelijk is, zal dat wat jij wilt ook wel mogelijk zijn...

Woei:
unpack() :P
Volgens mij doet dat wat je wilt?

Overigens had je dit kunnen vinden met 10 secs zoeken op php.net :P
Gewoon in je browser als url: http://www.php.net/$zoekvraag, in dit geval bijvoorbeeld http://www.php.net/binary :D

[ Voor 19% gewijzigd door eXtReMeBiE op 30-12-2002 20:03 ]


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 12-09 01:23
eXtReMeBiE schreef op 30 December 2002 @ 20:02:
Ik heb met PHP wel de functie pack() gevonden, maar volgens mij doet die het omgekeerde van wat jij wilt: normaal naar binary...
Ik zal nog even doorzoeken, want als dit mogelijk is, zal dat wat jij wilt ook wel mogelijk zijn...

Woei:
unpack() :P
Volgens mij doet dat wat je wilt?
Lijkt mij meer voor dataconversie. Wat hij zoekt is hoe je data ontvangt, wat jij geeft is leuk, maar voor later. Op het moment ontvangt hij namelijk niks.

Acties:
  • 0 Henk 'm!

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
$array = unpack ("c2chars/nint", $binarydata);

Hij pakt die binary uit maar hoe krijg ik nu de binary data in de $binarydata var?
Want ik kan via geen manier die ik al heb geprobeert ($_FILES,$_POST,$_SERVER['HTTP_RAW_POST_DATA']) de data vinden...

www.dannyhiemstra.nl


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Waarom niet gewoon een volwaardige post-request ervan maken :?
Doe met een browser een file posten en kijk wat die allemaal voor extra's meestuurt...

Acties:
  • 0 Henk 'm!

  • eXtReMeBiE
  • Registratie: Februari 2002
  • Laatst online: 07-09 13:29
Oh ok, sorry. Hoe stuur je dan de data naar die pagina toe? Via een url, of wat?
Oops, dat weet je dus nog niet... Hoe wil je de data versturen? Via de url (http://woei.nl/index.php?toot=blaat) of?

BTW: de manier waarop je de data kunt opvragen, hang af van hoe je de data wilt versturen, dus het lijkt mij het beste dat je dat het eerste bedenkt, de functie voor het ophalen lijkt me dan niet zo moeilijk :)

[ Voor 79% gewijzigd door eXtReMeBiE op 30-12-2002 20:13 ]


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 12-09 01:23
Kun je überhaupt wel iets ontvangen?? Probeer het eerst eens met ASCII, dan weet je iig of je iets kunt versturen via C++.

Acties:
  • 0 Henk 'm!

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
de data wordt door een c++ programma gepost naar test.php

Dit is test.php:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?
$content  = "------------------------------------\n";
$content .= time() . " - " . $_SERVER['REQUEST_METHOD'] . "\n";

while(list($key,$val) = each($_POST))
{
    $content .= "$key = $val\n";
}
$content .= "####HTTP_RAW_POST_DATA####\n";

while(list($key,$val) = each($HTTP_RAW_POST_DATA))
{
    $content .= "$key = $val\n";
}
$content .= "####FILES####\n";

while(list($key,$val) = each($_FILES))
{
    $content .= "$key = $val\n";
}

$filename = "log.txt";
$fp = fopen($filename, 'a');

fwrite($fp, $content);
?>


http://www.chat-stars.com/log.txt dat komt eruit
We hebben ook geprobeert de data naar phpinfo te posten en dit komt eruit:
http://www.chat-stars.com/phpinfo.html

www.dannyhiemstra.nl


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 12-09 01:23
Maak je in je C++ programma gebruik van post of put?? Post is namelijk voor browsers. Put is voor filestreams. Lijkt me dus beter als je gebruik maakt van put, ipv post (of je moet alle headers die een browser stuurt namaken).
http://www.php.net/manual...ile-upload.put-method.php

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

In order to enable $HTTP_RAW_POST_DATA, you can set always_populate_raw_post_data to On either in php.ini or .htaccess
op: http://www.php.net/manual/en/features.file-upload.php#

had je daar al naar gekeken?

Acties:
  • 0 Henk 'm!

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
int send_vdata(const char* ipa, int port, const Cvirtual_binary& d) 
{ 
    int error = 0; 
    SOCKET s = socket(PF_INET, SOCK_STREAM, 0); 
    if (s == -1) 
        error = 1; 
    else 
    { 
        sockaddr_in d_address; 
        d_address.sin_family = AF_INET; 
        d_address.sin_port = htons(port); 
        d_address.sin_addr.S_un.S_addr = inet_addr(ipa); 
        if (connect(s, reinterpret_cast<const sockaddr*>(&d_address), sizeof(sockaddr_in))) 
            error = 1; 
        else 
        { 
            if (d.size() != send(s, reinterpret_cast<const char*>(d.data()), d.size(), 0)) 
                error = 1; 
        } 
        closesocket(s); 
    } 
    return error; 
} 

int http_post(const char* host, const char* path, const Cvirtual_binary& d) 
{ 
    hostent* e = gethostbyname(host); 
    if (!e || e->h_addrtype != 2 || e->h_length != sizeof(in_addr)) 
        return 1; 
    strstream msg; 
    msg << "POST " << path << " HTTP/1.1" << endl 
        << "Content-Length: " << d.size() << endl 
        << "Host: " << host << endl 
        << endl; 
    msg.write(reinterpret_cast<const char*>(d.data()), d.size()); 
    return send_vdata(inet_ntoa(*reinterpret_cast<in_addr*>(*e->h_addr_list)), 80, Cvirtual_binary(msg.str(), msg.pcount())); 
}

www.dannyhiemstra.nl


Acties:
  • 0 Henk 'm!

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
kan ik in de .htaccess gewoon always_populate_raw_post_data 'on' neerzette?
ik heb namelijk weinig / geen verstand van .htaccess

EDIT:
In de phpinfo staat:
always_populate_raw_post_data 0

heeft dit er iets mee te maken?

[ Voor 31% gewijzigd door chuxiej op 30-12-2002 20:38 ]

www.dannyhiemstra.nl


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

pff, de vraag "C++ naar PHP" blijft wel populair deze week :?
school?

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
Nee we maken een ladder voor een spel waarvan de ladder 'dood' drijgt te gaan.

We willen dan dus dat via de C++ client automatisch de game results naar een php script wordt gestuurt die dat dan in een mysql database neerzet.

www.dannyhiemstra.nl


Acties:
  • 0 Henk 'm!

Verwijderd

FireFoxx schreef op 30 December 2002 @ 20:40:
Nee we maken een ladder voor een spel waarvan de ladder 'dood' drijgt te gaan.

We willen dan dus dat via de C++ client automatisch de game results naar een php script wordt gestuurt die dat dan in een mysql database neerzet.
Umz, waarom zo moeilijk doen dan?

file.php?value1=1&value2=2&value3=3&sec=DFGH4657wzxchgbn467w4hnsfgn46

sec is een MD5 die je maakt met value1+2+3

b.v.
PHP:
1
$goeiecode = MD5("codeklopt ". $value1 ."-". $value2 ."-". $value3);

dan moet je met C++ MD5 de zelfde code maken en die posten op sec, dan vergelijken of sec het zelfde is als $goeiecode.

Zo heb ik verschillende post scripts gemaakt. b.v. voor het openen van een topic op een forum vanuit een andere website.
Gewoon zorgen dat niemand de codering manier(dus hoe je md5 uitvoert, die volgorde + overige losse tekens) te pakken krijgt.

Acties:
  • 0 Henk 'm!

  • mklerx
  • Registratie: April 2000
  • Laatst online: 13-09 16:47
Hmm, gebruik je PHP om naar MySQL te gaan omdat dat vanuit C++ te moeilijk is?

Misschien is het een idee om iets te doen met sockets? Moet je wel een PHP-script op de server op de achtergrond kunnen laten draaien, dus ligt een beetje aan de server toegang die je hebt. Vanuit C++ kun je al een socket aanroepen, dus moet je alleen aan de PHP-kant een beetje knutselen. Zie http://www.php.net/manual/en/ref.sockets.php

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Het is 1 tot 4+ kb binary data.
Zonder SSH op de server is werken met C++ erg lastig.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
FlamerX schreef op 30 December 2002 @ 20:21:
Maak je in je C++ programma gebruik van post of put?? Post is namelijk voor browsers. Put is voor filestreams. Lijkt me dus beter als je gebruik maakt van put, ipv post (of je moet alle headers die een browser stuurt namaken).
http://www.php.net/manual...ile-upload.put-method.php
POST. PUT is niet bedoeld voor dit soort requests, POST wel.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Als je dan toch al POST doet, waarom maak je er dan niet een volwaardig post-request van? Dus inclusief variabele namen en met eventuele enctype's meegegeven.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Een (volwaardig) POST request hoeft niet multipart/form-data encoded te zijn.
Nu kan toevallig de client aangepast worden, maar ik vind het niet netjes om een workaround op de client te implementeren voor een server-probleem.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

FireFoxx:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
/* ... */
while(list($key,$val) = each($_POST)) {
    $content .= "$key = $val\n";
}
/* ... */
while(list($key,$val) = each($HTTP_RAW_POST_DATA)) {
    $content .= "$key = $val\n";
}
/* ... */
while(list($key,$val) = each($_FILES)) {
    $content .= "$key = $val\n";
}
?>
wellicht niet overbodig even naar de print_r () en var_dump () functies te kijken

</offtopic>

[ Voor 37% gewijzigd door drm op 30-12-2002 22:20 . Reden: layout ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

OlafvdSpek schreef op 30 december 2002 @ 21:26:
Een (volwaardig) POST request hoeft niet multipart/form-data encoded te zijn.
Nu kan toevallig de client aangepast worden, maar ik vind het niet netjes om een workaround op de client te implementeren voor een server-probleem.

Waarom is het een server-probleem? Je client verstuurd blijkbaar geen geldige POST-request...
En binaire data moet in principe multipart/form-data encoded worden, bij mijn weten.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Nieuw in PHP 4.3

Raw POST data is now available as "php://input" stream

Misschien een optie?

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
ACM schreef op 31 December 2002 @ 00:18:
Waarom is het een server-probleem?
Omdat een C++ script de POST data wel kan lezen.
Je client verstuurd blijkbaar geen geldige POST-request...
Waaruit blijft dat? Alleen omdat PHP het schijnbaar niet kan lezen?
En binaire data moet in principe multipart/form-data encoded worden, bij mijn weten.
Daar heb ik niks over kunnen vinden in de HTTP/1.1 RFC.
Pagina: 1