Цитата:
Всякое бывает, к примеру: 2 пользователя зашли в админку единовременно, первый пошел фоточки товару заливать, второй в это время его (товар) по какой-то причине удалил. |
Nexus,
главное, забывают о том, что загружать могут и левое. ) |
laimas, при разработке доверять вообще ничему нельзя, тем более внешним данным )
|
Цитата:
|
Вчера победил загрузку и файлы начались сохраняться ко мне на сервак.
Но сделал немного по другому, не как вы мне предлагали.. И все же, чтобы подвести итог нашей дискуссии, заккомментировал пока мой рабочий код, поскольку уважаю ваши советы и хочу попробовать сделать с вашим кодом. НО поскольку для меня это темный лес, и все функции для меня новые. Итак, вот что я вставил в обработчик:
if (!empty($_POST['file_url'])){
$mime = array('image/png', 'image/jpeg'); //переделал строку с вашим кодом, а то он ругался на кв ковычки
$size = 1000000; //макс. размер.
function processingIMG($f) {
if(!$im = @imagecreatefromstring($f)) return 1; //файл не является изображением
//далее операции
//сохранение
return 0;
}
if($url = array_diff(filter_var_array($_POST['file_url'], FILTER_VALIDATE_URL), [false])) {
foreach($url as $a) {
$hdr = get_headers($a, 1);
if(strpos($hdr[0], '200')) {
if(in_array($hdr['Content-Type'], $mime) && $hdr['Content-Length'] <= $size) $upl[] = $a;
}
}
foreach($upl as $url) {
if($f = @file_get_contents($url)) {
if(processingIMG($f)) echo 'Error';
}
}
}
}
Вот что приходит в ответ: Выдает ошибку. <!--error--><br /> <b>Parse error</b>: syntax error, unexpected '[' in <b>adm\include\upload_photo\ajax_upload.php</b> on line <b>97</b><br /> <script language=JavaScript src='/denwer/errors/phperror_js.php'></script> 97 строка это: if($url = array_diff(filter_var_array($_POST['file_url'], FILTER_VALIDATE_URL), [false])) Эти функции для меня новые и без совета мне не обойтись |
kupidon, "[false]" замените на "array(false)".
У вас, вероятно, версия php меньше 5.4 поэтому при объявлении массива через квадратные скобки сыпятся ошибки. Upd. У вас $_POST['file_url'] - массив? |
Да, у меня денвер. Тестирую на компе.
<!--error--><br /> <b>Warning</b>: filter_var_array() expects parameter 1 to be array, string given in <b>Z:\home\19sp.ru\www\forum\mysp\adm\include\uplo ad_photo\ajax_upload.php</b> on line <b>156</b><br /> <script language=JavaScript src='/denwer/errors/phperror_js.php'></script><!--error--><br /> <b>Warning</b>: array_diff() [<a href='function.array-diff'>function.array-diff</a>]: Argument #1 is not an array in <b>Z:\home\19sp.ru\www\forum\mysp\adm\include\uplo ad_photo\ajax_upload.php</b> on line <b>156</b><br /> <script language=JavaScript src='/denwer/errors/phperror_js.php'></script> В этой же строке: if($url = array_diff(filter_var_array($_POST['file_url'], FILTER_VALIDATE_URL), array(false))) |
Цитата:
|
kupidon, вы если английский не знаете, то переведите текст ошибки с помощью какого-нибудь переводчика, это значительно упростит дебаг.
Текст ошибки - не какое-либо заклинание, а вполне ясное описание возникшей ошибки. Функция "filter_var_array" принимает в ка-че первого аргумента массив, вы передали строку, отсюда и ошибка. Оберните $_POST['file_url'] в массив, либо воспользуйтесь функцией "filter_var". Цитата:
|
Спасибо Вам. Обернул в массив, заработало.
Файл на стороннем сервере я проанализировал. Если условия удовлетворены (размеры и тип), теперь сохраняю его в СВОЮ временную папку, для обработки. У меня есть два варианта сохранения: 1. С помощью fopen и fwrite
if (file_get_contents($_POST['file_url']))
{
$content = file_get_contents($_POST['file_url']);
$f = fopen( "../../../photos/temp/temp.jpg", "w" );
if (fwrite( $f, $content ) === FALSE)
{
echo "Не могу произвести запись в файл.";
exit;
}
else {
$filesize = filesize_get($file);
echo " Файл <font color='red'>" .$file ."</font> записан.".$filesize;
fclose( $f );
}
}
else echo "Не могу качать файл.";
2.
$file = 'https://www.google.ru/images/srpr/logo11w.png';
$file_name = basename('https://www.google.ru/images/srpr/logo11w.png');
file_put_contents('my_folder'.$file_name, file_get_contents($file));
какой мне выбрать? |
| Часовой пояс GMT +3, время: 23:26. |