Используя следующие методы извлечения файлов на PHP, я продолжаю нажимать на изображение с защитой от нежелательной ссылки, а не на изображение, которое я ищу. Странно, когда я вручную вводил url в Firefox / IE или даже Internet Download Manager, я получаю правильный файл, поэтому должно быть что-то не так с методами, которые я пробовал до сих пор.
file_put_contents:
file_put_contents($localpath, file_get_contents($remoteURL));
Следующая функция также не работала:
function save_image($inPath,$outPath) { //Download images from remote server $in= fopen($inPath, "rb"); $out= fopen($outPath, "wb"); while ($chunk = fread($in,8192)) { fwrite($out, $chunk, 8192); } fclose($in); fclose($out); } save_image($remoteURL,$localpath);
И fopen ()
$tag = fopen($remoteURL, 'rb'); if($tag){ while(!feof($tag)) { $imgt = $imgt . fread($tag, 1024); } }
и imagecreatefromjpeg () не сделали трюк либо
function LoadJpeg($imgname) { /* Attempt to open */ $im = @imagecreatefromjpeg($imgname); /* See if it failed */ if(!$im) { /* Create a black image */ $im = imagecreatetruecolor(150, 30); $bgc = imagecolorallocate($im, 255, 255, 255); $tc = imagecolorallocate($im, 0, 0, 0); imagefilledrectangle($im, 0, 0, 150, 30, $bgc); /* Output an error message */ imagestring($im, 1, 5, 5, 'Error loading ' . $imgname, $tc); } return $im; }
Есть ли у меня другие варианты?
Если это не ваш веб-сайт, то вы почти ничего не можете с этим поделать. Сайт создан для того, чтобы люди перестали копировать свои изображения или использовали их в своих ссылках.
Однако вы МОЖЕТЕ иметь возможность использовать оператор curl, а не file_get_contents, и если это не сработает, отправьте некоторые заголовки браузеров с запросом с помощью curl.
Если это ваш сайт, если вы работаете в cPanel, в части безопасности есть опция. Я точно знаю, где именно.
Поскольку вы написали, что allow_url_fopen
и функция не работает, вы можете попробовать завиток.
function save_image($inPath,$outPath){ $ch = curl_init ($inPath); curl_setopt($ch, CURLOPT_HEADER, 0); // required curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); // required for images curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // maybe redirect on other side? curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3'); // or user agent checks? $rawdata=curl_exec($ch); curl_close ($ch); if(file_exists($outPath)){ @unlink($outPath); } $fp = fopen($outPath,'x'); fwrite($fp, $rawdata); fclose($fp); }
Вероятно, есть некоторые проверки на их стороне, они, вероятно, получают пользовательский агент, референт. Попробуйте использовать это для подделки поведения браузера