binary in post var

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Stefan

Stefan

03/12/2006 15:12:00
Quote Anchor link
hoi,

ik wil graag imgs uploaden via remote php dus via de cmdline.
Ik open een socket naar server waar images moeten komen en ik schrijf die vars weg, alleen het wegschrijven van de binary string gaat niet goed
heb ALLES al geprobeerd, base64encoding, urlencoding, bin2hex echt alles
maar het wil gewoon niet lukken om die files goed weg te schrijven als png op server

als ik de bin wegschrijf op me pc gewoon werkt het wel dus er gaat iets mis met de bin string..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php
//bin content
$data_content = base64_encode($sDecode);
//het wegschrijven
$this->postImage ( array ( 'img' =>  $data_content  , 'name' => $iHash ) );


//post image function
    function postImage ($mVars ) {

        #create socket
        $this->openImageServer();

        #build vars
        $sVars = '';
        if ( is_array ( $mVars ) ) {

            #loop
            foreach ( $mVars as $sKey => $sValue )
            $sVars .= '&' . $sKey . '=' . $sValue;

            #remove first &
            $sVars = substr ( $sVars, 1 );

        }
else $sVars = $mVars;

        #do post
        $this->write ( "POST /~stefan/uploadImage.php HTTP/1.1" );
        $this->write ( "Host: 85.98.128.156" );
        $this->write ( "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.8) Gecko/20061025 Firefox/1.5.0.8" );

        $this->write ( "Content-Type: application/x-www-form-urlencoded");
        $this->write ( "Content-Length: " . strlen ( $sVars ) );
        $this->write ( "" );
        $this->write ( $sVars );

    }


###SERVER####
#post image?

if ( isset ( $_POST['img'] ) |) {
    
    $sBin = base64_decode ( $_POST['img']  ) ;

    $fp = fopen ( 'uploads/temp/img.png', 'wb' );
    fwrite ( $fp, $sBin);
    fclose ( $fp );

}

?>


hoop dat iemand hier mischien ervaring mee heeft en me kan helpen!
Gewijzigd op 01/01/1970 01:00:00 door Stefan
 
PHP hulp

PHP hulp

24/11/2024 15:16:18
 
Jelmer -

Jelmer -

03/12/2006 15:18:00
Quote Anchor link
Je bent nu de data aan het verzenden alsof het get-data in een post-omgeving is. Dat kan wel, maar is voor binaire bestanden niet te doen.

Gebruik werkelijk multipart:
http://www.phphulp.nl/php/tutorials/8/368/795/
dus met boundaries en dergelijke.
 
Stefan

Stefan

03/12/2006 15:21:00
Quote Anchor link
als ik het content-type verander load hij helemaal niks up...
 
Legolas

Legolas

03/12/2006 16:43:00
Quote Anchor link
Gewoon het stukje code daar pakken en de data array zo vullen:

$data = array();
$data['naam_voor_het_veld'] = array('mime/type', 'bestandsnaam', 'inhoud_van_het_bestand');
 
Stefan

Stefan

03/12/2006 16:45:00
Quote Anchor link
hmm dat snap ik niet helemaal, heb je klein voorbeeldje? oid
 
Legolas

Legolas

03/12/2006 16:49:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php

// Nodige informatie
define('SERVER', 'www.example.org');
define('PORT', 80);
define('PATH', '/example.php');

// Versie
define('VERSION', '1.0');

// End of line
define('_EOL', "\r\n");

// Data
$data = array();
$data['naam_voor_het_veld'] = array('mime/type', 'bestandsnaam', 'inhoud_van_het_bestand');
$data['test'] = array('text/plain', 'test.txt', 'bladiebla');
$data['plaatje'] = array('image/png', 'test.png', '--plaatje--');

// Maak een socket
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
if (!$sock) {
       echo 'Fatal error: Couldn\'t create socket';
       exit;
}


// Maak verbinding
if (!socket_connect($sock, SERVER, PORT)) {
       echo 'Fatal error: Couldn\'t connect';
       exit;
}


// Maak een boundary
$bound = null;
for ($i = 0; $i < 15; $i++) {
       $bound .= chr(rand(33, 126));
}


// Maak het body stuk
$body = null;
foreach ($data as $var => $content) {
       $body .= '--' . $bound . _EOL;
       if ($content[0] != null) {
               $body .= 'Content-Disposition: form-data; name="' . $var . '";
filename="'
. $content[1] . '"' . _EOL;
               $body .= 'Content-Type: ' . $content[0] . _EOL;
       }

       else {
               $body .= 'Content-Disposition: form-data; name="' .
$var . '"' . _EOL;
       }

       $body .= _EOL;
       $body .= $content[2] . _EOL;
}

$body .= '--' . $bound . '--';

// Maak het request
$request = null;
$request .= 'POST ' . PATH . ' HTTP/1.0' . _EOL;
$request .= 'Host: ' . SERVER . _EOL;
$request .= 'User-Agent: LegolasWeb WebBrowserDemo ' . VERSION . _EOL;
$request .= 'Content-Type: multipart/form-data; boundary=' . $bound . _EOL;
$request .= 'Content-Length: ' . strlen($body) . _EOL;
$request .= _EOL;
$request .= $body;

// En verstuur het
if (!socket_send($sock, $request, strlen($request), 0)) {
       echo 'Fatal error: Couldn\'t send request';
       exit;
}


// Haal de response op
$output = null;
$buffer = null;
while (socket_recv($sock, $buffer, 1024, 0) != 0) {
       $output .= $buffer;
}


socket_close($sock);

?>
 
Stefan

Stefan

03/12/2006 16:54:00
Quote Anchor link
en dang ewoon uploaden door isset ( $_FILE ...?
 
Legolas

Legolas

04/12/2006 09:24:00
Quote Anchor link
jup
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.