[英]PHP - failed to open stream: No such file or directory in
我是PHP和Objective-C的新手,我一直在尋找答案,但是一切似乎都很復雜,我無法理解。 我正在嘗試使用PHP將圖像文件上傳到我的ftp服務器。
我在應用程序中使用以下代碼來上傳圖片:
UIImage *myImage = [UIImage imageNamed:@"black_strip.png"];
NSData *imageData = UIImagePNGRepresentation(myImage);
// setting up the URL to post to
NSString *urlString = @"http://www.myurl.net/GagVidApp/uploadProfImage.php";
// setting up the request object now
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"];
/*
now lets create the body of the post
*/
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"userfile\"; filename=\"ipodfile.png\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"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]];
// setting the body of the post to the reqeust
[request setHTTPBody:body];
// now lets make the connection to the web
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"returnString: %@", returnString);
這是我的PHP代碼:
<?php
$file = basename($_FILES['userfile']['name']);
$remote_file = basename($_FILES['userfile']['name']);
//$remote_file = 'readme.txt';
// set up basic connection
$ftp_server = "www.myurl.net";
$ftp_user_name = "myusername";
$ftp_user_pass = "mypassword";
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// check connection
if ((!$conn_id) || (!$login_result)) {
echo "FTP connection has failed!";
echo "Attempted to connect to $ftp_server for user $ftp_user_name";
exit;
} else {
echo "Connected to $ftp_server, for user $ftp_user_name";
}
// upload a file
if (ftp_put($conn_id, $remote_file, $file, FTP_ASCII)) {
echo "successfully uploaded $file\n";
} else {
echo "There was a problem while uploading $file\n";
}
// close the connection
ftp_close($conn_id);
?>
我在應用程序中得到的返回字符串是:
returnString: Connected to www.myurl.net, for user myuser<br />
<b>Warning</b>: ftp_put(ipodfile.png) [<a href='function.ftp-put'>function.ftp-put</a>]: **failed to open stream: No such file or directory in** <b>/home/load2unet/domains/myurl.net/public_html/GagVidApp/uploadProfImage.php</b> on line <b>24</b><br />
There was a problem while uploading ipodfile.png
我一直在尋找答案,但是沒有任何運氣。 任何幫助將不勝感激! 謝謝
文件上傳存儲在一個臨時文件夾中。 由於您僅提供文件的基本名稱( basename($_FILES['userfile']['name']
),因此會在當前路徑中搜索文件,但找不到該文件。請提供完整路徑,腳本便可以工作。
正如Peter所說,我懷疑問題在於無法引用臨時文件的完整路徑,即$_FILES["userfile"]["tmp_name"]
。 這是我過去使用過的格式,使用move_uploaded_file
而不是ftp,但您可能會明白:
<?php
header('Content-Type: application/json');
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["userfile"]["name"]));
if ((($_FILES["userfile"]["type"] == "image/gif")
|| ($_FILES["userfile"]["type"] == "image/jpeg")
|| ($_FILES["userfile"]["type"] == "image/png")
|| ($_FILES["userfile"]["type"] == "image/pjpeg"))
&& ($_FILES["userfile"]["size"] < 200000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["userfile"]["error"] > 0)
{
echo json_encode(array("error" => $_FILES["userfile"]["error"]));
}
else
{
if (file_exists("upload/" . $_FILES["userfile"]["name"]))
{
echo json_encode(array( "error" => $_FILES["userfile"]["name"] . " already exists"));
}
else
{
move_uploaded_file($_FILES["userfile"]["tmp_name"], "upload/" . $_FILES["userfile"]["name"]);
echo json_encode(array("success" => true,
"upload" => $_FILES["userfile"]["name"],
"type" => $_FILES["userfile"]["type"],
"size" => ($_FILES["userfile"]["size"] / 1024) . " kB",
"stored in" => "upload/" . $_FILES["userfile"]["name"]));
}
}
}
else
{
echo json_encode(array( "error" => "Invalid file"));
}
?>
也許您不需要文件大小檢查(或者200k可能不是正確的閾值),所以這取決於您。 但是請注意,對於編程接口,我使用JSON格式化響應,因此我的應用程序可以輕松解析響應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.