php文件上载问题

php文件上载问题,php,file,upload,Php,File,Upload,我似乎无法用PHP上传文件。据我所知,一切正常。我甚至还翻出了旧课本,直接从课文中抄袭了这个例子,但仍然没有成功 起初,我认为这是一个目录权限的问题,文件保存在那里,所以我将权限更改为777,但仍然没有。如果有人有任何建议,我洗耳恭听:/ 以下是代码(HTML): PHP文件: <?php $tmp_name = $_FILES['file1']['tmp_name']; $path = getcwd() . DIRECTORY_SEPARATOR . 'images'; $name

我似乎无法用PHP上传文件。据我所知,一切正常。我甚至还翻出了旧课本,直接从课文中抄袭了这个例子,但仍然没有成功

起初,我认为这是一个目录权限的问题,文件保存在那里,所以我将权限更改为777,但仍然没有。如果有人有任何建议,我洗耳恭听:/

以下是代码(HTML):



PHP文件:

<?php
$tmp_name = $_FILES['file1']['tmp_name'];
$path = getcwd() . DIRECTORY_SEPARATOR . 'images';
$name = $path . DIRECTORY_SEPARATOR . $_FILES['file1']['name'];
$success = move_uploaded_file($tmp_name, $name);
if($success) {
    $upload_message = $name . ' has been uploaded.';
    echo "$upload_message";
} else {
    echo "something went wrong :(";
}
?>


您需要确保您有写入上载\u tmp\u dir的权限,检查php.ini中的post\u max\u size和upload\u max\u filesize限制是否大于您尝试上载的文件。此外$\u文件还包含错误信息,请将其转储,以便获得有关未按预期发生的情况的更多信息。

在尝试移动上载错误之前,应先检查上载错误,然后才能跟踪问题:

以下是一个基本示例:

<?php
error_reporting(-1);

$uploaddir = './images/';

// Check for upload attempt
if(isset($_FILES['file1'])){
    $uploadfile = $uploaddir.basename($_FILES['file1']['name']);

    // If no error
    if($_FILES['file1']['error'] == 0){
        //Attempt to move
        if (move_uploaded_file($_FILES['file1']['tmp_name'], $uploadfile)) {
            echo "File is valid, and was successfully uploaded.";
        }else{
            echo 'Error moving file.';
        }
    } else {
        // Has error
        $errors = array(0=>'OK',
                        1=>'UPLOAD_ERR_INI_SIZE',
                        2=>'UPLOAD_ERR_FORM_SIZE',
                        3=>'UPLOAD_ERR_PARTIAL',
                        6=>'UPLOAD_ERR_NO_TMP_DIR',
                        7=>'UPLOAD_ERR_CANT_WRITE',
                        8=>'UPLOAD_ERR_EXTENSION'
                        );
        echo "Error: ".$errors[$_FILES['file1']['error']];
    }
}

我不太确定这是否有效,还没有尝试过

<?
$uploadpath = '../images/';

if ($_FILES["file1"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file1"]["error"] . "<br />";
    }

  else
    {
echo "Upload: " . $_FILES["file1"]["name"] . "<br />";
    echo "Type: " . $_FILES["file1"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file1"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file1"]["tmp_name"] . "<br />";
    }

    if (file_exists($uploadpath . $_FILES["file1"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      $uploadpath . $_FILES["file"]["name"]);
      echo "UPLOAD SUCCESS!";
      }

?>


来源:W3school

代码在实际文件中的结构不是这样的……html和php处于正确的位置。我刚刚上传了这两个部分,这样人们就可以在不包含整个文件的情况下同时看到这两个方面。在移动上传文件()之前,
$name
解析为什么?$name解析为/var/www/site.net/aClass/images/在移动上传文件()之前…我不确定$success的回报值是多少。我尝试回显它,但没有得到任何回复(回显“$success”),这很奇怪:/我尝试了上面的方法,但发生了同样的事情…页面回显,然后没有显示任何内容来说明是否发生了错误…“非常小心允许上传”。那么,如何设计一个包含用户图片的网站?上传似乎充满了问题。图片很简单,你可以使用
getimagesize()
这样的函数检查它是否是有效的图片,拒绝cgi访问上传目录&如果是web根目录,则将其存储,并且不允许像php这样的任何文件类型的上传。使用传递脚本将文件与php接口。post_max_size和upload_max_filesize的值都在范围内,但是upload_tmp_dir被注释掉了,并且声明如果未指定值,将使用系统默认值…不确定默认值是什么,但我将其设置为=On。正如我在下面这篇文章的评论中所说的,从$文件中转储错误有问题…嗯…upload\u tmp\u dir是一个目录,将其设置为On几乎肯定不起作用,请尝试类似于
/tmp
(Linux上)或
c:\directorypcanwritein
(Windows上)的方法。该目录应该已经存在,并且应该允许运行php的用户写入该目录。同样对于$_文件,只需执行
var_转储($_文件['file1']['error'])
或者您可以只查看整个
var\u dump($\u文件)我修复了php.ini文件并确保/tmp目录具有777权限…错误仍然存在。我还做了echo'd var_dump($_文件);它以“array(0){}”的形式返回,好像它从来没有走那么远??好吧,所以在我看来,这段代码没有错……它应该可以工作,它确实可以工作,但不能在这个服务器上工作。我在一个完全不同的服务器上创建了一个例子,上面的代码与我在服务器上测试的代码完全相同,我在服务器上发现了问题,它工作得非常完美…所以问题就出在服务器的某个地方…可能在php.ini文件中,但我不确定是什么参数导致了这个问题?有什么建议吗?试着给php开发人员发邮件,或者如果他们有irc频道,请在那里询问。我有一个用于当前网站开发的代码,请告诉我上述解决方案是否有效。我将给你我的代码,它几乎与上面的代码相同,但我的代码由mysql Queries组成。好吧,我刚刚尝试了上面的代码(修复了最后一个else子句中的语法错误),问题仍然存在。每当我尝试上传回发时,代码都会执行,$\u FILES[“file1”][“error”]等于0,但没有任何信息返回(应该位于“upload:”、“Type:”等旁边的内容),文件也没有上传……这太荒谬了……有什么想法吗??,好吧,所以在我看来,这段代码并没有什么问题……它应该可以工作,它确实可以工作,但不能在这个服务器上工作。我在一个完全不同的服务器上创建了一个例子,上面的代码与我在服务器上测试的代码完全相同,我在服务器上发现了问题,它工作得非常完美…所以问题就出在服务器的某个地方…可能在php.ini文件中,但我不确定是什么参数导致了这个问题?有什么建议吗?可能是php.ini的原因,如果您使用的是xampp,您可以用my php.ini覆盖它:
<?
$uploadpath = '../images/';

if ($_FILES["file1"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file1"]["error"] . "<br />";
    }

  else
    {
echo "Upload: " . $_FILES["file1"]["name"] . "<br />";
    echo "Type: " . $_FILES["file1"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file1"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file1"]["tmp_name"] . "<br />";
    }

    if (file_exists($uploadpath . $_FILES["file1"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      $uploadpath . $_FILES["file"]["name"]);
      echo "UPLOAD SUCCESS!";
      }

?>