За последние 24 часа нас посетили 17219 программистов и 1687 роботов. Сейчас ищут 1245 программистов ...

Проблема создания файлов

Тема в разделе "Прочие вопросы по PHP", создана пользователем job3507, 24 фев 2014.

  1. job3507

    job3507 Новичок

    С нами с:
    31 дек 2013
    Сообщения:
    16
    Симпатии:
    0
    Добрый день, уважаемые форумчане!
    Я только не давно стал писать коды по php и столкнулся с такой вот проблемой: при выполнение данного участка кода:
    Код (Text):
    1. chdir ($_SERVER['DOCUMENT_ROOT'].'/news/materials/');                       //Путь создания каталога
    2.         mkdir ("$id_news_v", "$rules_material_folder");                             //Имя каталога и его права
    3.         $material_folder = ($_SERVER['DOCUMENT_ROOT'].'/news/materials/"$id_news_v"/index.php');
    4.         if (!file_exists ("$material_folder"))                                      //Проверка наличия файла
    5.         {
    6.             $fp = fopen ("$material_folder", "w");                                   //Создание файла
    7.             fwrite ($fp, "Содержимое новостей");                                     //Запись содержимого
    8.             fclose ($fp);                                                            //Закрытие файла
    9.         };
    выводит вот такое сообщение:
    (именно эти строки кода я указал выше)
    Сами каталоги создаются нормально (с правами 0770) с нужными ID, но вот внутри самих каталогах не создаются файлы index.php. Искал на других ресурсах, так и не смог разобраться где у меня косяк...Помогите понять как исправить мой кривой кодик.
    Заранее спасибо за Ваши ответы!
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Код (PHP):
    1. $material_folder = $_SERVER['DOCUMENT_ROOT'].'/news/materials/'.$id_news_v.'/index.php'; 
     
  3. job3507

    job3507 Новичок

    С нами с:
    31 дек 2013
    Сообщения:
    16
    Симпатии:
    0
    Спасибо, но к сожаление не помогло, теперь просто создается один каталог с именем ".$id_news_v"
     
  4. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Создаётся строкой выше
    Код (PHP):
    1. mkdir ("$id_news_v", "$rules_material_folder");
    Удостоверьтесь, что в переменной $id_news_v нормальное имя папки.
     
  5. job3507

    job3507 Новичок

    С нами с:
    31 дек 2013
    Сообщения:
    16
    Симпатии:
    0
    В моем коде (первый пост) как раз все работало нормально, только не создавались файлы в каталогах.
    Если надо, то могу скинуть все код скрипта.
     
  6. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Это вы называете "работало нормально":
    ? Тут же написано, что аргумент не верный. Нет такого пути C:/OpenServer/domains/php/news/materials/"$id_news_v"/index.php
     
  7. job3507

    job3507 Новичок

    С нами с:
    31 дек 2013
    Сообщения:
    16
    Симпатии:
    0
    имеется ввиду, что в изначальном коде каталоги создаются с имена ID корректно, но главная ругань исходит именно от строк:
    Код (Text):
    1. $fp = fopen ("$material_folder", "w");                                   //Создание файла
    2.             fwrite ($fp, "Содержимое новостей");                                     //Запись содержимого
    3.             fclose ($fp);                                                            //Закрытие файла
    Как раз вот те самые строки с 30 по 32.
    Единственно, что приходит в голову так воткнуть проверку, на то что нужный каталог существует, и только после этого уже создавать файлы...
     
  8. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Добавьте строку
    Код (PHP):
    1. var_dump($id_news_v);
    и покажите.
     
  9. job3507

    job3507 Новичок

    С нами с:
    31 дек 2013
    Сообщения:
    16
    Симпатии:
    0
    Вот что выдает в результате:
     
  10. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Ок, значит в переменной семерка. Хорошо.
    потому я предложил исправить ошибку в строке создания пути на
    Код (PHP):
    1. $material_folder = $_SERVER['DOCUMENT_ROOT'].'/news/materials/'.$id_news_v.'/index.php';
    чтобы получить
    Код (Text):
    1. C:/OpenServer/domains/php/news/materials/7/index.php
    , на что вы ответили
    Так что правда, создаются в изначальном каталоге с именем ID или всё же создаются с именем ".$id_news_v"?
     
  11. job3507

    job3507 Новичок

    С нами с:
    31 дек 2013
    Сообщения:
    16
    Симпатии:
    0
    До того как Вы предложили исправленный вариант каталоги создавались с ID (1, 2 и т.д.), а после того как я сделал поправки, то каталоги сдали создаваться с именем ".$id_news_v" (без кавычек)
     
  12. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Ну это лишь значит, что вы что-то не так вставили. Ещё раз, вот эту строчку
    Код (PHP):
    1. $material_folder = ($_SERVER['DOCUMENT_ROOT'].'/news/materials/"$id_news_v"/index.php');
    нужно заменить на
    Код (PHP):
    1. $material_folder = $_SERVER['DOCUMENT_ROOT'].'/news/materials/'.$id_news_v.'/index.php';
    , т.к. в ней синтаксическая ошибка.

    В $material_folder будет путь
    Код (Text):
    1. C:/OpenServer/domains/php/news/materials/7/index.php
    Можете проверить его тем же
    Код (PHP):
    1. var_dump($material_folder); 
    Кстати, а что тут
    Код (PHP):
    1. if (!file_exists ("$material_folder"))                                      //Проверка наличия файла    
    Если файла нет, то создаётся. Так и задумано? Ведь, если выше была mkdir, то файла не должно быть.
     
  13. job3507

    job3507 Новичок

    С нами с:
    31 дек 2013
    Сообщения:
    16
    Симпатии:
    0
    Сделал как Вы и советовали, правка $material_folder действительно помогла, но при этом mkdir перестал присваивать ID папкам и ссылается на строку:
    Код (Text):
    1. mkdir ('$id_news_v', 0770);
    и говорит что такой файл не найден.

    Тут уже просто поручный круг, при исправлении fopen () выявляется ошибка в mkdir () и в обратную сторону то же самое.

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