Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Создать файл
 
 автор: Uran-D   (18.01.2009 в 19:39)   письмо автору
 
 

скажите, как можно создать файл скриптом? у меня такая ситуация, что нужно создать и записать информацию в файл, записывать я умею, а вто как его создать средствами php?

  Ответить  
 
 автор: Николай2357   (18.01.2009 в 19:56)   письмо автору
 
   для: Uran-D   (18.01.2009 в 19:39)
 

В 5 версии самый простой способ:
<?
file_put_contents
("название и адрес, куда записать относительно скрипта"$content);

Еще можно пользоваться серией функций fopen(), fwrite(), fclose()

Только для этого у соответствующих директорий должны быть достаточные права.

  Ответить  
 
 автор: AcidTrash   (18.01.2009 в 19:57)   письмо автору
 
   для: Uran-D   (18.01.2009 в 19:39)
 

fopen("file.txt", "w")

далее fwrite();

  Ответить  
 
 автор: Uran-D   (18.01.2009 в 20:24)   письмо автору
 
   для: Uran-D   (18.01.2009 в 19:39)
 

Я делаю так:


<?php
include("inc.php");

$statja $_POST["statja"]; # то что хочу записать в файл
$login $_POST["login"]; # логин юзера для того чтоб узнать его id


$sql="SELECT * FROM ".$dbname." WHERE avtorlogin='".$login."' ";
$result=mysql_query($sql);
while (
$row=mysql_fetch_array($result))
                    {

                  
$idd $row["id"]; # узнаю его id
                  
                  
}


$fgl "blok".$idd.".php"# это имя файла, который нужно создать

$h fopen($fgl,"w"); # пытаюсь его открыть, а если не существует, то создать
if (fwrite($h,$statja)) # пытаюсь записать

  
echo "Запись прошла успешно";
else 
  echo 
"Произошла ошибка при записи данных ";

fclose($h);
?>


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

  Ответить  
 
 автор: Uran-D   (18.01.2009 в 20:51)   письмо автору
 
   для: Uran-D   (18.01.2009 в 20:24)
 

Запись проходит только в том случае если файл создаю руками и ставлю на него 777, как все это сделать из скрипта?

  Ответить  
 
 автор: Николай2357   (18.01.2009 в 20:58)   письмо автору
 
   для: Uran-D   (18.01.2009 в 20:51)
 

Ну во первых всё это приличнее будет выглядеть так:
<?php 
include("inc.php"); 

$statja = isset($_POST["statja"])?$_POST["statja"]:null# то что хочу записать в файл 
$login = isset($_POST["login"])?$_POST["login"]:null# логин юзера для того чтоб узнать его id 

if($statja && $login)
{
$login = (get_magic_quotes_gpc())?mysql_escape_string(stripslashes($login)):mysql_escape_string($login);
$sql "SELECT `id` FROM ".$dbname." WHERE avtorlogin='".$login."' LIMIT 1 "
$result =mysql_query($sql);
    if(
$result)
    {
$idd mysql_result($result,0,0); 

$fgl "blok".$idd.".php"# это имя файла, который нужно создать 

$h fopen($fgl,"w"); # пытаюсь его открыть, а если не существует, то создать 
fwrite($h,$statja);

        if(
fclose($h))
        echo 
"Запись прошла успешно"
        else  
        echo 
"Произошла ошибка при записи данных ";

    }

?>
Во вторых, не моё конечно дело, но разрешать записывать php файлы...
А в третьих, я же писал, что права на директории, куда пишется файл должны быть соответствующими. Сделайте отдельную директорию для файлов, поставьте ей права 777 и тогда должно всё получиться.
И, кстати, совсем нет блокировки.

  Ответить  
 
 автор: Trianon   (18.01.2009 в 21:42)   письмо автору
 
   для: Николай2357   (18.01.2009 в 20:58)
 

В общем случае нельзя считать запись успешной, пока успешно не выполнен вызов fclose

  Ответить  
 
 автор: Николай2357   (18.01.2009 в 22:17)   письмо автору
 
   для: Trianon   (18.01.2009 в 21:42)
 

Спасибо, поправил.

  Ответить  
 
 автор: AcidTrash   (18.01.2009 в 20:59)   письмо автору
 
   для: Uran-D   (18.01.2009 в 20:51)
 

Функция chmod() .

  Ответить  
 
 автор: Uran-D   (18.01.2009 в 22:53)   письмо автору
 
   для: AcidTrash   (18.01.2009 в 20:59)
 

Спасибо за подсказки. Вариант с отдельной директорией возможно рабочий, но в моем случае все страницы будут учавствовать в sape-ru и лишняя директория в пути будет понижать рейтинг страницы. По поводу того, что страницы php, действительно согласен, что это не безопасно, если формат будет txt и переменная $statja будет проходить проверку strip_tags(); на сколько это поможет? есть еще какие-нибудь действенные способы запретить писать в файл html и php код, ведь все равно моя txt страница будет инклудиться в файл формата php

  Ответить  
 
 автор: Николай2357   (18.01.2009 в 23:37)   письмо автору
 
   для: Uran-D   (18.01.2009 в 22:53)
 

Если расширение файла не php, то исполняться он будет только в составе другого файла, к которому Вы его подключите. (Разумеется у того расширение как раз должно быть исполняемым). То есть с этой точки зрения ничего страшного не произойдет.

>будет проходить проверку strip_tags()
Вот это лишняя и даже вредная процедура, так как может исказить текст. Если в нем встретится к примеру <text>, то это выпадет из Вашей (не, не Вашей) статьи. Нужно использовать перед выводом обработку функцией htmlspecialchars().

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования