|
|
|
| Такая не понятная для меня вещь тварится. Храню текстовые данные в обычных 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
|
Что за такая фигня не пойму. На локалке и своем хостинге все отлично. | |
|
|
|
|
|
|
|
для: Лёлик
(11.05.2006 в 18:42)
| | 1. Вы снимаете майку через ноги, если так можно выразиться :) Файлы, расположенные на том же сервере, что и скритпы, читать при помощи file_get_contents() не принято. Эта функция служит в основном для получения содержания удалённых файлов (с других ресурсов). Почитайте раздел по работе с файлами учебника, расположенного на этом сайте. А про кодировку - скорее виноват даже не скрипт, а кодировка выводимой страницы. Попробуйте тупо сменить кодировку в браузере :)
2. При обращении к файлам, входящим в состав системы, советую использовать относительные пути. | |
|
|
|
|
|
|
|
для: DDK
(11.05.2006 в 19:02)
| | >> А про кодировку - скорее виноват даже не скрипт, а кодировка выводимой страницы.
>> Попробуйте тупо сменить кодировку в браузере :)
я то сменю, а что делать с посетителями?
>>Файлы, расположенные на том же сервере, что и скритпы, читать при помощи file_get_contents() не принято
и почему так? | |
|
|
|
|
|
|
|
для: Лёлик
(11.05.2006 в 19:12)
| | Как бы объяснить... Если читать файл через fopen() или file(), то обращение к нему происходит на самом сервере, а если через file_get_contents(), то через обращение сервера к самому себе. Т.е. это ест гораздо больше ресурсов. Аналогия: можно позвать сестру криком через квартиру, а можно выйти из квартиры и зайти к сестре в комнату через заднюю дверь... простите за алегорию :))
UPD.:
А по поводу кодировки - пишите в HTML-коде страниц принудительное установление нужной кодировки при помощи META-тегов (=> яндекс). Это вообще считается хорошим тоном у верстальщиков :) | |
|
|
|
|
|
|
|
для: DDK
(11.05.2006 в 19:42)
| | Из мануала (4-й абзац) :
Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком, поскольку для улучшения производительности функция использует алгоритм 'memory mapping' (если поддерживается операционной системой).
|
как-то это слабо согласуется с гипотезой о задней двери.... | |
|
|
|
|
|
|
|
для: Trianon
(11.05.2006 в 19:57)
| | Смысл был в том, что во втором варианте нужно выйти из дома (т.е. с сервера), обойти его кругом и зайти обратно :-D Да, с ассоциациями у меня худо ;-) На самом деле есть одна хорошая аналогия на этот случай, но модератор трёт её каждый раз, когда я её пишу: Это сравнимо с удалением гланд через задницу :)) | |
|
|
|
|
|
|
|
для: DDK
(11.05.2006 в 20:00)
| | Касательно модератора, что ж... кесарю кесарево.
А по сути вопроса?
Мануал утверждает, что локальные файлы (когда их содержимое нужно целиком) следует брать by file_get_contents. А не через медленную цепь fopen-fread. | |
|
|
|
|
|
|
|
для: Trianon
(11.05.2006 в 20:06)
| | А целиком оно редко нужно, засим многие привыкли пользоваться той самой цепью fopen :) Хотя признаю, кое в чём оказался неправ. | |
|
|
|
|
|
|
|
для: Лёлик
(11.05.2006 в 18:42)
| | удивидельный хостинг, ужас какой-то. отсылою постом сообщение через форму и в коде проверяю его существование
<?
if(isset($_POST['question'])){}
else{}
?>
|
так всегда else отрабатывает.
Что за муть. | |
|
|
|
|
|
|
|
для: Лёлик
(11.05.2006 в 19:07)
| | Попробуйте обратиться через массив-зеркало $HTTP_POST_VARS | |
|
|
|
|
|
|
|
для: DDK
(11.05.2006 в 19:49)
| | таже картина
а mod_rewrite никак не может на это влиять? | |
|
|
|