【问题标题】:Cannot move uploaded file for image upload php无法为图片上传php移动上传的文件
【发布时间】:2015-01-08 15:08:53
【问题描述】:

帮助,我已经查看了这个问题的其他答案,但我似乎无法解决这个问题。

我想上传一张图片到目录 "uploaded_files/" 。 $user_id);

但是它给了我错误:

**move_uploaded_file() [function.move-uploaded-file]:copy() 函数的第二个参数不能是 /home/dawn01/public_html/wp-content/wordpresstheme/twentyten/new_uploads.php 中的目录第 27 行

PHP 警告:move_uploaded_file() [function.move-uploaded-file]:无法在 /home/dawn01/public_html/wp-content/themes/wordpresstheme/ 中将 '/tmp/phpkh4xzn' 移动到 'uploaded_files/76' new_uploads.php 第 27 行**

这是我的代码:

session_start();
$_SESSION['user_no'];
$startuplistingno = $_POST['startup_listing_no'];
//creating directory within uploaded files called user id

$dir = 'uploaded_files/'. $_SESSION['user_no'];
if ( !file_exists($dir) ) {
    mkdir ($dir, 0744);

    $temp = explode(".",$_FILES["file"]["name"]);
    $newfilename = $_SESSION['user_no'];
    move_uploaded_file($_FILES["file"]["tmp_name"], 
                       "uploaded_files/" . $newfilename);
}

【问题讨论】:

  • mkdir($dir, 0744); 可能不是您想要的。 *NIX 中的目录需要执行权限才能正常工作。管理员通常将0755 用于公共目录(只有所有者拥有写入权限,其他人都可以读取),或0700 用于私人目录(只有所有者拥有写入权限,其他人都无法读取)。
  • @amphetamachine,我完全同意,我什至在答案中提到了这一点。

标签: php file-upload


【解决方案1】:

让我们检查一下代码

$dir = 'uploaded_files/'. $_SESSION['user_no'];
// create a directory like uploaded_files/12345
if ( !file_exists($dir) ) { 
    // read permissions on a directory without execute permissions
    // are kinda useless 700 or 755 makes more sense.
    mkdir ($dir, 0744);

    $newfilename = $_SESSION['user_no'];
    // now here we are attempting to create a new file called
    // uploaded_files/12345 
    // But this is an already existing directory (we just created it)
    move_uploaded_file($_FILES["file"]["tmp_name"], 
                       "uploaded_files/" . $newfilename);
}

让我们修复代码:

$dir = 'uploaded_files/'. $_SESSION['user_no'];
if (!file_exists($dir)) {
    if (!mkdir($dir, 0700)) {  
         http_send_status(500);
         die("Could not upload file");
    } 
}    
$tmp_name = $_FILES["file"]["tmp_name"];
// create a path with file name like:
// uploaded_files/12345/730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525.ext
$newfilename = $dir . '/' . hash_file('sha256', $tmp_name) . 'ext';
$success = move_uploaded_file(tmp_name, $newfilename);
if (!$success) {
    http_send_status(500);
    die("Could not upload file");
}

您还应该检查上传的文件是否确实是图像。

$info = getimagesize($_FILES['image']['tmp_name']); 
// image/jpeg does not have to be just jpeg but a list of 
// mime types you will accept
if (is_array($info) && isset($info['mime']) && $info['mime'] === 'image/jpeg') {
    // then move the file to permanent storage 
}

【讨论】:

    猜你喜欢
    • 2013-07-15
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2021-08-10
    • 2013-06-21
    • 2012-06-30
    相关资源
    最近更新 更多