2011-08-15 63 views
-1

嗯,我對iPhone和PHP開發都很新,並且試圖簡單地將映像本地發佈到我的web服務器上(我已經設置了web服務器) 。由於某種原因,我的PHP腳本正在執行,儘管該文件沒有被保存。無法使用PHP腳本從iPhone POST到Web服務器

我相信這是這裏最基本的問題,但我似乎不能找到問題。真的很感謝你們的幫助。謝謝!

我的Objective-C代碼:

UIImageView *imageView = [[UIImageView alloc] init]; 
imageView.image = [UIImage imageNamed:@"13.png"]; 

NSData *imageData = UIImageJPEGRepresentation(imageView.image, 90); 
NSString *urlString = @"http://localhost/uploader.php"; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init]; 
[request setTimeoutInterval:60.0]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
[request addValue:contentType forHTTPHeaderField:@"Content-Type"]; 

NSMutableData *body = [NSMutableData data]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"userfile\";filename=\"myfile.jpg\"\r\n"] 
        dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[NSData dataWithData:imageData]]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

[request setHTTPBody:body]; 
NSLog(@"%@",[[NSString alloc] initWithData:[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil] encoding:NSUTF8StringEncoding]); 

我的PHP腳本:

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

if (move_uploaded_file($_FILES['userfile']['tmp_name'], './upload/')) { 
    echo "YES"; 
} 
else 
    echo "NO"; 

?> 

這些都是在PHP打印這些變量的時候,我得到的值:

print_r($target); 

./upload/myfile.jpg 

print_r($check[0]); 

320 

print_r($_REQUEST); 

Array 
(
) 


print_r($_FILES[userfile]); 

Array 
(
    [name] => myfile.jpg 
    [type] => application/octet-stream 
    [tmp_name] => /private/var/tmp/phpWJE4UC 
    [error] => 0 
    [size] => 8829 
) 

print_r($_FILES[name]): 

(empty) 

print_r($_FILES[type]); 

(empty) 

print_r($_FILES[tmp_name]); 

(empty) 

print_r($_FILES[error]); 

(empty) 

print_r($_FILES[size]); 

(empty) 

print_r($_FILES); 


Array 
(
    [userfile] => Array 
     (
      [name] => myfile.jpg 
      [type] => application/octet-stream 
      [tmp_name] => /private/var/tmp/phpMvJ4oR 
      [error] => 0 
      [size] => 8829 
     ) 

) 

回答

2

你移動通話不正確。您必須爲目標指定一個文件名。你只提供了一個目錄,所以通話失敗。 PHP不會爲你創建一個文件名,你必須自己指定它。

if (move_uploaded_file($_FILES['userfile']['tmp_name'], './upload/name_of_file_to_write')) { 
                    ^^^^^^^^^^^^^^^^^^^^^ 
+0

謝謝,馬克,但我得到了同樣的行爲 - 「move_uploaded_file」失敗。我不知道應該創建的文件的名稱,但爲了安全起見,我將它命名爲相同的名稱,即:'./upload/myfile.jpg',並創建了一個。思考? – TommyG

+1

確保您的網絡服務器具有在該上傳目錄中創建/寫入文件的權限。檢查PHP錯誤日誌,看看是否有任何東西出現。如果存在同名的文件,請確保網絡服務器可以覆蓋它。 –

+0

對於這個愚蠢的問題感到抱歉 - 但我如何檢查Web服務器是否具有正確的寫入權限?非常感謝。 – TommyG

相關問題