Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Сохранение на сервере файла (вторая попытка:))


Автор: Alx 18.2.2004, 15:59
Итак, есть ситуация, когда серверной проге приходит переменная code="[html-код]". Необходимо сохранить на сервере файл с уникальным именем, расширением .php и содержанием:

<html>
<head>
<title>Открытка</title>
</head>
<body>
$code
</body>
</html>

помогите, плз, а то я уж задолбалзя из раздела в раздел бегать!)))

Автор: MuToGeN 18.2.2004, 16:25
<?
$content="<html>
<head>
<title>Открытка</title>
</head>
<body>".$_REQUEST[text]."</body>
</html>";
$fp=fopen("filename.php","w");
fwrite($fp,$content);
fclose($fp);
?>

из рассчета, что имя переменной, содержащей текст, который надо туда поместить - $text

Автор: Alx 18.2.2004, 19:28
MuToGeN
спасибки! а ты уверен, что он с уникальным именем каждый раз сохраняться будет? кст., если те не трудно, сделай ещё так, плз, чтобы это уникальное имя записывалось в какую-нить переменную, чтобы потом её можно было использовать дальше в скрипте!

А, и еще: я не понял, где указывать директорию? если прога ляжет допустим в папку /php/, то файл должен сохранятся в папке /php/cards/

Автор: Alx 18.2.2004, 19:31
А отпраку e-mail, кстати я уже и сам нашёл. тока она почему-то неработает! Можеть кто объяснит в чём тут проблема?

Код

<?
$message=
"Content-type: text/plain; charset=koi8-r
From: А. Зинчук
To: Alx <[email protected]>
Subject: Вам открытка!
Content-type: text/plain; charset=koi8-r
текст сообщения";
$message=convert_cyr_string($message,"w","k");
Mail("[email protected]","",$message)
?>


Вроде ошибки нету, но просто на e-mail ничё не приходит!

Автор: MuToGeN 18.2.2004, 19:44
откуда отправляешь?

для того, чтоб с уникальным именем созранять, то

$fp=fopen("filename.php","w");

сменить на

$nameFound=false;
do{
$name="/php/cards/".rand(0,10000000).".html";
if(!file_exists($name)){
$nameFound=true;
}
}while(!$nameFound);
fopen($name,"w");

в переменной $name будет имя фаила

Автор: Alx 19.2.2004, 11:37
спасибо!)
Как енто "откуда"? Я загрузил файло на h11.ru захожу на страницу - думаю всё! а что надо исчо чё-то?

Автор: IZ@TOP 19.2.2004, 11:48
ALEXANDRO, хех ... у них там mail заблочен ... нужно писать им в супорт что бы открыли, и при всем при этом нужно очень хорошо обосновать зачем тебе мыло слать нужно sad.gif

Автор: Alx 19.2.2004, 20:28
да нет, это я просто попробовать! ладно, може на Apache получица! Я потом всё равно буду платный регить на Агава.ру.

Автор: MuToGeN 20.2.2004, 04:33
> буду платный регить на Агава.ру
Не рекоммендую. Агава на сисадминах экономит. Будешь иметь дело с глючным и постоянно перегруженным сервером.

Автор: Alx 20.2.2004, 11:51
не знаю, я уже как-то решил!... но в принципе тогда какой хостинг? там я выбрал тариф economy. В принципе он меня очень устраивает. кст. по ссылке с ентого форума сбегал на Еврохостер, там таких цен, как на Агаве, и в помине нету!

кст., по теме:
Вот код который я загрузил на h11.ru

Код

<?
$content="
<html>
<head>
<title>Открытка</title>
</head>
<body>"
.$_REQUEST[code].
"</body>
</html>";

$nameFound=false;
do
{$name="cards/".rand(0,10000000).".php";
if(!file_exists($name))
{$nameFound=true;
}
}
while(!$nameFound);
fopen($name,"w");
fwrite($fp,$content);
fclose($fp);
?>


а вот, что он мне возникает:

Warning fwrite(): supplied argument is not a valid stream resource in /home/a/alexandro.h11.ru/WWW/greetings/greet.php on line 21

Warning: fclose(): supplied argument is not a valid stream resource in /home/a/alexandro.h11.ru/WWW/greetings/greet.php on line 22

Это на h11, на Апаче было тоже самое + ненайдены константа code и переменная $fp. Файлы сохраняются, но пустые...(

Автор: Alx 20.2.2004, 18:53
Да, и ещё: есть ли какая-то возможность отформатировать сообщение? Цвет фона, шрифта, жирность, наклонность и т.п.?

Автор: MuToGeN 20.2.2004, 19:05
> Цвет фона
<span style="background-color: #357159">...</span>
> шрифта
<span style="color: #357159">...</span>
> жирность
<b></b>
> наклонность
<i></i>

Автор: Alx 20.2.2004, 19:19
Не знаю, не работает!( оно прям так с тегами и приходит! а чё насчёт тех ошибок, которые в твоем скрипте?

Автор: MuToGeN 20.2.2004, 19:31
> Не знаю, не работает!
Content-type: text/html надо к почтовым хедерам добавить

> чё насчёт тех ошибок
проверь права

Автор: Alx 20.2.2004, 19:39
а, точно, благодарю!)))) у меня было text-plain, ща попробую! А насчёт прав, объясни, чё надо сделать, плз, если не трудно! Я тока начал PHP изучать, я знаю там чё-то 777 и т.п., но где, куда и зачем их девать я не знаю!)))

А вообще ты мне здорово помог!!! Спасибо! Всегда рад буду помочь тебе в JavaScript и вообще чем смогу! ГЫ!)

Автор: MuToGeN 20.2.2004, 19:53
Надо ставить на папку, в которую будешь сохранять фаилы. Чтобы разрешить все, ставь 777, только это очень нехорошо с точки зрения security.

Будь на агаве админы не настолько криворукие - они в suexec наладили.

Автор: Alx 20.2.2004, 20:44
MuToGeN

Я ж сказал - ничего про это не знаю!) в смысле "ставить"? Что я именно должен сделать? просто слышал где-то права там чё-то 777, r, w, ещё какая-то фигня... чё делать-то с ними?)


Автор: MuToGeN 21.2.2004, 02:49
Ваставить можешь с помощью своего FTP клиента.

Автор: Alx 21.2.2004, 09:30
кст., это я тоже слышал.

но я не знаю, как это делать!!!!!!!! СОВСЕМ! Понимаешь? Для FTP я Эксплорером пользуюсь, ещё ц меня Dreamweaver есть.

Автор: Secandr 21.2.2004, 10:03
ALEXANDRO Поставь какой-нибудь FTP клиент там это обязательно будет. Я FAR`ом пользуюсь.

Автор: MuToGeN 21.2.2004, 10:42
В експлорере вообще можно увидеть такую вот уникальную картинку...
Это, собственно, и есть то, что chmod-ом зовется. Появляется оно при правом клике на фаиле и выборе "Свойства"

Автор: Alx 21.2.2004, 10:44
Хорошо! я врубил DreamWeaver, нажал там New Site, создал, искал чё-то типа Rules нифига не нашёл! А через Эксплорер низя? Давай я твой FAR скачаю ща, если он небольше 1.5 МБ, а ты мне скажешь, чё с ним делать, ок?;)


MuToGeN, всё заканчивается "Последним изменением"!

Кстати, я уже это пробовал!, а то что ты красным обвел нету!( хны!

Автор: MuToGeN 21.2.2004, 10:46
ALEXANDRO, насчет експлорера см. парой постов выше.
Оно обычно по-английски permissions зовется.

Автор: Alx 21.2.2004, 10:51
MuToGeN, не обновилось почему-то твоё сообщение тада! но я уже ответил! нет там такого!

Автор: MuToGeN 24.2.2004, 00:11
ALEXANDRO, right click, потом "Свойства".
Не надо говорить, что его там нет.

Автор: Master 24.2.2004, 00:57
Значит там должно быть написано:
Этот сервер не поддерживает изменение разрешений файлов

зы: чё за сервер?

Автор: Гость_Alx 27.2.2004, 13:14
MuToGeN, ты думаешь я тебя обманываю?)) всё точно как ты нарисовал, тока под HR не то, что ты обвёл красным, а "Последнее изменение"((

Хостинг h11.ru

Автор: Alx 28.2.2004, 11:31
Такс, чё-то мне не везет!(( Я нашел на загрузочном диске каком-то у себя (у меня их много) CuteFTP Pro, установил права 777 (! smile.gif)), зашел на страничку, и... оказалось что эти с holm.ru запрещают такие права!(( Макс. - 755 и 711, но на них не работает скрипт! Ээх! к тому же накрылся второй извесный мне халявный хостер с PHP - host.net.kg! И че прикажете делать? Ладно, попробую чё-нить...

Автор: IZ@TOP 28.2.2004, 11:49
ALEXANDRO осталось amillo.net

Автор: Alx 28.2.2004, 15:02
Iz@top, я оттуда!((( там всё получилось, но смотри, вначале, када права на папке были 755, а на скрипте 644, были такие ошибки:

Warning: fopen(cards/3025572.php): failed to open stream: Permission denied in /usr/apache/htdocs/myfree_content/alexandro.w6.ru/greet.php on line 19

Warning: fwrite(): supplied argument is not a valid stream resource in /usr/apache/htdocs/myfree_content/alexandro.w6.ru/greet.php on line 20

Warning: fclose(): supplied argument is not a valid stream resource in /usr/apache/htdocs/myfree_content/alexandro.w6.ru/greet.php on line 21

а когда права установил 777 на скрипт и на папку cards стало

в папке стали сохраняться файлы, но они по 0 байт и с правами 644. можеть на них тоже нужно как-то установить 777? я пробовал, ошибка в FTP-клиенте, причем потом и все остальные файлы переставали позволять изменять права, пришлось перезагружать FTP-клиент, всё было нормально со всеми файлами, но созданные все равно не переделывались! я слышал, можно как-то из скрипта задавать права?

Автор: Alx 28.2.2004, 15:09
Iz@top, я оттуда!((( там тоже ни хрена! Смотри, вначале, када права на папке были 755, а на скрипте 644, были такие ошибки:

Warning: fopen(cards/3025572.php): failed to open stream: Permission denied in /usr/apache/htdocs/myfree_content/alexandro.w6.ru/greet.php on line 19

Warning: fwrite(): supplied argument is not a valid stream resource in /usr/apache/htdocs/myfree_content/alexandro.w6.ru/greet.php on line 20

Warning: fclose(): supplied argument is not a valid stream resource in /usr/apache/htdocs/myfree_content/alexandro.w6.ru/greet.php on line 21

а когда права установил 777 на скрипт и на папку cards стало

Warning: fwrite(): supplied argument is not a valid stream resource in /usr/apache/htdocs/myfree_content/alexandro.w6.ru/greet.php on line 20

Warning: fclose(): supplied argument is not a valid stream resource in /usr/apache/htdocs/myfree_content/alexandro.w6.ru/greet.php on line 21

в папке стали сохраняться файлы, но они по 0 байт и с правами 644. можеть на них тоже нужно как-то установить 777? я пробовал, ошибка в FTP-клиенте, причем потом и все остальные файлы переставали позволять изменять права, пришлось перезагружать FTP-клиент, всё было нормально со всеми файлами, но созданные все равно не переделывались! я слышал, можно как-то из скрипта задавать права?

Автор: IZ@TOP 28.2.2004, 18:49
ALEXANDRO, нужно 666 права на файлы в которые хочешь произвести запись. То есть, создаем файл
$f = fopen("cards/{$rand}", "w");
fclose($f);
chmod("cards/{$rand}", 0666);

И еще совет - когда работаешь с файлами, то воизбежание серьезных ошибок, работай с функциями открытия/закрытия файлов/каталогов примерно так:
$f = fopen("cards/{$rand}", "a+") or die("Невозможно открыть файл.\r\n Source:".__FILE__."\r\nLINE:".__LINE__."\r\n"); ... и т.п.

Автор: Alx 28.2.2004, 19:06
Ок, щас попробую:

Цитата

<?
$content="
<html>
<head>
<title>Открытка</title>
</head>
<body>"
.$_REQUEST[code].
"</body>
</html>";
$nameFound=false;
do
{$name="cards/".rand(0,10000000).".php";
if(!file_exists($name))
{$nameFound=true;
}
}
while(!$nameFound);
fopen($name,"w");
fwrite($fp,$content);
fclose($fp);
chmod($name, 0666);
?>


так? кста, вопрос к MuToGeN'у, что значить $fp?

Автор: Alx 28.2.2004, 19:26
а, я понял, ты наверное ошибся, сказал заменить

$fp=fopen(...)

на

$nameFound=false;
do
{$name="cards/".rand(0,10000000).".php";
if(!file_exists($name))
{$nameFound=true;
}
}
while(!$nameFound);
fopen($name,"w");

а $fp забыл, т.е. правильный код

Цитата
<?
$content="
<html>
<head>
<title>Открытка</title>
</head>
<body>"
.$_REQUEST[code].
"</body>
</html>";
$nameFound=false;
do
{$name="cards/".rand(0,10000000).".php";
if(!file_exists($name))
{$nameFound=true;
}
}
while(!$nameFound);
$fp=fopen($name,"w");
fwrite($fp,$content);
fclose($fp);
chmod($name, 0666);
?>


так?

Автор: IZ@TOP 29.2.2004, 11:27
ALEXANDRO, $fp, он же как тебе вздумается переменную обозвать, дескриптор открытого файла, то есть указатель на тот файл который ты открыл с помощью fopn. Он необходим для функций fputs, fgets, fwrite и fclose.

Автор: IZ@TOP 29.2.2004, 11:30
Цитата
while(!$nameFound);
fopen($name,"w");
fwrite($fp,$content);
fclose($fp);
chmod($name, 0666);

Это не прет. Нужно сначало создать файл, закрыть, поставить чмоды, а потом снова открыть и записать в него то что нужно.

Автор: Alx 29.2.2004, 11:57
о, господи!))) в принципе у меня и так все работает, ну ладно, ща попробую, а после чего надо писать "or die" после fopen(), fwrite() или fclose()?

Так, значить:

<?
$content="
<html>
<head>
<title>Открытка</title>
</head>
<body>"
.$_REQUEST[code].
"</body>
</html>";
$nameFound=false;
do
{$name="cards/".rand(0,10000000).".php";
if(!file_exists($name))
{$nameFound=true;
}
}
while(!$nameFound);
$fp=fopen($name,"w");
fclose($fp);
chmod($name, 0666);
$fp=fopen($name,"w");
fwrite($fp,$content);
fclose($fp);

?>

З.Ы.,
Цитата
Он необходим для функций fputs, fgets, fwrite и fclose.

дай, плз, ссылочку, где про них почитать мона, тока не очень объёмисто, ок?!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)