Цитата:
Всякое бывает, к примеру: 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, время: 19:02. |