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コマンドの実行について教えてください。

したいこと

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

質問は2点ありまして以下になります。
・リモートでのcomposerコマンドの実行方法。
・上記不可であれば、生phpもしくはcodeigniterでのxlsx出力方法

現在の開発の状況
・atomのremote-ftpを使用して開発
・php、codeigniterでの開発
・xlsx形式のファイルを出力したい

上記から以下に困っています。
・phpspreadsheetというライブラリをcomposerでインストールしたいが、リモート上の為composerコマンドの実行方法が分からない。

composer.jsonやcomposer.lockなどのファイルがそもそも存在していないので、もしかしたらcomposer自体インストールされていないかもです。

お時間ある方、お答えいただけると助かります。。

追記

ローカル環境でcomposerとライブラリをインストールし、開発環境に移しました。
ですが、以下でエラーが出てしまいます。

$spreadsheet = new Spreadsheet();

原因はパスが通っていないことだと思います。
なので今回聞きたいことは、パスの通し方とパスの記載方法になります。

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

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/indec.php
require_once "vendor/autoload.php";

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

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

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

0

2Answer

Comments

  1. @kait0401

    Questioner
    ありがとうございます!

リモート接続している環境がどのようなものか分からないのですが、
SSHなどで接続できない環境の場合はcomposerコマンドも実行できないのではないかと思います。

それ以外でcomposerコマンドを実行するとなると、
例えばexec関数などを使ってPHPファイルからcomposerコマンドを実行するスクリプトを作ってアップロード、
そしてHTTPからそのスクリプトを実行するとかいかがでしょうか?
PHPから外部スクリプトを実行するのはセキュリティ上おすすめは出来ないですが。

もちろんリモート環境にcomposer本体がインストールされている必要はあります。

もしくはローカルでcomposerコマンドを実行してアップロードしてしまう方法はいかがですか?
composerでインストールしたパッケージはvendorディレクトリに入っています。

0

Comments

  1. @kait0401

    Questioner
    ありがとうございます。
    後者試してみました!

Your answer might help someone💌