Мне нужен способ загрузить файл и отправить его на страницу php
php находится на сервере apache
, и я использую этот код c в своем настольном приложении:
Это сокет с кодом c
Когда я запускаю Программу, могу получить
Размер файла 772906, открыть сервер в порядке Размер файла 772906 Подключиться к серверу, в порядке Открыть файл, нормально fread 102400байты, отправка 102400 байт, фред 102400 байт, отправка 102400 байт, фред 102400 байт, отправка 102400 байт, фред 102400 байт, отправка 102400 байт, фред 102400 байт, отправка 102400 байт, фред 102400 байт, отправка 102400 байт, фред 102400 байт, 5610 байт, отправка 10, Отправка 56106 байт Отправка файла завершена!Результат: Код возврата:Загрузить:Тип:Размер: 0 КбВременный файл:Хранится в:
Но файл не существует.
Полагаю, возможно, это возможный протокол HTTP, но я не знаю, как это сделать.
Не могли бы вы рассказать мне подробности?
Большое спасибо.
#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;
}
мой 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";
}
?>