php image upload from url and resize - php

i have this upload form and i want to resize image when uploaded
its upload form from url i did it from file upload but cant for url upload
can anyone help me?
<?php
if($_POST["sub"]){
$url = trim($_POST["url"]);
if($url){
$file = fopen($url,"rb");
if($file){
$directory = "../images/news/";
$valid_exts = array("jpg","jpeg","gif","png");
$ext = substr(basename($url), strrpos(basename($url), '.'));
$ext = str_replace('.','',$ext);
if(in_array($ext,$valid_exts)){
$rand = rand(0,9999999999);
$filename = $rand.'.'.$ext;
$newfile = fopen($directory . $filename, "wb");
if($newfile){
while(!feof($file)){
fwrite($newfile,fread($file,1024 * 8),1024 * 8);
}
echo ''."";
echo ''.$filename.'';
} else { echo 'Could not establish new file ('.$directory.$filename.') on local server. Be sure to CHMOD your directory to 777.'; }
} else { echo 'Invalid file type. Please try another file.'; }
} else { echo 'Could not locate the file: '.$url.''; }
} else { echo 'Invalid URL entered. Please try again.'; }
}
?>

Use GD or Image Magic library to resize image:
http://php.net/manual/en/imagick.resizeimage.php
http://php.net/manual/en/function.imagecopyresized.php

For saving the file from URL:
If you have allow_url_fopen set to true:
$url = 'http://example.com/image.php';
$img = '/my/folder/flower.gif';
file_put_contents($img, file_get_contents($url));
Else use cURL:
$ch = curl_init('http://example.com/image.php');
$fp = fopen('/my/folder/flower.gif', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
This is the same as the answer in this post...

Related

how to set default none.png image if input file empty php

I tried to apply none.PNG if input file empty and i use statement like this. I need to fix this to use it in my systems. thank you.
if(empty($image)){
$name = md5(time() . rand(0, 999)) . '.jpeg';
}else{
$name = 'none.jpeg';
}
public function saveimage()
{
if (isset($_POST['image_loc'])) {
$image = $_FILES['image_loc'];
$allowed = array('image/jpeg', 'image/jpg', 'image/png');
// print_r($image);
// die();
// check for erros
if ($image['error'] != 0) {
die('File upload error: ' . $image['error']);
}
// check if is image
if (in_array($image['type'], $allowed)) {
$name = md5(time() . rand(0, 999)) . '.jpeg';
move_uploaded_file($image['tmp_name'], ROOT . '/public/img/pics/' . $name);
echo $image['tmp_name'];
$this->insert($name);
}
}
}
After edited the code
The result show only if I upload file. i need none.PNG as well to show if not upload file. how can i do this.
public function saveimage()
{
if (isset($_POST['image_loc'])) {
$image = $_FILES['image_loc'];
$allowed = array('image/jpeg', 'image/jpg', 'image/png');
// print_r($image);
// die();
// check if is image
if (in_array($image['type'], $allowed)) {
////////////////////////// here ///////////////////////
if (empty($image)) {
$name = md5(time() . rand(0, 999)) . '.jpeg';
} else {
$name = 'none.jpeg';
}
////////////////////////// here ///////////////////////
move_uploaded_file($image['tmp_name'], ROOT . '/public/img/pics/' . $name);
echo $image['tmp_name'];
$this->insert($name);
}
}
}
If $_POST["image_loc"] is remote url, you can use function below that returns file size. So can check if it returns 0 or not. If $_POST["image_loc"] isn't remote url and it's image path in your server, you can simply use filesize($image_path) function to get image size.
function get_image_size($image_url){
$ch = curl_init($image_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
$data = curl_exec($ch);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
curl_close($ch);
return $size;
}

Save image output from php script as file

I try to have a php script output a generated image as .jpg file:
$url = 'http://www.photopost.com/photopost/showfull.php?photo=7541';
file_put_contents('image.jpg',file_get_contents($url));
$page = file_get_contents($url);
echo $page;
The echo displays a correct image in the browser.
but image.jpg is not saved.
How can I make this work ?
You need to output a Content-Type header with a proper MIME type for the browser to be able to understand what kind of file the server is sending.
header('Content-Type: image/jpeg');
Refer to http://php.net/manual/en/function.header.php and https://www.sitepoint.com/web-foundations/mime-types-complete-list/ for a list of valid MIME types.
Getting image from url using curl :-
$profile_Image = 'http://www.photopost.com/photopost/showfull.php?photo=7541'; //image url
$userImage = 'myimg.jpg'; // renaming image
$path = ''; // your saving path
$ch = curl_init($profile_Image);
$fp = fopen($path . $userImage, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
curl_close($ch);
fclose($fp);
Getting image from url using file_get_contents :-
$profile_Image = 'http://www.photopost.com/photopost/showfull.php?photo=7541'; //image url
$userImage = 'myimg.jpg'; // renaming image
$path = ''; // your saving path
$thumb_image = file_get_contents($profile_Image);
if ($http_response_header != NULL) {
$thumb_file = $path . $userImage;
file_put_contents($thumb_file, $thumb_image);
}
Change your url from
http://www.photopost.com/photopost/showfull.php?photo=7541 //html document
to
http://www.photopost.com/photopost/watermark.php?file=7541 //downloadable url
Then use code from other answers or use imagecreatefromjpeg
http://php.net/manual/en/function.imagecreatefromjpeg.php

PHP error - fileSize returns the image string

I am downloading a public image and writing it to file. But the filesize(file) returns the entire encoded string of the image
My code is as follows
<?php header('Access-Control-Allow-Origin: *'); ?>
<?php
function download_and_write($src,$filename)
{
$ch = curl_init($src);
$fp = fopen($_SERVER["DOCUMENT_ROOT"]."/dashboard/uploads/".$filename, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($ch);
fclose($fp);
$filepath = $_SERVER["DOCUMENT_ROOT"]."/dashboard/uploads/".$filename;
return filesize($filepath);
}
$src_url = $_POST['source'];
$dest_url = $_POST['destination'];
$filename = $_POST['filename'];
try{
$download = download_and_write($src_url,$filename);
echo $download;
}
catch(Exception $e) {
$mess=$e->getMessage();
echo "exception";
echo $mess;
}
?>
And echo of the download variable is like this
����T۸\u001b\u0014��Yl����\u0000�\"#?d�k�ϵ.Ⱦ)�;�+.�t��x/�M�E>}࿝7�\u0015�ݎ��b۪N+\u001e�K\u000f/�T�]�W3���\bhyx����~\tvM����3�|��:o�)��\u0005���(�N�u��6�RwV\u001d��\u001e_���f_�t��/\u0003�|��:o�)��\u0005���(�]��[��\u000fg\f���lN�0��g]~*�\u0018ۖ_0�Zk\u0002'\u0016�Ѱ�\u0012������j+>�uo�x/�M�E>}࿝7�\u0015Lj �A\u0004w��K��E_����C�����\u001a��ޗfW�4��/\u0006u_�x/�M�E>}࿝7�\u0015���]��l�VvWv�ds\bi�wU3���uqe�\u001d�M�\u0012�\u0000�{}�K��m.�XV]ώ�����>o�)��\u0005���(�T�u��\u001b+C<�tM��\u0011\u0004\u0003�=#ڬ[�b�ݕ�d�Mo�F�t�d��𨫸�\u0003�|��:o�)��\u0005���(�ck\tn�>��\u0014�m��\u0000������ޣO��^x�����/F1� ����f��].;��\u001f\u001d�W����tߔS��\u000b��~Q\\����䓲$n\r{�Ѥ�\u0003�S\"�\\\u0016��j\t�2̍c\u001f$d\u000e�u��ݒ?\u0017ҥ�+��?>�_Λ��|��:o�+�d1���:z�6\u000er�J�\u0010���\u0014^�N�K��Ȼ��]9���R���ƕ\u0017g\u0015���}࿟7�\u0014����|ߔW'����tN�f��\u0004�0�3d\u000e��e��͙�RC�2\u001b6]\\=ёɣ��=�\u001e�n����eO���:\u0017ϼ\u0017�����>�_Λ����1��5��^h�y<�{\u000bC����C\u000b�\fq��\r/�#Op�ܗf\u001f�4��4�\u000e���\u0005���(�ϼ\u0017�����DX��O�ERw��\u001f��\u0012yOq�(�E$\u0012�)���aӚ��\u000f�.��Ɣ��W�:�\u0000ϼ\u0017�����>�_Λ��㨗fvޑ�x~N���\u0005���(�ϼ\u0017������%��zG%��;\u0017ϼ\u0017�����>�_Λ��㨗cm�\u001c����_>�_Λ��|��:o�+��]���r^\u001f��|��:o�)��\u0005���(�:�v6ޑ�x~N���\u0005���(�ϼ\u0017������%��zG%��;\u0017ϼ\u0017�����>�_Λ��㨗cm�\u001c����_>�_Λ��|��:o�+��]���r^\u001f��|��:o�*#��`;�i�\u0000(�*�vU��!p^\u001f���!`�?�\u0014\\T\"��v���x~C��^*�;=\n�G��>-�\u0011{�|\nr�\u0002���/yO�NS�PX�\u0017����)�(,x��S�S��\u0014\u0016<E�)�)�|\n\u000b\u001e\"���\u0014�>\u0005\u0005�\u0011{�|\nr�\u0002�Lj��>\u00059O�PX�h��\n���:�/����,���7G��֔,��a��X��\u001c_(��5�ӹ9G)>�-o��')�*�ǥI��y����n���de��kQ�\u0004V$�ɹ�(`��� ;����L�Cnk��r\t-?\u001f\u0014\u0006g�\u0006K#\u001c\t󏳦�:Zg)�NS����ۻ������7\u001brA\u00060�\u0016`���\u0018�c�\u0005���G�H�C���E���%���\t�\u0007\u0003�k��Ѣ\u0016��|\u0013�� 폧͙N\u0018��e��_��i�'��7�\u001d\u001f�g�����c!��\u001d\u0015AJ��w+y�A���<�V���>>�oY���h\u0017�;��7�}�3����l���}(b�����W�˕����Y��>&�۰>�#����s61#4Ɨ{�\u001bX̜\r��\u0015���y,\u000bo{�\u0014����\u0001�,\u0007)�NS��ZN(���m���q���P��,�Nh��$�D�z9��=�Yl���\\��n=��#����\u001f �\u0004\u0010�N���KH�>\u00059O�\u0016:\\�\\m��X�6�\u00172���\u0013�X�'g\b���/F�z9U�{`�#��ymVA\u00151\u0013��\u0001���\u001c�������T�5G��4\f��'lo�p�V9O�\u001d\u001e��x{�����m�\\�8btv\u0018׷\n��\u000f�\u000f�==��{\u000fn)p���*>z�y��-�\u0012�\u0017l?�\u001c�_E�r�\u0004�>\bb:d�����e��\u001b<T٦�����s���\u001b׽��\u0003ڶ\u001c��f\u0016hɧ\u0014��/\f�ٙ�h'n$�o�h����)�P�=%�Ia���mV�\u0006{�R%��\u001c�wd\u000b�\u001d�F�~�\u0005�F�g�ې\u000e\u001eYv6S���g�?x\fZ�)�*]��/\bD���������\u0003��zO���SjW��o�o��}̖\u0005ݶ##J\u000b\u0011׹+�{\\�;0��{o7�\n�fH�R�\u0016rM�'mT>f�5�����|V��|\u0013��!��\u000e1Q�w\u001e�\u001fs}�����\rl�5#\u0007d�\u0000,3K0\u000fi�#z\u001d=\u001a���.�l�\u0010��Z��Q����\u001f��>\u001e��r�\u0004�>\bt���Zѷ��m��\u0013��:v8|��h�{w0�}���h���z<�L��\u0013Dq5��p���=\u001a��j<���)�P�KrVq�g#����ʈ���KU͊g�2K?#~���v�\u0019,F��sb'F�?b\u001ad\u001b�\u0004m�w���S����SR�\\�����\u0000f�<�\u0019;�Gd v2Z�k!\u0012��lЏ��h�\u0000��K!��\r�֫GM�x��F����Z�)�NS�P��%{����;�w\u001b�\u0019��\u0013\u0007��]�G]ы\u0010�1�\u0018��\u0018�\u0000����kM����\u0004�\r\u0011�\ta\u000e\u0007����Z�>\n��G��qqk\u0006�<\u0006��:���I�����n\u0018����Y����z�ls��y\u000b]�K��O0=�4|���\"�߂���J���\u0011�gl?�]:-W��')�C�kv������r39+u����`�j�-y�~�\u0004l�ۣ�[\u0013�,Q�\u001d�\u0017��ZV��6��H�\u001av[��\u000e�+Ea{\u001e׳msN�\u001e��w�w��$SvMl�\u0019Lq5����Gz��KIQ�)��o�5��6|���\u001eF�\rǚ�b-k���{��\u001d��\u0011��������g�fI\u0019�\u001b:<\u0012�4h�;��r�\u0002���S5��U4��\u0000[�6�ݎ(gt6\u001a�\u000e\u001e(�k��s7m��k\u0013���Ⱏ�\u0012J�\u001e���#�:\u0007�X~S�������L��m���\u0000F㉵\u0013)a�}�����~g?�R;|�#�\u000fj����Î�%v\u0019�\u0019\u0006N9%�DQ��$�\u001e�=�P�>\t�|\u0010��$��s]ﻇ�}\rң+�a���j��߂nH�\u000f%��<�=���,��M��^\ta��r26J$�\u001c��?`\u0000��S����\u0007k�%\u001d۳~ٱ�x���\u0013g��\u0017�c�\u000e~�绨��ܬp����V���6�-.�Q���F����\u0004�>\u0005C�h�56�yݷ��}��\u0012�\u001ddJ�)�<2Z��Ń��z��][\u0011:�\t\u0005�Du�ҾNi#�\\G)פw�Z/)�)�|\u0015:�6W�^�����u�\u001d?\u000ed�<�IM����잎�\u001f�y���x~�6O\u0004v\f��\u0004�\u0006\u0002�\u001c\u000e���X>S�S��(qU�$䯕��Sz���U�\u00043R�\u000b��i�ILb^V����\u0011�V�İE&FyjX�c�6\u00199�\u000f-q\u001a�k��\u0002���\u0004�>\n���ҝX�q����x��S�S��\u0014<�<E�)�)�|\n\u000b\u001e\"���\u0014�>\u0005\u0005�\u0011{�|\nr�\u0002�Lj��>\u00059O�Ac�^��\u0002������/yO�NS�PX�\u0017����)�(,x��S�W�>\u0007࠱�E�\u0007��ȱ��
Why would this occur ? The file didn't download.
EDIT:
I'm not checking the size of a remote file. I'm checking the size of the file on my own server. So this can't be related to the possible duplicate you mentioned.
I think fopen is getting an error, so you're not redirecting the curl output to the file. Add error checking.
error_reporting(E_ALL);
$fp = fopen($_SERVER["DOCUMENT_ROOT"]."/dashboard/uploads/".$filename, 'wb');
if (!$fp) {
throw new Exception("Unable to open download file");
}

How to validate mime type ( is PDF for instance ) of both a file and a variable string?

I have a bunch of PDFs that were downloaded using a scraper. This scraper didn't check to see if the file was a JPG or a PDF so by default all of them were downloaded and saved with the '.pdf' extension. So, just to clarify all the files in the batch are .pdf. However, if I try to open them(The files that are not PDF but rather JPGs) via a server or locally I'm hit with an error.
My question. Is there a way with PHP to check and see if this file is a valid PDF? I would like to run all the URLs through a loop to check these files. There are hundreds of them and it would take hours upon hours to check.
Thanks
For local files (PHP 5.3+):
$finfo = finfo_open(FILEINFO_MIME_TYPE);
foreach (glob("path/to/files") as $filename) {
if(finfo_file($finfo, $filename) === 'application/pdf') {
echo "'{$filename}' is a PDF" . PHP_EOL;
} else {
echo "'{$filename}' is not a PDF" . PHP_EOL;
}
}
finfo_close($finfo);
For remote files:
$ch = curl_init();
$url = 'http://path.to/your.pdf';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$results = split("\n", trim(curl_exec($ch)));
foreach($results as $line) {
if (strtok($line, ':') == 'Content-Type') {
$parts = explode(":", $line);
echo trim($parts[1]); // output: application/pdf
}
}
Get MIME type of the file using function: finfo_file()
if (function_exists('finfo_open')) {
$finfo = finfo_open(FILEINFO_MIME);
$mimetype = finfo_file($finfo, "PATH-TO-YOUR-FILE");
finfo_close($finfo);
echo $mimetype;
}
echo "<pre>";
print_r($mimetype);
echo "</pre>";
Use finfo_file() function
<?php
if (function_exists('finfo_open')) {
$mime = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($mime, "FILE-PATH");
if($mime_type == "application/pdf")
echo "file is pdf";
else
echo "file is not pdf";
finfo_close($mime);
}
Sometimes you gotta check a mime signature of a file and sometimes of a variable. These are how you do both checkings:
$filename = '/path/to/my/file.pdf';
$content = file_get_contents($filename);
$file_is_pdf = function(string $filename) : bool {
return mime_content_type($filename) === 'application/pdf';
};
$var_is_pdf = function(string $content) : bool {
$mime_type_found = (new \finfo(FILEINFO_MIME))->buffer($content);
return $mime_type_found === 'application/pdf; charset=binary';
};
// Checks if a file contains a pdf signature.
var_dump($file_is_pdf($filename));
// Checks if a variable contains a pdf signature.
var_dump($var_is_pdf($content));

How can I save a file url submitted in a form with curl?

I am trying to create an upload plugin that allows for a user to upload any file from their computer or from a url they type into the provided text field.
This is the script I have to upload files from a local disk:
session_start();
//Loop through each file
for($i=0; $i<count($_FILES['file']); $i++) {
//Get the temp file path
if (isset($_FILES['file']['tmp_name'][$i]))
{
$tmpFilePath = $_FILES['file']['tmp_name'][$i];
}
//Make sure we have a filepath
if ($tmpFilePath != ""){
//Setup our new file path
if (isset($_FILES['file']['name'][$i]))
$newFilePath = "./uploaded_files/" . $_FILES['file']['name'][$i];
}
//Upload the file into the temp dir
if(move_uploaded_file($tmpFilePath, $newFilePath)) {
echo "Uploaded Successfully!<br />";
}
All I need now is for the curl part to take the file from the url submitted in the text field and save it to the same location.
Here is the cURL I have so far:
function GetImageFromUrl($link) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch,CURLOPT_URL,$link);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
return $result;
}
$sourcecode=GetImageFromUrl("http://domain.com/path/image.jpg");
$savefile = fopen('/home/path/image.jpg', 'w');
fwrite($savefile, $sourcecode);
fclose($savefile);
Is there a specific reason you want to use curl? Here's how you can simply do that without it:
$url = $_POST['url'];
$file_content = file_get_contents($url);
$file_name = array_pop(explode('/', parse_url($url, PHP_URL_PATH)));
file_put_contents('/home/path/' . $file_name, $file_content);
You should also consider looking into $url and checking if it's valid before working with it.

Categories