Проверка имени и создание .txt файла на php

termit1987

Новичок
Проверка имени и создание .txt файла на php

Привет всем. Я с недавних пор начал интересоваться языками php и html, но пока познания в этом ооочень малы. И вот у меня возник к Вам вопрос. Мне необходимо сделать следующее: разработать форму, позволяющую вводить название файла. При помощи регулярных выражений проверить имя файла, если корректно, то создать файл с указанным именем, иначе – выделить недопустимые символы. Имя файла не должно превышать 255 символов и содержать \ / : * ? " < > |.

Я сделал работающую программу, но есть две проблемы:
1) файл создается без расширения. Можно ли как нибудь сделать что бы расширение было txt
2) после нажатия на кнопку Создать файл, файл создается но в окне браузера появляеться странный код:

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25
Неверное имя файла! Плохие символы выделены: cvx>><>>font color=red>>><>>b>\>><>>>><>>font color=red>>><>>b>/>><>>/b>>><>>/font>b>>><>>>><>>font color=red>>><>>b>/>><>>/b>>><>>/font>font>
Версия PHP: Денвер-2 2005-10-06


Вот собственно сам код программы:
<html>
<form action="proba.php" >
<table align="center" width="620" height="80" border="1">

<tr>


Введите имя файла: <input type="text" name="imya" size="70" maxlength="255" value=""><br><br>


<FONT COLOR="red">Внимание:</FONT> имя файла не должно превышать <FONT COLOR="red">255</FONT> символов и содержать

знаки <FONT COLOR="red"> \ / : * ? " < > | </FONT>
<br><br>

<center><input type="submit" name="create" value="Создать файл">
</td></tr>

<?php

if (isSet($_GET['imya']))
{
$name = $_GET['imya'];
$symbols = array('\\', '/', '"', '?', ':', '*', '<', '>', '|');
foreach ($symbols as $symbol)
if (strpos($name)!==FALSE)
$name = str_replace($symbol, '<font color=red><b>'.htmlSpecialChars($symbol).'</b></font>', $name);

if ($name != $_GET['imya'])
{
echo "Неверное имя файла! Плохие символы выделены красным: $name";
}
else
{
$f = fopen($name, 'w');
fclose($f);
echo 'OK!';
}
}
?>
</form>
</html>
Можно ли это как нибудь решить?

Буду всем признателен за помощь!
 

Akick

Новичок
1. Для того, чтобы файл был создан с расширением, его нужно создавать с расширением... Задайтесь вопросом - что такое расширение файла?
2. http://phpfaq.ru/debug1
 

termit1987

Новичок
Так, немного поковырявшись в справочниках, с расширением разобрался. Но вот ошибка все-же остается для меня тайной.
Akick по твоей ссылке я перешел и прочитал всю информацию. У меня ошибка и так выводиться... Несмотря на эту ошибку программа работает правильно (то есть ошибка на ход выполнения программы не влияет), но все-же она портит внешний вид. Кроме того коректно не отображается следующее условие: "При помощи регулярных выражений проверить имя файла, если корректно, то создать файл с указанным именем, иначе – выделить недопустимые символы."
Вот именно неправильные символы как то странно выделяються:"cvx>><>>font color=red>>><>>b>\>><>>>><>>font color=red>>><>>b>/>><>>/b>>><>>/font>b>>><>>>><>>font color=red>>><>>b>/>><>>/b>>><>>/font>font>"
И как это исправить с моими познаниями в области php я пока не знаю. Так что помогите пожалуйста кто чем сможет...
 

bgm

&nbsp;
termit1987
Учимся читать документацию: http://ru2.php.net/strpos
Сколько параметров должно быть у функции? :)
 

Sluggard

Новичок
PHP предупреждает, что ты передаешь не верное количество параметров функции strpos().
Прочти внимательно мануал по этой функции.
+ логическая ошибка здесь
PHP:
foreach ($symbols as $symbol)
if (strpos($name)!==FALSE)
$name = str_replace($symbol, '<font color=red><b>'.htmlSpecialChars($symbol).'</b></font>', $name);
Попробуй найти уже готовую функцию.
 

termit1987

Новичок
Всем спасибо за подсказку. Немного почитав и поковырявшись в коде я смог убрать ошибку из моего первого поста.

Но проблема с выводом недопустимых символов осталась...

Теперь при появлении недопустимого символа появляется ошибка:
Warning: fopen(f>.txt): failed to open stream: Invalid argument in y:\home\localhost\www\lab2.php on line 38

Warning: fclose(): supplied argument is not a valid stream resource in y:\home\localhost\www\lab2.php on line 39


Sluggard Ты писал про логическую ошибку в куске кода. Может эта ошибка и есть причина неисправностей. Если не трудно ткни меня носом в саму ошибку...

Всем спасибо за помощь
 

Sluggard

Новичок
termit1987
в первой итерации ты заменяешь "\" на html-код, который содержит символ "/". При второй итерации ты снова меняешь в этом html символ "/" на еще один html и т.д.

ищи готовую функцию здесь
String Functions
которая выполнит все за тебя, но корректно.

-~{}~ 25.02.08 23:29:

Warning: fopen(f>.txt): failed to open stream: Invalid argument in y:\home\localhost\www\lab2.php on line 38
Зря мы здесь тебе подсказываем. Случай совсем не разрешимый. Твой удел: закрыть все программы, удалить денвер и запустить тетрис.
----------------------------
Любишь программировать, люби и мануалы читать.
 
Сверху