Php скрипт создает пустые файлы

php exec () – mysqldump создает пустой файл

Я хочу создать резервную копию из базы данных, но я получаю только пустой файл.

include('config.php'); $command = "mysqldump --opt -h ".$_host." -u ".$_user." -p ".$_pass." ".$_db." > test.sql"; exec($command); echo "
".$command;

test.sql создается там, где находится файл .php.

Редактировать:

Заметка! Я использую XAMPP WINDOWS!

Поскольку я использую Windows Web Server (XAMPP), мне нужно указать путь:

$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql'; 
  1. Я удалил пространство между -p и проходом. Это выглядит так: -pMYPASSWORD
  2. Заменено » с помощью ‘

Я думаю, что если вы используете веб-сервер на базе Linux, вам не нужно указывать путь для mysqldump.

Solutions Collecting From Web of «php exec () – mysqldump создает пустой файл»

-uROOT -pPASSWORD –databases DB -result-file = FILE.SQL

$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql 2>&1'; 

Если вы посмотрите на руководство для exec, выход будет передан в массив, который является вторым аргументом. Это может быть источником проблемы.

Вы должны удалить пробел между -p и паролем.

—opt не требуется с последними версиями mysql.

Кроме этого, ваш синтаксис правильный, поэтому, если он не работает с -p fix, вы должны проверить параметры и подготовленную команду.

Возьмите переменные из кавычек и удалите –opt.

Также убедитесь, что у вас есть уникальные имена файлов

$backupfile = $dbname . date(«YmdHis») . ‘.sql’;

$command = «D:\xampp\mysql\bin\mysqldump -u $_user -p$_pass $_db > $backupfile»;

Для тех, кто находится на Mac

Сегодня я борюсь с этой проблемой весь вечер. Глупая ошибка: нужно chmod директорию, в которую вы сбрасываете файл.

Я запустил это, чтобы устранить проблему:

chmod -R 777 your_dump_directory/ 
$DBUSER="user"; $DBPASSWD="password"; $DATABASE="DBname"; $filename = "backup-" . date("dmY") . ".sql"; $command = '"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe" '.$DATABASE ." -u".$DBUSER ." -p".$DBPASSWD." > your_web_site/$filename"; passthru($command); 
  • Измените маршрут в направлении приложения mysqldump.exe вашего компьютера.
  • Соблюдайте «» внутри команды.

Затем принудительно загрузите файл:

if (file_exists("your_web_site/".$filename)) < header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.basename($filename).'"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); readfile("your_web_site/".$filename); exit; > 

Изменить. Вы должны предоставить разрешения для папки, в которой вы храните копии.

  • Сложность получения google плюс один счет
  • Управление вызовом AJAX с помощью Zend Framework
  • Многомерные массивы, вложенные в неограниченную глубину
  • Поиск через PDF-файлы с помощью PHP
  • WP_Query не возвращает результатов
  • Почему этот код не просто печатает буквы от A до Z?
  • PHP: проверка времени RegEx?
  • Реализовать свойства singleton: статические классы или переменные статического метода?
  • Сохранение пути к базе данных / SQL
  • Как загрузить представление на основе состояния в контроллере (Codeigniter)
  • Проверьте, включен ли GPS-устройство пользователя
  • Предотвращение прямого доступа к странице PHP
  • Как заменить некоторые части моей строки?
  • Как использовать FormHelper :: postLink () внутри формы?
  • Приложение Android отправляет данные в PHP-скрипт – Ожидание не выполнено

Источник

PHP: Copy () создает пустые файлы

Я использую следующую функцию для файла copy() . Файлы обычно имеют размер 1-50 КБ и создается файл с правильным именем, но он полностью пуст.

public function backup() < $backup = $this->_root.'/cfg_'.date('d_m_y').'.backup'; if (!copy($this->_file, $backup)) return false; return $backup; > 

Я точно знаю, что $this->_file правильно указывает на файл, который я пытаюсь скопировать. $this->_file создается другим методом одного и того же класса, и я выполняю chmod() с восьмеричным значением 0755 на нем, как показано в следующей функции:

private function createFile($filename) < if (!($this->_pointer = @fopen($filename, 'cb'))) return false; fclose($this->_pointer); chmod($filename, 0755); return true; > 

Что возвращает копия? Если вы распечатываете значения $this->_file , $this->_root и т. Д., Делает ли php файл _root_value/cfg_. ‘, ‘. ‘)); дать тот же результат?

@phihag Я думаю, что ты к чему-то. Распечатав значения $this->_file , $this->_root и запустив ваш код, он возвращает true и файл содержит правильные данные внутри.

@George Джордж Это означает, что мы не можем вам помочь , поскольку ошибка заключается в настройке функции, а не в самой функции. Вы уверены, что входной файл существует во время backup (и впоследствии он не создается, не переименовывается и т. Д. Кодом)?

@phihag На самом деле, файл создается в конструкторе, и если я обновлю скрипт, он будет использовать файл, созданный последним, что означает, что он не сможет существовать по крайней мере со второго раза, когда скрипт доступ. Входной файл никогда не переименовывается и имеет статическое жестко закодированное имя, сохраненное в переменной. Я сохраняю его имя в $this->_file в начале конструктора и использую его в своей функции createFile() . Чтобы вызвать функцию резервного копирования, я просто делаю это, if (!$backup = $this->backup())

@phihag phihag Я думаю, я только что понял, в чем проблема. Я вызываю backup() после того, как вызываю fopen() для него, который усекает его, так что файл на самом деле пуст во время резервного копирования 🙂

@George Джордж Похоже, «проблема решена» для меня: D. Пожалуйста, продолжайте и запишите это в ответ (и, возможно, намек на то, как его найти, например, When I examined the code that creates the file, I noticed that it truncates the file; the file content is only written afterwards ) и принимаю его ,

Источник

Работа с файлами в PHP

С помощью функции file_get_contents() можно получить содержимое файла:

Также мы можем получить html-код какой-либо страницы в интернете:

'; echo file_get_contents('https://ya.ru'); echo '';

Но работает это далеко не для всех сайтов, у многих есть защита от такого примитивного парсинга.

Чтение файла: file()

Функция file() позволяет получить содержимое файла в виде массива. Разделителем элементов является символ переноса строки.

Создадим в корне сайта файл data.txt со следующим содержимым:

Теперь запустим скрипт index.php со следующим кодом:

При запуске этого скрипта мы получим в браузере:

array(3) < [0]=>string(7) "Vasya " [1]=> string(7) "Petya " [2]=> string(5) "Gosha" >

Заметили, что у первых двух строк длина 7 символов вместо пяти? Это из-за того, что каждая строка содержит в конце символы переноса строки.

Чаще всего они нам не нужны, поэтому их можно убрать, передав вторым параметром константу FILE_IGNORE_NEW_LINES :

Теперь у всех строк будет по 5 символов.

Если нам необходимо получить только заполненные строки в файле и пропустить пустые, можно передать вторым параметром константу FILE_SKIP_EMPTY_LINES :

Разумеется, мы можем передать сразу две константы:

Создание файла и запись в файл: file_put_contents()

Функция file_put_contents() позволяет создать файл и заполнить его данными.

Первым параметром функция принимает путь к файлу, вторым — строку с данными. Для создания пустого файла нужно передать вторым параметром пустую строку.

Если файла не существует — он будет создан. Если существует — данные в файле будут перезаписаны.

Чтобы не перезаписывать данные, а добавить их в конец файла, нужно передать третьим параметром константу FILE_APPEND :

Также вторым параметром можно передать массив:

Но этот вариант не очень удобен, поскольку все элементы массива запишутся подряд, без каких-либо разделителей. Чтобы их добавить, можно использовать функцию implode:

Создание папки или структуры папок

Создать папку можно с помощью функции mkdir() (make directory):

Вторым параметром указываются права доступа к файлу в виде восьмеричного числа, по-умолчанию это 0777 , что означает самые широкие права. Для Windows этот аргумент игнорируется.

Кроме этого, второй параметр может игнорироваться при заданной umask (пользовательская маска (user mask), которая нужна для определения конечных прав доступа). В этом случае принудительно сменить права можно функцией chmod() :

Также мы можем создать структуру папок рекурсивно, для этого нужно третьим параметром передать true :

Но в этом случае права доступа будут заданы только для конечной папки. Для изменения прав у каждой из папок придётся указывать права вручную:

Права доступа — это отдельная объёмная тема, поэтому сейчас мы её пока рассматривать не будем.

Проверка существования файла или папки

Проверить существование папки или файла можно с помощью функции file_exists() :

Если вы хотите проверить существование только папки или только файла, для этого есть специальные функции is_dir() и is_file() :

Проверка прав доступа

Функции is_readable() и is_writable() проверяют, есть ли у пользователя, от имени которого запущен PHP, права на чтение и запись файла или папки:

Копирование, перенос и удаление файла

Для удаления файлов используется функция unlink() :

Чтобы скопировать файл, используем функцию copy() :

Для переименования и переноса файла в другую папку используется функция rename() :

Работа с файлами с помощью fopen()

Функций file() , file_get_contents() и file_put_contents() достаточно для решения большинства задач, связанных с управлением файлами.

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

Итак, открыть (или создать и открыть) файл можно с помощью функции fopen() :

Функция fopen() возвращает так называемый лескриптор. Это ссылка, указатель на файл, его мы будем передавать в другие функции. Кстати, тип данных этого дескриптора — resource .

Первым параметром мы передаём путь к файлу, вторым — модификатор доступа к файлу. Ниже перечислены наиболее популярные модификаторы:

  • r — открытие для чтения, указатель переходит в начало файла.
  • r+ — открытие для чтения и записи, указатель переходит в начало файла.
  • w — открытие для записи, указатель переходит в начало файла. Если файла нет — создаётся, если есть — очищается от данных.
  • w+ — открытие для чтения и записи, в остальном аналогичен w .
  • a — открытие для записи, указатель переходит в конец файла. Если файла нет — создаётся.
  • a+ — открытие для чтения и записи, в остальном аналогичен a .
  • x — создание и открытие для записи, указатель переходит в начало файла. Если файл существует — PHP покажет ошибку.
  • x+ — создание и открытие для чтения и записи, в остальном аналогичен x .

Указатель — это нечто вроде курсора. Вы можете переместить его в любое место файла, чтобы добавить или отредактировать определённые данные.

Для записи данных в файл существует функция fwrite() . Давайте попробуем создать файл и записать в него какие-нибудь данные:

Заметьте, из-за модификатора w при каждом запуске скрипта данные в файле стираются и добавляются заново. Если модификатор заменить на a , данные будут не перезаписываться, а добавляться в конец файла.

Для построчного чтения файла используется функция fgets() :

При каждом запуске fgets получает следующую строку и возвращает её в $line . Вторым параметром передаётся максимальная длина строки. Это означает, что если строка слишком длинная, она будет обрезана.

Также в PHP существует множество других полезных функций, работающих с дескриптором файла. Почитать о них можно в документации.

Источник

Читайте также:  Сессии для авторизации php
Оцените статью