Загрузка изображений PHP (пользовательский плагин WordPress) - PullRequest
3 голосов
/ 09 февраля 2012

У меня есть плагин WordPress, над которым я работаю, и, кажется, у меня возникла проблема. Мне нужно, чтобы пользователь мог загрузить изображение, вместо этого я продолжаю получать эту проблему:

Каталог загрузки недоступен для записи или не существует.

Внимание: move_uploaded_file (http://markpetherbridge.co.uk/ios/wp-content/plugins/rap/includes/productimages/78.105.162.431328735863.png) [function.move-uploaded-file]: не удалось открыть поток: HTTP-оболочка не поддерживает записываемые соединения в /home/markpeth/public_html/ios/wp-content/plugins/rap/includes/products.php по линии 39


Предупреждение: move_uploaded_file () [function.move-uploaded-file]: невозможно переместить '/ tmp / phpowqMlu' в «http://markpetherbridge.co.uk/ios/wp-content/plugins/rap/includes/productimages/78.105.162.431328735863.png' в /home/markpeth/public_html/ios/wp-content/plugins/rap/includes/products.php на линии 39 Произошла ошибка при загрузке файла, пожалуйста, попробуйте еще раз! Вы успешно добавили test_title в список своих продуктов


Каталог определенно существует, и я даже изменил CHMOD на 777 для теста.

Файл products.php выглядит следующим образом:

 <?
if ('POST' == $_SERVER['REQUEST_METHOD'])
 {
global $wpdb;

$product_title = $_POST['title'];
$product_url = $_POST['url'];
$product_btn_text = $_POST['btn_text'];

// CREATE UNIQUE NAME FOR IMAGE
$remote_addr = $_SERVER['REMOTE_ADDR'];
$time = time();
$new_name = $remote_addr;
$new_name .= $time;


// IMAGE UPLOAD

$upload_dir = "http://markpetherbridge.co.uk/ios/wp-content/plugins/rap/includes/productimages/"; 

if (file_exists($upload_dir) && is_writable($upload_dir)) {
        echo "<br /> Directory exists and is fine.... <br />";
}
else {
        echo "Upload directory is not writable, or does not exist. <br />";
}

$uploadedfile = $_FILES['image_file']['name'];
$extension = explode(".", $uploadedfile);
$extensiontype = $extension['1'];

$target_path = $upload_dir;
$target_path = $target_path .$new_name .'.'.$extensiontype; 

if(move_uploaded_file($_FILES['image_file']['tmp_name'], $target_path)) {
        echo "The file ".  basename( $_FILES['image_file']['name']). 
        " has been uploaded <br />";
} else{
    echo "There was an error uploading the file, please try again! <br />";

}

$product_img = $new_name.'.'.$extensiontype;

//ADD TO DATABASE
    $wpdb->query("INSERT INTO wp_rec_amazon_product (product_title, product_url,    product_img, product_btn_text) VALUES ('$product_title', '$product_url','$product_img','$product_btn_text')");
echo "You have successfully added "  .$product_title.   " to your products list";

} else { ?>

 <form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">
<table border="0" bordercolor="none" width="50%" cellpadding="0" cellspacing="0">
    <tr>
        <td>Product Title:</td>
        <td><input type="text" name="title" value="product title" /></td>
    </tr>
    <tr>
        <td>Product Url</td>
        <td><input type="text" name="url" value="product url" /></td>
    </tr>
    <tr>
        <td>Button text</td>
        <td><input type="text" name="btn_text" value="Get your copy" /></td>
    </tr>

</table>
    <input type="file" name="image_file" />



    <input type="submit" value="Submit" />
</form>

 <?php }?>

Информация добавляется в базу данных, это просто загрузка изображения, которая, кажется, не работает.

У кого-нибудь есть идеи? Спасибо всем заранее. :)

Ответы [ 3 ]

2 голосов
/ 09 февраля 2012

Как сказал @thenetimp!

Назначением файла move_uploaded_file не может быть URL.Но вместо этого должен быть путь в локальной файловой системе.

$ upload_dir должен указывать на локальный путь, например

windows: c:/some/path
unix: /some/path
1 голос
/ 09 февраля 2012

wp_upload_dir ()

вернет локальный путь к файлу вашего каталога загрузки в WordPress.

в вашем скрипте вставьте: $ upload_dir = wp_upload_dir (); вместо статической строки у вас там.

1 голос
/ 09 февраля 2012

Ваш каталог для загрузки - это URL. Это ваша проблема.Это должен быть путь к локальной файловой системе

Кроме того, у вас есть условие if, чтобы проверить, можете ли вы записать файл, но не делайте ничего, кроме выплевывания текстового ответа.Вы должны делать свою работу там, вместо этого она будет ниже условной.Это плохо.Вы должны сделать это.

if (file_exists($upload_dir) && is_writable($upload_dir)) {
    echo "<br /> Directory exists and is fine.... <br />";
    $uploadedfile = $_FILES['image_file']['name'];
    $extension = explode(".", $uploadedfile);
    $extensiontype = $extension['1'];

    $target_path = $upload_dir;
    $target_path = $target_path .$new_name .'.'.$extensiontype; 

    if(move_uploaded_file($_FILES['image_file']['tmp_name'], $target_path)) {
            echo "The file ".  basename( $_FILES['image_file']['name']). 
            " has been uploaded <br />";
            $product_img = $new_name.'.'.$extensiontype;

            //ADD TO DATABASE
            $wpdb->query("INSERT INTO wp_rec_amazon_product (product_title, product_url,    product_img, product_btn_text) VALUES ('$product_title', '$product_url','$product_img','$product_btn_text')");
            echo "You have successfully added "  .$product_title.   " to your products list";

    } else{
        echo "There was an error uploading the file, please try again! <br />";

    }


}
else {
    echo "Upload directory is not writable, or does not exist. <br />";
}
...