php-crud-api をセットアップ
2023-11-15 記載
概要 : データベースのデータをhttp越しにJSONで読み出すPHPを入れてみました
Keyword : php-crud-api, PHP, データベース, create-read-update-delete,
cloudfreeでは外部からデーターベースに接続できないので、それに変わるツールが便利なときがあります。
ここでいう「外部から」は、つまりはポート3306で接続できない、ということであり、http(Port=80 or 443)なら当たり前に構わないわけです。
SQL文そのままではないですが、クエリを投げたらレコードをJSONで返してくれる、というのがタイトルのphp-crud-apiで、
GitHub
https://github.com/mevdschee/php-crud-api
composerなら
composer require mevdschee/php-crud-api
ローカルに環境をもっていればローカルでセットアップしてFTPであげればOKです。サーバでcomposerを叩く必要はありません。
cloudfreeの場合、ローカル環境のパスを
C:\home\cfsid\cfsid.cloudfree.jp\public_html\
にすれば何かと便利なのではと思いそう配置してます。
cd C:\home\cfsid\cfsid.cloudfree.jp\public_html\yoursetupfolder
C:\home\cfsid\cfsid.cloudfree.jp\public_html\yoursetupfolder>composer require mevdschee/php-crud-api
Using version ^2.14 for mevdschee/php-crud-api
./composer.json has been created
Running composer update mevdschee/php-crud-api
Loading composer repositories with package information
Updating dependencies
Lock file operations: 7 installs, 0 updates, 0 removals
- Locking mevdschee/php-crud-api (v2.14.25)
- Locking nyholm/psr7 (1.8.1)
- Locking nyholm/psr7-server (1.1.0)
- Locking psr/http-factory (1.0.2)
- Locking psr/http-message (2.0)
- Locking psr/http-server-handler (1.0.2)
- Locking psr/http-server-middleware (1.0.2)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 7 installs, 0 updates, 0 removals
- Installing psr/http-message (2.0): Extracting archive
- Installing psr/http-server-handler (1.0.2): Extracting archive
- Installing psr/http-server-middleware (1.0.2): Extracting archive
- Installing psr/http-factory (1.0.2): Extracting archive
- Installing nyholm/psr7-server (1.1.0): Extracting archive
- Installing nyholm/psr7 (1.8.1): Extracting archive
- Installing mevdschee/php-crud-api (v2.14.25): Extracting archive
3 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
2 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
(2023-11-20時点の composer require mevdschee/php-crud-api)
以下のように配置したとします。
public_html直下にはなるべくおかない構想とします。

yoursetupfolderに、crud.php(ファイル名は後のURLと合わせたらなんでもいい)
を作成。その中身を以下に。
<?php
namespace Tqdev\PhpCrudApi;
require_once "vendor/autoload.php";
$config_mydata = [
'debug' => true,
'driver' => 'mysql',
'port' => '3306',
'address' => 'localhost',
'username' => 'cfsid_dbuser',
'password' => 'password',
'database' => 'cfsid_defautconnectdb',
];
$config_base = [
'driver' => null,
'address' => null,
'port' => null,
'username' => '',
'password' => '',
'database' => '',
'command' => '',
'tables' => 'all',
'mapping' => '',
'middlewares' => 'cors',
'controllers' => 'records,geojson,openapi,status',
'customControllers' => '',
'customOpenApiBuilders' => '',
'cacheType' => 'TempFile',
'cachePath' => '',
'cacheTime' => 10,
'jsonOptions' => JSON_UNESCAPED_UNICODE,
'debug' => false,
'basePath' => '',
'openApiBase' => '{"info":{"title":"PHP-CRUD-API","version":"1.0.0"}}',
'geometrySrid' => 4326,
];
$config = new Config\Config(array_merge($config_base, $config_mydata));
$api = new Api($config);
ResponseUtils::output($api->handle(RequestFactory::fromGlobals()));
$config_base の内容は
\vendor\mevdschee\php-crud-api\src\Tqdev\PhpCrudApi\Config\Config.php
内に記載の丸ごとコピーです。
バージョンをあげた場合、コピーしなおしてください。
それを $config_mydata で一部上書きしてます。
これでyoursetupfolderフォルダ丸ごとをサーバへアップロード。
crud.php
の
$config_mydata
の
‘database’ => ‘cfsid_defautconnectdb’,
が
WordPress用のデータベースだったとして、
https://cfsid.cloudfree.jp/yoursetupfolder/crud.php/records/wp_options/
とすれば以下のようにJSONデータが得られます。(画面Edge)
{
"records": [
{
"option_id": 1,
"option_name": "siteurl",
"option_value": "https://cfsid.cloudfree.jp/mywp",
"autoload": "yes"
},
{
"option_id": 2,
"option_name": "home",
"option_value": "https://cfsid.cloudfree.jp/mywp",
"autoload": "yes"
},
{
"option_id": 3,
"option_name": "blogname",
"option_value": "わたしのBlogワードプレス",
"autoload": "yes"
},
{
"option_id": 4,
"option_name": "blogdescription",
"option_value": "わたしのBlogワードプレスのせつめい",
"autoload": "yes"
},
……以下全レコード
データベースごとにcrud.phpを用意するのは面倒なので
開発用としてdatabaseもURLパラメータで渡せるように改造。
$database = $_GET['database'] ?? 'cfsid_defautconnectdb';
$config_mydata = [
'debug' => true,
'driver' => 'mysql',
'port' => '3306',
'address' => 'localhost',
'username' => 'cfsid_dbuser',
'password' => 'password',
'database' => $database,
];