HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 26.05.2010, 23:24
FindeR
Участник форума
Регистрация: 15.11.2006
Сообщений: 259
Провел на форуме:
2589211

Репутация: 151
По умолчанию

На одном из сайтов много картинок с русскими буквами в именах.
На домашнем серваке замечательно всё работает
Картинки вида site.ru/картинка.jpg нормально открываются и отображаются.
Залил на хост - там косяк. На картинка.jpg ругается 404-й. На urlencode('картинка.jpg') тоже 404 (и на rawurlencode('картинка.jpg').

Нормально отображается только в виде - %d0%e5%ec%e5%ed%fc%20.jpg

Как привести все названия к такому виду?
Или как заставить сервак нормально отображать их в первозданном виде?
Либы, вроде, одинаковые везде включены. Версии iconv различаются, но хз, может быть из-за этого или нет...
 
Ответить с цитированием

  #2  
Старый 26.05.2010, 23:28
m0Hze
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме:
6462214

Репутация: 3171


По умолчанию

Цитата:
Сообщение от FindeR  
На одном из сайтов много картинок с русскими буквами в именах.
На домашнем серваке замечательно всё работает
Картинки вида site.ru/картинка.jpg нормально открываются и отображаются.
Залил на хост - там косяк. На картинка.jpg ругается 404-й. На urlencode('картинка.jpg') тоже 404 (и на rawurlencode('картинка.jpg').

Нормально отображается только в виде - %d0%e5%ec%e5%ed%fc%20.jpg

Как привести все названия к такому виду?
Или как заставить сервак нормально отображать их в первозданном виде?
Либы, вроде, одинаковые везде включены. Версии iconv различаются, но хз, может быть из-за этого или нет...
Пройтись в цикле по папке, и переименовать все картинки в транслитерационный вариант.
 
Ответить с цитированием

  #3  
Старый 26.05.2010, 23:41
FindeR
Участник форума
Регистрация: 15.11.2006
Сообщений: 259
Провел на форуме:
2589211

Репутация: 151
По умолчанию

m0Hze, не как переименовать все, а как привести строку, например, "ремень.jpg" к виду "%d0%e5%ec%e5%ed%fc.jpg". Может, есть функция подобная urlencode...

Да и толку переименовывать, если файлы ещё добавляться будут.
 
Ответить с цитированием

  #4  
Старый 27.05.2010, 00:06
roxblnfk
Познающий
Регистрация: 07.02.2010
Сообщений: 70
Провел на форуме:
217996

Репутация: 56
Arrow

%d0%e5%ec%e5%ed%fc%20.jpg - 'Ремень .jpg'
Убрал бы пробел перед .jpg и хватило бы urlencode (т.к. urlencode вместо пробела ставит +)
Есть вариант менять через str_replace плюсы на пробелы
str_replace('+','%20',urlencode($url))
Либо по циклу берёшь ord() от каждого символа, переводишь в HEX, ставишь перед каждым хексом % (перед однобайтовым хексом 0 не забудь).. можно, конечно, ещё наложить фильтр на латину (точки и т.д.) и всё в strtolower() и тогда будет полное соответствие

upd: насчёт rawurlencode('картинка.jpg') -- проверь правильность ввода имени файла в строке, мало ли там где пробел или похожая буква из другого языка (т.е. имя файла копи-паст)

Последний раз редактировалось roxblnfk; 27.05.2010 в 00:14..
 
Ответить с цитированием

  #5  
Старый 27.05.2010, 00:31
FindeR
Участник форума
Регистрация: 15.11.2006
Сообщений: 259
Провел на форуме:
2589211

Репутация: 151
По умолчанию

roxblnfk, спасибо тебе! Сразу понял, в чём затык был.

Прокатил вариант - str_replace('%2F', '/', rawurlencode($url))
При urlencode тоже ещё пришлось менять '%2F' на '/'
 
Ответить с цитированием

  #6  
Старый 27.05.2010, 16:44
w_2k
Новичок
Регистрация: 23.07.2008
Сообщений: 28
Провел на форуме:
104504

Репутация: 1
По умолчанию

Доброго времени суток! Народ, помогите со скриптом. Всего-то надо просто залить файл в папку с правами 777, писал свой скрипт, качал готовые, ниче не работает. Вот пример:
Форма:
Код:
<html>
<head>
<title>Обработка переданного файла</title>
</head>
<body>
<form action=upload.php method="POST" enctype=multipart/form-data>
Выберите файл:<br>
<input type="file" name=File><br>
<br>
<input type=submit name=doUpload value="загрузить"><br>
</form>
</body>
</html>
Обработчик
Код:
<?php 
$ImgDir="."; 
print $_POST['File']; 
print $_FILE['File'];
  if ($_POST['doUpload'])  
    { 
	print "asda";
     if (file_exists($File))  
       { 
		print "123";
       Copy($File, "$ImgDir/".basename($File_name)); 
       } 
    } 
?>
Переменная $File почему-то пустая...Можешь поможет кто?
 
Ответить с цитированием

  #7  
Старый 27.05.2010, 17:03
m0Hze
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме:
6462214

Репутация: 3171


По умолчанию

Цитата:
Сообщение от w_2k  
Доброго времени суток! Народ, помогите со скриптом. Всего-то надо просто залить файл в папку с правами 777, писал свой скрипт, качал готовые, ниче не работает. Вот пример:
Форма:
Код:
<html>
<head>
<title>Обработка переданного файла</title>
</head>
<body>
<form action=upload.php method="POST" enctype=multipart/form-data>
Выберите файл:<br>
<input type="file" name=File><br>
<br>
<input type=submit name=doUpload value="загрузить"><br>
</form>
</body>
</html>
Обработчик
Код:
<?php 
$ImgDir="."; 
print $_POST['File']; 
print $_FILE['File'];
  if ($_POST['doUpload'])  
    { 
	print "asda";
     if (file_exists($File))  
       { 
		print "123";
       Copy($File, "$ImgDir/".basename($File_name)); 
       } 
    } 
?>
Переменная $File почему-то пустая...Можешь поможет кто?
1) А почему собственно переменная $File должна быть определена? И даже больше, почему в ней должен лежать путь к файлу? оО
2) Какой на*** copy();? )
3) http://www.php.ru/manual/features.file-upload.html
http://php.net/manual/en/reserved.variables.files.php
http://ru.php.net/manual/en/function.move-uploaded-file.php
 
Ответить с цитированием

  #8  
Старый 27.05.2010, 17:10
w_2k
Новичок
Регистрация: 23.07.2008
Сообщений: 28
Провел на форуме:
104504

Репутация: 1
По умолчанию

Благодарю)
 
Ответить с цитированием

  #9  
Старый 28.05.2010, 01:30
FindeR
Участник форума
Регистрация: 15.11.2006
Сообщений: 259
Провел на форуме:
2589211

Репутация: 151
По умолчанию

Помогите разобраться.
Была проблема с загрузкой постом файлов на сервак.
Накидал вот такой скрипт для теста (кинул в папку с правами 777).

PHP код:
<?php
if (empty($_FILES["img_file"]["name"])) {
?>
<form action="index.php" method="POST" enctype="multipart/form-data">
img: <input type="file" name="img_file" />
<input type="submit" value="Загрузить" />
</form>
<?php
}
else {

$imageinfo getimagesize($_FILES['img_file']['tmp_name']);
 if(
$imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg' && $imageinfo['mime'] != 'image/png'
{
echo 
'<span style="font-size:13px;">Ошибка загрузки изображения.</span>';
}

else
{
move_uploaded_file($_FILES["img_file"]["tmp_name"], $_FILES["img_file"]["name"]);

echo 
'<img src="'.$_FILES["img_file"]["name"].'" />';
}
}
?>
На денвере всё замечательно. Загружаются jpg,gif,png.

А вот при заливке на хостинг начинаются проблемы.

1) При попытке загрузки jpg/jpeg вываливает "Ошибка загрузки изображения". Причём, $_FILES['img_file']['tmp_name'] не пуст! А вот getimagesize от него уже не берётся - пусто. Правда, догадываюсь, что это связано со вторым вопросом

2) При загрузке оставшихся png и gif он их загружает, отрабатывается move_uploaded_file (файл появляется в папке), но вот потом нифига не отображается. В мозиллке отображается иконка повреждённого файла, в IE крестик...Если слить с сервера файл - не открывается уже. Откуда берётся эта "обработка" файла?
 
Ответить с цитированием

  #10  
Старый 29.05.2010, 09:28
SHiNiGaMi
Познающий
Регистрация: 03.01.2010
Сообщений: 42
Провел на форуме:
162143

Репутация: 3
По умолчанию

У меня такое же было. Может быть потому что на хостинге *nix а символы переноса строки в винде и *nix разные.(\r\n и \n) При переходе из одной системы в другую они интерпретируются, а т.к. Картинка передается как бинарник, то содержимое файла меняется и он повреждается.

Последний раз редактировалось SHiNiGaMi; 29.05.2010 в 09:30..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c/c++] Новичкам: задаем вопросы _Great_ С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 5421 21.04.2026 07:37
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.