2013年2月25日 星期一

PHP-upload

昨天看了一下Objective-C如何上傳照片給自己的Server
在書中的code有用到PHP,由於對PHP不太熟,所以參考O'REILLY書中的code,研究了一下Server端的PHP
1. Sample code:
<?php
echo >>>_END
<html><head><title>PHP upload file</title></head>
<form method='post' action='uploadfile.php' enctype='multipart/form-data'>
select file: <input type='file' name='filename' size='10'/>
<input type='submit' value='Upload'/>
</form>
_END;

if($_FILES){
    $name = $_FILES['filename']['name'];
    move_uploaded_file($_FILES['filename']['tmp_name'], "upload/$name");
    echo "upload image '$name'<br/><img src='upload/$name' />";
}

echo "</head></html>";
?>
2. 簡單看了一下sample code,利用PHP寫echo html的語法給client端
基本上echo出來的html簡單來說為一個簡單的表單,如下圖


在sample code中用到了$_FILES的系統陣列,在O'REILLY的書中提到可以檢查$_FILES來判斷使用者是不是已經上傳了檔案,在使用者上傳檔案之前$_FILES是空的
$_FILES陣列中存了五項資訊,在這個部份參考O'REILLY書的P.159頁

$_FILES 陣列內容
Array Element content
$_FILE['file']['name'] 上傳檔案名稱
$_FILE['file']['type'] 上傳檔案的內容型別
$_FILE['file']['size'] 上傳檔案的byte大小
$_FILE['file']['tmp_name'] 儲存在server的暫時檔案名稱
$_FILE['file']['error'] 上傳檔案時產生的錯誤碼
3. 上面的code完成了上傳的php但是有個問題,會遇到permission denied的問題,瀏覽器上會顯示如下範例
Warning: move_uploaded_file(Screenshot-1.png): failed to open stream: Permission denied in /var/www/uploadfile.php on line 12 Warning: move_uploaded_file(): Unable to move '/tmp/php9oNy5i' to 'Screenshot-1.png' in /var/www/uploadfile.php on line 12 upload image 'Screenshot-1.png'
上網查了一下,上面的敘述描述使用者對該資料夾沒有存取的權限,在linux的環境下,可以用chmod更改權限的指令更改資料夾權限
依照以下部驟來解決上面的問題:
cd /var/www
sudo mkdir upload
sudo chown -R www-data:www-data upload
完成上述的指令後,使用者就有權限對upload的資料夾作存取的動作

4. 瀏覽器成功執行的結果:

沒有留言:

張貼留言