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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

Q&A

解決済

1回答

2901閲覧

CakePHP4をサーバーにアップロードするとき、ソースコードを非公開領域に入れたい

yukie1101

総合スコア11

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

0グッド

1クリップ

投稿2021/09/02 05:17

編集2021/09/02 07:01

前提・実現したいこと

これまでローカル環境で開発していたCakePHP4によるシステムを、サーバーにアップロードしたいと考えています。
その際、ソースコードは全て非公開領域に入れ、webroot配下のみを公開領域に入れたいんですが、
普通にwebroot/index.phpの中のrequiredを非公開領域に向けさせただけではうまくいきませんでした。

CakePHPのドキュメントを読んで、src/config/app.phpの設定をいじれば良いのでは?というところまでは分かったのですが
色々と設定をいじってみても、うまく読み込みが行われません。

環境

  • CakePHP4.2.8
  • PHP7.4.13
  • 利用サーバー:エックスサーバー

実現したいディレクトリ構成

[ドメイン名]
ー cake ←ここにwebroot以外を全て格納したい
ー public_html
ーー system
ーーー sys1 ←ここにwebroot配下のファイルを格納したい
ーーーー webroot ←ここにwebroot配下のファイルを格納したい
ーーーーー css
ーーーーー font
ーーーーー img
ーーーーー js
ーーーーー _.htaccess ←app.php内のfullBaseUrlを設定するために、一旦削除
ーーーーー favicon.ico
ーーーーー index.php

※ドメイン直下には、WordPressがインストール済

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

Missing Controller Cake\Http\Exception\MissingControllerException SystemController could not be found.

該当のソースコード

PHP

1// src/config/app.php 2 'App' => [ 3 'namespace' => 'App', 4 'encoding' => env('APP_ENCODING', 'UTF-8'), 5 'defaultLocale' => env('APP_DEFAULT_LOCALE', 'ja_JP'), 6 'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'Asia/Tokyo'), 7// 'base' => false, 8 'base' => '/home/[サーバーID]/[ドメイン名]/cake', 9 'dir' => 'src', 10 'webroot' => 'webroot', 11 'wwwRoot' => '/home/[サーバーID]/[ドメイン名]/public_html/system/sys1/', 12 'baseUrl' => env('SCRIPT_NAME'), 13 'fullBaseUrl' => '/home/[サーバーID]/[ドメイン名]/cake', 14 'imageBaseUrl' => 'img/', 15 'cssBaseUrl' => 'css/', 16 'jsBaseUrl' => 'js/', 17 'paths' => [ 18 'plugins' => [ROOT . DS . 'plugins' . DS], 19 'templates' => [ROOT . DS . 'templates' . DS], 20 'locales' => [RESOURCES . 'locales' . DS], 21 ], 22 ],

PHP

1// src/bin/cake.php 2// Check platform requirements 3require dirname(__DIR__) . '/config/requirements.php'; 4require dirname(__DIR__) . '/vendor/autoload.php'; 5 6use App\Application; 7use Cake\Console\CommandRunner; 8 9// Build the runner with an application and root executable name. 10//$runner = new CommandRunner(new Application(dirname(__DIR__) . '/config'), 'cake'); 11$runner = new CommandRunner(new Application('/home/[サーバーID]/[ドメイン名]/cake/config'), 'cake'); 12exit($runner->run($argv)); 13

試したこと

  • baseを、ソースコードのあるフルパスまでに変更
  • baseUrlのコメントアウトを外し、webroot直下の.htaccessを削除(リネーム)
  • wwwRootをwebrootまでのフルパスに変更
  • fullBaseUrlをソースコードのあるフルパスまでに変更

3日ほどこの問題で右往左往しており、全く作業が進まずかなり困っています。
何かヒントのようなものでも良いので、ご教授いただけるとありがたいです。
よろしくお願いします。

追記

ご指摘いただきありがとうございます、不足情報について追加させていただきます。

ローカル環境時のディレクトリ構成

localhost/cakephp/配下
ー bin
ー config
ー logs
ー plugins
ー resources
ー src
ー templates
ー tests
ー tmp
ー vendor
ー webroot ←webroot配下のファイルのみを公開領域に出したい
ーー css
ーー font
ーー img
ーー js
ーー .htaccess
ーー favicon.ico
ーー index.php

ローカル環境では、CakePHP4をインストールした直後とディレクトリ構成は変わっておりません。
ローカル環境でのアクセスも、http://localhost/cakephp/でアクセスできておりました。

ローカル環境時のapp.php設定内容

PHP

1// src/config/app.php 2 'App' => [ 3 'namespace' => 'App', 4 'encoding' => env('APP_ENCODING', 'UTF-8'), 5 'defaultLocale' => env('APP_DEFAULT_LOCALE', 'ja_JP'), 6 'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'Asia/Tokyo'), 7 'base' => false, 8 'dir' => 'src', 9 'webroot' => 'webroot', 10 'wwwRoot' => WWW_ROOT, 11 //'baseUrl' => env('SCRIPT_NAME'), 12 'fullBaseUrl' => false, 13 'imageBaseUrl' => 'img/', 14 'cssBaseUrl' => 'css/', 15 'jsBaseUrl' => 'js/', 16 'paths' => [ 17 'plugins' => [ROOT . DS . 'plugins' . DS], 18 'templates' => [ROOT . DS . 'templates' . DS], 19 'locales' => [RESOURCES . 'locales' . DS], 20 ], 21 ],

routes.php設定内容

PHP

1// src/config/routes.php 2<?php 3use Cake\Routing\Route\DashedRoute; 4use Cake\Routing\RouteBuilder; 5use Cake\Http\Middleware\BodyParserMiddleware; 6 7$routes->setRouteClass(DashedRoute::class); 8 9$routes->scope('/', function (RouteBuilder $builder) { 10 $builder->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); 11 12 $builder->connect('/pages/*', 'Pages::display'); 13 14 // API機能提供用 15 $builder->setExtensions(['json']); 16 $builder->resources('Api'); 17 18 19 $builder->fallbacks(); 20});

routes.phpに関しては、現時点でローカル環境、本番環境共に違いはありません。

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

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

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

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

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

FKM

2021/09/02 06:16

元のプロジェクトがどのような階層になっていたのかがわかりづらいので提示お願いよろしいですか。
FKM

2021/09/02 06:46

routes.phpの中身はどうなってますか?
yukie1101

2021/09/02 07:02

FKMさん、諸々の追記依頼ありがとうございます! 追加させていただきましたので、何卒確認お願いします。
yukie1101

2021/09/02 08:08

ご提案ありがとうございます。 サイトを確認してみたんですが、おそらくCakePHP2系ではないかなと思います。 webroot/index.phpの中身が大きく異なっているため、各編集ポイントがどこに当たるのか 私では判別がつかない状態です。 ```PHP // src/webroot/index.php // Check platform requirements require '/home/[サーバーID]/[ドメイン名]/cake/config/requirements.php'; // For built-in server if (PHP_SAPI === 'cli-server') { $_SERVER['PHP_SELF'] = '/system/sys1/' . basename(__FILE__); $url = parse_url(urldecode($_SERVER['REQUEST_URI'])); $file = __DIR__ . $url['path']; if (strpos($url['path'], '..') === false && strpos($url['path'], '.') !== false && is_file($file)) { return false; } } require '/home/[サーバーID]/[ドメイン名]/cake/vendor/autoload.php'; use App\Application; use Cake\Http\Server; // Bind your application to the server. $server = new Server(new Application( '/home/[サーバーID]/[ドメイン名]/cake/config')); // Run the request/response through the application and emit the response. $server->emit($server->run()); ```
FKM

2021/09/03 00:14

cakePHP3以降なんで、配列じゃなくてオブジェクトで制御されるはずですよ。まずは、インデックスになっている部分は軒並みオブジェクトのメンバに変える必要があります。
FKM

2021/09/03 01:03

cakePHP3以降は根本的なルーティングが変わってましたので、回答先のリンクを参考にしてもらえたらと思います。
guest

回答1

0

ベストアンサー

このページと同様のやり方で、自分の方は行けた気がします。
(centOSですがwebroot配下のindexしか表示されなくなりました)
元データからいじったのはpath.phpのWWW_ROOT定数の値とwebroot配下のindexファイルだけです。

CakePHP3を触ってみました 〜やはりwebrootは切り出そう〜

投稿2021/09/03 01:01

編集2021/09/03 01:04
FKM

総合スコア3647

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

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

yukie1101

2021/09/03 01:57

ありがとうございます!こんなに簡単なことだったとは… 本当に助かりました、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問