загрузить данные из приложения iphone на веб-сервер с помощью php - PullRequest
0 голосов
/ 03 августа 2011

, практически не зная PHP, я пытаюсь отправить некоторые данные (NSData) из приложения iphone на мой веб-сервер (пока локально), но безуспешно (скрипт загрузчика PHP вызывается, так как я сообщение об ошибке). Может ли кто-нибудь помочь мне понять, что я здесь делаю не так?

Мое приложение iphone на данный момент включает в себя только приведенный ниже код в ViewDidLoad моего (единственного и единственного) ViewController, который я объединил из некоторых разговоров здесь:

- (void)viewDidLoad
{
[super viewDidLoad];

  NSData *data;    
const char *bytestring = "black dog";
data = [NSMutableData dataWithBytes:bytestring length:strlen(bytestring)];
NSString *strData = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

NSString *urlString = @"http://localhost/uploader1.php";
NSString *filename = @"filename";
NSMutableURLRequest *request= [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *postbody = [NSMutableData data];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@.jpg\"\r\n", filename] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[NSData dataWithData:data]];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:postbody];

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"%@", returnString);

}

Я также попробовал следующий скрипт загрузки PHP:

  <?php
    $target = "./upload/";
        $target = $target.basename( $_FILES['userfile']['name']) ;

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "SUCCESS";
}
?> 

Что я делаю не так и почему я не могу опубликовать эти данные? Снова вызывается PHP-скрипт, потому что я получаю сообщение об ошибке: Неверный тип файла ...

Любая помощь будет высоко ценится.

Спасибо!

Ответы [ 3 ]

1 голос
/ 03 августа 2011

Вы пробовали ASIHTTPRequest?http://allseeing -i.com / ASIHTTPRequest /

1 голос
/ 03 августа 2011

В вашем коде Objective-C вы отправляете файл следующим образом:

 name=\"userfile\"; filename=\"%@.jpg\"\r\n",

, поэтому на стороне PHP вы должны получить доступ к $_FILES["userfile"] вместо $_FILE["file"] или $_FILE["uploaded"],чтобы получить правильную информацию о вашей загрузке.

Если вы все еще испытываете проблемы, первым предложением будет поставить некоторые следы на стороне сервера:

print_r($_REQUEST);

даст вам список всех $_POST / $ _ GET / cookie входные параметры, чтобы вы могли лучше знать, что происходит.Кроме того, я бы предложил также выполнить трассировку:

print_r($_FILES);

это может быть связано с тем, что сторона ObjC отправляет неправильные данные или что неправильные данные считываются на стороне сервера.

EDIT: ошибкавы получаете:

"Wrong file type..."

зависит от того, что вы пытаетесь рассчитать размер загруженного файла, как если бы это было изображение:

 $check = getimagesize($_FILES['userfile']['tmp_name']);
 if($check[0]>0 && $check[1]>0 && $check['mime']=='image/jpg'){

, хотя на самом деле выотправив простую строку в качестве содержимого файла:

 const char *bytestring = "black dog";

либо удалите чек, либо загрузите реальный файл.

РЕДАКТИРОВАТЬ:

Используйте эти строки:

error_reporting(E_ALL);
ini_set("display_errors", 1); 

, чтобы сделать отчеты об ошибках более подробными, так что вы, возможно, знаете , почему не удается ...

0 голосов
/ 08 мая 2012

Для целевого пути не используйте HTTP, используйте метод ниже.

Вместо file_put_contents(***WebSiteURL***...) вам необходимо использовать путь к серверу /cache/lang/file.php (например, /home/content/site/folders/filename.php).

Вы не можете открыть файл по HTTP и ожидать, что он будет записан. Вместо этого вам нужно открыть его, используя локальный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...