開発環境
macOS 13.0.1
PHP 7.4.33
Laravel 8.83.16
laravel/sail 1.14.10
環境構築
公式ドキュメント
1. 以下二つをダウンロード
ブラウザからでもCLIでもお好きなやり方で。
$ cd docker/7.4
$ wget https://github.com/iliaal/php_excel/archive/php7.zip https://www.libxl.com/download/libxl-lin-4.1.0.tar.gz
以下のリンクを確認して最新ものがあればそれをダウンロードする。
その場合、ファイル名などは適宜読み替える。
https://github.com/iliaal/php_excel/releases
https://www.libxl.com/download.html
ダウンロードが完了したらdocker/7.4
に配置する。
2. Dockerfile 編集
以下を追記。
docker/7.4/Dockerfile
COPY ./libxl-lin-4.1.0.tar.gz /usr/local/src/libxl-lin-4.1.0.tar.gz
COPY ./php_excel-php7.zip /usr/local/src/php_excel-php7.zip
RUN cd /usr/local/src/ && \
tar xf libxl-lin-4.1.0.tar.gz && \
unzip php_excel-php7.zip
RUN cd /usr/local/src/ && \
cd php_excel-php7 && \
phpize && \
./configure --with-excel=/usr/local/src/libxl-4.1.0/ --with-libxl-incdir=/usr/local/src/libxl-4.1.0/include_c/ --with-libxl-libdir=/usr/local/src/libxl-4.1.0/lib64/ && \
make && \
make install
3. php.ini 編集
以下を追記。
docker/7.4/php.ini
[LibXL]
extension=excel.so
4. dockerをビルドし直す && 再起動
vendor/bin/sail build --no-cache
vendor/bin/sail up -d
5. 動作確認
routes/web.php
Route::get('excel', function () {
// バッファをクリアする
ob_end_clean();
ob_start();
$book = new \ExcelBook(null, null, true);
// 日本語対応
$book->setLocale('UTF-8');
$sheet = $book->addSheet("Sheet1");
// A2にテキストを追加
$sheet->write(1, 0, 'PHP_EXCELのテストです。');
header('Content-Type: application/octet-stream');
header('Content-Disposition:attachment;filename="test.xlsx"');
$book->save('php://output');
});
http://localhost/excel
にアクセスするとExcelファイルがブラウザでダウンロードされる。