anik4e
anik4e

Reputation: 493

Wordpress file upload Programmatically Error

I create a static page in Wordpress. And want upload and attach image in post(id 159),. But following code is not working. I found this code in here.

My code:

if(isset($_POST['submitbutton'])) 
{
$file = $_FILES["attachment"]["name"];
$parent_post_id = 159;
$filename = basename($file);
$upload_file = wp_upload_bits($filename, null, file_get_contents($file));
if (!$upload_file['error']) {
$wp_filetype = wp_check_filetype($filename, null );
$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_parent' => $parent_post_id,
    'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
    'post_content' => '',
    'post_status' => 'inherit'
);
$attachment_id = wp_insert_attachment( $attachment, $upload_file['file'], $parent_post_id );
if (!is_wp_error($attachment_id)) {
    require_once(ABSPATH . "wp-admin" . '/includes/image.php');
    $attachment_data = wp_generate_attachment_metadata( $attachment_id, $upload_file['file'] );
    wp_update_attachment_metadata( $attachment_id,  $attachment_data );
    }
  }
}

HTML Code:

<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="attachment"/>
    <input type="submit" name="submitbutton" value="Vorschau">
</form> 

Error:

Warning: file_get_contents(Desert.jpg): failed to open stream: No such file or directory in D:\wamp\www\hossinger\wp-content\themes\hossinger\template-reports.php on line 81

Upvotes: 2

Views: 2080

Answers (2)

Mike
Mike

Reputation: 8877

Try using $_FILES["attachment"]["tmp_name"] instead of $_FILES["attachment"]["name"].

$_FILES["attachment"]["name"] doesn't exist on the server at time of execution. When you upload a file PHP places the file in the temporary directory with a (config dependant) random name, this is stored in $_FILES["attachment"]["tmp_name"] and is what you need to reference in order to move.

Upvotes: 1

Erik Terwan
Erik Terwan

Reputation: 2780

What kind of error do you get? Add error_reporting(E_ALL); to the top of the page to view all warnings and errors generated by the script.

Most of the times with a script like this the problem is the read/write rights of the folder you are trying to move the uploaded file to.

Edit: Ah i see; i think the problem is that you are trying to upload the $_FILES 'name' instead of 'tmp_name'.

change:

$upload_file = wp_upload_bits($filename, null, file_get_contents($file));

to:

$upload_file = wp_upload_bits($filename, null, file_get_contents($_FILES["attachment"]["tmp_name"]));

Upvotes: 1

Related Questions