Upload and POST file to PHP page

I need a way to upload a file and send it to a php page

php is on apache server

and I use this c code in my desktop application:

This is a socket with code c

When I run the program, I can get

File size: 772906 open the server in order File size 772906 connect to the server in order Open file ok fread 102400 bytes, Send 102400 bytes fread 102400 bytes, Send 102400 bytes fread 102400 bytes, Send 102400 bytes fread 102400 bytes, Send 102400 bytes fread 102400 bytes , Send 102400 bytes fread 102400 bytes, Send 102400 bytes fread 102400 bytes, Send 102400 bytes fread 56106 bytes, send 56106 bytes Send the file Done! Result: Return code:
Download:
Type:
Size: 0 Kb
Temp file:
Saved in:

But the file does not exist.

I think maybe this is an HTTP protocol, but I don't know how to do it.

Tell me the details?

Many thanks.

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#include <string.h>

#include <unistd.h>

#include <pthread.h>

#include <netinet/in.h>

#include <sys/socket.h>

#include <sys/wait.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <arpa/inet.h>





int main(){



    int sockfd, numbytes;

    FILE *fp;

    char buf[300];

    char filename[10]="1.jpg";

    char send1[100];

    struct sockaddr_in address;

    struct stat filestat;

    int  retval;

    char *str="GET /some address/upload_file.php?";



    //Get file stat

    if ( lstat(filename, &filestat) < 0){

        exit(1);

    }

    printf("The file size is %lu\n", filestat.st_size);



    //TCP socket

    if ( ( sockfd = socket(AF_INET, SOCK_STREAM, 0) ) == -1 ){

        perror("socket");

        exit(1);

    }else{

    printf("open server ok\n");

    }



    #if 1

        //Initial, connect to port 80 

        address.sin_family = AF_INET;

        address.sin_port = htons(80);

        address.sin_addr.s_addr = inet_addr("xx.xx.xx.xx");

        bzero( &(address.sin_zero), 8 );

    #endif



    //Get file stat
    if ( lstat("1.jpg", &filestat) < 0){
        exit(1);
    }
    printf("The file size is %lu\n", filestat.st_size);
    fp = fopen("1.jpg", "rb");

    //Connect to server

    if ( connect(sockfd, (struct sockaddr*)&address, sizeof(struct sockaddr)) == -1){

        perror("connect");

        exit(1);

    }else{

    printf("Connect to server ok\n");

    }



    if ( (fp = fopen(filename,"rb")) == NULL){

            perror("fopen");

            exit(1);

    }else{

    printf("Open file ok\n");

    }   



    sprintf(send1,"%s\n",str);

    retval= send(sockfd,send1,sizeof(send1),0);





    //Sending file

    while(!feof(fp)){
        numbytes = fread(buf, sizeof(char), sizeof(buf), fp);
        //printf("fread %d bytes, ", numbytes);
        numbytes = write(sockfd, buf, numbytes);
        //printf("Sending %d bytes\n",numbytes);
    }

    printf("Sending file Finished!\n");



    //Receive from server

    if ( (numbytes = recv(sockfd, buf, sizeof(buf)+1,0) ) == -1 ){

            perror("recv");

            exit(1);

        }

    printf("result: %s\n\n\n", buf);



    fclose(fp);

    close(sockfd);

    return 0;

} 

my php:

<?php





if (1){ 



if ($_FILES["file"]["error"] > 0){ 

        echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 

    }else{ 

         echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 

        echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 

        echo "Type: " . $_FILES["file"]["type"] . "<br />"; 

        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; 

        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; 



        //move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);
        move_uploaded_file($_FILES["file"]["tmp_name"], "5446");  

        echo "Stored in: " .  $_FILES["file"]["name"]; 



    } 



}else{ 

    echo "Invalid file"; 

} 

?>
+2
2

, POST/file/to/somewhere.php, GET.

, HTTP, , wirehark . wirehark, .

IIRC :

POST /to/somewhere.php HTTP/1.1
Host: www.yourserver.com
Content-Type: multipart/form-data;boundary=fdhskjfhldjkshfdksl----

fdhskjfhldjkshfdksl----
Content-Disposition: name=data;filename=foo.jpg
Content-Type: image/jpg

<binary data here>

, , , .

+2

...
, PHP ( ) , , ( BTW , ) .
? ftp'ing , - cron-, , , PHP, . , cron ( , ).

, .

0

Source: https://habr.com/ru/post/1776611/


All Articles