brauche ich eine Möglichkeit, eine Datei zu laden und per Post in PHP-SeiteHochladen und POST-Datei auf PHP-Seite
die PHP auf Apache-Server sind
und ich verwende diesen C-Code in meiner Desktop-Anwendung:
Es ist ein Sockel von c-Code
Wenn ich das Programm ausführen,
Größedie Datei erhalten kann, ist 772.906 offener Server ok Die Dateigröße ist 772906 Verbindung zum Server ok Datei öffnen ok fread 102400 Bytes, Senden 102.400 Bytes fread 102400 Bytes, Senden 102.400 Bytes fread 102400 Bytes, Senden 102.400 Bytes fread 102400 Bytes, Senden 102.400 Bytes 102400 fread Bytes, Senden 102400 Bytes fred 102400 Bytes, Senden 102400 Bytes fred 102400 Bytes, Senden 102400 Bytes fread 56106 Bytes, Senden 56106 Bytes Datei wird gesendet Fertig! Ergebnis: Return-Code:
Upload:
Typ:
Größe: 0 Kb
Temp-Datei:
in Stored:
Aber Datei ist nicht vorhanden.
Ich denke, vielleicht ist es möglich HTTP-Protokoll, aber ich weiß nicht, wie es geht.
Würden Sie mir Details sagen?
Vielen Dank.
#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;
}
mein PHP ist:
<?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";
}
?>