Det är väl snarare att ladda “över” när det inte ska upp från mig…
Alternativet allow_url_fopen tillåter programmeraren att öppna och inkludera filer som finns på en annan server än den som det aktuella scriptet körs ifrån med t.ex. funktionen fopen(). Då detta kan innebära en säkerhetsrisk har vi valt att av-aktivera funktionen.
Loopia
Ja, alltså det är jättefint och säkert. Men jag då som är så himla noobig? Hur ska jag kunna göra då, jag som inte kan cURL?
Jag fick koden för länge sedan av en snäll individ och skulle bara lägga in den, men gjorde jag det? Nej då… *skämskudde* Jag tappade bort den istället. *skäms lite till*
Så nu har jag googlat och hittade kod på den här trevliga sidan.
Det var ju bara det där om att fopen inte var på… så jag googlade lite till. Här hittade vi lite kodsnuttar.
Bara att kasta ihop! Så nu har jag en fil som ser ut som nedan. Lång kod, jag vet… och jag bara tror att det funkar. Det som skulle kunna strula är att oavsett vad man tankar upp vill jag spara en png, och jag är inte säker på att jag konverterat rätt.
Ska testa lite mera. Jag har kastat in det på Storybook.se, så du kan testa hej vilt du med! 🙂
Här kommer all kod för alla er som blir alldeles till er av nyfikenhet (det är inte bara mitt fel att det är grymt dåligt kommenterat, det var så när jag kom! ;)):
class.get.image.php
<?php
/*
-------------------------------------------------------------------------
Credits: Bit Repository
URL: http://www.bitrepository.com/download-image.html
-------------------------------------------------------------------------
*/
class GetImage {
var $source;
var $save_to; //mapp att spara i
var $dest_name; //namn på filen efter undansparad
var $set_extension;
var $quality;
function download($method = ‘curl’) // default method: cURL
{
# the request
$ch = curl_init($this->source);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
$mime = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
//$mime = $info[‘mime’];
if(!$mime) exit(“Could not obtain mime-type information (“.$mime.”). Make sure that the remote file is actually a valid image. (“.$this->source.”)”);
// What sort of image?
$type = substr(strrchr($mime, ‘/’), 1);
switch ($type)
{
case ‘jpeg’:
$image_create_func = ‘ImageCreateFromJPEG’;
$image_save_func = ‘ImageJPEG’;
$new_image_ext = ‘jpg’;
// Best Quality: 100
$quality = isSet($this->quality) ? $this->quality : 100;
break;
case ‘png’:
$image_create_func = ‘ImageCreateFromPNG’;
$image_save_func = ‘ImagePNG’;
$new_image_ext = ‘png’;
// Compression Level: from 0 (no compression) to 9
$quality = isSet($this->quality) ? $this->quality : 0;
break;
case ‘bmp’:
$image_create_func = ‘ImageCreateFromBMP’;
$image_save_func = ‘ImageBMP’;
$new_image_ext = ‘bmp’;
break;
case ‘gif’:
$image_create_func = ‘ImageCreateFromGIF’;
$image_save_func = ‘ImageGIF’;
$new_image_ext = ‘gif’;
break;
case ‘vnd.wap.wbmp’:
$image_create_func = ‘ImageCreateFromWBMP’;
$image_save_func = ‘ImageWBMP’;
$new_image_ext = ‘bmp’;
break;
case ‘xbm’:
$image_create_func = ‘ImageCreateFromXBM’;
$image_save_func = ‘ImageXBM’;
$new_image_ext = ‘xbm’;
break;
default:
$image_create_func = ‘ImageCreateFromJPEG’;
$image_save_func = ‘ImageJPEG’;
$new_image_ext = ‘jpg’;
}
if(isSet($this->dest_name))
{
$new_name = $this->dest_name;
}
else if(isSet($this->set_extension))
{
$ext = strrchr($this->source, “.”);
$strlen = strlen($ext);
$new_name = basename(substr($this->source, 0, -$strlen)).’.’.$new_image_ext;
}
else
{
$new_name = basename($this->source);
}
$save_to = $this->save_to.$new_name;
if($method == ‘curl’)
{
$save_image = $this->LoadImageCURL($save_to);
}
elseif($method == ‘gd’)
{
$img = $image_create_func($this->source);
if(isSet($quality))
{
$save_image = $image_save_func($img, $save_to, $quality);
}
else
{
$save_image = $image_save_func($img, $save_to);
}
}
return $save_image;
}
function LoadImageCURL($save_to)
{
$ch = curl_init($this->source);
$fp = fopen($save_to, “wb”);
// set URL and other appropriate options
$options = array(CURLOPT_FILE => $fp,
CURLOPT_HEADER => 0,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_TIMEOUT => 60); // 1 minute timeout (should be enough)
curl_setopt_array($ch, $options);
$save = curl_exec($ch);
curl_close($ch);
fclose($fp);
return $save;
}
}
?>
demo.php
include_once ‘class.get.image.php’;
<?php
// initialize the class
$image = new GetImage;
// just an image URL
$image->source = ‘http://static.vidde.org/viddeblogg/media/2011/08/20110727_viddedroemmer-480×287.jpg’;
$image->save_to = ‘images/’; // with trailing slash at the end
$image->dest_name = ‘bilden.png’; //filnamnet
$get = $image->download(‘curl’); // using GD
if($get)
{
echo ‘The image has been saved.’;
}
?>
Blogg: Ladda "upp" bilder från URL med fopen avstängt http://bit.ly/oZNCoG #cURL #fopen #php #URL
Tjena!
Jag har kvar koden om du behöver den igen(om det var mig du syftade på), men annars kan jag vara snäll 🙂
Kan kolla på det du skrev i koden imorgon och se om jag kan se något smart annars. Hoppas det går bra för dig annars 🙂
/grunkan
Ptja, detta funkar ju, men jag vet typ inte riktigt vad jag har gjort här. Jag var galet trött igår och satt och blev förvånad när det funkade! 🙂
Kollar gärna igen på din kod när jag är pigg så jag kan se om jag hittar någon smartare lösning där än jag gjort.
[…] and my superior code gets it for you and puts it on the site. Ok, so it isn’t my code. I googled. Please create an account and click the “+1″-buttons under feedback so I know what I […]
Här var det kod igen, och då brukar jag komma fram 😀
Det finns sina platser där CURL inte finns, och då fungerar inte det där heller. Många webhotell tillåter varken url_fopen eller curl. url_fopen är vanligtvis avstängt tillochmed. curl brukar kunna finnas. Men inte alltid. Så om man är riktigt envis så kan man vilja titta på http://php.net/manual/en/book.sockets.php.
Over and out 🙂
Oj, kan det vara så också! Ska försöka komma ihåg att det finns en kommentar här om det ifall jag skulle råka hamna i den båten någon gång…