LoginSignup
kait0401
@kait0401

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ローカルでインストールしたcomposerライブラリを開発環境に移したい

したいこと

・htmlでボタンを押したらxlsxの出力

phpspreadsheetというライブラリをcomposer経由で実装しようと思っています。

ですがリモートでの開発の為、composerとライブラリをローカルでインストールし、開発環境に移しました。

ですが、以下でエラーが出てしまいます。

$spreadsheet = new Spreadsheet();

原因はパスが通っていないことだと思います。
ほかに考えられる原因はphpのバージョン違いですが、バージョン合わせてインストールしたので可能性は低いです。

なので今回聞きたいことは、パスの通し方とパスの記載方法になります。

とりあえず状況を。。
ディレクトリは
app
-controllers
|-controller.php
ci
public
-他html
-index.php
shell
vendor
-composer
-phpoffice/phpspreadsheet
-autoload.php
conposer.json
composer.lock

controllers/controller.php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
use PhpOffice\PhpSpreadsheet\Spreadsheet;
class Order extends CI_Controller{
  function download_xlsx(){
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        $sheet->setCellValue('A1', 'Hello World !');
        $writer = new Xlsx($spreadsheet);
        $writer->save('hello world.xlsx');
}
public/index.php
require_once "vendor/autoload.php";

以上です。
ここでエラーが出てしまいます。

controllerで出力しようとしてるのがおかしいのでしょうか?

右も左も分からないので丸投げになってしまいますが、よろしくお願いします!

解決しました

原因はパスが通っていなかったのとfunctionの前にpublicが抜けてましたww
完全に初歩的ですね。。

controllers/controller.php
<?php
require(APPPATH.'../vendor/autoload.php');
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\Xls as XlsReader;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Writer\Xls;
class spreadsheet extends CI_Controller {
public function download_xlsx()
    {
        $spreadsheet = new Spreadsheet();

これでエラーが消えました。
ちなみにcodeigniterだとrequireの前にAPPPATH.が必須なのかもですね。
APPPATH.無しだとエラーになります。

ちょっと詳しくは説明できないですが、appフォルダからの相対パス的な感じらしいです。
ここら辺もちゃんと勉強しときます!w

ご回答いただいた方ありがとうございました。

0

2Answer

以下例では動きますか?

sample.php
<?php
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');

$writer = new Xlsx($spreadsheet);
$writer->save('hello world.xlsx');

動かないのはclassやfunctionを用いた場合での書き方の問題だと思います。

1

パスが間違っているのではないでしょうか。
まずは以下をお試し頂ければと思います。

public/index.php
require_once "../vendor/autoload.php";
1

Your answer might help someone💌