【问题标题】:Php upload filephp上传文件
【发布时间】:2009-12-14 20:23:54
【问题描述】:

代码如下:

html

<form action="contact.php" method="post" enctype="multipart/form-data" onsubmit="return Validare();">

    <input type="text" name="nume" value="Nume" class="contact" id="Nume" onclick="if(this.value=='Nume')this.value='';" onblur="if(this.value.replace(/^\s+|\s+$/g,'')=='')this.value='Nume'" /><font color="red">*</font><br />
            <input type="text" name="email" value="Email" class="contact" id="Email" onclick="if(this.value=='Email')this.value='';" onblur="if(this.value.replace(/^\s+|\s+$/g,'')=='')this.value='Email'" /><font color="red">*</font><br />
            <input type="text" name="telefon" value="Telefon" class="contact" id="Telefon" onclick="if(this.value=='Telefon')this.value='';" onblur="if(this.value.replace(/^\s+|\s+$/g,'')=='')this.value='Telefon'" /><br />
            <textarea name="mesaj" rows="10" class="contact" id="Mesaj" onclick="if(this.value=='Mesaj')this.value='';" onblur="if(this.value.replace(/^\s+|\s+$/g,'')=='')this.value='Mesaj'">Mesaj</textarea>

<input type="file" name="file[]" />
<input type="file" name="file[]" />
<input type="file" name="file[]" />
<input type="submit" value="Trimite" />
</form>

php

for($i=0; $i<3; $i++){
if($_FILES["file"]["size"][$i] > 0){
    $rand = rand(10000, 99999);
    $name = $rand.rand(10000, 99999).$_FILES["file"]["name"][$i];
            $tmp_name = $_FILES["file"]["tmp_name"][$i];
    $target_path_big = "http://biroutraduceri.net/fisiere/".$name;
    move_uploaded_file($tmp_name, "fisiere/".$name);
}
}

javascript

<script>
function Validare(){
    if(document.getElementById("Nume").value.replace(/^\s+|\s+$/g,'') == "" || document.getElementById("Nume").value.replace(/^\s+|\s+$/g,'') == "Nume"){
        alert("Numele nu este valid!");
        return false;
    }
    if(document.getElementById("Email").value.replace(/^\s+|\s+$/g,'') == "" || document.getElementById("Email").value.replace(/^\s+|\s+$/g,'') == "Email"){
        alert("Email-ul nu este valid!");
        return false;
    }
    if(document.getElementById("Mesaj").value.replace(/^\s+|\s+$/g,'') == "" || document.getElementById("Mesaj").value.replace(/^\s+|\s+$/g,'') == "Mesaj"){
        alert("Mesajul nu este valid!");
        return false;
    }
    return true;
}
</script>

当我按下提交时,什么也没有发生。文件未上传。

我哪里错了???

【问题讨论】:

  • 你也可以发Validare() 吗?它应该返回 true 以让您的表单提交。
  • Validare() 返回真。我已经测试过了。
  • $tmp_name = $_FILES["file"]["tmp_name"][$i];这是来自 for 循环。
  • 请给我们看看Validare()的代码

标签: php file upload


【解决方案1】:

您的 PHP 代码有错误,$tmp_name 从未设置。

更正的代码

for($i=0; $i<3; $i++){
    if($_FILES["file"]["size"][$i] > 0){
        $rand = rand(10000, 99999);
        $name = $rand.rand(10000, 99999).$_FILES["file"]["name"][$i];
        $target_path_big = "http://biroutraduceri.net/fisiere/".$name;
        move_uploaded_file($_FILES["file"]["tmp_name"][$i], "fisiere/".$name);
    }
}

【讨论】:

  • 目标目录是“is_writeable”吗?连同所有必要的 unix 文件权限?例如,可以将目录更改为 0775 "rwxrwxr-x",并将组设置为 "www" 或 "apache"(或任何 PHP 进程运行的方式)。
【解决方案2】:

$tmp_name 永远不会被初始化为任何东西。

$tmp_name 应该设置为等于 $_FILES['file']['tmp_name'][$i];

【讨论】:

  • @Lucas 你指的是哪一部分?
  • 这是我删除的评论。
  • @Peter Lindqvist:是的,这是我最大的抱怨之一,即“如果在 5 分钟内完成则未标记为已编辑”。
【解决方案3】:

可能是权限问题,您的脚本是否有权写入 "fisiere/".$name 并且 "fisiere/".$name 真的在您认为的位置吗?您可能想要使用绝对路径。

编辑:您不能将图像写入 http url,您需要将其写入本地文件路径,并且您需要确保 php 有权写入该路径/目录

【讨论】:

  • 我已经尝试过“http://url/fisiere/”; . $name,但什么都没有。
【解决方案4】:

你真的不需要 onsubmit="return Validare();"它甚至写错了。 并且 move_uploaded_file($_FILES['file']['tmp_name'], $target_path)) 是正确的代码

【讨论】:

  • 您仍然需要 $_FILES['file']['tmp_name'] 末尾的索引,以便引用正确的文件。
  • 我需要这个 onsubmit="return Validare();"进行验证。
  • 这在大多数情况下是真实有效的,我同意:)
【解决方案5】:

您忘记设置变量 $tmp_name。如$tmp_name = $_FILES["file"]["tmp_name"][$i]; 否则,根据我自己的测试,它似乎没问题。

否则,在你的“for”循环之前添加一个print_r($_FILES);,在你的循环中再打印几个打印和一个is_readable($tmp_name)检查,只是为了更精细地尝试找出问题的根源。

【讨论】:

    【解决方案6】:

    我猜onsubmit="return Validare();" 正在返回错误

    你为什么要使用这个 rand 函数,试试 time() 我觉得更好

    【讨论】:

    • 不要使用 time()。他正在使用 rand() 函数来尝试获取伪随机数。如果你使用 time(),你不会得到这个,因为多个文件可以在给定的秒内上传。
    【解决方案7】:

    你想要$_FILES['file'][$i]['size']

    【讨论】:

    猜你喜欢
    • 2014-07-14
    • 2011-01-26
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多