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

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

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

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

Q&A

解決済

2回答

3046閲覧

PHPでログイン機能を実装

fujirei

総合スコア12

PHP

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

1グッド

1クリップ

投稿2016/03/19 05:01

編集2016/03/19 06:42

現在ドットインストールの「PHPでログイン機能を実装しよう」(http://dotinstall.com/lessons/sns_php_v3)を勉強しておりまして、ローカル開発環境では問題なく動作確認ができたのですが、

さくらのレンタルサーバ(スタンダード)へ実装すると下記のエラーから進めません。
Fatal error: Class 'MyApp\Controller\Index' not found in /ローカルホスト/test/public_html/index.php on line 8

ローカル開発環境では問題なく動作することを考えると、さくらのサーバの問題なのか、記述の問題なのか全く見当がつかなくなりました。
自分なりにいろいろと調べてみたのですが、解決方法が見当たらないため、ご教授いただけますでしょうか。

ちなみに、ローカル開発環境はVAGRANTでcentosを立ち上げて行っています。
さくらのレンタルサーバにてPHPのバーションは5.6.18です。

申し訳ございません。うっかりして会員限定のページだったことに気づきませんでした。

ディレクトリはconfiglibpublic_htmlとなっております。

php

1// public_html/index.php 2<?php 3// ユーザーの一覧 4 5require_once(__DIR__ . '/../config/config.php'); 6 7// var_dump($_SESSION['me']); 8 9$app = new MyApp\Controller\Index(); 10 11$app->run(); 12 13// $app->me() 14// $app->getValues()->users 15 16?> 17<!DOCTYPE html> 18<html lang="ja"> 19<head> 20 <meta charset="utf-8"> 21 <title>Home</title> 22 <link rel="stylesheet" href="styles.css"> 23</head> 24<body> 25 <div id="container"> 26 <form action="logout.php" method="post" id="logout"> 27 <?= h($app->me()->email); ?> <input type="submit" value="Log Out"> 28 <input type="hidden" name="token" value="<?= h($_SESSION['token']); ?>"> 29 </form> 30 <h1>Users <span class="fs12">(<?= count($app->getValues()->users); ?>)</span></h1> 31 <ul> 32 <?php foreach ($app->getValues()->users as $user) : ?> 33 <li><?= h($user->email); ?></li> 34 <?php endforeach; ?> 35 </ul> 36 </div> 37</body> 38</html>

php

1// lib/Controller/index.php 2<?php 3 4namespace MyApp\Controller; 5 6class Index extends \MyApp\Controller { 7 8 public function run() { 9 if (!$this->isLoggedIn()) { 10 // login 11 header('Location: ' . SITE_URL . '/test/login.php'); 12 exit; 13 } 14 15 // get users info 16 $userModel = new \MyApp\Model\User(); 17 $this->setValues('users', $userModel->findAll()); 18 } 19 20}

php

1 2// config/config.php 3<?php 4ini_set('display_errors', 1); 5 6define('DSN', 'mysql:host=**********;dbname=**********;charset=utf8'); 7define('DB_USERNAME', '**********'); 8define('DB_PASSWORD', '**********'); 9 10define('SITE_URL', 'http://' . $_SERVER['HTTP_HOST']); 11 12require_once(__DIR__ . '/../lib/functions.php'); 13require_once(__DIR__ . '/autoload.php'); 14 15session_start();

php

1// config/autoload.php 2<?php 3spl_autoload_register(function($class) { 4 $prefix = 'MyApp\\'; 5 if (strpos($class, $prefix) === 0) { 6 $className = substr($class, strlen($prefix)); 7 $classFilePath = __DIR__ . '/../lib/' . str_replace('\\', '/', $className) . '.php'; 8 if (file_exists($classFilePath)) { 9 require $classFilePath; 10 } 11 } 12});
scksck👍を押しています

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

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

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

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

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

shi_ue

2016/03/19 05:08

なんかパスが違うみたいですけど。 ソースプリーズ。
guest

回答2

0

ベストアンサー

/lib/Controller/index.php/lib/Controller/Index.php と頭を大文字にしてください。
クラス名とファイル名を同じにしないと、autoloadしません。

投稿2016/03/19 08:28

shi_ue

総合スコア4437

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

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

fujirei

2016/03/19 08:53

ありがとうございます。頭文字をすべて見直したところ、2つミスがありました。 ローカル開発環境ではなぜか小文字でも正常に読み込んでいたようです。 このような初歩的なミスにお付き合いいただきましてありがとうございました。
guest

0

PHP

1require_once(DIR . '/../config/config.php');

DIRという定数はどこから来ているんでしょう?
定義されているところがない場合、とんでもないところ見に行っています。

わたしもさくらのレンタルサーバーを借りているので、見てみましたが、
/home/サブドメイン名/www
がhtmlのルートになっています。(ドメインを付けている場合は別です)

ということは、
現在/home/サブドメイン名/www/public_htmlにコンテンツを置いているということでいいでしょうか?
それで、configディレクトリはpublic_htmlと同一階層にあると。
そうすると、

PHP

1require_once(__DIR__./../config/config.php');

になりそうです。

投稿2016/03/19 05:38

shi_ue

総合スコア4437

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

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

fujirei

2016/03/19 05:46

申し訳ございません。確認するべきでしたが、ご指摘いただきましたコードは require_once(__DIR__.’/../config/config.php'); と正確に記述しております。
shi_ue

2016/03/19 05:47

で、config.phpは?
fujirei

2016/03/19 06:15 編集

コードも見にくくなってしまって申し訳ございませんでした。 configディレクトリはpublic_htmlと同一階層にあります。 おっしゃる通り、コンテンツは/home/サブドメイン名/www/public_htmlに置いています。
shi_ue

2016/03/19 06:11

そうじゃなくてですね、提供されたコードでは判断できません。 なにせ、コントローラを読み込む処理が見当たらないからです。たぶん、config.phpでauto loadなどを使って読み込んでないですか?
fujirei

2016/03/19 06:52

度々ありがとうございます。 おっしゃる通りautoload.phpを読み込んでおります。 ソース更新いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問