Reputation: 493
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
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
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