使用ajax和php的图像上传失败(没有错误日志)

时间:2014-01-03 22:55:51

标签: javascript php jquery ajax

以下用于上传图片的代码由于某种原因失败了...... 这是 HTML

<form id="image_upload" enctype="multipart/form-data" action="uploadImage.php" method="post" name="prof_picture">
    <input id="image1" style="display:none;" name="image" accept="image/jpeg" type="file">
    <input id="image2" value="Submit" type="submit" style="display:none;">
</form>

PHP (uploadImage.php)

include('../sqlconnection.php');
define ("MAX_SIZE","1000");

function getExtension($str)
{
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}

$valid_formats = array("jpg", "png", "gif", "bmp","jpeg");
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") 
{
    $uploaddir = "profile/uploads"; //Image upload directory

    $filename = stripslashes($_FILES['image']['name'][0]);

    echo $filename;

    $size=filesize($_FILES['image']['tmp_name'][0]);

    echo $filename;
    //Convert extension into a lower case format
    $ext = getExtension($filename);
    $ext = strtolower($ext);
    //File extension check
    if(in_array($ext,$valid_formats))
    {
    //File size check
    if ($size < (MAX_SIZE*1024))
    { 
    $image_name=time().$filename; 
    echo "<img src='".$uploaddir.$image_name."' class='imgList'>"; 
    $newname=$uploaddir.$image_name; 
    //Moving file to uploads folder
    if (move_uploaded_file($_FILES['image']['tmp_name'][0], $newname)) 
    { 
    $time=time(); 
    //Insert upload image files names into user_uploads table
    mysql_query("UPDATE table SET image='$image_name' WHERE id='$user_id'");
    }
    else 
    { 
    echo '<span class="imgList">failed</span>'; } 
    }

    else 
    { 
    echo '<span class="imgList">failed</span>'; 
    } 

    } 

    else 
    { 
    echo '<span class="imgList">failed</span>'; 
    } 

} 

JS

$('#image1').on('change', function() {
        $("#image").attr('src',"profile/loading.gif");

        $("#image_upload").ajaxForm({
                        target: '#image'
        }).submit();
});

我所知道的肯定

正在正确实现php脚本,因为我故意破坏了部分代码并获得了有关内部php错误的错误消息。

查询正确完成(或至少通过语法完成)。

与#image相关的javascript函数也在运行。

我只想上传一个用户选择的图像(即使他选择了100个其他项目)。但正如我所说的,我甚至没有在日志中收到错误消息......有关此问题的任何想法吗?非常感谢你!


修改

我已经改变了一些代码

$ext = strtolower($ext);
    if(in_array($ext,$valid_formats)){
        if ($size < (MAX_SIZE*1024)){ 
            $image_name=time().$user_id."--pfi-".$filename;
            $newname=$uploaddir.$image_name;
                if (move_uploaded_file($_FILES['image']['tmp_name'], $newname)){
                    mysql_query("UPDATE table SET image='$image_name' WHERE id='$user_id'");
                }else echo '<span class="imgList">This message appears </span>'; 
        }else echo '<span class="imgList">You have exceeded the size limit!</span>';
    }else echo '<span class="imgList">Unknown extension!</span>';

出于某种原因,它现在停在if(move_uploaded_file($_FILES['image']['tmp_name'], $newname))。我已经var_dump'ed这确实是“假”但我无法理解为什么。这是var_dump($ _ FILES):

array(1) { ["image"]=> array(5) { ["name"]=> string(21) "060424_hubble_big.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(14) "/tmp/phpZYaDkm" ["error"]=> int(0) ["size"]=> int(35641) } }

编辑2

  

警告:   move_uploaded_file(配置文件/上传/ 1388794617.png):   无法打开流:没有这样的文件或目录   第37行的profile / uploadProfilePicture.php   警告:move_uploaded_file():无法将'/ tmp / phppFfoL4'移动到   'profile / uploads / 1388794617.png'中   第37行的profile / uploadProfilePicture.php

我应该如何指定$ uploaddir甚至$ newname?

1 个答案:

答案 0 :(得分:1)

修改

这就是我用的。注意注释掉的条件语句。

<?php

// include('../sqlconnection.php');
 define ("MAX_SIZE","1000000000");


function getExtension($str)
{
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}

$valid_formats = array("jpg", "png", "gif", "bmp","jpeg");
// if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") 
// {
    $uploaddir = "profile/uploads/"; //Image upload directory

    $filename = stripslashes($_FILES['image']['name']);

    echo $filename;

    $size=filesize($_FILES['image']['tmp_name']);

    echo $filename;
    //Convert extension into a lower case format
    $ext = getExtension($filename);
    $ext = strtolower($ext);
    //File extension check
    if(in_array($ext,$valid_formats))
    {
    //File size check
    if ($size < (MAX_SIZE*1024))
    { 
    $image_name=time().$filename; 
    echo "<img src='".$uploaddir.$image_name."' class='imgList'>"; 
    $newname=$uploaddir.$image_name; 
    //Moving file to uploads folder
    if (move_uploaded_file($_FILES['image']['tmp_name'], $newname)) 
    { 
    $time=time(); 
    //Insert upload image files names into user_uploads table
//    mysql_query("UPDATE table SET image='$image_name' WHERE id='$user_id'");
    }
    else 
    { 
    echo '<span class="imgList">failed</span>'; } 
    }

    else 
    { 
    echo '<span class="imgList">failed</span>'; 
    } 

    } 

    else 
    { 
    echo '<span class="imgList">failed</span>'; 
    } 

// }

原始答案

好的,我发现了问题。删除PHP中的所有[0],它现在可以正常工作。它们用于数组,因为你只是将它用于单个文件上传,这就是它失败的原因。

旁注:您可能希望在/末尾添加$uploaddir = "profile/uploads";,如$uploaddir = "profile/uploads/";

以下没有[0],并且已将其测试为纯PHP而没有JS。

include('../sqlconnection.php');
define ("MAX_SIZE","1000");

function getExtension($str)
{
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}

$valid_formats = array("jpg", "png", "gif", "bmp","jpeg");
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") 
{
    $uploaddir = "profile/uploads"; //Image upload directory

    $filename = stripslashes($_FILES['image']['name']);

    echo $filename;

    $size=filesize($_FILES['image']['tmp_name']);

    echo $filename;
    //Convert extension into a lower case format
    $ext = getExtension($filename);
    $ext = strtolower($ext);
    //File extension check
    if(in_array($ext,$valid_formats))
    {
    //File size check
    if ($size < (MAX_SIZE*1024))
    { 
    $image_name=time().$filename; 
    echo "<img src='".$uploaddir.$image_name."' class='imgList'>"; 
    $newname=$uploaddir.$image_name; 
    //Moving file to uploads folder
    if (move_uploaded_file($_FILES['image']['tmp_name'], $newname)) 
    { 
    $time=time(); 
    //Insert upload image files names into user_uploads table
    mysql_query("UPDATE table SET image='$image_name' WHERE id='$user_id'");
    }
    else 
    { 
    echo '<span class="imgList">failed</span>'; } 
    }

    else 
    { 
    echo '<span class="imgList">failed</span>'; 
    } 

    } 

    else 
    { 
    echo '<span class="imgList">failed</span>'; 
    } 

}