質問編集履歴

2 追記

masleisii

masleisii score 8

2016/02/12 16:06  投稿

PHPでshell_exec()を実行すると、パスを通してるのに"command not found"となる
web上でcsvファイルをアップロードし、embulkというツールを使ってdbに保存するというwebアプリケーションを現在作っています。
以下が問題の部分です。
```php
$embulkShell = "embulk run " . APPLICATION_PATH . "/../data/upload/config.yml";
$output = shell_exec($embulkShell . ' 2>&1');
echo $output;
```
アップロード後、上記のembulkコマンドをたたくと以下のエラーになります。
```php
sh: embulk: command not found
```
パスは以下のように通っているのですが、うまくいきません。
```php
echo get_include_path();
出力結果
/home/ec2-user/work/uploader/application/../library:/home/ec2-user/work/uploader/library:/home/ec2-user/work/uploader/embulk/bin:.:/usr/share/php:/usr/share/pear
```
以下のように絶対パスで実行すれば動きそうなのですがrunコマンドで別のembulkコマンドを呼び出しており、結局そこで"command not found"になってしまうのでパスを通して実行したいです。
```php
$embulkShell = "/home/ec2-user/work/uploader/embulk/bin/embulk run " . APPLICATION_PATH . "/../data/upload/config.yml";
```
実行権限は付与しています。  
```bash  
chmod +x /home/ec2-user/work/uploader/embulk/bin/embulk  
```  
 
また、サーバー側で直接コマンドをたたくと実行できたので、クライアントで行う際に問題があると思われます。
 
どうかご教授お願いいたします。
環境
Linux version 4.1.10-17.31.amzn1.x86_64
Apache/2.2.31 (Unix)
PHP 5.3.29
ZendFramework 1.12.17
Embulk v0.8.2
  • PHP

    28548 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Linux

    5337 questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Zend Framework

    81 questions

    Zend Frameworkは、PHP5で記述されたWebアプリケーションフレームワークです。Zend Frameworkには守らなければならない開発の規定というものは存在せず、MVCなどの複数のコンポーネントを提供しています。

  • CentOS

    3729 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Embulk

    44 questions

    Embulkは、CSVデータやアクセスログなどの構造化データを高い信頼性で転送することができる、プラグインベースのバルクデータローダーです。

1 タグ追加

masleisii

masleisii score 8

2016/02/12 16:01  投稿

PHPでshell_exec()を実行すると、パスを通してるのに"command not found"となる
web上でcsvファイルをアップロードし、embulkというツールを使ってdbに保存するというwebアプリケーションを現在作っています。
以下が問題の部分です。
```php
$embulkShell = "embulk run " . APPLICATION_PATH . "/../data/upload/config.yml";
$output = shell_exec($embulkShell . ' 2>&1');
echo $output;
```
アップロード後、上記のembulkコマンドをたたくと以下のエラーになります。
```php
sh: embulk: command not found
```
パスは以下のように通っているのですが、うまくいきません。
```php
echo get_include_path();
出力結果
/home/ec2-user/work/uploader/application/../library:/home/ec2-user/work/uploader/library:/home/ec2-user/work/uploader/embulk/bin:.:/usr/share/php:/usr/share/pear
```
以下のように絶対パスで実行すれば動きそうなのですがrunコマンドで別のembulkコマンドを呼び出しており、結局そこで"command not found"になってしまうのでパスを通して実行したいです。
```php
$embulkShell = "/home/ec2-user/work/uploader/embulk/bin/embulk run " . APPLICATION_PATH . "/../data/upload/config.yml";
```
また、サーバー側で直接コマンドをたたくと実行できたので、クライアントで行う際に問題があると思われます。
どうかご教授お願いいたします。
環境
Linux version 4.1.10-17.31.amzn1.x86_64
Apache/2.2.31 (Unix)
PHP 5.3.29
ZendFramework 1.12.17
Embulk v0.8.2
  • PHP

    28548 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Zend Framework

    81 questions

    Zend Frameworkは、PHP5で記述されたWebアプリケーションフレームワークです。Zend Frameworkには守らなければならない開発の規定というものは存在せず、MVCなどの複数のコンポーネントを提供しています。

  • Embulk

    44 questions

    Embulkは、CSVデータやアクセスログなどの構造化データを高い信頼性で転送することができる、プラグインベースのバルクデータローダーです。

  • Linux

    5337 questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • CentOS

    3729 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る