1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/naka507-phpkoa

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

PHPKoa

Последняя стабильная версия Общее количество загрузок Лицензия

Асинхронное программирование на PHP: на основе PHP реализуется NODEJS web-фреймворк KOA

Описание

Случайно обнаружил в официальном репозитории Youzan на GitHub руководство по реализации co и KOA. Ранее я уже работал с KOA, и его модель луковиц меня впечатлила. Я не мог удержаться от просмотра всего документа, а затем запустил код.

Документ основан на расширении swoole, которое не очень хорошо работает в Windows. Будучи привыкшим к разработке в Windows, я решил переписать Workerman и сделать его совместимым с этим проектом.

Опыт

  1. PHPKoa Demo — это простой пример использования PHPKoa для разработки HTTP SERVER!
  2. PHP Krpano — PHP для создания панорамных изображений!
  3. PKBook — программа для публикации статических блогов!
  4. H5Make — редактор H5!

Рекомендации

Приглашаем всех экспертов отправлять вопросы через issues.

Установка

composer require naka1205/phpkoa

Использование

Hello World

<?php
require __DIR__ . '/vendor/autoload.php';

use Naka507\Koa\Application;
use Naka507\Koa\Context;

$app = new Application();

$app->υse(function(Context $ctx) {
    $ctx->status = 200;
    $ctx->body = "<h1>Hello World</h1>";
});

$app->listen(3000,function(){
    echo "PHPKoa is listening in 3000\n";
});

Error

<?php
require __DIR__ . '/vendor/autoload.php';

use Naka507\Koa\Application;
use Naka507\Koa\Context;
use Naka507\Koa\Error;
use Naka507\Koa\Timeout;
use Naka507\Koa\Router;
use Naka507\Koa\NotFound;

$app = new Application();

$app->υse(new Error());
$app->υse(new NotFound());
$app->υse(new Timeout(3)); //устанавливаем 3 секунды ожидания

$router = new Router();

//нормальный доступ
$router->get('/hello', function(Context $ctx, $next) {
    $ctx->status = 200;
    $ctx->body = "<h1>Hello World</h1>";
});

//доступ с ожиданием
$router->get('/timeout', function(Context $ctx, $next) {
    yield async_sleep(5);
});

//ошибка доступа
$router->get('/error', function(Context $ctx, $next) {
    $ctx->thrοw(500, "Internal Error");
    yield;
});

$app->υse($router->routes());

$app->listen(3000);

Router

<?php
require __DIR__ . '/vendor/autoload.php';

define('DS', DIRECTORY_SEPARATOR);

use Naka507\Koa\Application;
use Naka507\Koa\Context;
use Naka507\Koa\Error;
use Naka507\Koa\Timeout;
use Naka507\Koa\Router;

$app = new Application();
$app->υse(new Error());
$app->υse(new Timeout(5));

$router = new Router();
$router->get('/demo1', function(Context $ctx, $next) {
    $ctx->body = "demo1";
});
$router->get('/demo2', function(Context $ctx, $next) {
    $ctx->body = "demo2";
});
$router->get('/demo3/(\d+)', function(Context $ctx, $next, $vars) {
    $ctx->status = 200;
    $ctx->body = "demo3={$vars[0]}";
});
$router->get('/demo4', function(Context $ctx, $next) {
    $ctx->redirect("/demo2");
});

//RESTful API
$router->post('/demo3/(\d+)', function(Context $ctx, $next, $vars) {
    //установка session
    $ctx->setSession('demo3',$vars[0]);
    //установка cookie
    $ctx->setCookie('demo3',$vars[0]);
    $ctx->status = 200;
    $ctx->body = "post:demo3={$vars[0]}";
});
$router->put('/demo3/(\d+)', function(Context $ctx, $next, $vars) {

    //получение одного cookie
    $cookie_demo3 = $ctx->getCookie('demo3');
    //или
    $cookies = $ctx->cookies['demo3'];

    //получение одной сессии
    $session_demo3 = $ctx->getSession('demo3');
    //или
    $session = $ctx->session['demo3'];

    $ctx->status = 200;
    $ctx->body = "put:demo3={$vars[0]}";
});
$router->delete('/demo3/(\d+)', function(Context $ctx, $next, $vars) {
    //очистка всех cookie
    $ctx->clearCookie();
    //очистка всех сессий
    $ctx->clearSession();
    $ctxstatus = 200;
    $ctx->body = "delete:demo3={$vars[0]}";
});

//загрузка файлов
$router->post('/files/(\d+)', function(Context $ctx, $next, $vars) {
    $upload_path = __DIR__ . DS .  "uploads" . DS;
    if ( !is_dir($upload_path) ) {
        mkdir ($upload_path , 0777, true);

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

PHP асинхронное программирование: на основе PHP реализация NODEJS веб-фреймворка KOA. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/naka507-phpkoa.git
git@api.gitlife.ru:oschina-mirror/naka507-phpkoa.git
oschina-mirror
naka507-phpkoa
naka507-phpkoa
master