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

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

ただいまの
回答率

87.49%

phpのプログラムを実行するとrequireでエラーになります

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,148
退会済みユーザー

退会済みユーザー

phpの参考書で勉強中です。
windows10、XAMPP for windows 7.3.12を使っています。
以下のphpのプログラムを実行するとrequireでエラーになります。
エラーでは'restaurant-functions.php'が開けないか、ファイルがないと
でています。コードをチェックしましたが、どこも悪くないようなのですが、解決できないので教えてくださいお願い致します。

<?php
    // 別ファイルの参照
    require  'restaurant-functions.php';        
    // 25ドルの請求に加え8.25%の税金と20%のチップ
    $total_bill = restuarant_check(25,8.875,20);

    // 手持ちは30ドル
    $cash = 30;

    print "I need to pay with ".payment_method($cash,$total_bill);コード
// 返り値の型の宣言
    function restaurant_check($meal,$tax,$tip){
            $tax_amount = $meal*($tax/100);

            $tip_amount = $meal*($tip/100);

            $total_amount = $meal + $tax_amount + $tip_amount ;

            return $total_amount;
    }
// 複数のreturn文を持つ関数
    function payment_method($cash_on_hand,$amount){

        if($amount >  $cash_on_hand){

            return 'credit_card';

        }else{
            return 'cash';
        }
    }
Fatal error: Uncaught Error: Call to undefined function restuarant_check() in C:\xampp\htdocs\php_oreilly\chap5\5-27.php:5 Stack trace: #0 {main} thrown in C:\xampp\htdocs\php_oreilly\chap5\5-27.php on line 5

//paiza.io
//実行エラー

PHP Warning:  require(restaurant-functions.php): failed to open stream: No such file or directory in /workspace/Main.php on line 4
PHP Fatal error:  require(): Failed opening required 'restaurant-functions.php' (include_path='.:/usr/share/php') in /workspace/Main.php on line 4
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

+2

・ファイル名を間違えている
・ディレクトリを間違えている
のどちらかです。

カレントディレクトリにそのファイルはありますか?
system("dir");で、カレントディレクトリにあるかどうかわかります

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/02/02 00:02

    ありがとうございます。

    キャンセル

  • 2020/02/02 00:05

    すべてC:\xampp\htdocs\php_oreilly\chap5に入れています。関数のコピペで解決しました。周りに聞ける人がいないので、teratailは助かっています。

    キャンセル

checkベストアンサー

+1

ファイル名合ってないのでは。(あとはパスか)

もし合ってたとしてもundefined functionは出続けます。

定義:restaurant_check
呼出:restuarant_check

手打ちしないこと。
エラーでは「そんな関数見つからん」って言ってるわけなので、
エラーメッセージの「そんな関数」の名称をコピーして探せばすぐ分かります。
コピペというのは効率や手抜きではなく確実にこなすための手段です。

あと、コーディングはIDE使うこと

requireちゃんと通ってれば予測変換や引数の確認もできたはず。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/02/02 00:01

    restaurant-functions.phpとその中の関数名restaurant_check、payment_methodをコピペしたら直りました。ありがとうございました。間違っているようには見えなかったですが、どこか間違っていたんですね。

    IDEは「Eclipse」を使っていました。「Eclipse」を使うとして、XAMMPとの兼ね合いはどうなるのでしょうか。

    キャンセル

  • 2020/02/02 04:48

    >間違っているようには見えなかった
    ですから、エラーが出てる時点で疑うべきは自身の目検でしょう。人の目なんて信頼できないものです。
    特に自分で作った自分のプログラムなら思い込みが必ず入ります。ですから世の中の現場(開発限らず)では二重三重でチェックをするのです。
    基本はコピペで検索。プログラムは書いた通りにしか動かないので、調査検証も極めて機械的に行う必要があります。

    >IDEは「Eclipse」を使っていました
    最後に書いたように、includeがちゃんと通っているのなら、
    例えばtest() というメソッドが定義されていれば、te・・・と打っていくたびにサジェストで
    絞られていくので、選択候補から選べば間違いなく関数名も選択できますし、
    includeも例えばtest.phpが置かれていたら
    require_once '';
    として
    require_once 't';
    と打っていくと同じようにサジェストで参照できるファイルが絞られていって選べます。

    このようにサポート機能が充実しているのがIDEなので、使いこなせていないだけだと思います。

    >「Eclipse」を使うとして、XAMMPとの兼ね合いはどうなるのでしょうか。

    「XAMMP」ではなく「XAMPP」です。こういうところが今回のようなミスに繋がります。
    EclipseのプロジェクトルートをXAMPPのhtdocsにするか、
    All in one ならXAMPP入りのEclipseもあるので、そちらを使うかどちらかでしょう。
    まあそれも「要件次第」です。
    複数プロジェクトを作ってそれぞれ別でindexとしたいのでしたらDocumentRootを都度切り替えるか
    XAMPP自体を複数入れるのもありです。そこはお好きなように。

    キャンセル

  • 2020/02/02 15:30

    ありがとうございます。たいへんよくわかりました。これぐらいの丁寧な説明で理解できるぐらいのレベルです。

    キャンセル

  • 2020/02/02 17:07

    卑下することはないかと。オープンソース故にきちんとした説明書ってなかなかないですし、色々興味もって触ってみることで覚えることもあると思います。

    キャンセル

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

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

関連した質問

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