php не создается файл
Работа с файлами в PHP
Чтение файла: file_get_contents()
С помощью функции file_get_contents() можно получить содержимое файла:
Также мы можем получить html-код какой-либо страницы в интернете:
Но работает это далеко не для всех сайтов, у многих есть защита от такого примитивного парсинга.
Чтение файла: file()
Функция file() позволяет получить содержимое файла в виде массива. Разделителем элементов является символ переноса строки.
Создадим в корне сайта файл data.txt со следующим содержимым:
Теперь запустим скрипт index.php со следующим кодом:
При запуске этого скрипта мы получим в браузере:
Заметили, что у первых двух строк длина 7 символов вместо пяти? Это из-за того, что каждая строка содержит в конце символы переноса строки.
Чаще всего они нам не нужны, поэтому их можно убрать, передав вторым параметром константу FILE_IGNORE_NEW_LINES :
Теперь у всех строк будет по 5 символов.
Если нам необходимо получить только заполненные строки в файле и пропустить пустые, можно передать вторым параметром константу FILE_SKIP_EMPTY_LINES :
Разумеется, мы можем передать сразу две константы:
Создание файла и запись в файл: file_put_contents()
Функция file_put_contents() позволяет создать файл и заполнить его данными.
Чтобы не перезаписывать данные, а добавить их в конец файла, нужно передать третьим параметром константу FILE_APPEND :
Также вторым параметром можно передать массив:
Но этот вариант не очень удобен, поскольку все элементы массива запишутся подряд, без каких-либо разделителей. Чтобы их добавить, можно использовать функцию implode:
Создание папки или структуры папок
Создать папку можно с помощью функции mkdir() (make directory):
Кроме этого, второй параметр может игнорироваться при заданной umask (пользовательская маска (user mask), которая нужна для определения конечных прав доступа). В этом случае принудительно сменить права можно функцией chmod() :
Также мы можем создать структуру папок рекурсивно, для этого нужно третьим параметром передать true :
Но в этом случае права доступа будут заданы только для конечной папки. Для изменения прав у каждой из папок придётся указывать права вручную:
Проверка существования файла или папки
Проверить существование папки или файла можно с помощью функции file_exists() :
Если вы хотите проверить существование только папки или только файла, для этого есть специальные функции is_dir() и is_file() :
Проверка прав доступа
Функции is_readable() и is_writable() проверяют, есть ли у пользователя, от имени которого запущен PHP, права на чтение и запись файла или папки:
Копирование, перенос и удаление файла
Для удаления файлов используется функция unlink() :
Чтобы скопировать файл, используем функцию copy() :
Для переименования и переноса файла в другую папку используется функция rename() :
Работа с файлами с помощью fopen()
Но иногда возникают ситуации, когда нам необходимы более продвинутые инструменты. Например, если у нас есть большой текстовый файл и мы хотим читать его построчно, а не весь сразу, для экономии оперативной памяти.
Итак, открыть (или создать и открыть) файл можно с помощью функции fopen() :
Для построчного чтения файла используется функция fgets() :
Также в PHP существует множество других полезных функций, работающих с дескриптором файла. Почитать о них можно в документации.
PHP fopen() не создает файл, если он еще не существует
в рамках ведения журнала приложение, которое я пытаюсь открыть локальный файл, и если файл еще не существует, создать новый. Вот что у меня есть:
Я дважды проверил, и /logs каталог chmod 0777, и я даже пошел дополнительный шаг chown’ING его apache:apache для хорошей меры. Тем не менее, когда скрипт открывает файл, он дает мне предупреждение о том, что файл не существует, и бомбит. Файл никогда не создается.
Я нужно подавить fopen() предупреждение, чтобы заставить его создать файл?
6 ответов
однако, когда вы имеете дело с командами файловой системы, такими как fopen корневой каталог (‘/’) является корневая система. Не ваш домен root.
чтобы исправить это, попробуйте предоставление полного пути к файлу журнала, который вы хотите открыть из системного корня. Например: /var/www/phpapplication/logs/myLogFile.txt
сервер, на котором вы работаете, мог бы посадить вас в тюрьму только для работы в каталоге phpapp и его подкаталогах.
однако основной проблемой вашего кода является понимание разницы между физической файловой системой и виртуальным веб-сервером, что уже было прекрасно объяснено.
обратите внимание, что вы должны предоставить свой вопрос с точной копией сообщения об ошибке. Он содержит тонну чрезвычайно полезной информации, это не похоже на клятву «я не буду создайте свой файл, уходите!»но это через объяснение того, что и почему происходит не так. Если вы сами не заботитесь о такой полезной информации, вы должны предоставить ее тем, кто просит о помощи.
путь к файлу должен быть с корневым сервером. Я мог бы достичь этого, используя функцию phpinfo() метод внутри документа, который я хотел знать. Поэтому при использовании phpinfo () вы увидите информационный документ. Если вы найдете для _SERVER [«SCRIPT_FILENAME»] вы увидите абсолютный путь к вашему файлу.
Я надеюсь, что это поможет кому-то.
Не забудьте убедиться, что SELinux не блокирует вас.
Примечание:
чтобы сделать этот пакет активной политики, выполните:
[root@yourbox]# semodule-i my_httpd.стр
[root@yourbox]# systemctl перезапустить httpd
Не получается создать файл на сервере через php + bash
Пробую создать файл для sites-avalibe, использую для этого php для ввода данных и bash чтобы это все заработало, но я потерпел фиаско, правда я не понимаю в чем проблема, ведь если я попытаюсь исполнить скрипт из консоли все работает, а через веб-страницу нет
1 ответ 1
1. Ограничения файловой системы
если я попытаюсь исполнить скрипт из консоли все работает, а через веб-страницу нет
выведет что-то похожее:
Поищем эти переменные:
Чтобы разрешить доступ, нужно сменить владельца:
либо где-то в конце /etc/apache2/apache2.conf поменять
2. Ограничение open_basedir
Опция open_basedir дополнительно ограничивает PHP какими-то каталогами. Поискать можно так:
Удалите open_basedir или добавьте каталог /etc/apache2/sites-available в эту настройку.
3. Ограничение на запуск sudo
sudo systemctl restart apache2
Затем необходимо вставить в конце следующее:
В данном случае спец. группу создавать не надо, мы просто даем доступ конкретному пользователю.
Тестирование и отладка
Делайте все поэтапно, смотря результат. Чтобы не запускать каждый раз php-скрипт и ломать голову, зайдите от имени апача и выполняйте аналогичные команды. Давайте зайдем под www-data :
вот так можно понять, что первый пункт работает:
Ага. Требует пароль. Не настроено.
Ограничение open_basedir можно проверить только через браузер.
Отдаем файлы эффективно с помощью PHP
1. Используем readfile()
Метод хорош тем, что работает с коробки. Надо только написать свою функцию отправки файла (немного измененный пример из официальной документации):
Таким способом можно отправлять даже большие файлы, так как PHP будет читать файл и сразу отдавать его пользователю по частям. В документации четко сказано, что readfile() не должен создавать проблемы с памятью.
2. Читаем и отправляем файл вручную
Метод использует тот же Drupal при отправке файлов из приватной файловой системы (файлы недоступны напрямую по ссылкам):
3. Используем модуль веб сервера
3a. Apache
Модуль XSendFile позволяет с помощью специального заголовка передать отправку файла самому Apache. Существуют версии по Unix и Windows, под версии 2.0.*, 2.2.* и 2.4.*
В настройках хоста нужно включить перехват заголовка с помощью директивы:
Также можно указать белый список директорий, файлы в которых могут быть обработаны. Важно: если у Вас сервер на базе Windows путь должен включать букву диска в верхнем регистре.
Описание возможных опций на сайте разработчика: https://tn123.org/mod_xsendfile/
Пример отправки файла:
3b. Nginx
Nginx умеет отправлять файлы из коробки через специальный заголовок.
Для корректной работы нужно запретить доступ к папку напрямую через конфигурационный файл:
Пример отправки файла (файл должен находиться в директории /some/path/protected):
Как сделать файл php на сайте
Почему так много всяких словосочетаний, вроде бы на такую простую тему делания файла php!?
Все способы сделать файл php
Все способы сделать файл php
Всего существует два способа создания php файла
Создание php файла «вручную».
Создать php файл с помощью «php»
Что означает создание php файла «вручную»
Что означает «создать php файл с помощью «php»«
Существует несколько функций, которые могут это делать!
Создать файл php на компьютере
Открываем любую папку, где вам требуется создать php файл нажимаем ПКМ внутри папки, в выпавшем окне ищем строку создать.
Далее выбираем любой файл, вообще не важно!
Создать файл php на компьютере
Создать файл php на компьютере
Как создать файл php в блокноте
Для того, чтобы сделать файл php в блокноте нам потребуется:
Далее → «сохранить как»
Далее → вбираем название файла и добавляем разрешение php сохраняем!
Php создать файл на сервере
$file= «здесь путь/название файла»;
Php создать файл на сервере видео
Php создать файл если не существует
У нас есть условие! Если файл не существует, то создать его!
Для этого потребуется условие и функция file_exists
Если файла php не существует, то создадим его с помощью file_put_contents.
$rezult = ‘Файл ‘.$file.’ существует’;
$rezult = ‘Файл ‘.$file.’ НЕ существует’;
file_put_contents(«index.html», «привет мир!»>;
Пример создания файла php при нажатии на кнопку
Если вы видите строчку:
То вы можете сделать файл php онлайн!
Если вы видите такую строчку:
То вам сперва нужно удалить файл, а потом уже вернуться на эту страницу и у вас будет возможность создать файл php онлайн на сервере!
Сделать файл php при нажатии на кнопку с содержимым
Из формы с помощью post отправляем два значения.
Получаем их в переменные:
Загоняем каркас страницы с нашими переменным в другу переменную: