|
Работа с файлами
|
| Автор |
Сообщение |
-=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); |
|
|
| Вернуться к началу |
|
 |
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); |
|
|
| Вернуться к началу |
|
 |
lazutov while (1==1);


Зарегистрирован: 30.04.2007 Сообщения: 3840
111220 
|
|
| Вернуться к началу |
|
 |
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); |
|
|
| Вернуться к началу |
|
 |
Артур 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 |
|
| Вернуться к началу |
|
 |
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: парам-пам-пам-пам! Она уже здесь! |
|
| Вернуться к началу |
|
 |
|