TaskArai
@TaskArai (Task Arai)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ローカル環境で動くPHPのコードがAWS EC2で動きません。お助け頂けないでしょうか。

 ローカル環境では動くPHPのコードなのですが、AWS EC2では動きません。プログラム触って一か月なので、色々考えたり調べてみましたが、理由が分からず解決できずにいます。どうか、アイデア頂けませんでしょうか。
AWS EC2で、PHPファイルによる「Hello world」は動いているため、PHPは動く環境です。コードを削ったり、手を加えたりして分かったことは、PHPファイルにおいて画像読み込みが上手くいかずに、エラーを吐き出しているようです。

 ローカル内でも、AWS EC2内でも、フォントデータと画像データはPHPファイルと同じディレクトリにあることを確認しています。
 何卒宜しくお願い致します。

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>闘病プロフィールメーカーα版</title>
</head>
<body>
  <h1>闘病プロフィールメーカーα版</h1>
  <p>22.12.01</p>
  <!--formを用いて、文字と画像を合成するphpファイルにデータを渡す-->
  <form action="profile.php" method="post">
    性別:<input type="text" name="gender"><br>
    誕生日:<input type="text" name="birth_day"><br>
    病名:<input type="text" name="sick"><br>
    趣味:<input type="text" name="hobby"><br>
    <br>
    <input type="submit" value="生成">
    <br>
    <br>
    <a href="https://twitter.com/nemuihito912">Twitter</a>

  </form>
</body>
</html>

profile.php
<?php
//入力フォームから無毒化して、文字を受ける
$gender = htmlspecialchars($_POST['gender']);
$birth_day = htmlspecialchars($_POST['birth_day']);
$sick = htmlspecialchars($_POST['sick']);
$hobby = htmlspecialchars($_POST['hobby']);

// コンテントタイプを設定します
header('Content-Type: image/png');


//画像を呼び出す
$url ='./toubyo_profile.png';

// 画像を再生成する
$im = imagecreatefrompng($url);

// 黒を生成する
$Black = imagecolorallocate($im, 0, 0, 0);


// フォントを設定する
$font = './UDDigiKyokashoN-B.ttc';

// テキストを追加する
imagettftext($im, 30, 0, 105, 65, $Black, $font, $gender);
imagettftext($im, 30, 0, 100, 146, $Black, $font, $birth_day);
imagettftext($im, 30, 0, 100, 230, $Black, $font, $sick);
imagettftext($im, 20, 0, 50, 330, $Black, $font, $hobby);

// png生成して、画像をメモリから排除する
imagepng($im);
imagedestroy($im);
?>

1

2Answer

エラーの内容が良く解らない(エラーメッセージは分かりませんか?)のでもやもやした回答になりますが、imagecreatefrompng関数はGDモジュールがPHPの実行系に含まれていないと使えません。
phpinfoという関数を使うとPHP環境の情報全体を見ることができます。その中にgdという項目が、まず含まれているでしょうか?
使える場合はGD Support enabledと表示されます。

2Like

Comments

  1. @TaskArai

    Questioner

    ご回答有難う御座います。
    おかげ様で、GDモジュールをインストールして解決しました!
    有難う御座いました。

エラーを吐き出しているようです。

ext-xxxのようなエラーメッセージはないのでしょうか?

php -V
php -m
cat -n /etc/*/php.ini 

にて php-xxx の過不足を確認しては?
yum install -y php-xxx
apt install -y php-xxx
をエラーが無くなるまでトライして下さい。

info.php
<?php phpinfo(); ?>

で詳細な違いを確認できます。

php.iniは修正した記憶があれば確認しましょう!

1Like

Comments

  1. @TaskArai

    Questioner

    ご回答有難う御座います。
    PHPのバージョンを新しくするということで宜しいでしょうか?
    PHPのバージョンを8.0まで新しくしましたが、コードがローカル環境のように動作しませんでした。

    現在、AWS EC2に画像を直接アップロードしているのですが、Qiitaで調べてみると、画像もコンパイルされるようです。
    画像がコンパイルされた結果、imagecreatefrompngがコンパイルされた画像を処理できなくなり、コードが動いていない可能性が出ていると考えています。

    これを解決する、または代替え案など御座いませんでしょうか。
    大変申し訳ないのですが、ご回答くださると幸いです。
  2. [PHPのバージョンを新しくする]

    一致が望ましいが、それよりモジュールの不足が問題です。

    php -m でモジュールの過不足がある が前提です。
    yum install gcc makeとかが漏れて過不足のあるモジュールがインストールできないのかもしれません。
    xxx.devl なんかも必要かも?

    原因: ローカル環境 ≠ AWS EC2環境

    エラーメッセージから推測 web検索してコツコツ一致させる以外方法はありません。

  3. @TaskArai

    Questioner

    ご回答有難う御座います。
    おかげ様で、GDモジュールをインストールして解決しました!
    有難う御座いました。
    モジュール、これから気を付けていこうと思います。

Your answer might help someone💌