나는 파일을 업로드 및 PHP 페이지에 게시하는 방법이 필요업로드 및 POST 파일
PHP는 아파치 서버
에 있고 난 내 데스크톱 응용 프로그램이 C 코드를 사용
그것은 내가 프로그램을 실행하면이 얻을 수있는 C 코드에 의한 소켓의
는
파일 크기는 772,906 공개 서버 확인입니다파일 크기는 가 102,400을 FREAD 102,400 바이트 보내기 102,400 바이트 FREAD 102,400 바이트 보내기 102,400 바이트 FREAD 102,400 바이트 보내기 102,400 바이트 FREAD 102,400 바이트를, 전송, 서버 확인 파일 열기 확인 FREAD 102,400 바이트 772,906 연결입니다 바이트, 송신 102400 바이트 fread 102400 바이트, 송신 102400 바이트 fread 102400 바이트, 송신 102400 바이트 fread 56106 바이트, 송신 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";
}
?>