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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

2回答

1021閲覧

LaravelのHomestead環境でtimecopを使えるようにしたい

yukiusagi

総合スコア22

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2017/09/25 06:40

###前提・実現したいこと
Laravel5.4のHomestead環境(Windows)で下記のPHP拡張ライブラリを使えるようにしたいです
https://github.com/hnw/php-timecop

###発生している問題・エラーメッセージ
Vagrantで作成した仮想開発環境内にtimecopを導入し、php.iniも変更したのですがコード内で
timecop_freeze(0);
などの関数が使えません。
Laravelの場合は特別な操作をしないと導入できないのでしょうか。

php

1// PhpStormのエラー 2Declaration of referenced function is not found in built-in library and project files.

###該当のソースコード

php

1var_dump(date("Y-m-d")); // todays date 2timecop_freeze(0); 3var_dump(gmdate("Y-m-d H:i:s")); // string(19) "1970-01-01 00:00:00" 4var_dump(strtotime("+100000 sec")); // int(100000)

###補足情報(言語/FW/ツール等のバージョンなど)
言語:PHP7
フレームワーク:Laravel5.4
IDE:PhpStorm2017.2

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ちゃんとやるならHomesteadの仕様を理解すべきでしょうけど、そこまで詳しく私も知らないので分かってることだけ回答します。

まず、ちゃんと読み込まれているかを確認しましょう。
仮想環境に入って

php -m|grep "timecop"

してみて拡張が入っているか確認しましょう。

Laravelが拡張を阻害するようなことはありません。

エラーがphpstormのエラーの話になっていますが、phpstormは外部のPHP拡張を設定なしに補完することはできませんし、見つけられません。
https://lab.sonicmoov.com/development/php/phpstorm/
こちらの記事を見る限り、stubファイルを生成する必要があるようです。
ただ、このstubはhnw/php-timecopのリポジトリ内にすでにあるのでそれを取ってくるだけで良さそうです。

スタブを用意した後は最近は楽になっているようで、
https://stackoverflow.com/questions/30328805/phpstorm-how-to-add-method-stubs-from-a-pecl-library-that-phpstorm-doesnt-curr
この質問の回答をみると、Include pathにスタブファイルを指定しておけば認識してくれるみたいです。

投稿2017/09/25 07:43

編集2017/09/25 07:49
fagai

総合スコア2158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukiusagi

2017/09/25 09:02 編集

返信ありがとうございます。 教えていただいた通りPhpStormの設定を変更したところ、PhpStormでtimecopの補完がきくようになり、PhpStormのエラーは解消しました。 ただ、ブラウザ側は依然としてLaravelのエラーがでたままでした。 ■エラー Call to undefined function App\Http\Controllers\timecop_freeze() まだ何か設定が必要ということでしょうか。 仮想環境に入って教えていただいたコマンドを打ったところ、timecopが入っていることは確認できました。
yukiusagi

2017/09/25 08:59

追加での質問になってしまい申し訳ないのですが、 拡張のインストールするディレクトリは決まってたりしますでしょうか。 プロジェクト内にgit cloneしなければいけないでしょうか。
yukiusagi

2017/09/25 09:05

timecopを仮想環境に導入する際、make installコマンドを打つと下記のエラーが表示されていました。 Installing shared extensions: /usr/lib/php/20160303/ cp: cannot create regular file '/usr/lib/php/20160303/#INST@22748#': Permission denied Makefile:87: recipe for target 'install-modules' failed make: *** [install-modules] Error 1
fagai

2017/09/26 05:03

>拡張のインストールするディレクトリは決まってたりしますでしょうか。 プロジェクト内にgit cloneしなければいけないでしょうか。 決まってないです。どこでも構いません。 エラーの内容からするにsudoしなかったからエラーになったように見えます。 ただ、php -mで入っていることが確認できているようなので関係なさそうな気がしました。
yukiusagi

2017/09/26 05:53

>エラーの内容からするにsudoしなかったからエラーになったように見えます。 再度試してみたところ、sudoするとエラーはできませんでした。
yukiusagi

2017/09/26 08:39 編集

timecopが使えないと仮定した場合、未来や過去のデバッグ(期間限定イベントなどが正常に作動するかどうかのデバッグ等)を行うには一般的にどのように行うのがよいでしょうか。
fagai

2017/09/26 08:43 編集

> timecopが使えないと仮定した場合、未来や過去のデバッグ(期間限定イベントなどが正常に作動するかどうかのデバッグ等)を行うには一般的にどのように行うのがよいでしょうか。 それはこの質問でするよりも別の質問をしたほうが良い気がしますが、私ならCookieなどにデバッグ専用のキーのようなものを入れておいて時間を取り出すときはそのCookieを必ずみて返すみたいなクラスを用意しますかね。これはあくまでも実際に動かす必要がある場合ですけども
yukiusagi

2017/09/27 10:47

失礼いたしました。返信ありがとうございます。 教えていただいた方法を試してみます。
guest

0

同じようなところで躓きました。
私の場合は undefine method でしたが。

インストールは以下で行いました。
pecl install timecop-beta

Build process completed successfully
Installing '/usr/lib/php/20160303/timecop.so'
install ok: channel://pecl.php.net/timecop-1.2.10
Extension timecop enabled in php.ini

上記コマンドで自動的に php.ini に extension が追加されます。
/etc/php/7.1/cli/php.ini

ここで画面を叩いて試していました。
(※コマンドラインからは成功していた)
が、画面からは以下 php.ini にも extension の追加設定が必要でした。
/etc/php/7.1/fpm/php.ini

再起動はお忘れなく。

投稿2018/05/17 12:04

編集2018/05/17 12:10
akasatanaha

総合スコア44

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問