cURL / Mailing Lists / curl-and-php / Single Mail

curl-and-php

PHP script to accept PUT from curl on Apache

From: David Barrett <dbarrett_at_quinthar.com>
Date: Sun, 26 Mar 2006 17:38:16 -0800

I hate to ask this basic question, but scouring the net and mailing list
isn't turning up what I need. Basically, how do I use the curl command line
to PUT a file to a PHP script in Apache? I've been able to get so far that
the PHP script creates an empty file with the correct name, but I'm stumped
how to get the file content. I can't tell if the problem is in my PHP
script (probable), in my use of curl (probable), or in curl itself (highly
improbable). Can you offer any tips on what I'm doing wrong?

Here's what I've done so far:

1) Configure Apache to accept a PUT command (Apache/2.0.54):

        Alias /putstuff /htdocs/putstuff
        <Directory /htdocs/putstuff>
                Options ExecCGI
                AllowOverride All
                Order allow,deny
                Allow from all
                Script PUT /put.php
        </Directory>

2) Create 'put.php' script (PHP/4.4.2):

        <?php
        $totalWritten = 0;
        $inFP = @fopen( "php://stdin", "rb" );
        $outFP = @fopen( basename( $REQUEST_URI ), "wb" );
        while( $data = fread( $inFP, 1024 ) )
        {
                fwrite( $outFP, $data );
                $totalWritten += strlen( $data );
        }
        fclose($inFP);
        fclose($outFP);
        
        if( $totalWritten ) header( "HTTP/1.0 200 Success" );
        else header( "HTTP/1.0 404 Failed" );
        ?>

3) Upload file from command line (Win32, no-SSL binary, 7.15.1)

        C:\>dir test
         Volume in drive C is DriveC
         Volume Serial Number is F0ED-F121
        
         Directory of C:\
        
        03/26/2006 02:15 AM 779 test
                       1 File(s) 779 bytes
                       0 Dir(s) 489,162,752 bytes free
        
        C:\>curl -i -T test http://be1.redswoosh.net/metadata/
        HTTP/1.1 100 Continue
        
        HTTP/1.1 404 Failed
        Date: Mon, 27 Mar 2006 01:34:13 GMT
        Server: Apache
        X-Powered-By: PHP/4.4.2
        Content-Length: 0
        Content-Type: text/html
        
        
        C:\>

4) Check to see if the file arrived:

        [root_at_myserver]# ls -latr
        total 16
        drwxr-xr-x 18 admin admin 4096 Mar 26 15:09 ..
        -rw-r--r-- 1 admin admin 13 Mar 26 15:23 index.html
        -rw-r--r-- 1 admin admin 926 Mar 26 16:35 put.php
        -rw-r--r-- 1 apache apache 0 Mar 26 17:15 test
        drwxrwxrwx 2 admin admin 4096 Mar 26 17:15 .
        [root_at_myserver]#

As you can see from this command sequence, it succeeds in:

        a) Accepting the PUT request
        b) Directing to the PHP script
        c) Getting the right filename
        d) Opening an output file

(Also, though I've removed the error checking in the example above, it's
able to open the 'stdin' handle without trouble.)

But I'm stumped as to why it won't write the file content itself. Any
advice? Thanks!

-david

_______________________________________________
http://cool.haxx.se/cgi-bin/mailman/listinfo/curl-and-php
Received on 2006-03-27