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

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

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

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

PHP

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

Q&A

解決済

2回答

1086閲覧

PHPでhashidsが使えません。

kagawashinji

総合スコア13

CentOS

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

PHP

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

0グッド

0クリップ

投稿2019/02/18 08:31

前提・実現したいこと

PHPでhashidsが使えません。

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

centos7環境にHashidsを入れたく、インストールしてみました。
composer require hashids/hashids

インストールはそのまま出来(バージョンは2.0かな)、あとはPHP側で実行するべく、
require_once DIR . "/vendor/autoload.php";
としたのですが、
PHP Fatal error: require_once(): Failed opening required
となるので、パスが通っていないのだなと思い、
インストールされたフォルダのパスを通したのですが、同じエラーでした。
どうも開けないようです。。。

composer内のsrc/に展開されたPHPファイルがあったので、
直接ドキュメントルートにアップし、
require_once "Hashids/Hashids.php";

としてみた所、
PHP Fatal error: Interface 'Hashids\HashidsInterface' not found
となります。

ぐぐると、
https://qiita.com/Hiraku/items/4904584767090e5b13a2
のような記事は見つけるのですが、これはPHPとHashidsが互換性の無いバージョンになるのでしょうか。。。

PHPの環境は7.0です。
何か他に試せる事があれば教えてください。

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

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

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

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

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

guest

回答2

0

php

1require_once DIR . "/vendor/autoload.php";

でやると
PHP Notice: Use of undefined constant DIR - assumed 'DIR' in /test/main.php on line 3
っていうワーニングが出てきましたが、このせいでは(DIRなんていう定数なかったはず)
(その下でPHP Fatal error: require_once(): Failed opening required 'DIR/vendor/autoload.php' (include_path='.:/usr/share/pear:/usr/share/php') in /test/main.php on line 3とも出てきた)


試した限り
composer.phar require hashids/hashids

hashids動かすために
yum install php-gmp
でgmpインストール

php

1<?php 2require_once('vendor/autoload.php'); 3 4$hashids = new Hashids\Hashids('this is my salt'); 5$id = $hashids->encode(1, 2, 3); 6$numbers = $hashids->decode($id);

で動きました。

投稿2019/02/18 09:29

rururu3

総合スコア5545

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

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

kagawashinji

2019/02/18 13:17

回答ありがとうございます。DIRは見落としでした。。。 しかしパーミッションエラーになってしまいます。
rururu3

2019/02/18 13:26

それに関してはchmodやchownで適切なユーザー・権限を与えてください
kagawashinji

2019/02/18 14:38

composer.phar require hashids/hashidsを実行する際にドキュメントルートへ移動してからインストールを実行し、フォルダの権限を変えてみた所、 PHP Fatal error: Uncaught RuntimeException: Missing BC Math or GMP extension. となりました。 ご指摘の通りGMPのエラーっぽいです。 その後、yum install php-gmpとしましたが、うまく入らないようなので、もう少し調査です。
guest

0

ベストアンサー

このページを見て試されているようですが。
【PHP】ユニークで短いユーザーID生成にはhashidsが便利!

だとしたら、

require_once DIR . "/vendor/autoload.php";

だと、定数DIRが定義されていないというnoticeが表示されるはずですよ(notice非表示に制御してませんか?)。
__DIR__ とマジカル定数を使わないと駄目です。

マジカル定数の__DIR__はファイルパスを表示してくれるものなので、あとは実際のvendor/autoload.phpと参照場所を合わせてください。未定義定数のDIR(予約語でもなんでもありません)とは別物です。

FILE」や「DIR」などPHPのマジカル定数を活用しよう

require_once __DIR__ . "/vendor/autoload.php";

※補足
vendor/autoload.phpはcomposerによってインストールされた外部ライブラリを格納するフォルダとそれを実行するためのプログラムなので、本体が実際動くかはともかく、autoload.phpの参照だけなら、PHPのバージョンは全く関係ありません。

投稿2019/02/18 09:17

編集2019/02/18 09:27
FKM

総合スコア3608

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

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

kagawashinji

2019/02/18 13:20

回答ありがとうございます。DIRは見落としてました。。。 どうやら、composerでインストールした際に、/home/ユーザー名/vendor/hashidsでインストールされるので、__DIR__は使えず。ドキュメントルートは/var/www/でして、パスを合わせても参照する権限が無くパーミッションエラーになってしまうようです。もう少し調べます。
kagawashinji

2019/02/19 07:22

結果的にPHP7のマイナーバージョンが問題ありでphp-gmpがインストールできず、あと一歩の所で断念しました。
FKM

2019/02/19 07:50

yum install --enablerepo=remi-php72 php-gmpでいけないですか?
FKM

2019/02/19 07:52

あとマジカル定数が駄目なら普通のグローバル変数$_SERVER['server_name']あたりで取得できます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問