[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: [help] Сохранине картинки в php
Snake96
Есть строчка в коде:
file_put_contents( 'data/'.md5($url).'.jpg', $dataimg ); // сохраняем в файл


Нужно что бы при сохранении картинки файл переименовывался в "h123123_1.jpg", "h123123_2.jpg" и т.п.

Для этого есть фарма ввода в html. в которой мы вписываем "123123".
"h" является постоянной, а "_1", "_2" подномер картики к даному "123123".

Пробовал:
file_put_contents( 'data/'.$num.'.jpg', $dataimg ); // сохраняем в файл

В таком случае сохраняет с пустым названием и заменяет файлы друг другом.



Спустя 47 минут, 22 секунды (4.12.2011 - 13:18) killer8080 написал(а):
Цитата (Snake96 @ 4.12.2011 - 11:30)
Нужно что бы при сохранении картинки файл переименовывался в "h123123_1.jpg", "h123123_2.jpg" и т.п.

Зачем переименовывать файл? Не проще сразу сохранять его под нужным именем?

Спустя 14 минут, 23 секунды (4.12.2011 - 13:32) Snake96 написал(а):
Поподробнее можно?

Спустя 6 минут, 34 секунды (4.12.2011 - 13:39) killer8080 написал(а):
Snake96
покажи скрипт как делаешь загрузку, а то я вообще не понял, причем тут file_put_contents smile.gif

Спустя 49 секунд (4.12.2011 - 13:39) Guest написал(а):
<div id="counter"></div><!--progressbar-->
<?
//устанавливаем переменные...
$name = $_POST['name'];
$num = $_POST['num'];
$maxPages = (int)$_POST['max'];

set_time_limit(0); // это для того чтобы скрипт не отвалился через 30 секунд, если вддруг попадется медленный сайт донор
require_once 'simple_html_dom.php';
function getBigImage($url){
$data = @file_get_contents($url);
if(trim($data)=='')return false; // бывает что сайт недоступен, его фото мы не грузим
$data = str_get_html($data);
// находим фото
if( count($data->find('#i-main-pic')) ){
$dataimg = @file_get_contents($data->find('#i-main-pic',0)->src); // собачка нужна в если сервер нам вернул 404, это выозвет Warning:, поэтому экранируем ошибки
if(trim($dataimg)=='')return false; // фото не доступно, его не грузим
file_put_contents( 'data/'.md5($url).'.jpg', $dataimg ); // сохрпаняем в файл
}
$data->clear();// подчищаем за собой
unset($data);
}
function getYandexImages($url,$findpages = true){
global $i,$n;
// загружаем данный URL
$data = @file_get_contents($url);
$data = str_get_html($data);
// очищаем страницу от лишних данных, это не обязательно, но когда HTML сильно захламлен бывает удобно почистить его, для дальнейшего анализа
foreach($data->find('script,link,comment') as $tmp)$tmp->outertext = '';
// находим URL страниц только для первого вызова функции
if( $findpages and count($data->find('div.b-pager__pages a'))){
foreach($data->find('div.b-pager__pages a') as $a){
// довольно распространенный случай - локальный URL. Поэтому иногда url надо дополнять до полного
if( !preg_match('#^http://#',$a->href) )$a->href = 'http://images.yandex.ru'.$a->href;
// и еще дна тонкость, & надо заменять на &
$a->href = str_replace('&','&',$a->href);
// вызываем функцию для каждой страницы
getYandexImages($a->href,false);
}
}

// находим все изображения на странице, а точнее ссылки на них
if(count($data->find('div.b-image a img'))){
foreach($data->find('div.b-image a') as $a){
if( !preg_match('#^http://#',$a->href) )$a->href = 'http://images.yandex.ru'.$a->href;
$a->href = str_replace('&','&',$a->href);
getBigImage($a->href);
if($i++>=$n)exit; // завершаем работу если скачали достаточно фотографий
// этакий progressbar, будет показывать сколько фотографий уже загружено

echo '<script>document.getElementById("counter").innerHTML = "Downloads: '.$i.' of '.$n.' foto";</script>';
flush();
}
}

$data->clear();// подчищаем за собой
unset($data);
}
// поисковый URL
$i = 1;
$n = $maxPages; // будем грабить количество картинок
$url = 'http://images.yandex.ru/yandsearch?text='.urlencode($name).'&rpt=image';
getYandexImages($url);
?>

Спустя 12 минут, 31 секунда (4.12.2011 - 13:52) killer8080 написал(а):
Цитата (Snake96 @ 4.12.2011 - 11:30)
Пробовал:
file_put_contents( 'data/'.$num.'.jpg', $dataimg ); // сохраняем в файл

$num находится в глобальной области видимости. Нужно было в начале функции getBigImage объявить её глобальной.
function getBigImage($url){
global $num;
$data = @file_get_contents($url);



А вообще можно было сразу работать с POST и не плодить одноразовые переменные
file_put_contents( 'data/'.(int)$_POST['num'].'.jpg', $dataimg );

Спустя 4 минуты, 14 секунд (4.12.2011 - 13:56) Snake96 написал(а):
уже пошло дело)
со строчкой -
file_put_contents( 'data/'.$num.'.jpg', $dataimg ); // сохрпаняем в файл


сохраняет файлы в "123123.jpg"
а как сделать что бы сохранял с постоянной "h" перед номером и с подномерами "_1" после?

Спустя 14 минут, 50 секунд (4.12.2011 - 14:11) Snake96 написал(а):
Так же разобрался с постоянной "h".
file_put_contents( 'data/h'.$num.'_1.jpg', $dataimg );

а как сделать переменные "_1", "_2" и т.п. для нескольких картинок ?

Спустя 24 секунды (4.12.2011 - 14:11) killer8080 написал(а):
заменяем
file_put_contents( 'data/'.$num.'.jpg', $dataimg );
на
file_put_contents( get_file_name(), $dataimg );
и объявлем функци get_file_name()
function get_file_name(){
$name_tpl = 'data/h'.(int)$_POST['num'].'_%s.jpg';
$i = 1;
while(file_exists(sprintf($name_tpl, $i)))
++
$i;
return sprintf($name_tpl, $i);
}

Спустя 6 минут, 26 секунд (4.12.2011 - 14:18) Snake96 написал(а):
все получилось. спасибо)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.