サイト管理人Blog

cloudfreeで「さぁ始めましょう♪」

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,
    ];

投稿へのコメントは コチラ(掲示板) へお願いします。

サイト管理人Blog