3

I have a WordPress plug in that I am working on and I seem to have hit a problem. I need the user to be able to upload an image, instead I keep getting this problem:

Upload directory is not writable, or does not exist.

Warning: move_uploaded_file(http://markpetherbridge.co.uk/ios/wp-content/plugins/rap/includes/productimages/78.105.162.431328735863.png) [function.move-uploaded-file]: failed to open stream: HTTP wrapper does not support writeable connections in /home/markpeth/public_html/ios/wp-content/plugins/rap/includes/products.php on line 39


Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpowqMlu' to 'http://markpetherbridge.co.uk/ios/wp-content/plugins/rap/includes/productimages/78.105.162.431328735863.png' in /home/markpeth/public_html/ios/wp-content/plugins/rap/includes/products.php on line 39 There was an error uploading the file, please try again! You have successfully added test_title to your products list


The directory definitely exists and I even changed the CHMOD to 777 for a test.

The products.php file looks like this:

 <?
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 }?>

The information gets added to the databse, its just the image upload that does not seem to be working.

Has anyone got any ideas? thank you all in advance. :)

3 Answers 3

2

Like @thenetimp said!

The destination of move_uploaded_file cannot be a URL. But instead has to be a path on the local file system.

$upload_dir has to point to a local path like

windows: c:/some/path
unix: /some/path
Sign up to request clarification or add additional context in comments.

1 Comment

Sorry yeh, I used this: /home/markpeth/public_html/ios/wp-content/plugins/rap/includes/ and it worked
1

wp_upload_dir()

will return the local file path of your upload directory in WordPress.

in your script, put : $upload_dir = wp_upload_dir(); instead of the static string you have there.

Comments

1

Your upload dir is URL That is your problem. It needs to be a local filesystem path

Also, you have an if conditional to check if you can write the file, but do nothing but spit out a text response. You should be doing your work in there, instead it's below the if conditional. That's bad. YOu should do this.

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 />";
}

1 Comment

markpetherbridge.co.uk/ios/wp-content/plugins/rap/includes/… is NOT a local path. It is a URL that can be visited in the browser. You need the file system path /home/username/public_html/uploads would be a possible example. @user914330 has pointed out you can use wp_upload() to get the directory path for the wordpress uploads directory.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.