У меня есть файл PHP, который генерирует файл CSV, используя код ниже:
$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header("Content-disposition: filename=".$filename.".csv");
print $csv_output;
Я не включил код, который создает контент, так как он отлично работает. Что мне нужно сделать, это использовать терминал, чтобы запустить этот файл и загрузить результаты на сервер sftp. Я могу подключиться к серверу нормально в терминале.
Я использовал php
команда в терминале для получения результирующего CSV. Это, однако, не производит CSV, как это происходит при запуске в браузере. Что он делает, так это создает CSV в виде строки.
Есть ли способ создать CSV-файл в виде файла, подобного браузеру, чтобы я мог получить его в терминале и загрузить на SFTP-сервер? В качестве альтернативы возможно ли вывести строку, созданную из файла PHP, и создать CSV самостоятельно, используя такую команду:
echo "boo,to,you">file.csv
Просто перенаправить php
вывести во временный файл и загрузить файл.
php yourscript.php > /tmp/file.csv
echo "put /tmp/file.csv" | sftp [email protected]
Если вы хотите сделать это без временного файла, вы не можете сделать это только с помощью (OpenSSH) sftp
так как он не может читать содержимое для загрузки со стандартного ввода. Ни один (OpenSSH) scp
Можно.
Конечно, вы можете создать файл из самого PHP-кода, если это лучше подходит для вашей задачи.
Просто используйте file_put_contents()
:
file_put_contents("/tmp/file.csv", $csv_output);
Увидеть Как записать в файл на PHP?
Предложение @MarcB должно работать, если удаленный сервер * nix (понимает cat
) и разрешает доступ к оболочке.
php yourscript.php | ssh [email protected] 'cat > file.csv'
Хотя очевидно, что это больше не «загрузка SFTP».
При создании файла не используйте header()
. Заголовки имеют смысл только в среде веб-сервера, а не когда вы используете PHP в качестве языка сценариев в оболочке.
Других решений пока нет …