[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как проверить наличие каталога и файлов
Кошки рулят
Мне нужно создавать и записывать текстовые файлы в заданную директорию

masedj.php
<?php

$chtodo = $_GET['action'];

if ($chtodo == "otpravka")
{
$papka = $_GET['papka'];
$namefaila = $_GET['namefaila'];
$mesedj = $_GET['mesedj'];

$flag = mkdir ("./test/".$papka , 0700);
if($flag)
{
echo("Каталог успешно создан");
opendir ("./test/".$papka);

$file = fopen ($namefaila,"r+");

if ( !$file )
{
echo("Ошибка открытия файла");
}
else
{
fputs ( $file, $mesedj);
fclose ($file);
}

}

else
{
echo("Ошибка создания каталога");
}
}

?>


Как проверить перед
$flag = mkdir ("./test/".$papka , 0700);
существует ли уже такая папка?
И можно ли так "./".$papka задавать имя папки? В каком каталоге она будут создана? В том же, что и сам файл php?
Правильно писать "./test/".$papka , если я хочу создать папку в папке test, которая находится в той же директории, что и сам файл php?





Спустя 9 минут, 32 секунды (16.11.2010 - 02:05) inpost написал(а):
is_dir(); - проверка на папку, если её не существует, или не является папкой - вернёт false.
Если первым способом, то создана в папке, в которой находится скрипт.

Спустя 47 минут, 44 секунды (16.11.2010 - 02:53) Кошки рулят написал(а):

<?php

$chtodo = $_GET['action'];

if ($chtodo == "otpravka")
{
$papka = $_GET['papka'];
$namefaila = $_GET['namefaila'];
$mesedj = $_GET['mesedj'];

if (is_dir("./test") == false)
{
mkdir ("./test", 0700);
}
if (is_dir("./test".$papka) == false)
{
mkdir ("./test/".$papka , 0700);
}

if (is_dir("./test/".$papka) == true)
{
opendir ("./test/".$papka);
$file = fopen ($namefaila,"w");
if ( !$file )
{
print("Ошибка открытия файла");
}
else
{
fputs ( $file, $mesedj);
fclose ($file);
print("1");
}
}
}

?>


При первом запуске создает обе папки
При втором лает на строку
mkdir ("./test/".$papka , 0700);
что файл уже exists in
Что не так?
И почему файл все равно создается в корне (и при первом и при втором запуске)?
Папки в конце тоже нужно закрывать?

Спустя 6 часов, 25 минут, 12 секунд (16.11.2010 - 09:18) linker написал(а):
if (!file_exists("./test"))
mkdir("./test", 0700) or die('Нельзя создать папку');
if (!file_exists("./test/" . $papka))
mkdir("./test/" . $papka , 0700) or die('Нельзя создать папку');
if ($file = fopen("./test/" . $papka . "/" . $namefaila,"w"))
{
fputs($file, $mesedj);
fclose($file);
echo true;
}
else
die("Ошибка открытия файла");

Спустя 4 часа, 34 минуты, 1 секунда (16.11.2010 - 13:52) Кошки рулят написал(а):
linker, спасибо
допилил и все получилось
Я правильно понимаю, что file_exists - это как в 1С ФС.СуществуетФайл() проверяет наличие как директории, так и файла? Ведь, суть какая разница чем занято имя, файлом или папкой ...

Спустя 5 минут, 1 секунда (16.11.2010 - 13:57) Кошки рулят написал(а):
Подскажите, есть где книжка языка php почитать? Желательно на русском
А то надоело уже угадывать названия операторов и функций ...
И еще подскажите: а есть какой-нибудь редактор для кода php?
Чтобы с проверкой синтаксиса, с автоформатированием, с телепатом, с шаблонами?
Безумно тяжело после 1С писать код в блокноте ... Есть что-нибудь?

Спустя 17 минут, 16 секунд (16.11.2010 - 14:15) Кошки рулят написал(а):
Мне нужно перебрать текстовые файлы в заданной папке и слепить из текстов (в тексте всегда одна строка) из них строку (может быть с разделителем "переводстроки")


elseif ($chtodo == "chtenie")
{
$papkaigry = $_GET['papkaigry'];
$papka = $_GET['papka'];

if (!file_exists("./games/snegovic/".$papkaigry."/".$papka))
print("0");
else
{
$dir = opendir ("./games/snegovic/".$papkaigry."/".$papka);
$str = "";
while ( $file = readdir ($dir))
{
if (( $file != ".") && ($file != ".."))
{
$fo = fopen ("./games/snegovic/".$papkaigry."/".$papka."/".$file,"r");
if ($fo)
{
while(!feof($fo))
{
$str=$str."`@`".fgets($fo);
}
fclose ( $fo);
}
}
}


closedir ($dir);
print $str;
}

}



А может readdir выбрать файлы по маске s*.txt ?
А потом мне нужно переименовать прочитанный файл убрав первый символ в имени, т.е. *.txt, чтобы при следующем переборе цикл не заходил в эти файлы
Киньте хелпов, люди добрые ...

Спустя 4 минуты, 34 секунды (16.11.2010 - 14:19) linker написал(а):
По поводу книжек, тут где-то время от времени всплывает тема про книги, можно поиском по форуму воспользоваться. Я больше официальным мануалом пользуюсь.
Редактором я пользуюсь phpDesigner.
По маске выбирает файлы функция glob().

Спустя 6 минут, 17 секунд (16.11.2010 - 14:25) Кошки рулят написал(а):
Цитата (linker @ 16.11.2010 - 11:19)
Я больше официальным мануалом пользуюсь.

А где официальным мануалом разжиться?

Спустя 2 минуты, 29 секунд (16.11.2010 - 14:28) linker написал(а):

Спустя 1 час, 40 минут, 43 секунды (16.11.2010 - 16:09) Кошки рулят написал(а):
Последний шаг остался

elseif ($chtodo == "chtenie") 
{
$papkaigry = $_GET['papkaigry'];
$papka = $_GET['papka'];

if (!file_exists("./games/snegovic/".$papkaigry."/".$papka))
print("0");
else
{
chdir ("./games/snegovic/".$papkaigry."/".$papka);
$str = "";
foreach (glob("s*.txt") as $filename)
{
$str=$str."`@`".$filename;
$fo = fopen ($filename,"r");
if ($fo)
while(!feof($fo))
{
$str=$str."`@`".fgets($fo);
}
fclose ( $fo);
//rename($filename, ???? )
}
}

print $str;
}


Как половчее переименовать файл, убрав в имени первый символ ("s")?

Спустя 19 минут, 11 секунд (16.11.2010 - 16:28) linker написал(а):
$newfilename = substr($filename, 1);
или сразу
rename($filename, substr($filename, 1));

Спустя 31 минута, 14 секунд (16.11.2010 - 16:59) Кошки рулят написал(а):
Спасибо
phpDesigner и русский мануал реально облегчают ...

Спустя 1 час, 11 минут, 9 секунд (16.11.2010 - 18:10) Кошки рулят написал(а):

fputs($file, $variantigry."\n");
fputs($file, $login);


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

Спустя 4 часа, 6 минут, 36 секунд (16.11.2010 - 22:17) linker написал(а):
Забей на блокнот и оставляй как оно есть.

Спустя 59 минут, 18 секунд (16.11.2010 - 23:16) Кошки рулят написал(а):
Не могу найти затык

<?php
$chtodo = $_GET['action'];
if ($chtodo == "chtenie")
if (!file_exists("./games"))
mkdir("./games", 0700);
if (!file_exists("./games/snegovic"))
mkdir("./games/snegovic", 0700);
if (file_exists("./games/snegovic"))
chdir ("./games/snegovic");
$str = "";
foreach (glob("*.snegovic") as $papkaigry)
{
if (!file_exists("./games/snegovic/".$papkaigry."/sopernik.txt"))
if (file_exists("./games/snegovic/".$papkaigry."/igrok.txt"))
$tekfile = file("./games/snegovic/".$papkaigry."/igrok.txt");
if($tekfile)
{
$str=$str.$papkaigry.",".$tekfile[1].",".$tekfile[2]."~~~";
}
}

print $str;
?>


Что ей надо? Почему ничего не возвращает?

Спустя 38 минут, 50 секунд (16.11.2010 - 23:55) Кошки рулят написал(а):
В общем,
$tekfile = file("./games/snegovic/".$papkaigry."/igrok.txt");
всегда пустая, хотя файл есть и не пустой ...
Собственно, мне нужно из этого файла строку по номеру прочитать - никак не хочет ...
Как прочесть строку из файла?

Спустя 31 минута, 32 секунды (17.11.2010 - 00:26) kovaldm написал(а):
А где fopen()?

Спустя 8 минут, 29 секунд (17.11.2010 - 00:35) Кошки рулят написал(а):
Цитата (kovaldm @ 16.11.2010 - 21:26)
А где fopen()?

А накой?

Спустя 26 минут, 34 секунды (17.11.2010 - 01:01) kovaldm написал(а):
Цитата (Кошки рулят @ 17.11.2010 - 00:35)
Цитата (kovaldm @ 16.11.2010 - 21:26)
А где fopen()?

А накой?

Работа с файлами включает в себя 3 этапа.
-Открытие файла;
-Обработка (чтение, запись);
-Закрытие файла.

Спустя 12 минут, 52 секунды (17.11.2010 - 01:14) Кошки рулят написал(а):
Цитата (kovaldm @ 16.11.2010 - 22:01)
Цитата (Кошки рулят @ 17.11.2010 - 00:35)
Цитата (kovaldm @ 16.11.2010 - 21:26)
А где fopen()?

А накой?

Работа с файлами включает в себя 3 этапа.
-Открытие файла;
-Обработка (чтение, запись);
-Закрытие файла.


                       $fo = fopen ("./games/snegovic/".$papkaigry."/igrok.txt","r");
if ($fo)
$paramigry="";
while(!feof($fo))
{
$paramigry=$paramigry.fgets($fo).",";
}
fclose ( $fo);


Вываливается на fclose ( $fo) потому что $fo пусто

Спустя 1 час, 45 минут, 32 секунды (17.11.2010 - 03:00) Кошки рулят написал(а):
Разобрался ...

chdir ("./games/snegovic");
Меняла каталог и вместо
$tekfile = file("./games/snegovic/".$papkaigry."/igrok.txt");
надо было просто писать
$tekfile = file("./".$papkaigry."/igrok.txt");

Спустя 1 день, 10 часов, 27 минут, 26 секунд (18.11.2010 - 13:27) Кошки рулят написал(а):
Цитата (Кошки рулят @ 16.11.2010 - 15:10)

fputs($file, $variantigry."\n");
fputs($file, $login);


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

Вот что по этому поводу пишет мануал

Так как установка флага трансляции по умолчанию зависит от SAPI и версии PHP, которую вы используете, рекомендуем явно задавать указанный флаг из соображений портируемости. Вы должны использовать режим 't' если вы работаете с текстовым файлом и использовать \n для разделения для обозначения конца строки в вашем скрипте, при этом не беспокоясь за читаемость ваших файлов в других приложениях типа "Блокнота". В противном случае вам следует использовать флаг 'b'.

Переводили, вероятно, каким-то автоматическим переводчиком, поэтому что написано не поймешь, но у меня получилось, что надо использовать 't', а не 'b'

$file = fopen($filename,"wt");

C эти разобрались ...

Спустя 6 часов, 49 минут, 47 секунд (18.11.2010 - 20:17) Кошки рулят написал(а):
Ну, че, все получилось ...
Через денвер все работает.

Подскажите, люди добрые, на каком ресурсе можно попробовать?
Так сказать, в боевых условиях ...

Спустя 1 день, 3 часа, 23 минуты, 6 секунд (19.11.2010 - 23:40) Кошки рулят написал(а):
Гладко было на бумаге ... в смысле, на денвере.
Дело в том, что папка созданная командой
mkdir("./games/snegovic/" . $papkaigry , 0777); 

во-первых, имеет статус "Служебная" и никакого доступа к ней сервер не дает, а во-вторых, ей устанавливается доступ rwxr-xr-x, хотя мне требуется (как я и прошу 0777) rwxr-rwxr-rwxr. Очевидно, что сервак на никсах (раз он понимает параметр при создании папки) ...

Я в отчаянии!!!

Подскажите, кто знает (или подскажите где спросить) от чего это зависит в никсах?
Есть ли какое-то ограничение на имена папок?
Почему сервак назначает ей такие права и не дает мне даже заглянуть в эту папку?

Спустя 16 минут, 16 секунд (19.11.2010 - 23:56) kovaldm написал(а):
Попробуй вместо "0777" прописать "rwx" или "rw-".

Спустя 13 минут, 12 секунд (20.11.2010 - 00:10) kovaldm написал(а):
Или так "rwxrwxrwx".

Спустя 7 минут, 45 секунд (20.11.2010 - 00:17) Кошки рулят написал(а):
Цитата (kovaldm @ 19.11.2010 - 20:56)
Попробуй вместо "0777" прописать "rwx" или "rw-".

Ничего, что мануал прямо не советует этого делать, поскольку, это, якобы не правильно?
Обратите внимание, что значение параметра mode не переводится автоматически в восьмеричную систему счисления, поэтому строки (такие, как, например, "g+w") не будут работать должным образом.

http://www.php.ru/manual/function.chmod.html

Спустя 5 минут, 31 секунда (20.11.2010 - 00:23) kovaldm написал(а):
Вобще 777 тебе не нужны, надо ставить 755.
Вот так:
111101101 - не уверен что правильно, или так:
rwxr-xr-x - тоже не особо уверен.
Ниразу не сталкивался с файлами на реальных хостах.

Спустя 9 минут, 53 секунды (20.11.2010 - 00:33) Кошки рулят написал(а):
Цитата (kovaldm @ 19.11.2010 - 21:23)
Вобще 777 тебе не нужны, надо ставить 755.
Вот так:
111101101 - не уверен что правильно, или так:
rwxr-xr-x - тоже не особо уверен.
Ниразу не сталкивался с файлами на реальных хостах.

Что 0777, что 0755 дает одинаковый результат - rwxr-xr-x, хотя 0700 действительно дает rwx------


Спустя 1 минута, 40 секунд (20.11.2010 - 00:34) Кошки рулят написал(а):
Проблема в том, что папка "с замочком". Написано, что она служебная. И поэтому я ничего сделать с ней не могу ...

Спустя 10 минут, 45 секунд (20.11.2010 - 00:45) kovaldm написал(а):
Хрень какая-то. В своей директории ты можешь создавать все что хочешь, так как являешься ее владельцем.

Спустя 6 минут, 39 секунд (20.11.2010 - 00:52) kovaldm написал(а):
Вот это почитай.

Спустя 5 минут, 47 секунд (20.11.2010 - 00:58) Кошки рулят написал(а):
Цитата (kovaldm @ 19.11.2010 - 21:45)
Хрень какая-то. В своей директории ты можешь создавать все что хочешь, так как являешься ее владельцем.

Не забывай, что это в виндовсе "разрешено все, что прямо не запрещено", в никсах наоборот - "запрещено все. разрешено только то, что разрешено прямым разрешением"
Это во первых.
А, во-вторых, речь идет о программном создании папок и файлов. Их "владельцем" является php скрипт, который выполняется на стороне сервера. Причем, мне нужно, чтобы после создания папки другие юзеры (такие же скрипты, но запускаемые другими пользователями) могли не только читать файлы, но и редактировать их, а также создавать и удалять свои папки и файлы ...

Спустя 11 минут, 51 секунда (20.11.2010 - 01:10) kovaldm написал(а):
PHP.SU
Цитата
Текущим пользователем является пользователь, от имени которого выполняется PHP. Возможно, что этот пользователь будет отличаться от пользователя, под именем которого вы получаете доступ к командной оболочке или учетной записи FTP.

Ты являешься владельцем директории скрипта и должен иметь право творить в ней все что хочешь.

Подробности нужно узнавать у хостера, наверное.

Спустя 28 минут, 42 секунды (20.11.2010 - 01:38) Кошки рулят написал(а):
Скрипт, создавший папку даже сам не смог следующей своей строкой создать файл в только что созданной папке, хоть он ее полный владелец.
Ответ сервера:
<br />
<b>Warning</b>: fopen() [<a href='function.fopen'>function.fopen</a>]: SAFE MODE Restriction in effect. The script whose uid is 23315 is not allowed to access /home/hop/s/n/e/snegovic88/public_html/games/snegovic/FB661380C6F840A6A0.s owned by uid 80 in <b>/home/hop/s/n/e/snegovic88/public_html/zaiavka.php</b> on line <b>21</b><br />
<br />
<b>Warning</b>: fopen(./games/snegovic/FB661380C6F840A6A0.s/igrok.txt) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: No such file or directory in <b>/home/hop/s/n/e/snegovic88/public_html/zaiavka.php</b> on line <b>21</b><br />

Спустя 2 минуты, 45 секунд (20.11.2010 - 01:41) Кошки рулят написал(а):
Я могу самостоятельно отключить этот чертов SAFE MODE для своих папок?
Или это только хостер может сделать?

Спустя 12 часов, 34 минуты, 41 секунда (20.11.2010 - 14:16) Кошки рулят написал(а):
С файлами, вроде тьфу-тьфу, таких проблем нет.
Удалять их скрипту тоже не дают, но создавать и редактировать - сколько хочешь.
Придется переделать все на использование только файлов.
Иду работать ...

Спустя 15 дней, 12 часов, 29 минут, 46 секунд (6.12.2010 - 02:45) Кошки рулят написал(а):
Помогите еще с кодом:
Как получить строку с переменными, т.е. что было после "?" при вызове скрипта?
В 4.0 это, как я понимаю, это была переменная $QUERY_STRING, а в 5-ом?


Спустя 9 минут, 24 секунды (6.12.2010 - 02:55) inpost написал(а):
$_GET

Спустя 3 минуты, 23 секунды (6.12.2010 - 02:58) Кошки рулят написал(а):
$_GET - это уже массив переменных, а мне хочется получить именно строку вызова, а не сами переменные, или $_GET в виде строки.
Я хочу записать ее в лог-файл.

Спустя 24 минуты, 32 секунды (6.12.2010 - 03:23) inpost написал(а):
$_SERVER['что-то там'], посмотри в гугле.

Спустя 13 минут, 24 секунды (6.12.2010 - 03:36) Кошки рулят написал(а):
Цитата (inpost @ 6.12.2010 - 00:23)
$_SERVER['что-то там'], посмотри в гугле.

Зачем нужен гугл, если есть отладчик?
$_SERVER['argv'][1]

Спустя 1 час, 12 минут, 6 секунд (6.12.2010 - 04:48) Кошки рулят написал(а):
На локальном компьютере
$_SERVER['argv'][1]
работает, а на реальном ресурсе - пустая строка.
В общем, вопрос открыт ...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.