PHP上传图片失败

时间:2014-06-02 12:10:58

标签: php image upload image-uploading

我使用PHP为FileMaker数据库创建网站。我想要做的是上传一个图像文件,以便数据库可以访问它。

这是我的代码(来自教程):

if (isset($_POST['action']) and $_POST['action'] == 'Upload') {

    # set the destination directory for the image
    $image_directory = 'http://mydomain.com/Images/My_Example/';

    # set the temp and dest file names with paths
    $temporary_file = $_FILES['new_image']['tmp_name'];
    $destination_file = $image_directory . $_FILES['new_image']['name'];

    # move file to the images directory
    $result = move_uploaded_file($temporary_file, $destination_file);

    if ($result) {

        # insert the URL into the product record
        $edit = $fm->newEditCommand('Product', $_REQUEST['recid']);
        $edit->setField('Thumbnail URL', $destination_file);
        $edit->execute();

    } else {
        $error_message = nl2br("temporary_file = ".$temporary_file."\n");    
        $error_message.= nl2br("destination_file = ".$destination_file."\n\n");    
        echo $error_message;
        die('There was an error moving the file.');
    }
}

我理解函数' move_uploaded_file()'将移动临时文件,但我无法看到实际上传到临时文件的语句。我错过了什么? (我不知道这是不是红鲱鱼!)

但是' move_uploaded_file()'失败,我收到错误消息(我添加了尝试调试它)和' die'信息。有没有办法得到错误代码,告诉我为什么它失败了?

我确信相关目录确实具有读/写访问权限。并且' mydomain.com'实际上被脚本中的真实域所取代。

感激地收到任何建议。我是PHP的新手,所以请在回答时牢记这一点!非常感谢。

干杯

4 个答案:

答案 0 :(得分:1)

您正在使用目标目录路径' http://mydomain.com/Images/My_Example/',这将无效。 为了保存文件,你需要在服务器上给它一个绝对路径 - 意味着如果DOCUMENT_ROOT文件夹是" / var / www / html /",那么你需要上传它to" / var / www / html / Images / My_Example'。 您可以使用php中的phpinfo()命令或apache.conf文件检查$ _SERVER [' DOCUMENT_ROOT']变量中的DOCUMENT_ROOT路径。 您还需要确保您的php对您要保存的文件夹具有写入权限。

答案 1 :(得分:0)

问题出在这句话中:

$image_directory = 'http://mydomain.com/Images/My_Example/';

上传文件时,无法在目标路径中提供网址。您需要使用相对路径,如:

$image_directory = './Images/My_Example/';

答案 2 :(得分:0)

首先:尝试这些错误消息

错误信息在:$ _FILES ['upfile'] ['error']

    switch ($_FILES['upfile']['error']) {
    case UPLOAD_ERR_OK:
        break;
    case UPLOAD_ERR_NO_FILE:
        throw new RuntimeException('No file sent.');
    case UPLOAD_ERR_INI_SIZE:
    case UPLOAD_ERR_FORM_SIZE:
        throw new RuntimeException('Exceeded filesize limit.');
    default:
        throw new RuntimeException('Unknown errors.');
}

其次:http://mydomain.com/Images/My_Example/不是虚假的上传路径。

答案 3 :(得分:0)

http://mydomain.com/Images/My_Example/无效,因为它是一个网址路径。您需要指定目录路径:

//$image_directory = 'http://mydomain.com/Images/My_Example/';
// change to:
$image_directory = 'path/to/Images/folder/';