За последние 24 часа нас посетили 16702 программиста и 1694 робота. Сейчас ищут 865 программистов ...

Сохранение созданного файла на сервере

Тема в разделе "PHP для новичков", создана пользователем arzobispo, 30 окт 2012.

  1. arzobispo

    arzobispo Активный пользователь

    С нами с:
    30 окт 2012
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Новосибирск
    Доброго времени суток!
    Возникла следующая проблема: открывается файл шаблона .rtf, в него вносится информация, затем создается новый файл, и необходимо осуществить не вывод предложения о загрузке файла, а сохранение его на сервере с уведомление на экране: Файл успешно создан и размещен на сервере.
    Код (Text):
    1.  
    2. <?php
    3.   // извлечь из HTTP-запроса значения переданных параметров
    4.   // и сохранить их в локальных переменных
    5.   $name = $_POST['name'];
    6.   $score = $_POST['score'];
    7.   // проверить, что в запросе имеются все необходимые параметры:
    8.   // имя пользователя и его результат тестирования.
    9.   if( !$name || !$score )
    10.   {
    11.     //если параметров не хватает, то вывести уведомление об ошибке
    12.     echo '<h1>Ошибка:</h1>Страница вызвана некорректно';
    13.   }
    14.   else
    15.   {
    16.     // установить HTTP-заголовки, которые упростят web-браузеру
    17.     // выбор приложения для обработки полученного документа
    18.     header('Content-Type: text/html; charset = windows-1251');
    19.     header( 'Content-Type: application/msword' );
    20.     header( 'Content-Disposition: inline, filename=cert.rtf');
    21.  
    22.     $date = date( 'F d, Y' );
    23.  
    24.     // открыть файл шаблона
    25.     $filename = 'PHPCertification.rtf';
    26.     $output = file_get_contents($filename);
    27.  
    28.     // заменить заполнители в шаблоне
    29.     //на значения соответствующих переменных
    30.     $output = str_replace( '<<NAME>>', strtoupper( $name ), $output );
    31.     $output = str_replace( '<<Name>>', $name, $output );
    32.     $output = str_replace( '<<score>>', $score, $output );
    33.     $output = str_replace( '<<mm/dd/yyyy>>', $date, $output );
    34.  
    35.     // отправить получившийся документ в web-браузер пользователя
    36.    
    37. echo $output;
    38.   }
    39. ?>
    Примечание: в настоящее время могу понимать токо написанный код, сам с большим трудом могу чего-нибудь дописать :(
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    а в чем проблема?
    Код (PHP):
    1. file_put_contents("PHPCertification.new.rtf'", $output);
    2. echo 'Файл успешно создан и размещен на сервере.';
    3. exit(); 
     
  3. arzobispo

    arzobispo Активный пользователь

    С нами с:
    30 окт 2012
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Новосибирск
    Проблема в том, что при добавлении file_put_contents запись добавляется в сам новый документ. Вот сейчас попробовал, то что вы прислали и он записал опять все в файл rtf.

    Добавлено спустя 3 минуты 38 секунд:
    Уже пробовал писать:
    Код (Text):
    1.  
    2. $writer->save('php://output');
    и все равно выпрыгивает окошко о предложении пользователю сохранить файл. Мне как раз нужно, чтобы пользователь не видел файла, файл сохраняется например тут: \apache\docs
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    вы это и просили. чтоб новый файл сохранился в другом файле а не в оригинальном. что не так то?

    закомментируйте ваши строки с header()
    и не будет пользователям окошко встплывать.
     
  5. arzobispo

    arzobispo Активный пользователь

    С нами с:
    30 окт 2012
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Новосибирск
    О! Это помогло! :)
    Спасибо! :)

    Добавлено спустя 22 минуты 54 секунды:
    А можете еще указать такой момент, как адрес сохранения, а то он толкает их в текущую папку.
     
  6. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    ну я же вам дал пример, там и пишите путь какой вам нужно:
    Код (PHP):
    1. $dir_to_save = 'C:\www\mysite\trash\\'; // путь до каталога КУДА СОХРАНЯТЬ
    2. $file_to_save = 'cert_'.uniqid().'.rtf'; // генерируем уникальное имя файла для сохранения
    3. $path_to_save =  $dir_to_save . $file_to_save; // ПОЛНЫЙ ПУТЬ куда сохранять
    4. file_put_contents($path_to_save, $output); // Сохраняем!!! 
     
  7. arzobispo

    arzobispo Активный пользователь

    С нами с:
    30 окт 2012
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Новосибирск
    Из ходя из работы скрипта,параметр uniqid() сгенерировал случайное уникальное имя. Сейчас вместо него написал name (), чтобы добавлять в название, которое берется вот тут вот $name = $_POST['name'];

    Добавлено спустя 20 минут 49 секунд:
    А еще сейчас нашел на этом форуме "Лекарство" от Кракозяброрв, которые получаются при передаче данных в создаваемый файл.
    "Лекарство":
    Код (Text):
    1.  
    2. $output=mb_convert_encoding($output, "Windows-1251", "utf8");
    В инструкции было написано, что необходимо применять "Перед выводом файла". Вставляю сразу после
    Код (Text):
    1.     $date = date( 'F d, Y' );
    и ничего не получается ((