$_SERVER['DOCUMENT_ROOT'] в CLI или Cron
При запуске скрипта с консоли отсутствует DOCUMENT_ROOT в $_SERVER. Попытаемся обойти это своими путями, отловить директорию файла.
Пример создания CSV с разделителем строки ";"
Код:
// 1
$fp = fopen('./fileName.csv', 'w');
if ($fp === false) {
// 2
exit('Can not create file (No Rights) ./fileName.csv');
}
// 3
$models = [
[
'name' => 'Visa',
'type' => 'Card',
'balance' => '10.0'
],
[
'name' => 'Master',
'type' => 'Card',
'balance' => '0'
]
];
// 4
fwrite($fp, '"Имя";"Тип";"Баланс"' . "\n");
foreach ($models as $v) {
fwrite($fp, '"' . $v['name'] . '";"'
. $v['type'] . '";"'
. $v['balance'] . '"'
. "\n");
}
// 5
fseek($fp, 0);
fclose($fp);
// 6
$data = file_get_contents('./fileName.csv');
// 7
header('Content-Type: text/csv'); // 7.1
header('Content-Disposition: attachment; filename="fileName.csv"'); // 7.2
header("Content-Transfer-Encoding: binary"); // 7.3
header('Expires: 0'); // 7.4
header('Pragma: no-cache'); // 7.5
header("Content-Length: ".strlen($data)); // 7.6
// 8
exit($data);
Примечание:
Чтобы сработали header, перед срабатыванием кода не должно быть BOM и любого вывода информации.
1 - Создаем файл fileName.csv в корне сайта для записи.
2 - Предупреждаем про ошибку, если нет прав на запись.
3 - Массив значений, который мы будем обрабатывать
4 - Запись в файл. '"Имя";"Тип";"Баланс"' . "\n" (";" - разделитель строки, "\n" - перенос строки).
5 - Возвращаем указатель на начало файла и закрываем файл (сохраняем).
6 - Считываем файл заново.
7 - Даем заголовки для возможности скачать файл.
7.1 - Параметр определяющий тип файла.
7.2 - Указатель на прикрепление файла.
7.3 - В каком виде передавать (в данном случае в бинарном).
7.4, 7.5 - Указатель чтобы не кешировать файл и постоянно отдавать актуальный.
7.6 - Размер контентной части файла.
8 - Выводим информацию, которая в связке с заголовками даст возможность скачать ее в CSV файл.
Результат:
При запуске скрипта с консоли отсутствует DOCUMENT_ROOT в $_SERVER. Попытаемся обойти это своими путями, отловить директорию файла.
Рассмотрим установку ionCube loader для php 7.2 для Ubuntu 18.04. Данный подход подойдет для любой версии php, которую поддерждивает разработчик ionCube.
Рассмотрим варианты популярные варианты хранения товаров в корзине в интернет-магазине. Обозначим плюсы и минусы таких хранений. Рассмотрим варианты долгосрочного хранения корзины.
Рассмотрим вариант создания простого проекта с MVС, который будет откликаться статическую ссылку в браузере, без управления $_GET параметрами. Ссылка будет разбиваться на путь к файлам и задействовать нужные контроллер, модель и view файл.
Иногда возникает нужда использовать фоновый процессы на Php. Рассмотрим пример использования такой возможности в связке Gearman + Php.
Для нормальной работы воркера Gearman требуется постоянная его работа в зацикленном режиме. Со стороны сервера это можно реализовать одним запросом через консоль Cli. Рассмотрим роботу на простом примере.
Целью статьи стало присоединение (join) не объявленной в схеме (schema.xml) таблице в propel2. Видимо редкий случай или просто недостаточно документации по данной Propel ORM.