Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Чертовщина с file_get_contents() и кодировками
 
 автор: Лёлик   (11.05.2006 в 18:42)   письмо автору
 
 

Такая не понятная для меня вещь тварится. Храню текстовые данные в обычных txt-ках и читаю их при помощи file_get_contents(). На локалке все работает отлично, на своем схостинге тестировал тоже без проблем, выгрузил на хозяйский сервер и началось. Весь текст, который читается вот в таком виде
file_get_contents("http://$host/some.txt")
выводится как абра-кадабра, типа зЕОЕТБМШОБС ХВПТЛБ.
А вот кодка читаю в таком виде:

<?
$dir 
opendir('news') or die('Не открыть каталог с файлами.');
$fileArray = array();
while(
false !== ($f readdir($dir))){
    if(
preg_match('/[0-9]+\.txt/i'$f)) $fileArray[] = $f;
    }
closedir($dir);
for(
$i=0$i 3$i++){
    if(isset(
$fileArray[$i])){
        
$fileText file_get_contents("news/$fileArray[$i]");

.........
.........
?>

то текст выводится в нормальной кодировке.
Что такое понять не как не могу. На этом сервере кодировка win-1251, версия ПХП 4.4.1

И еще какая-то чертовщина. В состав адреса файла в первом случае входит переменная $host. Она содержит имя хоста (site.ru) и записывается в самом начале скрипта index.php. Так вот, в некоторых случаях, точнее разделах сайта, которые инклудятся в index.php, эта переменная становится пустой и выдается вот такая ошибка

Warning: file_get_contents(http:///serv/serv_list.txt): failed to open stream: Unknown error: 0 in /home/marafetru/www/marafet/pricelist.php on line 18

Warning: file_get_contents(http:///serv//price.txt): failed to open stream: Invalid argument in /home/marafetru/www/marafet/serv/price_create_func.php on line 4

Что за такая фигня не пойму. На локалке и своем хостинге все отлично.

   
 
 автор: DDK   (11.05.2006 в 19:02)   письмо автору
 
   для: Лёлик   (11.05.2006 в 18:42)
 

1. Вы снимаете майку через ноги, если так можно выразиться :) Файлы, расположенные на том же сервере, что и скритпы, читать при помощи file_get_contents() не принято. Эта функция служит в основном для получения содержания удалённых файлов (с других ресурсов). Почитайте раздел по работе с файлами учебника, расположенного на этом сайте. А про кодировку - скорее виноват даже не скрипт, а кодировка выводимой страницы. Попробуйте тупо сменить кодировку в браузере :)

2. При обращении к файлам, входящим в состав системы, советую использовать относительные пути.

   
 
 автор: Лёлик   (11.05.2006 в 19:12)   письмо автору
 
   для: DDK   (11.05.2006 в 19:02)
 

>> А про кодировку - скорее виноват даже не скрипт, а кодировка выводимой страницы.
>> Попробуйте тупо сменить кодировку в браузере :)

я то сменю, а что делать с посетителями?

>>Файлы, расположенные на том же сервере, что и скритпы, читать при помощи file_get_contents() не принято

и почему так?

   
 
 автор: DDK   (11.05.2006 в 19:42)   письмо автору
 
   для: Лёлик   (11.05.2006 в 19:12)
 

Как бы объяснить... Если читать файл через fopen() или file(), то обращение к нему происходит на самом сервере, а если через file_get_contents(), то через обращение сервера к самому себе. Т.е. это ест гораздо больше ресурсов. Аналогия: можно позвать сестру криком через квартиру, а можно выйти из квартиры и зайти к сестре в комнату через заднюю дверь... простите за алегорию :))

UPD.:
А по поводу кодировки - пишите в HTML-коде страниц принудительное установление нужной кодировки при помощи META-тегов (=> яндекс). Это вообще считается хорошим тоном у верстальщиков :)

   
 
 автор: Trianon   (11.05.2006 в 19:57)   письмо автору
 
   для: DDK   (11.05.2006 в 19:42)
 

Из мануала (4-й абзац) :

Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком, поскольку для улучшения производительности функция использует алгоритм 'memory mapping' (если поддерживается операционной системой). 


как-то это слабо согласуется с гипотезой о задней двери....

   
 
 автор: DDK   (11.05.2006 в 20:00)   письмо автору
 
   для: Trianon   (11.05.2006 в 19:57)
 

Смысл был в том, что во втором варианте нужно выйти из дома (т.е. с сервера), обойти его кругом и зайти обратно :-D Да, с ассоциациями у меня худо ;-) На самом деле есть одна хорошая аналогия на этот случай, но модератор трёт её каждый раз, когда я её пишу: Это сравнимо с удалением гланд через задницу :))

   
 
 автор: Trianon   (11.05.2006 в 20:06)   письмо автору
 
   для: DDK   (11.05.2006 в 20:00)
 

Касательно модератора, что ж... кесарю кесарево.
А по сути вопроса?
Мануал утверждает, что локальные файлы (когда их содержимое нужно целиком) следует брать by file_get_contents. А не через медленную цепь fopen-fread.

   
 
 автор: DDK   (11.05.2006 в 20:23)   письмо автору
 
   для: Trianon   (11.05.2006 в 20:06)
 

А целиком оно редко нужно, засим многие привыкли пользоваться той самой цепью fopen :) Хотя признаю, кое в чём оказался неправ.

   
 
 автор: Лёлик   (11.05.2006 в 19:07)   письмо автору
 
   для: Лёлик   (11.05.2006 в 18:42)
 

удивидельный хостинг, ужас какой-то. отсылою постом сообщение через форму и в коде проверяю его существование

<?
if(isset($_POST['question'])){}
else{}
?>

так всегда else отрабатывает.
Что за муть.

   
 
 автор: DDK   (11.05.2006 в 19:49)   письмо автору
 
   для: Лёлик   (11.05.2006 в 19:07)
 

Попробуйте обратиться через массив-зеркало $HTTP_POST_VARS

   
 
 автор: Лёлик   (11.05.2006 в 22:12)   письмо автору
 
   для: DDK   (11.05.2006 в 19:49)
 

таже картина
а mod_rewrite никак не может на это влиять?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования