【问题标题】:upload a file with the same name上传同名文件
【发布时间】:2015-07-31 18:49:07
【问题描述】:

我想从我的 android 应用程序上传一个文件。第一次成功发生,但第二次如果我想替换文件它不会做任何事情。

 <?php
    $file_path = "usuario/";

    $file_path = $file_path . basename( $_FILES['uploaded_imagen']['name']);

    if(file_exists($file_path))
    {
      unlink($file_path);
    }

    if(move_uploaded_file($_FILES['uploaded_imagen']['tmp_name'], $file_path)) {
          echo "success1";
    } else{
          echo "fail1";
    }
 ?>

【问题讨论】:

  • 这应该可以。当您在浏览器中尝试时,它是否有效?尽量消除可能的原因。
  • 如果您不想替换图像,为什么要删除它? “我在这个盘子上吃过晚饭,我吃了晚饭。现在晚饭没了。这是为什么?”。
  • @MarcB 我认为他的意思是“但是第二次(例如,如果我想替换旧文件),它什么也没做”。
  • 当我使用 basename( $_FILES['uploaded_imagen']['name']);文件名直接在php脚本中
  • 很可能是因为手机默认上传的名字是image.jpg,因为已经存在所以上传失败;我曾经很艰难地学会了这一点。您需要在上传之前重命名文件。

标签: php file file-upload file-permissions


【解决方案1】:

您可以在删除现有文件之前尝试更改文件权限(如果您的 www 用户被允许这样做)

<?php
$basename = basename($_FILES['uploaded_imagen']['name']);
//todo: (play safe)  $basename = hash('sha256', $basename) . '.EXT';
$target_file = 'usuario/' . $basename;
if(file_exists($target_file))
{
    chmod($target_file,0755); //change perms if possible
    unlink($target_file); //remove the file
}
if(move_uploaded_file($_FILES['uploaded_imagen']['tmp_name'], $target_file))
{
    echo "<P>FILE UPLOADED TO: $target_file</P>";
}
else
{
    echo "<P>MOVE UPLOADED FILE FAILED!</P>";
    print_r(error_get_last());
}

或者 - 只需更改目标目录的权限(在首先找出您的服务器正在运行的 www 用户之后):

ps aux | egrep '(apache|httpd)'

chown www-user:www-group '/path/to/files'
chmod 0700 '/path/to/files'

【讨论】:

  • 您好,谢谢,我的问题是,如果我用我的应用程序运行您的代码不起作用,但在浏览器中运行它可以工作......或者如果我手动更改我目录中的权限它可以工作...这怎么可能?
  • 谢谢大家,现在可以了,我不知道为什么..可能是连接问题或类似的问题...
猜你喜欢
  • 2015-12-30
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多