質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.93%

コマンドライン実行で成功するphpがブラウザ経由ではエラーになる

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,476

score 61

 前提・実現したいこと

ubuntu16.4&php7.2の環境でWEBサーバを作成しています。
そこでバーコードを表するためにImageBarcode2をPEARでインストールしました。

 発生している問題・エラーメッセージ

コマンドでphpを直接実行するとバーコード画像ファイルが作成されるのですが、ブラウザから同じphpファイルを指定するとFatal errorとなってファイル作成がされません

Fatal error: Uncaught Error: Call to undefined function imagefontheight() in /usr/share/php/Image/Barcode2/Writer.php:63 Stack trace: #0 /usr/share/php/Image/Barcode2/Driver/Code128.php(274): Image_Barcode2_Writer->imagefontheight(2) #1 /usr/share/php/Image/Barcode2.php(146): Image_Barcode2_Driver_Code128->draw() #2 /var/www/html/php/testbarcode.php(16): Image_Barcode2::draw('012345', 'Code128', 'png', false) #3 /var/www/html/php/x_testbarcode.php(7): mkBarcode->mkBarcode('012345') #4 {main} thrown in /usr/share/php/Image/Barcode2/Writer.php on line 63

 該当のソースコード

<?php

ini_set('display_errors', 1);

  require "testbarcode.php";

  $barcode = new mkBarcode("012345");

?>
******

***x_testbarcode.php***
<?php
require("Image/Barcode2.php");

 class mkBarcode{
  var $barcode_val;
  var $image_name;

  function mkBarcode($barcode_val){

    $this->barcode_val=$barcode_val;

    $this->image_name='barcodeImage/'.$barcode_val.'.png';

    $code= new Image_Barcode2();

    $image= $code->draw($this->barcode_val,'Code128','png',false);

    imagepng($image,$this->image_name);

  }

  function getBarcodeImage(){
    return $this->image_name;
  }

 }
?>
***

 試したこと

(1)Image_Barcode2のphpファイル内にあるディレクトリ指定を
'Image/Barcode2/~'をルートからの絶対パスに置換してみましたが結果は変わらず

(2)ディレクトリ&ファイルの所有者/権限による制限を疑い、関係のありそうな
・Image_Barcode2のインストールディレクトリ
・自分で作成phpファイル
・画像ファイル作成ディレクトリ
の各箇所を chmod 777 で利用許可を拡大しましたがエラーは出続けます

 補足情報(FW/ツールのバージョンなど)

(変更01)ソース内の外部呼出しの概略を説明します
x_testbarcode.php (自作)
・・|  calss mkBarcodeを呼出
・・+-testbarcode.php(自作)
・・・・|  class Image_Barcode2->drawを呼出
・・・・+-$include_path Image/Barcode2.php
・・・・・・|  class Image_Barcode2_Driver_Code128を呼出
・・・・・・ +-$include_path Image/Barcode2/Driver/Code128.php
・・・・・・・・|  class Image_Barcode2_Writerを呼出
・・・・・・・・+-$include_path Image/Barcode2/Writer.php
・・・・・・・・・・・・function imagefontheight($font) 

外部ファイルの呼び出しとclass、その中のfunctionがゴッチャゴチャ
になっているかもしれませんが、phpファイルの階層が外部ファイルを
呼び出している順です。

不足する情報があればご指摘ください。
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yag

    2018/03/01 17:13

    念の為ですが、ApacheやNginx等のWebサーバーの再起動ってされてますよね?

    キャンセル

  • yag

    2018/03/01 17:13

    あとはPHP-FPMを使用しているのであればそれの再起動もされてますか?

    キャンセル

  • imprezza

    2018/03/01 17:21

    ご指摘ありがとうございます。LAMP環境を構築しましたがNginx、PHP-FPMは使用していません。Apacheの再起動は実施していましたが、念のためサーバの再起動も実施しましたが現象変わらずです。

    キャンセル

回答 1

checkベストアンサー

+3

webブラウザからの phpinfo() と、
コマンドラインからの phpinfo() で違うところがないか比較するところから、でしょうか。

また、コマンドラインからの実行は一般ユーザーなのか、rootユーザーなのか、
webブラウザからの実行は例えばapacheユーザーになって
何かしら参照する環境変数が異なり可能性もあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/01 18:21

    回答ありがとうございます
    アカウントと権限、それに参照の確認ですね
    コマンド実行の際はroot、一般ユーザ共に試しましたがWEBブラウザのユーザが何だったのかは頭から抜けていました
    WEBブラウザがどのユーザを使うか、まず知らⓑてみます

    キャンセル

  • 2018/03/05 13:15

    質問の現象が発生した原因がわかりました
    m6uさんのご指摘にならってコマンドライン上でphpinfoを実行してみた所、phpのバージョンが複数インストールされているためです
    ・コマンドライン:php7.2
    ・webブラウザ:php7.0
    根本をたどると正しい手順でバージョンアップしていないためで、WEBブラウザで参照しているphp7.0にImage_Barcode2がセットアップされていないから動かない、という状況でした

    このとっ散らかった環境でどのように整理して(php7.0とphp7.2のどちらに揃えるか、現在の設定をどうやって移行するか、等)対処すれば良いかという問題がありますが、別のお話なのでこの質問は一旦終了して、再質問させていただきます

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る