EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

Работа с файлами
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
Работа с файлами
Автор Сообщение
-=Virtus pro=-
Два пингвина
Два пингвина


Зарегистрирован: 18.02.2008
Сообщения: 427
Откуда: Россия, г Омск
4217 Монеты

СообщениеДобавлено: Вт, 23 Июн, 2009 16:06    Заголовок сообщения: Работа с файлами Ответить с цитатой

Здравствуйте.
Есть вот такой код

Код:
$tmp = array(
'cs:192.168.1.1:27015',
'cs:192.168.1.2:27018',
);


Вообщем надо сделать что бы в массив данные записывались из файла servers.txt , который лежит в корне сайта.
То есть данные выше приведенной переменной с массивом остались те же, но брались из файла и с каждой новой строчки 1 строчка типа "cs:192.168.1.1:27015"

.
Побывал много способов с fopen , но пока безрезультатно
_________________
www.amxserv.net - Все для вашего CS сервера

Код:
if(isset($beer)) drink($beer);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Вт, 23 Июн, 2009 17:39    Заголовок сообщения: Ответить с цитатой

крутите документацию по file_get_contents и explode.
Изучите способы работы с массивом, а частности обращение к неопределенному элементу.
Если вам дать готовый вариант, вы никогда не научитесь.
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ph0en1x
Интернет на завтрак
Интернет на завтрак


Зарегистрирован: 28.11.2007
Сообщения: 41

1 Монеты

СообщениеДобавлено: Ср, 24 Июн, 2009 02:54    Заголовок сообщения: Ответить с цитатой

Вероятно достаточно использовать file(), она читает содержимое файла и помещает его в массив где каждый следующий элемент новая строка файла:

Код:
Array (
[0] => cs:192.168.1.1:27015
[1] => cs:192.168.1.2:27018
)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
-=Virtus pro=-
Два пингвина
Два пингвина


Зарегистрирован: 18.02.2008
Сообщения: 427
Откуда: Россия, г Омск
4217 Монеты

СообщениеДобавлено: Ср, 24 Июн, 2009 10:21    Заголовок сообщения: Ответить с цитатой

Сделал вот так, но кроме слов array не выводит ничего. echo и if я вставил просто для выявление ошибок.

Код:
<?php

$server_list = file ('servers.txt');
if (!$server_list)
{ echo "ошибка выполнения server_list";}
$servers = explode (",",$server_list);
if (!$servers)
{ echo "ошибка выполнения servers ";}
echo $servers[0];
echo $servers[1];
echo $server_list


?>


вот содержимое файла servers.txt на всякий случай
Код:
cs:192.168.1.1:27015,
cs:192.168.1.1:27015,

_________________
www.amxserv.net - Все для вашего CS сервера

Код:
if(isset($beer)) drink($beer);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Ср, 24 Июн, 2009 12:10    Заголовок сообщения: Ответить с цитатой

use file_get_contents instead of file
And use "\n" as the first arg. of explode
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ph0en1x
Интернет на завтрак
Интернет на завтрак


Зарегистрирован: 28.11.2007
Сообщения: 41

1 Монеты

СообщениеДобавлено: Ср, 24 Июн, 2009 12:54    Заголовок сообщения: Ответить с цитатой

-=Virtus pro=-
Код:
<?php
$server_list = file('servers.txt');
if (!$server_list)
{ echo "ошибка выполнения server_list";}

echo $server_list[1];
echo $server_list[2];
?>


ну или

Код:
<?php
$server_list = file_get_contents('servers.txt');
if (!$server_list)
{ echo "ошибка выполнения server_list";}
$servers = explode ("\n",$server_list);
if (!$servers)
{ echo "ошибка выполнения servers ";}

print_r($servers);
?>


И убери запятые в конце адресов они лишние.
лучше так:
Код:
cs:192.168.1.1:27015
cs:192.168.1.1:27015


file() выдаёт файл построчно каждая строка новый элемент масива.
file_get_contents() вытягивает файл в строку.
explode() делит строку на элементы масива.

Почитай php.net там про функции расписано очень хорошо + нормальные примеры.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
-=Virtus pro=-
Два пингвина
Два пингвина


Зарегистрирован: 18.02.2008
Сообщения: 427
Откуда: Россия, г Омск
4217 Монеты

СообщениеДобавлено: Чт, 25 Июн, 2009 03:54    Заголовок сообщения: Ответить с цитатой

Спасибо большое, как сам не догадался...
_________________
www.amxserv.net - Все для вашего CS сервера

Код:
if(isset($beer)) drink($beer);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Артур
11 1110 1000
11 1110 1000


Зарегистрирован: 22.01.2008
Сообщения: 1159
Откуда: Lietuva
7191 Монеты

СообщениеДобавлено: Чт, 25 Июн, 2009 05:40    Заголовок сообщения: Ответить с цитатой

Можно получить с file_get_content
Потом эти данные прогонять через сериализацию http://lt2.php.net/serialize

И вы получиете свой масив в первозданном виде.
А данные лажить прогнамыми через функцию serialize
Потом можно и с форычам
_________________
Скрипты [PHP/JS] на заказ, в ЛС, недорого.

SAPE
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
veniamin



Зарегистрирован: 12.07.2009
Сообщения: 21
Откуда: форум eomy
0 Монеты

СообщениеДобавлено: Пн, 13 Июл, 2009 20:38    Заголовок сообщения: Ответить с цитатой

Есть нормальное решение. Используйте сериализованные массивы, записанные в файл.
Вот смотрите:
создайте функции записи и чтения:
Код:

function datawrite($array, $file) {
$fp = fopen($file, "w");
flock($fp, LOCK_EX);
fwrite($fp, serialize($array));
flock($fp, LOCK_UN);
fclose($fp);
}

function dataget($file) {
include($file);
$res = unserialize($array);
return $res;
}

Далее, можете добавлять и удалять любые строки, и главное - файл всё это хранит без лишних заморочек.
Например, к вам пришла строка "cs:192.168.1.1:27015" и её нужно сохранить в массиве. Общий скрипт будет выглядеть так:
Код:

<?php
function datawrite($array, $file) {
$fp = fopen($file, "w");
flock($fp, LOCK_EX);
fwrite($fp, serialize($array));
flock($fp, LOCK_UN);
fclose($fp);
}

function dataget($file) {
include($file);
$res = unserialize($array);
return $res;
}

//Считываем файл и десериализуем обратно в масив уже имеющиеся данные
$mass = dataget("file.txt");
//Затем добавляем строку (здесь показана конкретная строка, а не переменная):
$mass['cs:192.168.1.1:27015'] = true;
//и переписываем файл:
datawrite($mass, "file.txt");
?>

В дальнейшем вы можете удалять что-то из него с помощью unset(); или выводить данные, добавлять ещё строки.
А можете вобще сделать этот массив многомерным (сделать подмассивы) , и прходить по нему с помощью foreach() и т.д. и т.п.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Вт, 14 Июл, 2009 05:28    Заголовок сообщения: Ответить с цитатой

Сдается мне, что нассчет вашей СMS оказался прав.
Это работать будет, но как-то через пень-колоду
Код:
<?php
function datawrite($array, $file) {
$fp = fopen($file, "w");
flock($fp, LOCK_EX);
fwrite($fp, serialize($array));
// а если подредактировать, мне бинарные данные править?
flock($fp, LOCK_UN);
fclose($fp);
// общее замечание. А вдруг файл недоступен для записи? Тогда куча ошибок вывалится в браузер
}

function dataget($file) {
include($file);
// вот это ужас. честно. а вдруг там шел?
//Даже на сайте php написано это ох как опасно.
$res = unserialize($array);
return $res;
}


$mass = dataget("file.txt");
$mass['cs:192.168.1.1:27015'] = true;
//на скомпилированном php с флагом  strict это выдаст fatalError
// на винде будет работать
// лучше
// $mass[] = 'cs:192.168.1.1:27015';
datawrite($mass, "file.txt");
?>
Код:

_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
veniamin



Зарегистрирован: 12.07.2009
Сообщения: 21
Откуда: форум eomy
0 Монеты

СообщениеДобавлено: Вт, 14 Июл, 2009 08:58    Заголовок сообщения: Ответить с цитатой

В моей CMS не эта схема, а схема с "ключ"="значение", у меня всё работает везде, поверьте. И единственное, на что может жаловаться PHP, это, например обращение к неоткрытому массиву. Лишнего не выдумывайте.
И ещё: на счёт "а вдруг там шел" - эта функция вызывается в CMS со строго заданными значениями файлов, а если где-то и берётся имя файла из переменной, то используется escapeshellcmd() или регулярные выражения (хотя кто-то говорит, что они замедляют работу скриптов)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Gosudar
Два пингвина
Два пингвина


Зарегистрирован: 08.04.2007
Сообщения: 431

8014 Монеты

СообщениеДобавлено: Пт, 18 Сен, 2009 19:32    Заголовок сообщения: Ответить с цитатой

не стал тему новую заводить, но столкнулся с неприятной багой:

Код:
// устанавливаем время создания конечного
// файла такое же, как у исходного.
touch($dstfile, filemtime($srcfile));


в общем время, у конечного и исходного файла, различается на час. Чую дело в настройках денвера, может кто знает где это поправить.
_________________
R3-born
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
[LP]LordPro.teus
Призрак Лорда
Призрак Лорда


Зарегистрирован: 26.07.2007
Сообщения: 5092

42282 Монеты

СообщениеДобавлено: Пт, 18 Сен, 2009 19:50    Заголовок сообщения: Ответить с цитатой

Gosudar
DST.
_________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Gosudar
Два пингвина
Два пингвина


Зарегистрирован: 08.04.2007
Сообщения: 431

8014 Монеты

СообщениеДобавлено: Сб, 19 Сен, 2009 13:38    Заголовок сообщения: Ответить с цитатой

Ок. ну дык я догадался. Грёбаный виндоус, прекрасно работающий скрипт можно сказать потерял часть функционала из-за этой фигни.
И что теперь писать скрипт по новой, учитывающий эту фичу? Раздражает, однако.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
[LP]LordPro.teus
Призрак Лорда
Призрак Лорда


Зарегистрирован: 26.07.2007
Сообщения: 5092

42282 Монеты

СообщениеДобавлено: Сб, 19 Сен, 2009 13:51    Заголовок сообщения: Ответить с цитатой

В итоге скрипт будет работать под *nix? Тогда плюнули и растерли. Нет?.. Ну, тогда придется повозиться... Win под PHP совсем не годится...
_________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
На страницу 1, 2  След.
Страница 1 из 2

 


EOMY TOP 100 Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group


Рейтинг SIMPLETOP.NET