Can';你不能通过php上传文件吗?

Can';你不能通过php上传文件吗?,php,Php,我正试图通过php上传一个文件 Html表单 <!DOCTYPE html> <html> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> Select image to upload:</br> <input type="file" name="fileToUpload" id="fileToUpload

我正试图通过php上传一个文件

Html表单

<!DOCTYPE html>
<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
    Select image to upload:</br>
    <input type="file" name="fileToUpload" id="fileToUpload"></br>
    <input type="submit" value="Upload Image" name="submit">
</form>

</body>
</html> 
第37行,参考:

我已经尝试了上面提到的一切,但仍然面临着这个问题

以下是文件夹的权限

drwxr-xr-x  2 www-data rohit   4096 Feb 24 15:58 tmp_uploads
drwxr-xr-x  2 www-data rohit   4096 Feb 24 15:05 uploads
我从你那里找到了主人

<?php echo exec('whoami'); ?>

chown user destination_dir
chmod 755 destination_dir

chown用户目的地目录
chmod 755目的地目录
然后用该用户更改了文件夹的所有者


有人能帮我解除阻止吗?

这似乎太简单了,但如果您的权限被拒绝,您是否尝试过将权限设置为0777并进行测试。如果有效,请尝试0775(而不是0755)。如果这样做有效,那么该组就是问题的根源。如果是这种情况,请尝试切换所有者和组

chown rohit:www-data tmp_uploads
chown rohit:www-data uploads

这似乎太简单了,但如果您的权限被拒绝,您是否尝试过将权限设置为0777并进行测试。如果有效,请尝试0775(而不是0755)。如果这样做有效,那么该组就是问题的根源。如果是这种情况,请尝试切换所有者和组

chown rohit:www-data tmp_uploads
chown rohit:www-data uploads

看起来问题在于如何构造$target_文件:

$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
您需要在$target_dir和上载文件的basename之间加一个“/”,如下所示:

$target_file = $target_dir . '/'. basename($_FILES["fileToUpload"]["name"]);
或者只需将$target_dir设置为(注意结尾“/”):


如果没有它,它将试图移动“/home/rohit”中的文件,而www数据用户可能没有相关权限。

问题似乎在于如何构造$target\u文件:

$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
您需要在$target_dir和上载文件的basename之间加一个“/”,如下所示:

$target_file = $target_dir . '/'. basename($_FILES["fileToUpload"]["name"]);
或者只需将$target_dir设置为(注意结尾“/”):


如果没有它,它将试图在“/home/rohit”中移动一个文件,而www数据用户可能没有相关权限。

根据特定的操作系统/软件包配置,Apache无法在文档根目录之外进行写入

顺便说一句,在大多数情况下,问题可能只存在于目录树中:目标路径的每个父目录都应该为Apache用户(或其组,或所有用户)设置执行位执行位,而不是读/写权限(显然,要写入的目录除外)

因此,在您的特定情况下,检查execute位是否设置为

  • /家
  • /家园/罗希特
  • /主页/rohit/上传

让我知道它是否有效。对我来说,它在大多数情况下都能工作。

根据特定的操作系统/软件包配置,Apache无法在文档根目录之外进行编写

顺便说一句,在大多数情况下,问题可能只存在于目录树中:目标路径的每个父目录都应该为Apache用户(或其组,或所有用户)设置执行位执行位,而不是读/写权限(显然,要写入的目录除外)

因此,在您的特定情况下,检查execute位是否设置为

  • /家
  • /家园/罗希特
  • /主页/rohit/上传

让我知道它是否有效。对我来说,它在大多数情况下都能工作。

制作这个php:你得到了什么?@hanshenrik数组(0){}数组(1){[“提交”]=>string(12)“上传图像”}数组(1){[“上传图像”]=>array(5){[“名称”]=>string(9)“页面1.png”[“类型”]=>string(9)“图像/png”[“tmp_名称”=>string(33)”/home/rohit/tmp"上传图像/phpcw6v”[“错误”=>int(0)]=>int(205237)}@hanshenrik,但根据apache日志,有一些权限被拒绝的错误。源/解析是什么?如果目标目录在站点文档根目录之外,即使www数据是所有者,您也可能会遇到问题。请创建此php:您得到了什么?@hanshenrik数组(0){}数组(1){[“提交”]=>string(12)“上传图像”}数组(1){[“文件上传”]=>array(5){[“名称”]=>string(9)“页面1.png”[“类型”]=>string(9)“image/png”[“tmp_name”]=>string(33)”/home/rohit/tmp_uploads/phpCwZA6V”[“error”]=>int(0)[“size”]=>int(205237)}@hanshenrik,但根据apache日志,存在一些权限被拒绝的错误。什么是源/解决方案?如果目标目录位于站点文档根目录之外,则可能会出现问题,即使www数据是所有者。因此,请确保检查
$target\u file
的结果,以防丢失斜杠或其他内容。是的,这是丢失的斜杠。我在这上面浪费了两个多小时。另外,一定要检查
$target\u file
的结果,以防丢失斜杠或其他东西。是的,就是丢失的斜杠。我在这上面浪费了两个多小时。