├── .docker ├── php │ ├── Dockerfile │ └── ini │ │ ├── docker-php-ext-openswoole.ini │ │ └── php.ini └── scripts │ ├── entrypoint-ini.sh │ └── init-local.sh ├── .gitignore ├── .vscode └── launch.json ├── Makefile ├── README.md ├── app ├── src │ └── Application │ │ ├── Controllers │ │ └── HealthController.php │ │ └── Routing │ │ └── Routes.php └── swoole │ ├── server.php │ └── serverHandle.php ├── composer.json ├── composer.lock ├── docker-compose.yaml └── phpunit.xml /.docker/php/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:8.2.11-cli 2 | 3 | # Argumentos para o nome do usuário, UID e GID 4 | ARG USER 5 | ARG UID 6 | ARG GID 7 | 8 | # Add user and permissions 9 | RUN groupadd -g ${GID} ${USER} 10 | RUN useradd -u ${UID} -g ${GID} -m -d /home/${USER} -s /bin/bash ${USER} 11 | 12 | RUN chown -R ${USER}:${USER} /var/www 13 | 14 | # Atualizar a lista de pacotes e instalar as dependências necessárias 15 | RUN apt-get update && apt-get install -y 16 | RUN apt-get install -y autoconf 17 | RUN apt-get install -y bison 18 | RUN apt-get install -y curl 19 | RUN apt-get install -y gcc 20 | RUN apt-get install -y git 21 | RUN apt-get install -y libbz2-dev 22 | RUN apt-get install -y libcurl4-openssl-dev 23 | RUN apt-get install -y libpq-dev 24 | RUN apt-get install -y libicu-dev 25 | RUN apt-get install -y libjpeg-dev 26 | RUN apt-get install -y libmcrypt-dev 27 | RUN apt-get install -y libonig-dev 28 | RUN apt-get install -y libpng-dev 29 | RUN apt-get install -y libreadline-dev 30 | RUN apt-get install -y libssl-dev 31 | RUN apt-get install -y libtidy-dev 32 | RUN apt-get install -y libxml2 33 | RUN apt-get install -y libxml2-dev 34 | RUN apt-get install -y libxslt1-dev 35 | RUN apt-get install -y libzip-dev 36 | RUN apt-get install -y zlib1g-dev 37 | RUN apt-get install -y make 38 | RUN apt-get install -y openssl 39 | RUN apt-get install -y re2c 40 | RUN apt-get install -y unzip 41 | RUN apt-get install -y wget 42 | RUN apt-get clean \ 43 | && rm -rf /var/lib/apt/lists/* 44 | 45 | # Copiar php.ini-development ou php.ini-production para php.ini 46 | RUN cp /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini 47 | # RUN cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini 48 | 49 | # Instalar extensões PHP, 50 | RUN docker-php-ext-install pdo 51 | RUN docker-php-ext-install pdo_pgsql 52 | 53 | # Instalar a extensão openswoole via PECL e habilitar 54 | RUN pecl install openswoole-22.0.0 && docker-php-ext-enable openswoole 55 | 56 | # Criar o arquivo xdebug.ini 57 | # RUN touch /usr/local/etc/php/xdebug.ini-base 58 | 59 | # Setando valores XDebug 60 | # RUN echo "zend_extension=xdebug.so" >> /usr/local/etc/php/xdebug.ini-base && \ 61 | # echo "xdebug.mode=develop,debug,coverage" >> /usr/local/etc/php/xdebug.ini-base && \ 62 | # echo "xdebug.discover_client_host=1" >> /usr/local/etc/php/xdebug.ini-base && \ 63 | # echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/xdebug.ini-base && \ 64 | # echo "xdebug.client_port=9003" >> /usr/local/etc/php/xdebug.ini-base && \ 65 | # echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/xdebug.ini-base && \ 66 | # echo "xdebug.log=/var/log/xdebug.log" >> /usr/local/etc/php/xdebug.ini-base 67 | 68 | #RUN cp /usr/local/etc/php/xdebug.ini-base /usr/local/etc/php/conf.d/xdebug.ini 69 | 70 | # Instalar o Xdebug 71 | #RUN pecl install xdebug 72 | #RUN docker-php-ext-enable xdebug 73 | 74 | # Instalar Composer 75 | #COPY --from=composer:2.1 /usr/bin/composer /usr/bin/composer 76 | COPY --from=composer:latest /usr/bin/composer /usr/bin/composer 77 | 78 | # Copia o script entrypoint.sh para dentro do container 79 | COPY .docker/scripts/entrypoint-ini.sh /usr/local/bin/entrypoint-ini.sh 80 | 81 | # Torna o script executável 82 | RUN chmod +x /usr/local/bin/entrypoint-ini.sh 83 | 84 | # ENTRYPOINT 85 | ENTRYPOINT ["/usr/local/bin/entrypoint-ini.sh"] 86 | CMD ["php -a"] 87 | USER ${USER} 88 | WORKDIR "/var/www/" -------------------------------------------------------------------------------- /.docker/php/ini/docker-php-ext-openswoole.ini: -------------------------------------------------------------------------------- 1 | extension=openswoole 2 | ; Habilita a extensão OpenSwoole 3 | extension=openswoole 4 | 5 | ; Configurações de Corotinas 6 | swoole.enable_coroutine=On ; Habilita corotinas (padrão: On) 7 | swoole.enable_preemptive_scheduler=Off ; Habilita o agendador preemptivo para corotinas (padrão: Off) 8 | 9 | ; Configurações de Log 10 | swoole.log_level=4 ; Define o nível de log (0 para debug, 4 para warning) 11 | swoole.trace_flags=0 ; Define as flags de rastreamento (padrão: 0) 12 | 13 | ; Configurações de Display 14 | swoole.display_errors=On ; Mostra ou oculta erros (padrão: On) 15 | 16 | ; Configurações de Socket 17 | swoole.socket_buffer_size=8192 ; Define o tamanho do buffer do socket (padrão: 8192) 18 | 19 | ; Configurações de Timeout 20 | # swoole.dns_server="8.8.8.8" ; Define o servidor DNS (padrão: 8.8.8.8) 21 | swoole.dns_cache_refresh_time=60 ; Define o tempo de atualização do cache DNS (padrão: 60 segundos) 22 | 23 | ; Configurações de Segurança 24 | swoole.use_shortname=On ; Habilita ou desabilita o uso de nomes curtos (padrão: On) 25 | 26 | ; Configurações de Desempenho 27 | swoole.fast_serialize=Off ; Habilita ou desabilita a serialização rápida (padrão: Off) 28 | -------------------------------------------------------------------------------- /.docker/php/ini/php.ini: -------------------------------------------------------------------------------- 1 | [PHP] 2 | 3 | ;;;;;;;;;;;;;;;;;;; 4 | ; About php.ini ; 5 | ;;;;;;;;;;;;;;;;;;; 6 | ; PHP's initialization file, generally called php.ini, is responsible for 7 | ; configuring many of the aspects of PHP's behavior. 8 | 9 | ; PHP attempts to find and load this configuration from a number of locations. 10 | ; The following is a summary of its search order: 11 | ; 1. SAPI module specific location. 12 | ; 2. The PHPRC environment variable. 13 | ; 3. A number of predefined registry keys on Windows 14 | ; 4. Current working directory (except CLI) 15 | ; 5. The web server's directory (for SAPI modules), or directory of PHP 16 | ; (otherwise in Windows) 17 | ; 6. The directory from the --with-config-file-path compile time option, or the 18 | ; Windows directory (usually C:\windows) 19 | ; See the PHP docs for more specific information. 20 | ; https://php.net/configuration.file 21 | 22 | ; The syntax of the file is extremely simple. Whitespace and lines 23 | ; beginning with a semicolon are silently ignored (as you probably guessed). 24 | ; Section headers (e.g. [Foo]) are also silently ignored, even though 25 | ; they might mean something in the future. 26 | 27 | ; Directives following the section heading [PATH=/www/mysite] only 28 | ; apply to PHP files in the /www/mysite directory. Directives 29 | ; following the section heading [HOST=www.example.com] only apply to 30 | ; PHP files served from www.example.com. Directives set in these 31 | ; special sections cannot be overridden by user-defined INI files or 32 | ; at runtime. Currently, [PATH=] and [HOST=] sections only work under 33 | ; CGI/FastCGI. 34 | ; https://php.net/ini.sections 35 | 36 | ; Directives are specified using the following syntax: 37 | ; directive = value 38 | ; Directive names are *case sensitive* - foo=bar is different from FOO=bar. 39 | ; Directives are variables used to configure PHP or PHP extensions. 40 | ; There is no name validation. If PHP can't find an expected 41 | ; directive because it is not set or is mistyped, a default value will be used. 42 | 43 | ; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one 44 | ; of the INI constants (On, Off, True, False, Yes, No and None) or an expression 45 | ; (e.g. E_ALL & ~E_NOTICE), a quoted string ("bar"), or a reference to a 46 | ; previously set variable or directive (e.g. ${foo}) 47 | 48 | ; Expressions in the INI file are limited to bitwise operators and parentheses: 49 | ; | bitwise OR 50 | ; ^ bitwise XOR 51 | ; & bitwise AND 52 | ; ~ bitwise NOT 53 | ; ! boolean NOT 54 | 55 | ; Boolean flags can be turned on using the values 1, On, True or Yes. 56 | ; They can be turned off using the values 0, Off, False or No. 57 | 58 | ; An empty string can be denoted by simply not writing anything after the equal 59 | ; sign, or by using the None keyword: 60 | 61 | ; foo = ; sets foo to an empty string 62 | ; foo = None ; sets foo to an empty string 63 | ; foo = "None" ; sets foo to the string 'None' 64 | 65 | ; If you use constants in your value, and these constants belong to a 66 | ; dynamically loaded extension (either a PHP extension or a Zend extension), 67 | ; you may only use these constants *after* the line that loads the extension. 68 | 69 | ;;;;;;;;;;;;;;;;;;; 70 | ; About this file ; 71 | ;;;;;;;;;;;;;;;;;;; 72 | ; PHP comes packaged with two INI files. One that is recommended to be used 73 | ; in production environments and one that is recommended to be used in 74 | ; development environments. 75 | 76 | ; php.ini-production contains settings which hold security, performance and 77 | ; best practices at its core. But please be aware, these settings may break 78 | ; compatibility with older or less security conscience applications. We 79 | ; recommending using the production ini in production and testing environments. 80 | 81 | ; php.ini-development is very similar to its production variant, except it is 82 | ; much more verbose when it comes to errors. We recommend using the 83 | ; development version only in development environments, as errors shown to 84 | ; application users can inadvertently leak otherwise secure information. 85 | 86 | ; This is the php.ini-development INI file. 87 | 88 | ;;;;;;;;;;;;;;;;;;; 89 | ; Quick Reference ; 90 | ;;;;;;;;;;;;;;;;;;; 91 | 92 | ; The following are all the settings which are different in either the production 93 | ; or development versions of the INIs with respect to PHP's default behavior. 94 | ; Please see the actual settings later in the document for more details as to why 95 | ; we recommend these changes in PHP's behavior. 96 | 97 | ; display_errors 98 | ; Default Value: On 99 | ; Development Value: On 100 | ; Production Value: Off 101 | 102 | ; display_startup_errors 103 | ; Default Value: On 104 | ; Development Value: On 105 | ; Production Value: Off 106 | 107 | ; error_reporting 108 | ; Default Value: E_ALL 109 | ; Development Value: E_ALL 110 | ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT 111 | 112 | ; log_errors 113 | ; Default Value: Off 114 | ; Development Value: On 115 | ; Production Value: On 116 | 117 | ; max_input_time 118 | ; Default Value: -1 (Unlimited) 119 | ; Development Value: 60 (60 seconds) 120 | ; Production Value: 60 (60 seconds) 121 | 122 | ; output_buffering 123 | ; Default Value: Off 124 | ; Development Value: 4096 125 | ; Production Value: 4096 126 | 127 | ; register_argc_argv 128 | ; Default Value: On 129 | ; Development Value: Off 130 | ; Production Value: Off 131 | 132 | ; request_order 133 | ; Default Value: None 134 | ; Development Value: "GP" 135 | ; Production Value: "GP" 136 | 137 | ; session.gc_divisor 138 | ; Default Value: 100 139 | ; Development Value: 1000 140 | ; Production Value: 1000 141 | 142 | ; session.sid_bits_per_character 143 | ; Default Value: 4 144 | ; Development Value: 5 145 | ; Production Value: 5 146 | 147 | ; short_open_tag 148 | ; Default Value: On 149 | ; Development Value: Off 150 | ; Production Value: Off 151 | 152 | ; variables_order 153 | ; Default Value: "EGPCS" 154 | ; Development Value: "GPCS" 155 | ; Production Value: "GPCS" 156 | 157 | ; zend.exception_ignore_args 158 | ; Default Value: Off 159 | ; Development Value: Off 160 | ; Production Value: On 161 | 162 | ; zend.exception_string_param_max_len 163 | ; Default Value: 15 164 | ; Development Value: 15 165 | ; Production Value: 0 166 | 167 | ;;;;;;;;;;;;;;;;;;;; 168 | ; php.ini Options ; 169 | ;;;;;;;;;;;;;;;;;;;; 170 | ; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini" 171 | ;user_ini.filename = ".user.ini" 172 | 173 | ; To disable this feature set this option to an empty value 174 | ;user_ini.filename = 175 | 176 | ; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 seconds (5 minutes) 177 | ;user_ini.cache_ttl = 300 178 | 179 | ;;;;;;;;;;;;;;;;;;;; 180 | ; Language Options ; 181 | ;;;;;;;;;;;;;;;;;;;; 182 | 183 | ; Enable the PHP scripting language engine under Apache. 184 | ; https://php.net/engine 185 | engine = On 186 | 187 | ; This directive determines whether or not PHP will recognize code between 188 | ; tags as PHP source which should be processed as such. It is 189 | ; generally recommended that should be used and that this feature 190 | ; should be disabled, as enabling it may result in issues when generating XML 191 | ; documents, however this remains supported for backward compatibility reasons. 192 | ; Note that this directive does not control the would work. 332 | ; https://php.net/syntax-highlighting 333 | ;highlight.string = #DD0000 334 | ;highlight.comment = #FF9900 335 | ;highlight.keyword = #007700 336 | ;highlight.default = #0000BB 337 | ;highlight.html = #000000 338 | 339 | ; If enabled, the request will be allowed to complete even if the user aborts 340 | ; the request. Consider enabling it if executing long requests, which may end up 341 | ; being interrupted by the user or a browser timing out. PHP's default behavior 342 | ; is to disable this feature. 343 | ; https://php.net/ignore-user-abort 344 | ;ignore_user_abort = On 345 | 346 | ; Determines the size of the realpath cache to be used by PHP. This value should 347 | ; be increased on systems where PHP opens many files to reflect the quantity of 348 | ; the file operations performed. 349 | ; Note: if open_basedir is set, the cache is disabled 350 | ; https://php.net/realpath-cache-size 351 | ;realpath_cache_size = 4096k 352 | 353 | ; Duration of time, in seconds for which to cache realpath information for a given 354 | ; file or directory. For systems with rarely changing files, consider increasing this 355 | ; value. 356 | ; https://php.net/realpath-cache-ttl 357 | ;realpath_cache_ttl = 120 358 | 359 | ; Enables or disables the circular reference collector. 360 | ; https://php.net/zend.enable-gc 361 | zend.enable_gc = On 362 | 363 | ; If enabled, scripts may be written in encodings that are incompatible with 364 | ; the scanner. CP936, Big5, CP949 and Shift_JIS are the examples of such 365 | ; encodings. To use this feature, mbstring extension must be enabled. 366 | ;zend.multibyte = Off 367 | 368 | ; Allows to set the default encoding for the scripts. This value will be used 369 | ; unless "declare(encoding=...)" directive appears at the top of the script. 370 | ; Only affects if zend.multibyte is set. 371 | ;zend.script_encoding = 372 | 373 | ; Allows to include or exclude arguments from stack traces generated for exceptions. 374 | ; In production, it is recommended to turn this setting on to prohibit the output 375 | ; of sensitive information in stack traces 376 | ; Default Value: Off 377 | ; Development Value: Off 378 | ; Production Value: On 379 | zend.exception_ignore_args = Off 380 | 381 | ; Allows setting the maximum string length in an argument of a stringified stack trace 382 | ; to a value between 0 and 1000000. 383 | ; This has no effect when zend.exception_ignore_args is enabled. 384 | ; Default Value: 15 385 | ; Development Value: 15 386 | ; Production Value: 0 387 | zend.exception_string_param_max_len = 15 388 | 389 | ;;;;;;;;;;;;;;;;; 390 | ; Miscellaneous ; 391 | ;;;;;;;;;;;;;;;;; 392 | 393 | ; Decides whether PHP may expose the fact that it is installed on the server 394 | ; (e.g. by adding its signature to the Web server header). It is no security 395 | ; threat in any way, but it makes it possible to determine whether you use PHP 396 | ; on your server or not. 397 | ; https://php.net/expose-php 398 | expose_php = On 399 | 400 | ;;;;;;;;;;;;;;;;;;; 401 | ; Resource Limits ; 402 | ;;;;;;;;;;;;;;;;;;; 403 | 404 | ; Maximum execution time of each script, in seconds 405 | ; https://php.net/max-execution-time 406 | ; Note: This directive is hardcoded to 0 for the CLI SAPI 407 | max_execution_time = 30 408 | 409 | ; Maximum amount of time each script may spend parsing request data. It's a good 410 | ; idea to limit this time on productions servers in order to eliminate unexpectedly 411 | ; long running scripts. 412 | ; Note: This directive is hardcoded to -1 for the CLI SAPI 413 | ; Default Value: -1 (Unlimited) 414 | ; Development Value: 60 (60 seconds) 415 | ; Production Value: 60 (60 seconds) 416 | ; https://php.net/max-input-time 417 | max_input_time = 60 418 | 419 | ; Maximum input variable nesting level 420 | ; https://php.net/max-input-nesting-level 421 | ;max_input_nesting_level = 64 422 | 423 | ; How many GET/POST/COOKIE input variables may be accepted 424 | ;max_input_vars = 1000 425 | 426 | ; How many multipart body parts (combined input variable and file uploads) may 427 | ; be accepted. 428 | ; Default Value: -1 (Sum of max_input_vars and max_file_uploads) 429 | ;max_multipart_body_parts = 1500 430 | 431 | ; Maximum amount of memory a script may consume 432 | ; https://php.net/memory-limit 433 | memory_limit = 128M 434 | 435 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 436 | ; Error handling and logging ; 437 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 438 | 439 | ; This directive informs PHP of which errors, warnings and notices you would like 440 | ; it to take action for. The recommended way of setting values for this 441 | ; directive is through the use of the error level constants and bitwise 442 | ; operators. The error level constants are below here for convenience as well as 443 | ; some common settings and their meanings. 444 | ; By default, PHP is set to take action on all errors, notices and warnings EXCEPT 445 | ; those related to E_NOTICE and E_STRICT, which together cover best practices and 446 | ; recommended coding standards in PHP. For performance reasons, this is the 447 | ; recommend error reporting setting. Your production server shouldn't be wasting 448 | ; resources complaining about best practices and coding standards. That's what 449 | ; development servers and development settings are for. 450 | ; Note: The php.ini-development file has this setting as E_ALL. This 451 | ; means it pretty much reports everything which is exactly what you want during 452 | ; development and early testing. 453 | ; 454 | ; Error Level Constants: 455 | ; E_ALL - All errors and warnings 456 | ; E_ERROR - fatal run-time errors 457 | ; E_RECOVERABLE_ERROR - almost fatal run-time errors 458 | ; E_WARNING - run-time warnings (non-fatal errors) 459 | ; E_PARSE - compile-time parse errors 460 | ; E_NOTICE - run-time notices (these are warnings which often result 461 | ; from a bug in your code, but it's possible that it was 462 | ; intentional (e.g., using an uninitialized variable and 463 | ; relying on the fact it is automatically initialized to an 464 | ; empty string) 465 | ; E_STRICT - run-time notices, enable to have PHP suggest changes 466 | ; to your code which will ensure the best interoperability 467 | ; and forward compatibility of your code 468 | ; E_CORE_ERROR - fatal errors that occur during PHP's initial startup 469 | ; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's 470 | ; initial startup 471 | ; E_COMPILE_ERROR - fatal compile-time errors 472 | ; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) 473 | ; E_USER_ERROR - user-generated error message 474 | ; E_USER_WARNING - user-generated warning message 475 | ; E_USER_NOTICE - user-generated notice message 476 | ; E_DEPRECATED - warn about code that will not work in future versions 477 | ; of PHP 478 | ; E_USER_DEPRECATED - user-generated deprecation warnings 479 | ; 480 | ; Common Values: 481 | ; E_ALL (Show all errors, warnings and notices including coding standards.) 482 | ; E_ALL & ~E_NOTICE (Show all errors, except for notices) 483 | ; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.) 484 | ; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) 485 | ; Default Value: E_ALL 486 | ; Development Value: E_ALL 487 | ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT 488 | ; https://php.net/error-reporting 489 | error_reporting = E_ALL 490 | 491 | ; This directive controls whether or not and where PHP will output errors, 492 | ; notices and warnings too. Error output is very useful during development, but 493 | ; it could be very dangerous in production environments. Depending on the code 494 | ; which is triggering the error, sensitive information could potentially leak 495 | ; out of your application such as database usernames and passwords or worse. 496 | ; For production environments, we recommend logging errors rather than 497 | ; sending them to STDOUT. 498 | ; Possible Values: 499 | ; Off = Do not display any errors 500 | ; stderr = Display errors to STDERR (affects only CGI/CLI binaries!) 501 | ; On or stdout = Display errors to STDOUT 502 | ; Default Value: On 503 | ; Development Value: On 504 | ; Production Value: Off 505 | ; https://php.net/display-errors 506 | display_errors = On 507 | 508 | ; The display of errors which occur during PHP's startup sequence are handled 509 | ; separately from display_errors. We strongly recommend you set this to 'off' 510 | ; for production servers to avoid leaking configuration details. 511 | ; Default Value: On 512 | ; Development Value: On 513 | ; Production Value: Off 514 | ; https://php.net/display-startup-errors 515 | display_startup_errors = On 516 | 517 | ; Besides displaying errors, PHP can also log errors to locations such as a 518 | ; server-specific log, STDERR, or a location specified by the error_log 519 | ; directive found below. While errors should not be displayed on productions 520 | ; servers they should still be monitored and logging is a great way to do that. 521 | ; Default Value: Off 522 | ; Development Value: On 523 | ; Production Value: On 524 | ; https://php.net/log-errors 525 | log_errors = On 526 | 527 | ; Do not log repeated messages. Repeated errors must occur in same file on same 528 | ; line unless ignore_repeated_source is set true. 529 | ; https://php.net/ignore-repeated-errors 530 | ignore_repeated_errors = Off 531 | 532 | ; Ignore source of message when ignoring repeated messages. When this setting 533 | ; is On you will not log errors with repeated messages from different files or 534 | ; source lines. 535 | ; https://php.net/ignore-repeated-source 536 | ignore_repeated_source = Off 537 | 538 | ; If this parameter is set to Off, then memory leaks will not be shown (on 539 | ; stdout or in the log). This is only effective in a debug compile, and if 540 | ; error reporting includes E_WARNING in the allowed list 541 | ; https://php.net/report-memleaks 542 | report_memleaks = On 543 | 544 | ; This setting is off by default. 545 | ;report_zend_debug = 0 546 | 547 | ; Turn off normal error reporting and emit XML-RPC error XML 548 | ; https://php.net/xmlrpc-errors 549 | ;xmlrpc_errors = 0 550 | 551 | ; An XML-RPC faultCode 552 | ;xmlrpc_error_number = 0 553 | 554 | ; When PHP displays or logs an error, it has the capability of formatting the 555 | ; error message as HTML for easier reading. This directive controls whether 556 | ; the error message is formatted as HTML or not. 557 | ; Note: This directive is hardcoded to Off for the CLI SAPI 558 | ; https://php.net/html-errors 559 | ;html_errors = On 560 | 561 | ; If html_errors is set to On *and* docref_root is not empty, then PHP 562 | ; produces clickable error messages that direct to a page describing the error 563 | ; or function causing the error in detail. 564 | ; You can download a copy of the PHP manual from https://php.net/docs 565 | ; and change docref_root to the base URL of your local copy including the 566 | ; leading '/'. You must also specify the file extension being used including 567 | ; the dot. PHP's default behavior is to leave these settings empty, in which 568 | ; case no links to documentation are generated. 569 | ; Note: Never use this feature for production boxes. 570 | ; https://php.net/docref-root 571 | ; Examples 572 | ;docref_root = "/phpmanual/" 573 | 574 | ; https://php.net/docref-ext 575 | ;docref_ext = .html 576 | 577 | ; String to output before an error message. PHP's default behavior is to leave 578 | ; this setting blank. 579 | ; https://php.net/error-prepend-string 580 | ; Example: 581 | ;error_prepend_string = "" 582 | 583 | ; String to output after an error message. PHP's default behavior is to leave 584 | ; this setting blank. 585 | ; https://php.net/error-append-string 586 | ; Example: 587 | ;error_append_string = "" 588 | 589 | ; Log errors to specified file. PHP's default behavior is to leave this value 590 | ; empty. 591 | ; https://php.net/error-log 592 | ; Example: 593 | ;error_log = php_errors.log 594 | ; Log errors to syslog (Event Log on Windows). 595 | ;error_log = syslog 596 | 597 | ; The syslog ident is a string which is prepended to every message logged 598 | ; to syslog. Only used when error_log is set to syslog. 599 | ;syslog.ident = php 600 | 601 | ; The syslog facility is used to specify what type of program is logging 602 | ; the message. Only used when error_log is set to syslog. 603 | ;syslog.facility = user 604 | 605 | ; Set this to disable filtering control characters (the default). 606 | ; Some loggers only accept NVT-ASCII, others accept anything that's not 607 | ; control characters. If your logger accepts everything, then no filtering 608 | ; is needed at all. 609 | ; Allowed values are: 610 | ; ascii (all printable ASCII characters and NL) 611 | ; no-ctrl (all characters except control characters) 612 | ; all (all characters) 613 | ; raw (like "all", but messages are not split at newlines) 614 | ; https://php.net/syslog.filter 615 | ;syslog.filter = ascii 616 | 617 | ;windows.show_crt_warning 618 | ; Default value: 0 619 | ; Development value: 0 620 | ; Production value: 0 621 | 622 | ;;;;;;;;;;;;;;;;; 623 | ; Data Handling ; 624 | ;;;;;;;;;;;;;;;;; 625 | 626 | ; The separator used in PHP generated URLs to separate arguments. 627 | ; PHP's default setting is "&". 628 | ; https://php.net/arg-separator.output 629 | ; Example: 630 | ;arg_separator.output = "&" 631 | 632 | ; List of separator(s) used by PHP to parse input URLs into variables. 633 | ; PHP's default setting is "&". 634 | ; NOTE: Every character in this directive is considered as separator! 635 | ; https://php.net/arg-separator.input 636 | ; Example: 637 | ;arg_separator.input = ";&" 638 | 639 | ; This directive determines which super global arrays are registered when PHP 640 | ; starts up. G,P,C,E & S are abbreviations for the following respective super 641 | ; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty 642 | ; paid for the registration of these arrays and because ENV is not as commonly 643 | ; used as the others, ENV is not recommended on productions servers. You 644 | ; can still get access to the environment variables through getenv() should you 645 | ; need to. 646 | ; Default Value: "EGPCS" 647 | ; Development Value: "GPCS" 648 | ; Production Value: "GPCS"; 649 | ; https://php.net/variables-order 650 | variables_order = "GPCS" 651 | 652 | ; This directive determines which super global data (G,P & C) should be 653 | ; registered into the super global array REQUEST. If so, it also determines 654 | ; the order in which that data is registered. The values for this directive 655 | ; are specified in the same manner as the variables_order directive, 656 | ; EXCEPT one. Leaving this value empty will cause PHP to use the value set 657 | ; in the variables_order directive. It does not mean it will leave the super 658 | ; globals array REQUEST empty. 659 | ; Default Value: None 660 | ; Development Value: "GP" 661 | ; Production Value: "GP" 662 | ; https://php.net/request-order 663 | request_order = "GP" 664 | 665 | ; This directive determines whether PHP registers $argv & $argc each time it 666 | ; runs. $argv contains an array of all the arguments passed to PHP when a script 667 | ; is invoked. $argc contains an integer representing the number of arguments 668 | ; that were passed when the script was invoked. These arrays are extremely 669 | ; useful when running scripts from the command line. When this directive is 670 | ; enabled, registering these variables consumes CPU cycles and memory each time 671 | ; a script is executed. For performance reasons, this feature should be disabled 672 | ; on production servers. 673 | ; Note: This directive is hardcoded to On for the CLI SAPI 674 | ; Default Value: On 675 | ; Development Value: Off 676 | ; Production Value: Off 677 | ; https://php.net/register-argc-argv 678 | register_argc_argv = Off 679 | 680 | ; When enabled, the ENV, REQUEST and SERVER variables are created when they're 681 | ; first used (Just In Time) instead of when the script starts. If these 682 | ; variables are not used within a script, having this directive on will result 683 | ; in a performance gain. The PHP directive register_argc_argv must be disabled 684 | ; for this directive to have any effect. 685 | ; https://php.net/auto-globals-jit 686 | auto_globals_jit = On 687 | 688 | ; Whether PHP will read the POST data. 689 | ; This option is enabled by default. 690 | ; Most likely, you won't want to disable this option globally. It causes $_POST 691 | ; and $_FILES to always be empty; the only way you will be able to read the 692 | ; POST data will be through the php://input stream wrapper. This can be useful 693 | ; to proxy requests or to process the POST data in a memory efficient fashion. 694 | ; https://php.net/enable-post-data-reading 695 | ;enable_post_data_reading = Off 696 | 697 | ; Maximum size of POST data that PHP will accept. 698 | ; Its value may be 0 to disable the limit. It is ignored if POST data reading 699 | ; is disabled through enable_post_data_reading. 700 | ; https://php.net/post-max-size 701 | post_max_size = 8M 702 | 703 | ; Automatically add files before PHP document. 704 | ; https://php.net/auto-prepend-file 705 | auto_prepend_file = 706 | 707 | ; Automatically add files after PHP document. 708 | ; https://php.net/auto-append-file 709 | auto_append_file = 710 | 711 | ; By default, PHP will output a media type using the Content-Type header. To 712 | ; disable this, simply set it to be empty. 713 | ; 714 | ; PHP's built-in default media type is set to text/html. 715 | ; https://php.net/default-mimetype 716 | default_mimetype = "text/html" 717 | 718 | ; PHP's default character set is set to UTF-8. 719 | ; https://php.net/default-charset 720 | default_charset = "UTF-8" 721 | 722 | ; PHP internal character encoding is set to empty. 723 | ; If empty, default_charset is used. 724 | ; https://php.net/internal-encoding 725 | ;internal_encoding = 726 | 727 | ; PHP input character encoding is set to empty. 728 | ; If empty, default_charset is used. 729 | ; https://php.net/input-encoding 730 | ;input_encoding = 731 | 732 | ; PHP output character encoding is set to empty. 733 | ; If empty, default_charset is used. 734 | ; See also output_buffer. 735 | ; https://php.net/output-encoding 736 | ;output_encoding = 737 | 738 | ;;;;;;;;;;;;;;;;;;;;;;;;; 739 | ; Paths and Directories ; 740 | ;;;;;;;;;;;;;;;;;;;;;;;;; 741 | 742 | ; UNIX: "/path1:/path2" 743 | ;include_path = ".:/php/includes" 744 | ; 745 | ; Windows: "\path1;\path2" 746 | ;include_path = ".;c:\php\includes" 747 | ; 748 | ; PHP's default setting for include_path is ".;/path/to/php/pear" 749 | ; https://php.net/include-path 750 | 751 | ; The root of the PHP pages, used only if nonempty. 752 | ; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root 753 | ; if you are running php as a CGI under any web server (other than IIS) 754 | ; see documentation for security issues. The alternate is to use the 755 | ; cgi.force_redirect configuration below 756 | ; https://php.net/doc-root 757 | doc_root = 758 | 759 | ; The directory under which PHP opens the script using /~username used only 760 | ; if nonempty. 761 | ; https://php.net/user-dir 762 | user_dir = 763 | 764 | ; Directory in which the loadable extensions (modules) reside. 765 | ; https://php.net/extension-dir 766 | ;extension_dir = "./" 767 | ; On windows: 768 | ;extension_dir = "ext" 769 | 770 | ; Directory where the temporary files should be placed. 771 | ; Defaults to the system default (see sys_get_temp_dir) 772 | ;sys_temp_dir = "/tmp" 773 | 774 | ; Whether or not to enable the dl() function. The dl() function does NOT work 775 | ; properly in multithreaded servers, such as IIS or Zeus, and is automatically 776 | ; disabled on them. 777 | ; https://php.net/enable-dl 778 | enable_dl = Off 779 | 780 | ; cgi.force_redirect is necessary to provide security running PHP as a CGI under 781 | ; most web servers. Left undefined, PHP turns this on by default. You can 782 | ; turn it off here AT YOUR OWN RISK 783 | ; **You CAN safely turn this off for IIS, in fact, you MUST.** 784 | ; https://php.net/cgi.force-redirect 785 | ;cgi.force_redirect = 1 786 | 787 | ; if cgi.nph is enabled it will force cgi to always sent Status: 200 with 788 | ; every request. PHP's default behavior is to disable this feature. 789 | ;cgi.nph = 1 790 | 791 | ; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape 792 | ; (iPlanet) web servers, you MAY need to set an environment variable name that PHP 793 | ; will look for to know it is OK to continue execution. Setting this variable MAY 794 | ; cause security issues, KNOW WHAT YOU ARE DOING FIRST. 795 | ; https://php.net/cgi.redirect-status-env 796 | ;cgi.redirect_status_env = 797 | 798 | ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's 799 | ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok 800 | ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting 801 | ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting 802 | ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts 803 | ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. 804 | ; https://php.net/cgi.fix-pathinfo 805 | ;cgi.fix_pathinfo=1 806 | 807 | ; if cgi.discard_path is enabled, the PHP CGI binary can safely be placed outside 808 | ; of the web tree and people will not be able to circumvent .htaccess security. 809 | ;cgi.discard_path=1 810 | 811 | ; FastCGI under IIS supports the ability to impersonate 812 | ; security tokens of the calling client. This allows IIS to define the 813 | ; security context that the request runs under. mod_fastcgi under Apache 814 | ; does not currently support this feature (03/17/2002) 815 | ; Set to 1 if running under IIS. Default is zero. 816 | ; https://php.net/fastcgi.impersonate 817 | ;fastcgi.impersonate = 1 818 | 819 | ; Disable logging through FastCGI connection. PHP's default behavior is to enable 820 | ; this feature. 821 | ;fastcgi.logging = 0 822 | 823 | ; cgi.rfc2616_headers configuration option tells PHP what type of headers to 824 | ; use when sending HTTP response code. If set to 0, PHP sends Status: header that 825 | ; is supported by Apache. When this option is set to 1, PHP will send 826 | ; RFC2616 compliant header. 827 | ; Default is zero. 828 | ; https://php.net/cgi.rfc2616-headers 829 | ;cgi.rfc2616_headers = 0 830 | 831 | ; cgi.check_shebang_line controls whether CGI PHP checks for line starting with #! 832 | ; (shebang) at the top of the running script. This line might be needed if the 833 | ; script support running both as stand-alone script and via PHP CGI<. PHP in CGI 834 | ; mode skips this line and ignores its content if this directive is turned on. 835 | ; https://php.net/cgi.check-shebang-line 836 | ;cgi.check_shebang_line=1 837 | 838 | ;;;;;;;;;;;;;;;; 839 | ; File Uploads ; 840 | ;;;;;;;;;;;;;;;; 841 | 842 | ; Whether to allow HTTP file uploads. 843 | ; https://php.net/file-uploads 844 | file_uploads = On 845 | 846 | ; Temporary directory for HTTP uploaded files (will use system default if not 847 | ; specified). 848 | ; https://php.net/upload-tmp-dir 849 | ;upload_tmp_dir = 850 | 851 | ; Maximum allowed size for uploaded files. 852 | ; https://php.net/upload-max-filesize 853 | upload_max_filesize = 2M 854 | 855 | ; Maximum number of files that can be uploaded via a single request 856 | max_file_uploads = 20 857 | 858 | ;;;;;;;;;;;;;;;;;; 859 | ; Fopen wrappers ; 860 | ;;;;;;;;;;;;;;;;;; 861 | 862 | ; Whether to allow the treatment of URLs (like http:// or ftp://) as files. 863 | ; https://php.net/allow-url-fopen 864 | allow_url_fopen = On 865 | 866 | ; Whether to allow include/require to open URLs (like https:// or ftp://) as files. 867 | ; https://php.net/allow-url-include 868 | allow_url_include = Off 869 | 870 | ; Define the anonymous ftp password (your email address). PHP's default setting 871 | ; for this is empty. 872 | ; https://php.net/from 873 | ;from="john@doe.com" 874 | 875 | ; Define the User-Agent string. PHP's default setting for this is empty. 876 | ; https://php.net/user-agent 877 | ;user_agent="PHP" 878 | 879 | ; Default timeout for socket based streams (seconds) 880 | ; https://php.net/default-socket-timeout 881 | default_socket_timeout = 60 882 | 883 | ; If your scripts have to deal with files from Macintosh systems, 884 | ; or you are running on a Mac and need to deal with files from 885 | ; unix or win32 systems, setting this flag will cause PHP to 886 | ; automatically detect the EOL character in those files so that 887 | ; fgets() and file() will work regardless of the source of the file. 888 | ; https://php.net/auto-detect-line-endings 889 | ;auto_detect_line_endings = Off 890 | 891 | ;;;;;;;;;;;;;;;;;;;;;; 892 | ; Dynamic Extensions ; 893 | ;;;;;;;;;;;;;;;;;;;;;; 894 | 895 | ; If you wish to have an extension loaded automatically, use the following 896 | ; syntax: 897 | ; 898 | ; extension=modulename 899 | ; 900 | ; For example: 901 | ; 902 | ; extension=mysqli 903 | ; 904 | ; When the extension library to load is not located in the default extension 905 | ; directory, You may specify an absolute path to the library file: 906 | ; 907 | ; extension=/path/to/extension/mysqli.so 908 | ; 909 | ; Note : The syntax used in previous PHP versions ('extension=.so' and 910 | ; 'extension='php_.dll') is supported for legacy reasons and may be 911 | ; deprecated in a future PHP major version. So, when it is possible, please 912 | ; move to the new ('extension=) syntax. 913 | ; 914 | ; Notes for Windows environments : 915 | ; 916 | ; - Many DLL files are located in the ext/ 917 | ; extension folders as well as the separate PECL DLL download. 918 | ; Be sure to appropriately set the extension_dir directive. 919 | ; 920 | ;extension=bz2 921 | 922 | ; The ldap extension must be before curl if OpenSSL 1.0.2 and OpenLDAP is used 923 | ; otherwise it results in segfault when unloading after using SASL. 924 | ; See https://github.com/php/php-src/issues/8620 for more info. 925 | ;extension=ldap 926 | 927 | ;extension=curl 928 | ;extension=ffi 929 | ;extension=ftp 930 | ;extension=fileinfo 931 | ;extension=gd 932 | ;extension=gettext 933 | ;extension=gmp 934 | ;extension=intl 935 | ;extension=imap 936 | ;extension=mbstring 937 | ;extension=exif ; Must be after mbstring as it depends on it 938 | ;extension=mysqli 939 | ;extension=oci8_12c ; Use with Oracle Database 12c Instant Client 940 | ;extension=oci8_19 ; Use with Oracle Database 19 Instant Client 941 | ;extension=odbc 942 | ;extension=openssl 943 | ;extension=pdo_firebird 944 | ;extension=pdo_mysql 945 | ;extension=pdo_oci 946 | ;extension=pdo_odbc 947 | ;extension=pdo_pgsql 948 | ;extension=pdo_sqlite 949 | ;extension=pgsql 950 | ;extension=shmop 951 | 952 | ; The MIBS data available in the PHP distribution must be installed. 953 | ; See https://www.php.net/manual/en/snmp.installation.php 954 | ;extension=snmp 955 | 956 | ;extension=soap 957 | ;extension=sockets 958 | ;extension=sodium 959 | ;extension=sqlite3 960 | ;extension=tidy 961 | ;extension=xsl 962 | ;extension=zip 963 | 964 | ;zend_extension=opcache 965 | 966 | ;;;;;;;;;;;;;;;;;;; 967 | ; Module Settings ; 968 | ;;;;;;;;;;;;;;;;;;; 969 | 970 | [CLI Server] 971 | ; Whether the CLI web server uses ANSI color coding in its terminal output. 972 | cli_server.color = On 973 | 974 | [Date] 975 | ; Defines the default timezone used by the date functions 976 | ; https://php.net/date.timezone 977 | ;date.timezone = 978 | 979 | ; https://php.net/date.default-latitude 980 | ;date.default_latitude = 31.7667 981 | 982 | ; https://php.net/date.default-longitude 983 | ;date.default_longitude = 35.2333 984 | 985 | ; https://php.net/date.sunrise-zenith 986 | ;date.sunrise_zenith = 90.833333 987 | 988 | ; https://php.net/date.sunset-zenith 989 | ;date.sunset_zenith = 90.833333 990 | 991 | [filter] 992 | ; https://php.net/filter.default 993 | ;filter.default = unsafe_raw 994 | 995 | ; https://php.net/filter.default-flags 996 | ;filter.default_flags = 997 | 998 | [iconv] 999 | ; Use of this INI entry is deprecated, use global input_encoding instead. 1000 | ; If empty, default_charset or input_encoding or iconv.input_encoding is used. 1001 | ; The precedence is: default_charset < input_encoding < iconv.input_encoding 1002 | ;iconv.input_encoding = 1003 | 1004 | ; Use of this INI entry is deprecated, use global internal_encoding instead. 1005 | ; If empty, default_charset or internal_encoding or iconv.internal_encoding is used. 1006 | ; The precedence is: default_charset < internal_encoding < iconv.internal_encoding 1007 | ;iconv.internal_encoding = 1008 | 1009 | ; Use of this INI entry is deprecated, use global output_encoding instead. 1010 | ; If empty, default_charset or output_encoding or iconv.output_encoding is used. 1011 | ; The precedence is: default_charset < output_encoding < iconv.output_encoding 1012 | ; To use an output encoding conversion, iconv's output handler must be set 1013 | ; otherwise output encoding conversion cannot be performed. 1014 | ;iconv.output_encoding = 1015 | 1016 | [imap] 1017 | ; rsh/ssh logins are disabled by default. Use this INI entry if you want to 1018 | ; enable them. Note that the IMAP library does not filter mailbox names before 1019 | ; passing them to rsh/ssh command, thus passing untrusted data to this function 1020 | ; with rsh/ssh enabled is insecure. 1021 | ;imap.enable_insecure_rsh=0 1022 | 1023 | [intl] 1024 | ;intl.default_locale = 1025 | ; This directive allows you to produce PHP errors when some error 1026 | ; happens within intl functions. The value is the level of the error produced. 1027 | ; Default is 0, which does not produce any errors. 1028 | ;intl.error_level = E_WARNING 1029 | ;intl.use_exceptions = 0 1030 | 1031 | [sqlite3] 1032 | ; Directory pointing to SQLite3 extensions 1033 | ; https://php.net/sqlite3.extension-dir 1034 | ;sqlite3.extension_dir = 1035 | 1036 | ; SQLite defensive mode flag (only available from SQLite 3.26+) 1037 | ; When the defensive flag is enabled, language features that allow ordinary 1038 | ; SQL to deliberately corrupt the database file are disabled. This forbids 1039 | ; writing directly to the schema, shadow tables (eg. FTS data tables), or 1040 | ; the sqlite_dbpage virtual table. 1041 | ; https://www.sqlite.org/c3ref/c_dbconfig_defensive.html 1042 | ; (for older SQLite versions, this flag has no use) 1043 | ;sqlite3.defensive = 1 1044 | 1045 | [Pcre] 1046 | ; PCRE library backtracking limit. 1047 | ; https://php.net/pcre.backtrack-limit 1048 | ;pcre.backtrack_limit=100000 1049 | 1050 | ; PCRE library recursion limit. 1051 | ; Please note that if you set this value to a high number you may consume all 1052 | ; the available process stack and eventually crash PHP (due to reaching the 1053 | ; stack size limit imposed by the Operating System). 1054 | ; https://php.net/pcre.recursion-limit 1055 | ;pcre.recursion_limit=100000 1056 | 1057 | ; Enables or disables JIT compilation of patterns. This requires the PCRE 1058 | ; library to be compiled with JIT support. 1059 | ;pcre.jit=1 1060 | 1061 | [Pdo] 1062 | ; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off" 1063 | ; https://php.net/pdo-odbc.connection-pooling 1064 | ;pdo_odbc.connection_pooling=strict 1065 | 1066 | [Pdo_mysql] 1067 | ; Default socket name for local MySQL connects. If empty, uses the built-in 1068 | ; MySQL defaults. 1069 | pdo_mysql.default_socket= 1070 | 1071 | [Phar] 1072 | ; https://php.net/phar.readonly 1073 | ;phar.readonly = On 1074 | 1075 | ; https://php.net/phar.require-hash 1076 | ;phar.require_hash = On 1077 | 1078 | ;phar.cache_list = 1079 | 1080 | [mail function] 1081 | ; For Win32 only. 1082 | ; https://php.net/smtp 1083 | SMTP = localhost 1084 | ; https://php.net/smtp-port 1085 | smtp_port = 25 1086 | 1087 | ; For Win32 only. 1088 | ; https://php.net/sendmail-from 1089 | ;sendmail_from = me@example.com 1090 | 1091 | ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). 1092 | ; https://php.net/sendmail-path 1093 | ;sendmail_path = 1094 | 1095 | ; Force the addition of the specified parameters to be passed as extra parameters 1096 | ; to the sendmail binary. These parameters will always replace the value of 1097 | ; the 5th parameter to mail(). 1098 | ;mail.force_extra_parameters = 1099 | 1100 | ; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename 1101 | mail.add_x_header = Off 1102 | 1103 | ; Use mixed LF and CRLF line separators to keep compatibility with some 1104 | ; RFC 2822 non conformant MTA. 1105 | mail.mixed_lf_and_crlf = Off 1106 | 1107 | ; The path to a log file that will log all mail() calls. Log entries include 1108 | ; the full path of the script, line number, To address and headers. 1109 | ;mail.log = 1110 | ; Log mail to syslog (Event Log on Windows). 1111 | ;mail.log = syslog 1112 | 1113 | [ODBC] 1114 | ; https://php.net/odbc.default-db 1115 | ;odbc.default_db = Not yet implemented 1116 | 1117 | ; https://php.net/odbc.default-user 1118 | ;odbc.default_user = Not yet implemented 1119 | 1120 | ; https://php.net/odbc.default-pw 1121 | ;odbc.default_pw = Not yet implemented 1122 | 1123 | ; Controls the ODBC cursor model. 1124 | ; Default: SQL_CURSOR_STATIC (default). 1125 | ;odbc.default_cursortype 1126 | 1127 | ; Allow or prevent persistent links. 1128 | ; https://php.net/odbc.allow-persistent 1129 | odbc.allow_persistent = On 1130 | 1131 | ; Check that a connection is still valid before reuse. 1132 | ; https://php.net/odbc.check-persistent 1133 | odbc.check_persistent = On 1134 | 1135 | ; Maximum number of persistent links. -1 means no limit. 1136 | ; https://php.net/odbc.max-persistent 1137 | odbc.max_persistent = -1 1138 | 1139 | ; Maximum number of links (persistent + non-persistent). -1 means no limit. 1140 | ; https://php.net/odbc.max-links 1141 | odbc.max_links = -1 1142 | 1143 | ; Handling of LONG fields. Returns number of bytes to variables. 0 means 1144 | ; passthru. 1145 | ; https://php.net/odbc.defaultlrl 1146 | odbc.defaultlrl = 4096 1147 | 1148 | ; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. 1149 | ; See the documentation on odbc_binmode and odbc_longreadlen for an explanation 1150 | ; of odbc.defaultlrl and odbc.defaultbinmode 1151 | ; https://php.net/odbc.defaultbinmode 1152 | odbc.defaultbinmode = 1 1153 | 1154 | [MySQLi] 1155 | 1156 | ; Maximum number of persistent links. -1 means no limit. 1157 | ; https://php.net/mysqli.max-persistent 1158 | mysqli.max_persistent = -1 1159 | 1160 | ; Allow accessing, from PHP's perspective, local files with LOAD DATA statements 1161 | ; https://php.net/mysqli.allow_local_infile 1162 | ;mysqli.allow_local_infile = On 1163 | 1164 | ; It allows the user to specify a folder where files that can be sent via LOAD DATA 1165 | ; LOCAL can exist. It is ignored if mysqli.allow_local_infile is enabled. 1166 | ;mysqli.local_infile_directory = 1167 | 1168 | ; Allow or prevent persistent links. 1169 | ; https://php.net/mysqli.allow-persistent 1170 | mysqli.allow_persistent = On 1171 | 1172 | ; Maximum number of links. -1 means no limit. 1173 | ; https://php.net/mysqli.max-links 1174 | mysqli.max_links = -1 1175 | 1176 | ; Default port number for mysqli_connect(). If unset, mysqli_connect() will use 1177 | ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the 1178 | ; compile-time value defined MYSQL_PORT (in that order). Win32 will only look 1179 | ; at MYSQL_PORT. 1180 | ; https://php.net/mysqli.default-port 1181 | mysqli.default_port = 3306 1182 | 1183 | ; Default socket name for local MySQL connects. If empty, uses the built-in 1184 | ; MySQL defaults. 1185 | ; https://php.net/mysqli.default-socket 1186 | mysqli.default_socket = 1187 | 1188 | ; Default host for mysqli_connect() (doesn't apply in safe mode). 1189 | ; https://php.net/mysqli.default-host 1190 | mysqli.default_host = 1191 | 1192 | ; Default user for mysqli_connect() (doesn't apply in safe mode). 1193 | ; https://php.net/mysqli.default-user 1194 | mysqli.default_user = 1195 | 1196 | ; Default password for mysqli_connect() (doesn't apply in safe mode). 1197 | ; Note that this is generally a *bad* idea to store passwords in this file. 1198 | ; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") 1199 | ; and reveal this password! And of course, any users with read access to this 1200 | ; file will be able to reveal the password as well. 1201 | ; https://php.net/mysqli.default-pw 1202 | mysqli.default_pw = 1203 | 1204 | ; If this option is enabled, closing a persistent connection will rollback 1205 | ; any pending transactions of this connection, before it is put back 1206 | ; into the persistent connection pool. 1207 | ;mysqli.rollback_on_cached_plink = Off 1208 | 1209 | [mysqlnd] 1210 | ; Enable / Disable collection of general statistics by mysqlnd which can be 1211 | ; used to tune and monitor MySQL operations. 1212 | mysqlnd.collect_statistics = On 1213 | 1214 | ; Enable / Disable collection of memory usage statistics by mysqlnd which can be 1215 | ; used to tune and monitor MySQL operations. 1216 | mysqlnd.collect_memory_statistics = On 1217 | 1218 | ; Records communication from all extensions using mysqlnd to the specified log 1219 | ; file. 1220 | ; https://php.net/mysqlnd.debug 1221 | ;mysqlnd.debug = 1222 | 1223 | ; Defines which queries will be logged. 1224 | ;mysqlnd.log_mask = 0 1225 | 1226 | ; Default size of the mysqlnd memory pool, which is used by result sets. 1227 | ;mysqlnd.mempool_default_size = 16000 1228 | 1229 | ; Size of a pre-allocated buffer used when sending commands to MySQL in bytes. 1230 | ;mysqlnd.net_cmd_buffer_size = 2048 1231 | 1232 | ; Size of a pre-allocated buffer used for reading data sent by the server in 1233 | ; bytes. 1234 | ;mysqlnd.net_read_buffer_size = 32768 1235 | 1236 | ; Timeout for network requests in seconds. 1237 | ;mysqlnd.net_read_timeout = 31536000 1238 | 1239 | ; SHA-256 Authentication Plugin related. File with the MySQL server public RSA 1240 | ; key. 1241 | ;mysqlnd.sha256_server_public_key = 1242 | 1243 | [OCI8] 1244 | 1245 | ; Connection: Enables privileged connections using external 1246 | ; credentials (OCI_SYSOPER, OCI_SYSDBA) 1247 | ; https://php.net/oci8.privileged-connect 1248 | ;oci8.privileged_connect = Off 1249 | 1250 | ; Connection: The maximum number of persistent OCI8 connections per 1251 | ; process. Using -1 means no limit. 1252 | ; https://php.net/oci8.max-persistent 1253 | ;oci8.max_persistent = -1 1254 | 1255 | ; Connection: The maximum number of seconds a process is allowed to 1256 | ; maintain an idle persistent connection. Using -1 means idle 1257 | ; persistent connections will be maintained forever. 1258 | ; https://php.net/oci8.persistent-timeout 1259 | ;oci8.persistent_timeout = -1 1260 | 1261 | ; Connection: The number of seconds that must pass before issuing a 1262 | ; ping during oci_pconnect() to check the connection validity. When 1263 | ; set to 0, each oci_pconnect() will cause a ping. Using -1 disables 1264 | ; pings completely. 1265 | ; https://php.net/oci8.ping-interval 1266 | ;oci8.ping_interval = 60 1267 | 1268 | ; Connection: Set this to a user chosen connection class to be used 1269 | ; for all pooled server requests with Oracle Database Resident 1270 | ; Connection Pooling (DRCP). To use DRCP, this value should be set to 1271 | ; the same string for all web servers running the same application, 1272 | ; the database pool must be configured, and the connection string must 1273 | ; specify to use a pooled server. 1274 | ;oci8.connection_class = 1275 | 1276 | ; High Availability: Using On lets PHP receive Fast Application 1277 | ; Notification (FAN) events generated when a database node fails. The 1278 | ; database must also be configured to post FAN events. 1279 | ;oci8.events = Off 1280 | 1281 | ; Tuning: This option enables statement caching, and specifies how 1282 | ; many statements to cache. Using 0 disables statement caching. 1283 | ; https://php.net/oci8.statement-cache-size 1284 | ;oci8.statement_cache_size = 20 1285 | 1286 | ; Tuning: Enables row prefetching and sets the default number of 1287 | ; rows that will be fetched automatically after statement execution. 1288 | ; https://php.net/oci8.default-prefetch 1289 | ;oci8.default_prefetch = 100 1290 | 1291 | ; Tuning: Sets the amount of LOB data that is internally returned from 1292 | ; Oracle Database when an Oracle LOB locator is initially retrieved as 1293 | ; part of a query. Setting this can improve performance by reducing 1294 | ; round-trips. 1295 | ; https://php.net/oci8.prefetch-lob-size 1296 | ; oci8.prefetch_lob_size = 0 1297 | 1298 | ; Compatibility. Using On means oci_close() will not close 1299 | ; oci_connect() and oci_new_connect() connections. 1300 | ; https://php.net/oci8.old-oci-close-semantics 1301 | ;oci8.old_oci_close_semantics = Off 1302 | 1303 | [PostgreSQL] 1304 | ; Allow or prevent persistent links. 1305 | ; https://php.net/pgsql.allow-persistent 1306 | pgsql.allow_persistent = On 1307 | 1308 | ; Detect broken persistent links always with pg_pconnect(). 1309 | ; Auto reset feature requires a little overheads. 1310 | ; https://php.net/pgsql.auto-reset-persistent 1311 | pgsql.auto_reset_persistent = Off 1312 | 1313 | ; Maximum number of persistent links. -1 means no limit. 1314 | ; https://php.net/pgsql.max-persistent 1315 | pgsql.max_persistent = -1 1316 | 1317 | ; Maximum number of links (persistent+non persistent). -1 means no limit. 1318 | ; https://php.net/pgsql.max-links 1319 | pgsql.max_links = -1 1320 | 1321 | ; Ignore PostgreSQL backends Notice message or not. 1322 | ; Notice message logging require a little overheads. 1323 | ; https://php.net/pgsql.ignore-notice 1324 | pgsql.ignore_notice = 0 1325 | 1326 | ; Log PostgreSQL backends Notice message or not. 1327 | ; Unless pgsql.ignore_notice=0, module cannot log notice message. 1328 | ; https://php.net/pgsql.log-notice 1329 | pgsql.log_notice = 0 1330 | 1331 | [bcmath] 1332 | ; Number of decimal digits for all bcmath functions. 1333 | ; https://php.net/bcmath.scale 1334 | bcmath.scale = 0 1335 | 1336 | [browscap] 1337 | ; https://php.net/browscap 1338 | ;browscap = extra/browscap.ini 1339 | 1340 | [Session] 1341 | ; Handler used to store/retrieve data. 1342 | ; https://php.net/session.save-handler 1343 | session.save_handler = files 1344 | 1345 | ; Argument passed to save_handler. In the case of files, this is the path 1346 | ; where data files are stored. Note: Windows users have to change this 1347 | ; variable in order to use PHP's session functions. 1348 | ; 1349 | ; The path can be defined as: 1350 | ; 1351 | ; session.save_path = "N;/path" 1352 | ; 1353 | ; where N is an integer. Instead of storing all the session files in 1354 | ; /path, what this will do is use subdirectories N-levels deep, and 1355 | ; store the session data in those directories. This is useful if 1356 | ; your OS has problems with many files in one directory, and is 1357 | ; a more efficient layout for servers that handle many sessions. 1358 | ; 1359 | ; NOTE 1: PHP will not create this directory structure automatically. 1360 | ; You can use the script in the ext/session dir for that purpose. 1361 | ; NOTE 2: See the section on garbage collection below if you choose to 1362 | ; use subdirectories for session storage 1363 | ; 1364 | ; The file storage module creates files using mode 600 by default. 1365 | ; You can change that by using 1366 | ; 1367 | ; session.save_path = "N;MODE;/path" 1368 | ; 1369 | ; where MODE is the octal representation of the mode. Note that this 1370 | ; does not overwrite the process's umask. 1371 | ; https://php.net/session.save-path 1372 | ;session.save_path = "/tmp" 1373 | 1374 | ; Whether to use strict session mode. 1375 | ; Strict session mode does not accept an uninitialized session ID, and 1376 | ; regenerates the session ID if the browser sends an uninitialized session ID. 1377 | ; Strict mode protects applications from session fixation via a session adoption 1378 | ; vulnerability. It is disabled by default for maximum compatibility, but 1379 | ; enabling it is encouraged. 1380 | ; https://wiki.php.net/rfc/strict_sessions 1381 | session.use_strict_mode = 0 1382 | 1383 | ; Whether to use cookies. 1384 | ; https://php.net/session.use-cookies 1385 | session.use_cookies = 1 1386 | 1387 | ; https://php.net/session.cookie-secure 1388 | ;session.cookie_secure = 1389 | 1390 | ; This option forces PHP to fetch and use a cookie for storing and maintaining 1391 | ; the session id. We encourage this operation as it's very helpful in combating 1392 | ; session hijacking when not specifying and managing your own session id. It is 1393 | ; not the be-all and end-all of session hijacking defense, but it's a good start. 1394 | ; https://php.net/session.use-only-cookies 1395 | session.use_only_cookies = 1 1396 | 1397 | ; Name of the session (used as cookie name). 1398 | ; https://php.net/session.name 1399 | session.name = PHPSESSID 1400 | 1401 | ; Initialize session on request startup. 1402 | ; https://php.net/session.auto-start 1403 | session.auto_start = 0 1404 | 1405 | ; Lifetime in seconds of cookie or, if 0, until browser is restarted. 1406 | ; https://php.net/session.cookie-lifetime 1407 | session.cookie_lifetime = 0 1408 | 1409 | ; The path for which the cookie is valid. 1410 | ; https://php.net/session.cookie-path 1411 | session.cookie_path = / 1412 | 1413 | ; The domain for which the cookie is valid. 1414 | ; https://php.net/session.cookie-domain 1415 | session.cookie_domain = 1416 | 1417 | ; Whether or not to add the httpOnly flag to the cookie, which makes it 1418 | ; inaccessible to browser scripting languages such as JavaScript. 1419 | ; https://php.net/session.cookie-httponly 1420 | session.cookie_httponly = 1421 | 1422 | ; Add SameSite attribute to cookie to help mitigate Cross-Site Request Forgery (CSRF/XSRF) 1423 | ; Current valid values are "Strict", "Lax" or "None". When using "None", 1424 | ; make sure to include the quotes, as `none` is interpreted like `false` in ini files. 1425 | ; https://tools.ietf.org/html/draft-west-first-party-cookies-07 1426 | session.cookie_samesite = 1427 | 1428 | ; Handler used to serialize data. php is the standard serializer of PHP. 1429 | ; https://php.net/session.serialize-handler 1430 | session.serialize_handler = php 1431 | 1432 | ; Defines the probability that the 'garbage collection' process is started on every 1433 | ; session initialization. The probability is calculated by using gc_probability/gc_divisor, 1434 | ; e.g. 1/100 means there is a 1% chance that the GC process starts on each request. 1435 | ; Default Value: 1 1436 | ; Development Value: 1 1437 | ; Production Value: 1 1438 | ; https://php.net/session.gc-probability 1439 | session.gc_probability = 1 1440 | 1441 | ; Defines the probability that the 'garbage collection' process is started on every 1442 | ; session initialization. The probability is calculated by using gc_probability/gc_divisor, 1443 | ; e.g. 1/100 means there is a 1% chance that the GC process starts on each request. 1444 | ; For high volume production servers, using a value of 1000 is a more efficient approach. 1445 | ; Default Value: 100 1446 | ; Development Value: 1000 1447 | ; Production Value: 1000 1448 | ; https://php.net/session.gc-divisor 1449 | session.gc_divisor = 1000 1450 | 1451 | ; After this number of seconds, stored data will be seen as 'garbage' and 1452 | ; cleaned up by the garbage collection process. 1453 | ; https://php.net/session.gc-maxlifetime 1454 | session.gc_maxlifetime = 1440 1455 | 1456 | ; NOTE: If you are using the subdirectory option for storing session files 1457 | ; (see session.save_path above), then garbage collection does *not* 1458 | ; happen automatically. You will need to do your own garbage 1459 | ; collection through a shell script, cron entry, or some other method. 1460 | ; For example, the following script is the equivalent of setting 1461 | ; session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): 1462 | ; find /path/to/sessions -cmin +24 -type f | xargs rm 1463 | 1464 | ; Check HTTP Referer to invalidate externally stored URLs containing ids. 1465 | ; HTTP_REFERER has to contain this substring for the session to be 1466 | ; considered as valid. 1467 | ; https://php.net/session.referer-check 1468 | session.referer_check = 1469 | 1470 | ; Set to {nocache,private,public,} to determine HTTP caching aspects 1471 | ; or leave this empty to avoid sending anti-caching headers. 1472 | ; https://php.net/session.cache-limiter 1473 | session.cache_limiter = nocache 1474 | 1475 | ; Document expires after n minutes. 1476 | ; https://php.net/session.cache-expire 1477 | session.cache_expire = 180 1478 | 1479 | ; trans sid support is disabled by default. 1480 | ; Use of trans sid may risk your users' security. 1481 | ; Use this option with caution. 1482 | ; - User may send URL contains active session ID 1483 | ; to other person via. email/irc/etc. 1484 | ; - URL that contains active session ID may be stored 1485 | ; in publicly accessible computer. 1486 | ; - User may access your site with the same session ID 1487 | ; always using URL stored in browser's history or bookmarks. 1488 | ; https://php.net/session.use-trans-sid 1489 | session.use_trans_sid = 0 1490 | 1491 | ; Set session ID character length. This value could be between 22 to 256. 1492 | ; Shorter length than default is supported only for compatibility reason. 1493 | ; Users should use 32 or more chars. 1494 | ; https://php.net/session.sid-length 1495 | ; Default Value: 32 1496 | ; Development Value: 26 1497 | ; Production Value: 26 1498 | session.sid_length = 26 1499 | 1500 | ; The URL rewriter will look for URLs in a defined set of HTML tags. 1501 | ;
is special; if you include them here, the rewriter will 1502 | ; add a hidden field with the info which is otherwise appended 1503 | ; to URLs. tag's action attribute URL will not be modified 1504 | ; unless it is specified. 1505 | ; Note that all valid entries require a "=", even if no value follows. 1506 | ; Default Value: "a=href,area=href,frame=src,form=" 1507 | ; Development Value: "a=href,area=href,frame=src,form=" 1508 | ; Production Value: "a=href,area=href,frame=src,form=" 1509 | ; https://php.net/url-rewriter.tags 1510 | session.trans_sid_tags = "a=href,area=href,frame=src,form=" 1511 | 1512 | ; URL rewriter does not rewrite absolute URLs by default. 1513 | ; To enable rewrites for absolute paths, target hosts must be specified 1514 | ; at RUNTIME. i.e. use ini_set() 1515 | ; tags is special. PHP will check action attribute's URL regardless 1516 | ; of session.trans_sid_tags setting. 1517 | ; If no host is defined, HTTP_HOST will be used for allowed host. 1518 | ; Example value: php.net,www.php.net,wiki.php.net 1519 | ; Use "," for multiple hosts. No spaces are allowed. 1520 | ; Default Value: "" 1521 | ; Development Value: "" 1522 | ; Production Value: "" 1523 | ;session.trans_sid_hosts="" 1524 | 1525 | ; Define how many bits are stored in each character when converting 1526 | ; the binary hash data to something readable. 1527 | ; Possible values: 1528 | ; 4 (4 bits: 0-9, a-f) 1529 | ; 5 (5 bits: 0-9, a-v) 1530 | ; 6 (6 bits: 0-9, a-z, A-Z, "-", ",") 1531 | ; Default Value: 4 1532 | ; Development Value: 5 1533 | ; Production Value: 5 1534 | ; https://php.net/session.hash-bits-per-character 1535 | session.sid_bits_per_character = 5 1536 | 1537 | ; Enable upload progress tracking in $_SESSION 1538 | ; Default Value: On 1539 | ; Development Value: On 1540 | ; Production Value: On 1541 | ; https://php.net/session.upload-progress.enabled 1542 | ;session.upload_progress.enabled = On 1543 | 1544 | ; Cleanup the progress information as soon as all POST data has been read 1545 | ; (i.e. upload completed). 1546 | ; Default Value: On 1547 | ; Development Value: On 1548 | ; Production Value: On 1549 | ; https://php.net/session.upload-progress.cleanup 1550 | ;session.upload_progress.cleanup = On 1551 | 1552 | ; A prefix used for the upload progress key in $_SESSION 1553 | ; Default Value: "upload_progress_" 1554 | ; Development Value: "upload_progress_" 1555 | ; Production Value: "upload_progress_" 1556 | ; https://php.net/session.upload-progress.prefix 1557 | ;session.upload_progress.prefix = "upload_progress_" 1558 | 1559 | ; The index name (concatenated with the prefix) in $_SESSION 1560 | ; containing the upload progress information 1561 | ; Default Value: "PHP_SESSION_UPLOAD_PROGRESS" 1562 | ; Development Value: "PHP_SESSION_UPLOAD_PROGRESS" 1563 | ; Production Value: "PHP_SESSION_UPLOAD_PROGRESS" 1564 | ; https://php.net/session.upload-progress.name 1565 | ;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS" 1566 | 1567 | ; How frequently the upload progress should be updated. 1568 | ; Given either in percentages (per-file), or in bytes 1569 | ; Default Value: "1%" 1570 | ; Development Value: "1%" 1571 | ; Production Value: "1%" 1572 | ; https://php.net/session.upload-progress.freq 1573 | ;session.upload_progress.freq = "1%" 1574 | 1575 | ; The minimum delay between updates, in seconds 1576 | ; Default Value: 1 1577 | ; Development Value: 1 1578 | ; Production Value: 1 1579 | ; https://php.net/session.upload-progress.min-freq 1580 | ;session.upload_progress.min_freq = "1" 1581 | 1582 | ; Only write session data when session data is changed. Enabled by default. 1583 | ; https://php.net/session.lazy-write 1584 | ;session.lazy_write = On 1585 | 1586 | [Assertion] 1587 | ; Switch whether to compile assertions at all (to have no overhead at run-time) 1588 | ; -1: Do not compile at all 1589 | ; 0: Jump over assertion at run-time 1590 | ; 1: Execute assertions 1591 | ; Changing from or to a negative value is only possible in php.ini! (For turning assertions on and off at run-time, see assert.active, when zend.assertions = 1) 1592 | ; Default Value: 1 1593 | ; Development Value: 1 1594 | ; Production Value: -1 1595 | ; https://php.net/zend.assertions 1596 | zend.assertions = 1 1597 | 1598 | ; Assert(expr); active by default. 1599 | ; https://php.net/assert.active 1600 | ;assert.active = On 1601 | 1602 | ; Throw an AssertionError on failed assertions 1603 | ; https://php.net/assert.exception 1604 | ;assert.exception = On 1605 | 1606 | ; Issue a PHP warning for each failed assertion. (Overridden by assert.exception if active) 1607 | ; https://php.net/assert.warning 1608 | ;assert.warning = On 1609 | 1610 | ; Don't bail out by default. 1611 | ; https://php.net/assert.bail 1612 | ;assert.bail = Off 1613 | 1614 | ; User-function to be called if an assertion fails. 1615 | ; https://php.net/assert.callback 1616 | ;assert.callback = 0 1617 | 1618 | [COM] 1619 | ; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs 1620 | ; https://php.net/com.typelib-file 1621 | ;com.typelib_file = 1622 | 1623 | ; allow Distributed-COM calls 1624 | ; https://php.net/com.allow-dcom 1625 | ;com.allow_dcom = true 1626 | 1627 | ; autoregister constants of a component's typelib on com_load() 1628 | ; https://php.net/com.autoregister-typelib 1629 | ;com.autoregister_typelib = true 1630 | 1631 | ; register constants casesensitive 1632 | ; https://php.net/com.autoregister-casesensitive 1633 | ;com.autoregister_casesensitive = false 1634 | 1635 | ; show warnings on duplicate constant registrations 1636 | ; https://php.net/com.autoregister-verbose 1637 | ;com.autoregister_verbose = true 1638 | 1639 | ; The default character set code-page to use when passing strings to and from COM objects. 1640 | ; Default: system ANSI code page 1641 | ;com.code_page= 1642 | 1643 | ; The version of the .NET framework to use. The value of the setting are the first three parts 1644 | ; of the framework's version number, separated by dots, and prefixed with "v", e.g. "v4.0.30319". 1645 | ;com.dotnet_version= 1646 | 1647 | [mbstring] 1648 | ; language for internal character representation. 1649 | ; This affects mb_send_mail() and mbstring.detect_order. 1650 | ; https://php.net/mbstring.language 1651 | ;mbstring.language = Japanese 1652 | 1653 | ; Use of this INI entry is deprecated, use global internal_encoding instead. 1654 | ; internal/script encoding. 1655 | ; Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*) 1656 | ; If empty, default_charset or internal_encoding or iconv.internal_encoding is used. 1657 | ; The precedence is: default_charset < internal_encoding < iconv.internal_encoding 1658 | ;mbstring.internal_encoding = 1659 | 1660 | ; Use of this INI entry is deprecated, use global input_encoding instead. 1661 | ; http input encoding. 1662 | ; mbstring.encoding_translation = On is needed to use this setting. 1663 | ; If empty, default_charset or input_encoding or mbstring.input is used. 1664 | ; The precedence is: default_charset < input_encoding < mbstring.http_input 1665 | ; https://php.net/mbstring.http-input 1666 | ;mbstring.http_input = 1667 | 1668 | ; Use of this INI entry is deprecated, use global output_encoding instead. 1669 | ; http output encoding. 1670 | ; mb_output_handler must be registered as output buffer to function. 1671 | ; If empty, default_charset or output_encoding or mbstring.http_output is used. 1672 | ; The precedence is: default_charset < output_encoding < mbstring.http_output 1673 | ; To use an output encoding conversion, mbstring's output handler must be set 1674 | ; otherwise output encoding conversion cannot be performed. 1675 | ; https://php.net/mbstring.http-output 1676 | ;mbstring.http_output = 1677 | 1678 | ; enable automatic encoding translation according to 1679 | ; mbstring.internal_encoding setting. Input chars are 1680 | ; converted to internal encoding by setting this to On. 1681 | ; Note: Do _not_ use automatic encoding translation for 1682 | ; portable libs/applications. 1683 | ; https://php.net/mbstring.encoding-translation 1684 | ;mbstring.encoding_translation = Off 1685 | 1686 | ; automatic encoding detection order. 1687 | ; "auto" detect order is changed according to mbstring.language 1688 | ; https://php.net/mbstring.detect-order 1689 | ;mbstring.detect_order = auto 1690 | 1691 | ; substitute_character used when character cannot be converted 1692 | ; one from another 1693 | ; https://php.net/mbstring.substitute-character 1694 | ;mbstring.substitute_character = none 1695 | 1696 | ; Enable strict encoding detection. 1697 | ;mbstring.strict_detection = Off 1698 | 1699 | ; This directive specifies the regex pattern of content types for which mb_output_handler() 1700 | ; is activated. 1701 | ; Default: mbstring.http_output_conv_mimetypes=^(text/|application/xhtml\+xml) 1702 | ;mbstring.http_output_conv_mimetypes= 1703 | 1704 | ; This directive specifies maximum stack depth for mbstring regular expressions. It is similar 1705 | ; to the pcre.recursion_limit for PCRE. 1706 | ;mbstring.regex_stack_limit=100000 1707 | 1708 | ; This directive specifies maximum retry count for mbstring regular expressions. It is similar 1709 | ; to the pcre.backtrack_limit for PCRE. 1710 | ;mbstring.regex_retry_limit=1000000 1711 | 1712 | [gd] 1713 | ; Tell the jpeg decode to ignore warnings and try to create 1714 | ; a gd image. The warning will then be displayed as notices 1715 | ; disabled by default 1716 | ; https://php.net/gd.jpeg-ignore-warning 1717 | ;gd.jpeg_ignore_warning = 1 1718 | 1719 | [exif] 1720 | ; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS. 1721 | ; With mbstring support this will automatically be converted into the encoding 1722 | ; given by corresponding encode setting. When empty mbstring.internal_encoding 1723 | ; is used. For the decode settings you can distinguish between motorola and 1724 | ; intel byte order. A decode setting cannot be empty. 1725 | ; https://php.net/exif.encode-unicode 1726 | ;exif.encode_unicode = ISO-8859-15 1727 | 1728 | ; https://php.net/exif.decode-unicode-motorola 1729 | ;exif.decode_unicode_motorola = UCS-2BE 1730 | 1731 | ; https://php.net/exif.decode-unicode-intel 1732 | ;exif.decode_unicode_intel = UCS-2LE 1733 | 1734 | ; https://php.net/exif.encode-jis 1735 | ;exif.encode_jis = 1736 | 1737 | ; https://php.net/exif.decode-jis-motorola 1738 | ;exif.decode_jis_motorola = JIS 1739 | 1740 | ; https://php.net/exif.decode-jis-intel 1741 | ;exif.decode_jis_intel = JIS 1742 | 1743 | [Tidy] 1744 | ; The path to a default tidy configuration file to use when using tidy 1745 | ; https://php.net/tidy.default-config 1746 | ;tidy.default_config = /usr/local/lib/php/default.tcfg 1747 | 1748 | ; Should tidy clean and repair output automatically? 1749 | ; WARNING: Do not use this option if you are generating non-html content 1750 | ; such as dynamic images 1751 | ; https://php.net/tidy.clean-output 1752 | tidy.clean_output = Off 1753 | 1754 | [soap] 1755 | ; Enables or disables WSDL caching feature. 1756 | ; https://php.net/soap.wsdl-cache-enabled 1757 | soap.wsdl_cache_enabled=1 1758 | 1759 | ; Sets the directory name where SOAP extension will put cache files. 1760 | ; https://php.net/soap.wsdl-cache-dir 1761 | soap.wsdl_cache_dir="/tmp" 1762 | 1763 | ; (time to live) Sets the number of second while cached file will be used 1764 | ; instead of original one. 1765 | ; https://php.net/soap.wsdl-cache-ttl 1766 | soap.wsdl_cache_ttl=86400 1767 | 1768 | ; Sets the size of the cache limit. (Max. number of WSDL files to cache) 1769 | soap.wsdl_cache_limit = 5 1770 | 1771 | [sysvshm] 1772 | ; A default size of the shared memory segment 1773 | ;sysvshm.init_mem = 10000 1774 | 1775 | [ldap] 1776 | ; Sets the maximum number of open links or -1 for unlimited. 1777 | ldap.max_links = -1 1778 | 1779 | [dba] 1780 | ;dba.default_handler= 1781 | 1782 | [opcache] 1783 | ; Determines if Zend OPCache is enabled 1784 | ;opcache.enable=1 1785 | 1786 | ; Determines if Zend OPCache is enabled for the CLI version of PHP 1787 | ;opcache.enable_cli=0 1788 | 1789 | ; The OPcache shared memory storage size. 1790 | ;opcache.memory_consumption=128 1791 | 1792 | ; The amount of memory for interned strings in Mbytes. 1793 | ;opcache.interned_strings_buffer=8 1794 | 1795 | ; The maximum number of keys (scripts) in the OPcache hash table. 1796 | ; Only numbers between 200 and 1000000 are allowed. 1797 | ;opcache.max_accelerated_files=10000 1798 | 1799 | ; The maximum percentage of "wasted" memory until a restart is scheduled. 1800 | ;opcache.max_wasted_percentage=5 1801 | 1802 | ; When this directive is enabled, the OPcache appends the current working 1803 | ; directory to the script key, thus eliminating possible collisions between 1804 | ; files with the same name (basename). Disabling the directive improves 1805 | ; performance, but may break existing applications. 1806 | ;opcache.use_cwd=1 1807 | 1808 | ; When disabled, you must reset the OPcache manually or restart the 1809 | ; webserver for changes to the filesystem to take effect. 1810 | ;opcache.validate_timestamps=1 1811 | 1812 | ; How often (in seconds) to check file timestamps for changes to the shared 1813 | ; memory storage allocation. ("1" means validate once per second, but only 1814 | ; once per request. "0" means always validate) 1815 | ;opcache.revalidate_freq=2 1816 | 1817 | ; Enables or disables file search in include_path optimization 1818 | ;opcache.revalidate_path=0 1819 | 1820 | ; If disabled, all PHPDoc comments are dropped from the code to reduce the 1821 | ; size of the optimized code. 1822 | ;opcache.save_comments=1 1823 | 1824 | ; If enabled, compilation warnings (including notices and deprecations) will 1825 | ; be recorded and replayed each time a file is included. Otherwise, compilation 1826 | ; warnings will only be emitted when the file is first cached. 1827 | ;opcache.record_warnings=0 1828 | 1829 | ; Allow file existence override (file_exists, etc.) performance feature. 1830 | ;opcache.enable_file_override=0 1831 | 1832 | ; A bitmask, where each bit enables or disables the appropriate OPcache 1833 | ; passes 1834 | ;opcache.optimization_level=0x7FFFBFFF 1835 | 1836 | ;opcache.dups_fix=0 1837 | 1838 | ; The location of the OPcache blacklist file (wildcards allowed). 1839 | ; Each OPcache blacklist file is a text file that holds the names of files 1840 | ; that should not be accelerated. The file format is to add each filename 1841 | ; to a new line. The filename may be a full path or just a file prefix 1842 | ; (i.e., /var/www/x blacklists all the files and directories in /var/www 1843 | ; that start with 'x'). Line starting with a ; are ignored (comments). 1844 | ;opcache.blacklist_filename= 1845 | 1846 | ; Allows exclusion of large files from being cached. By default all files 1847 | ; are cached. 1848 | ;opcache.max_file_size=0 1849 | 1850 | ; Check the cache checksum each N requests. 1851 | ; The default value of "0" means that the checks are disabled. 1852 | ;opcache.consistency_checks=0 1853 | 1854 | ; How long to wait (in seconds) for a scheduled restart to begin if the cache 1855 | ; is not being accessed. 1856 | ;opcache.force_restart_timeout=180 1857 | 1858 | ; OPcache error_log file name. Empty string assumes "stderr". 1859 | ;opcache.error_log= 1860 | 1861 | ; All OPcache errors go to the Web server log. 1862 | ; By default, only fatal errors (level 0) or errors (level 1) are logged. 1863 | ; You can also enable warnings (level 2), info messages (level 3) or 1864 | ; debug messages (level 4). 1865 | ;opcache.log_verbosity_level=1 1866 | 1867 | ; Preferred Shared Memory back-end. Leave empty and let the system decide. 1868 | ;opcache.preferred_memory_model= 1869 | 1870 | ; Protect the shared memory from unexpected writing during script execution. 1871 | ; Useful for internal debugging only. 1872 | ;opcache.protect_memory=0 1873 | 1874 | ; Allows calling OPcache API functions only from PHP scripts which path is 1875 | ; started from specified string. The default "" means no restriction 1876 | ;opcache.restrict_api= 1877 | 1878 | ; Mapping base of shared memory segments (for Windows only). All the PHP 1879 | ; processes have to map shared memory into the same address space. This 1880 | ; directive allows to manually fix the "Unable to reattach to base address" 1881 | ; errors. 1882 | ;opcache.mmap_base= 1883 | 1884 | ; Facilitates multiple OPcache instances per user (for Windows only). All PHP 1885 | ; processes with the same cache ID and user share an OPcache instance. 1886 | ;opcache.cache_id= 1887 | 1888 | ; Enables and sets the second level cache directory. 1889 | ; It should improve performance when SHM memory is full, at server restart or 1890 | ; SHM reset. The default "" disables file based caching. 1891 | ;opcache.file_cache= 1892 | 1893 | ; Enables or disables opcode caching in shared memory. 1894 | ;opcache.file_cache_only=0 1895 | 1896 | ; Enables or disables checksum validation when script loaded from file cache. 1897 | ;opcache.file_cache_consistency_checks=1 1898 | 1899 | ; Implies opcache.file_cache_only=1 for a certain process that failed to 1900 | ; reattach to the shared memory (for Windows only). Explicitly enabled file 1901 | ; cache is required. 1902 | ;opcache.file_cache_fallback=1 1903 | 1904 | ; Enables or disables copying of PHP code (text segment) into HUGE PAGES. 1905 | ; Under certain circumstances (if only a single global PHP process is 1906 | ; started from which all others fork), this can increase performance 1907 | ; by a tiny amount because TLB misses are reduced. On the other hand, this 1908 | ; delays PHP startup, increases memory usage and degrades performance 1909 | ; under memory pressure - use with care. 1910 | ; Requires appropriate OS configuration. 1911 | ;opcache.huge_code_pages=0 1912 | 1913 | ; Validate cached file permissions. 1914 | ;opcache.validate_permission=0 1915 | 1916 | ; Prevent name collisions in chroot'ed environment. 1917 | ;opcache.validate_root=0 1918 | 1919 | ; If specified, it produces opcode dumps for debugging different stages of 1920 | ; optimizations. 1921 | ;opcache.opt_debug_level=0 1922 | 1923 | ; Specifies a PHP script that is going to be compiled and executed at server 1924 | ; start-up. 1925 | ; https://php.net/opcache.preload 1926 | ;opcache.preload= 1927 | 1928 | ; Preloading code as root is not allowed for security reasons. This directive 1929 | ; facilitates to let the preloading to be run as another user. 1930 | ; https://php.net/opcache.preload_user 1931 | ;opcache.preload_user= 1932 | 1933 | ; Prevents caching files that are less than this number of seconds old. It 1934 | ; protects from caching of incompletely updated files. In case all file updates 1935 | ; on your site are atomic, you may increase performance by setting it to "0". 1936 | ;opcache.file_update_protection=2 1937 | 1938 | ; Absolute path used to store shared lockfiles (for *nix only). 1939 | ;opcache.lockfile_path=/tmp 1940 | 1941 | [curl] 1942 | ; A default value for the CURLOPT_CAINFO option. This is required to be an 1943 | ; absolute path. 1944 | ;curl.cainfo = 1945 | 1946 | [openssl] 1947 | ; The location of a Certificate Authority (CA) file on the local filesystem 1948 | ; to use when verifying the identity of SSL/TLS peers. Most users should 1949 | ; not specify a value for this directive as PHP will attempt to use the 1950 | ; OS-managed cert stores in its absence. If specified, this value may still 1951 | ; be overridden on a per-stream basis via the "cafile" SSL stream context 1952 | ; option. 1953 | ;openssl.cafile= 1954 | 1955 | ; If openssl.cafile is not specified or if the CA file is not found, the 1956 | ; directory pointed to by openssl.capath is searched for a suitable 1957 | ; certificate. This value must be a correctly hashed certificate directory. 1958 | ; Most users should not specify a value for this directive as PHP will 1959 | ; attempt to use the OS-managed cert stores in its absence. If specified, 1960 | ; this value may still be overridden on a per-stream basis via the "capath" 1961 | ; SSL stream context option. 1962 | ;openssl.capath= 1963 | 1964 | [ffi] 1965 | ; FFI API restriction. Possible values: 1966 | ; "preload" - enabled in CLI scripts and preloaded files (default) 1967 | ; "false" - always disabled 1968 | ; "true" - always enabled 1969 | ;ffi.enable=preload 1970 | 1971 | ; List of headers files to preload, wildcard patterns allowed. 1972 | ;ffi.preload= 1973 | -------------------------------------------------------------------------------- /.docker/scripts/entrypoint-ini.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Verifica se /usr/local/etc/php/php.ini existe, se não, copia php.ini-development para php.ini 4 | ##if [ ! -f /usr/local/etc/php/php.ini ]; then 5 | ## cp /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini 6 | ##fi 7 | 8 | # Verifica se /usr/local/etc/php/conf.d/xdebug.ini existe, se não, copia xdebug.ini-base para conf.d/xdebug.ini 9 | ##if [ ! -f /usr/local/etc/php/conf.d/xdebug.ini ]; then 10 | ## cp /usr/local/etc/php/xdebug.ini-base /usr/local/etc/php/conf.d/xdebug.ini 11 | ##fi 12 | 13 | # Executa composer install para instalar as dependências do PHP 14 | echo ">>>composer install" 15 | composer install 16 | 17 | # Executa o comando passado como argumento para este script 18 | exec "$@" 19 | -------------------------------------------------------------------------------- /.docker/scripts/init-local.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Nome da rede Docker personalizada 4 | NETWORK_NAME="network-digital-codigos" 5 | 6 | docker network inspect $NETWORK_NAME >/dev/null 2>&1 || docker network create --driver bridge $NETWORK_NAME -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor/ 2 | /.phpunit.cache/ 3 | /node_modules/ 4 | 5 | # Arquivos de configuração local 6 | /.env 7 | /.env.local 8 | 9 | # Diretórios de cache e logs 10 | /var/ 11 | /log/ 12 | 13 | # Arquivos e diretórios específicos do sistema operacional e do editor 14 | .DS_Store 15 | Thumbs.db 16 | .idea/ 17 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Listen for XDebug", 6 | "type": "php", 7 | "request": "launch", 8 | "hostname": "0.0.0.0", 9 | "port": 9003, 10 | "log": true, 11 | "pathMappings": { 12 | "/var/www/html": "${workspaceFolder}/app/" 13 | }, 14 | "ignore": ["*/vendor//.php"], 15 | "xdebugSettings": { 16 | "max_children": 10000, 17 | "max_data": 10000, 18 | "show_hidden": 1 19 | } 20 | }, 21 | { 22 | "name": "Launch currently open script", 23 | "type": "php", 24 | "request": "launch", 25 | "program": "${file}", 26 | "cwd": "${fileDirname}", 27 | "port": 0, 28 | "runtimeArgs": [ 29 | "-dxdebug.start_with_request=yes" 30 | ], 31 | "env": { 32 | "XDEBUG_MODE": "debug,develop", 33 | "XDEBUG_CONFIG": "client_port=${port}" 34 | } 35 | }, 36 | { 37 | "name": "Launch Built-in web server", 38 | "type": "php", 39 | "request": "launch", 40 | "runtimeArgs": [ 41 | "-dxdebug.mode=debug", 42 | "-dxdebug.start_with_request=yes", 43 | "-S", 44 | "localhost:0" 45 | ], 46 | "program": "", 47 | "cwd": "${workspaceRoot}", 48 | "port": 9003, 49 | "serverReadyAction": { 50 | "pattern": "Development Server \\(http://localhost:([0-9]+)\\) started", 51 | "uriFormat": "http://localhost:%s", 52 | "action": "openExternally" 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Definindo o 'init-script' para executar o script init-local.sh 2 | USER := $(shell id -un) 3 | UID := $(shell id -u) 4 | GID := $(shell id -g) 5 | 6 | init-script: 7 | @echo "Executando o script start..." 8 | @sh ./.docker/scripts/init-local.sh 9 | 10 | up: init-script 11 | @echo "Iniciando o Docker Compose..." 12 | @docker-compose up 13 | 14 | down: init-script 15 | @echo "Parando os contêineres do Docker Compose..." 16 | @docker-compose down 17 | 18 | up-d: init-script 19 | @echo "Iniciando o Docker Compose em modo detached..." 20 | @docker-compose up -d 21 | 22 | up-build: init-script 23 | @echo "Construindo as imagens do Docker Compose..." 24 | @echo "USER_ID: $(UID)" 25 | @echo "GROUP_ID: $(GID)" 26 | @echo "USER_NAME: $(USER)" 27 | @docker-compose build --build-arg UID=$(UID) --build-arg GID=$(GID) --build-arg USER=$(USER) 28 | @docker-compose up 29 | 30 | tests: 31 | @echo "Executando os testes dentro do container PHP..." 32 | @docker-compose exec php vendor/bin/phpunit --coverage-text=php://stdout 33 | 34 | cmd: 35 | @echo "Executando o comando dentro do container PHP..." 36 | @docker-compose exec php $(c) 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Integrando PHP Swoole e Clean Architecture em Ambientes Dockerizados 2 | 3 | Olá, pessoal! Eu sou o Madson! 4 | 5 | Este repositório nasceu da vontade de aprofundar o uso do PHP com o Swoole, uma extensão de PHP voltada para a construção de aplicações assíncronas. O objetivo é aliar a eficiência do Swoole à flexibilidade do Docker, proporcionando uma experiência de desenvolvimento PHP moderna, escalável e otimizada. E, para garantir que nosso código seja robusto e de fácil manutenção, adotamos a Clean Architecture, que nos ajuda a manter o design do software coeso e limpo. 6 | 7 | Com essa configuração, estamos não só explorando o potencial de desempenho do Swoole, mas também aplicando as melhores práticas em Arquitetura e Design de Software. 8 | 9 | ## Sobre o Projeto 10 | 11 | Neste projeto, optei por não me prender a um framework específico. O cerne aqui é a combinação harmoniosa entre Swoole, Docker e Clean Architecture. Com isso em mente, já estruturei as pastas do projeto de forma a refletir essa abordagem. 12 | 13 | Vale destacar que, embora o foco não seja um framework em particular, a integração com certos componentes de frameworks é não só possível, mas também recomendada. Nesta fase inicial, estou aproveitando componentes específicos do Symfony, como Rotas, Controladores e Respostas, para construir uma base sólida sem a necessidade de começar tudo do absoluto zero. 14 | 15 | ## Como Usar 16 | 17 | O projeto já está todo configurado. 18 | Para iniciar os serviços, abra um terminal na raiz do projeto e execute o seguinte comando via Makefile: 19 | 20 | ### Ajustar ás configurações do Swoole e php.ini 21 | ```make 22 | .docker/php/ini/php.ini 23 | .docker/php/ini/docker-php-ext-openswoole.ini 24 | ``` 25 | 26 | ### Com Makefile 27 | - Para iniciar o Docker Compose: 28 | ```make 29 | make up 30 | ``` 31 | - Para parar o Docker Compose: 32 | ```make 33 | make down 34 | ``` 35 | - Para iniciar o Docker Compose em modo detached: 36 | ```make 37 | make up-d 38 | ``` 39 | - Para construir as imagens do Docker Compose: 40 | ```make 41 | make build 42 | ``` 43 | 44 | - O comando make tests é utilizado para executar os testes dentro do container PHP 45 | ```make 46 | make tests 47 | ``` 48 | 49 | - O comando make cmd permite executar comandos arbitrários dentro do container PHP a partir do host local 50 | ```make 51 | make cmd c="ls -la" 52 | ``` 53 | 54 | ## Rotas para Teste 55 | 56 | Inicialmente, temos duas rotas para teste: 57 | - PHP Info: http://0.0.0.0:8090/phpinfo 58 | - Health Check: http://0.0.0.0:8090/health-check 59 | 60 | Para adicionar novas funcionalidades, basta criar uma nova rota e os controladores correspondentes. 61 | Routing: app/src/Application/Routing/Routes.php 62 | Controllers: app/src/Application/Controllers/HealthController.php 63 | 64 | ## Estrutura de Diretórios 65 | 66 | A estrutura de diretórios está organizada conforme a Clean Architecture, e cada diretório tem um propósito específico dentro do projeto: 67 | 68 | ```plaintext 69 | src/ 70 | ├── Domain/ 71 | │ ├── Entities/ 72 | │ └── UseCases/ 73 | ├── Application/ 74 | │ ├── Controllers/ 75 | │ ├── Presenters/ 76 | │ └── Routing/ 77 | ├── Infrastructure/ 78 | │ ├── Database/ 79 | │ ├── Frameworks/ 80 | │ └── Drivers/ 81 | ├── UI/ 82 | └── Tests/ 83 | ``` 84 | 85 | ## Contato 86 | - [LinkedIn](https://www.linkedin.com/in/madson-aguiar-rodrigues-5650472b/) 87 | - [YouTube](https://www.youtube.com/@MadsonAguiarRodrigues) 88 | 89 | ## Conclusão 90 | Este projeto é um ponto de partida para explorar o Swoole PHP de uma forma estruturada 91 | para projeto reais, utilizando boas práticas de arquitetura e design de software. Sinta-se à vontade para explorar, contribuir e, claro, entrar em contato se tiver alguma dúvida ou sugestão! -------------------------------------------------------------------------------- /app/src/Application/Controllers/HealthController.php: -------------------------------------------------------------------------------- 1 | headers->set('Content-Type', 'text/html'); 17 | return $response; 18 | } 19 | } -------------------------------------------------------------------------------- /app/src/Application/Routing/Routes.php: -------------------------------------------------------------------------------- 1 | add('health_check', new Route('/health-check', [ 14 | '_controller' => [HealthController::class, 'check'] 15 | ])); 16 | 17 | $routes->add('php_info', new Route('/phpinfo', [ 18 | '_controller' => [HealthController::class, 'phpInfo'] 19 | ])); 20 | 21 | return $routes; 22 | } 23 | } -------------------------------------------------------------------------------- /app/swoole/server.php: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | on( 15 | "start", 16 | function (Server $http) { 17 | echo "Swoole HTTP server is started.\n"; 18 | } 19 | ); 20 | 21 | $http->on( 22 | "request", 23 | function (Request $request, Response $response) { 24 | $returnedResponse = handleRequest($request, $response); 25 | $response->end($returnedResponse); 26 | } 27 | ); 28 | 29 | $http->start(); -------------------------------------------------------------------------------- /app/swoole/serverHandle.php: -------------------------------------------------------------------------------- 1 | server['request_uri'], 17 | $swooleRequest->server['request_method'], 18 | [], 19 | $swooleRequest->cookie ?? [], 20 | $swooleRequest->files ?? [], 21 | $swooleRequest->server, 22 | $swooleRequest->rawContent() 23 | ); 24 | 25 | $routes = Routes::getRoutes(); 26 | 27 | $context = new RequestContext(); 28 | $context->fromRequest($request); 29 | 30 | $matcher = new UrlMatcher($routes, $context); 31 | 32 | try { 33 | $attributes = $matcher->match($request->getPathInfo()); 34 | $controller = $attributes['_controller']; 35 | unset($attributes['_controller']); 36 | 37 | if (is_callable($controller)) { 38 | $response = $controller(); 39 | } else { 40 | list($class, $method) = $controller; 41 | $object = new $class(); 42 | $response = $object->$method(); 43 | } 44 | } catch (ResourceNotFoundException $e) { 45 | $response = new Response('Not Found', 404); 46 | } catch (Exception $e) { 47 | $response = new Response('An error occurred', 500); 48 | } 49 | 50 | $swooleResponse->status($response->getStatusCode()); 51 | foreach ($response->headers->all() as $name => $values) { 52 | foreach ($values as $value) { 53 | $swooleResponse->header($name, $value); 54 | } 55 | } 56 | 57 | // Retorne o conteúdo da resposta em vez de finalizá-la diretamente 58 | return $response->getContent(); 59 | } 60 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "digital-codigos/php-raiz-mordeno", 3 | "description": "Projeto PHP puro com padrões de práticas modernas de engenharia e design de software", 4 | "type": "project", 5 | "autoload": { 6 | "psr-4": { 7 | "App\\": "app/src/" 8 | } 9 | }, 10 | "authors": [ 11 | { 12 | "name": "madsonar", 13 | "email": "madsonar@gmail.com" 14 | } 15 | ], 16 | "require": { 17 | "symfony/routing": "^6.3", 18 | "symfony/http-foundation": "^6.3" 19 | }, 20 | "require-dev": { 21 | "phpunit/phpunit": "^10.3" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "cf5636c9b0c3c545e089573260488e3e", 8 | "packages": [ 9 | { 10 | "name": "symfony/deprecation-contracts", 11 | "version": "v3.3.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/symfony/deprecation-contracts.git", 15 | "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", 20 | "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": ">=8.1" 25 | }, 26 | "type": "library", 27 | "extra": { 28 | "branch-alias": { 29 | "dev-main": "3.4-dev" 30 | }, 31 | "thanks": { 32 | "name": "symfony/contracts", 33 | "url": "https://github.com/symfony/contracts" 34 | } 35 | }, 36 | "autoload": { 37 | "files": [ 38 | "function.php" 39 | ] 40 | }, 41 | "notification-url": "https://packagist.org/downloads/", 42 | "license": [ 43 | "MIT" 44 | ], 45 | "authors": [ 46 | { 47 | "name": "Nicolas Grekas", 48 | "email": "p@tchwork.com" 49 | }, 50 | { 51 | "name": "Symfony Community", 52 | "homepage": "https://symfony.com/contributors" 53 | } 54 | ], 55 | "description": "A generic function and convention to trigger deprecation notices", 56 | "homepage": "https://symfony.com", 57 | "support": { 58 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" 59 | }, 60 | "funding": [ 61 | { 62 | "url": "https://symfony.com/sponsor", 63 | "type": "custom" 64 | }, 65 | { 66 | "url": "https://github.com/fabpot", 67 | "type": "github" 68 | }, 69 | { 70 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 71 | "type": "tidelift" 72 | } 73 | ], 74 | "time": "2023-05-23T14:45:45+00:00" 75 | }, 76 | { 77 | "name": "symfony/http-foundation", 78 | "version": "v6.3.4", 79 | "source": { 80 | "type": "git", 81 | "url": "https://github.com/symfony/http-foundation.git", 82 | "reference": "cac1556fdfdf6719668181974104e6fcfa60e844" 83 | }, 84 | "dist": { 85 | "type": "zip", 86 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cac1556fdfdf6719668181974104e6fcfa60e844", 87 | "reference": "cac1556fdfdf6719668181974104e6fcfa60e844", 88 | "shasum": "" 89 | }, 90 | "require": { 91 | "php": ">=8.1", 92 | "symfony/deprecation-contracts": "^2.5|^3", 93 | "symfony/polyfill-mbstring": "~1.1", 94 | "symfony/polyfill-php83": "^1.27" 95 | }, 96 | "conflict": { 97 | "symfony/cache": "<6.2" 98 | }, 99 | "require-dev": { 100 | "doctrine/dbal": "^2.13.1|^3.0", 101 | "predis/predis": "^1.1|^2.0", 102 | "symfony/cache": "^5.4|^6.0", 103 | "symfony/dependency-injection": "^5.4|^6.0", 104 | "symfony/expression-language": "^5.4|^6.0", 105 | "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", 106 | "symfony/mime": "^5.4|^6.0", 107 | "symfony/rate-limiter": "^5.2|^6.0" 108 | }, 109 | "type": "library", 110 | "autoload": { 111 | "psr-4": { 112 | "Symfony\\Component\\HttpFoundation\\": "" 113 | }, 114 | "exclude-from-classmap": [ 115 | "/Tests/" 116 | ] 117 | }, 118 | "notification-url": "https://packagist.org/downloads/", 119 | "license": [ 120 | "MIT" 121 | ], 122 | "authors": [ 123 | { 124 | "name": "Fabien Potencier", 125 | "email": "fabien@symfony.com" 126 | }, 127 | { 128 | "name": "Symfony Community", 129 | "homepage": "https://symfony.com/contributors" 130 | } 131 | ], 132 | "description": "Defines an object-oriented layer for the HTTP specification", 133 | "homepage": "https://symfony.com", 134 | "support": { 135 | "source": "https://github.com/symfony/http-foundation/tree/v6.3.4" 136 | }, 137 | "funding": [ 138 | { 139 | "url": "https://symfony.com/sponsor", 140 | "type": "custom" 141 | }, 142 | { 143 | "url": "https://github.com/fabpot", 144 | "type": "github" 145 | }, 146 | { 147 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 148 | "type": "tidelift" 149 | } 150 | ], 151 | "time": "2023-08-22T08:20:46+00:00" 152 | }, 153 | { 154 | "name": "symfony/polyfill-mbstring", 155 | "version": "v1.28.0", 156 | "source": { 157 | "type": "git", 158 | "url": "https://github.com/symfony/polyfill-mbstring.git", 159 | "reference": "42292d99c55abe617799667f454222c54c60e229" 160 | }, 161 | "dist": { 162 | "type": "zip", 163 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", 164 | "reference": "42292d99c55abe617799667f454222c54c60e229", 165 | "shasum": "" 166 | }, 167 | "require": { 168 | "php": ">=7.1" 169 | }, 170 | "provide": { 171 | "ext-mbstring": "*" 172 | }, 173 | "suggest": { 174 | "ext-mbstring": "For best performance" 175 | }, 176 | "type": "library", 177 | "extra": { 178 | "branch-alias": { 179 | "dev-main": "1.28-dev" 180 | }, 181 | "thanks": { 182 | "name": "symfony/polyfill", 183 | "url": "https://github.com/symfony/polyfill" 184 | } 185 | }, 186 | "autoload": { 187 | "files": [ 188 | "bootstrap.php" 189 | ], 190 | "psr-4": { 191 | "Symfony\\Polyfill\\Mbstring\\": "" 192 | } 193 | }, 194 | "notification-url": "https://packagist.org/downloads/", 195 | "license": [ 196 | "MIT" 197 | ], 198 | "authors": [ 199 | { 200 | "name": "Nicolas Grekas", 201 | "email": "p@tchwork.com" 202 | }, 203 | { 204 | "name": "Symfony Community", 205 | "homepage": "https://symfony.com/contributors" 206 | } 207 | ], 208 | "description": "Symfony polyfill for the Mbstring extension", 209 | "homepage": "https://symfony.com", 210 | "keywords": [ 211 | "compatibility", 212 | "mbstring", 213 | "polyfill", 214 | "portable", 215 | "shim" 216 | ], 217 | "support": { 218 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" 219 | }, 220 | "funding": [ 221 | { 222 | "url": "https://symfony.com/sponsor", 223 | "type": "custom" 224 | }, 225 | { 226 | "url": "https://github.com/fabpot", 227 | "type": "github" 228 | }, 229 | { 230 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 231 | "type": "tidelift" 232 | } 233 | ], 234 | "time": "2023-07-28T09:04:16+00:00" 235 | }, 236 | { 237 | "name": "symfony/polyfill-php80", 238 | "version": "v1.28.0", 239 | "source": { 240 | "type": "git", 241 | "url": "https://github.com/symfony/polyfill-php80.git", 242 | "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" 243 | }, 244 | "dist": { 245 | "type": "zip", 246 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", 247 | "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", 248 | "shasum": "" 249 | }, 250 | "require": { 251 | "php": ">=7.1" 252 | }, 253 | "type": "library", 254 | "extra": { 255 | "branch-alias": { 256 | "dev-main": "1.28-dev" 257 | }, 258 | "thanks": { 259 | "name": "symfony/polyfill", 260 | "url": "https://github.com/symfony/polyfill" 261 | } 262 | }, 263 | "autoload": { 264 | "files": [ 265 | "bootstrap.php" 266 | ], 267 | "psr-4": { 268 | "Symfony\\Polyfill\\Php80\\": "" 269 | }, 270 | "classmap": [ 271 | "Resources/stubs" 272 | ] 273 | }, 274 | "notification-url": "https://packagist.org/downloads/", 275 | "license": [ 276 | "MIT" 277 | ], 278 | "authors": [ 279 | { 280 | "name": "Ion Bazan", 281 | "email": "ion.bazan@gmail.com" 282 | }, 283 | { 284 | "name": "Nicolas Grekas", 285 | "email": "p@tchwork.com" 286 | }, 287 | { 288 | "name": "Symfony Community", 289 | "homepage": "https://symfony.com/contributors" 290 | } 291 | ], 292 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 293 | "homepage": "https://symfony.com", 294 | "keywords": [ 295 | "compatibility", 296 | "polyfill", 297 | "portable", 298 | "shim" 299 | ], 300 | "support": { 301 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" 302 | }, 303 | "funding": [ 304 | { 305 | "url": "https://symfony.com/sponsor", 306 | "type": "custom" 307 | }, 308 | { 309 | "url": "https://github.com/fabpot", 310 | "type": "github" 311 | }, 312 | { 313 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 314 | "type": "tidelift" 315 | } 316 | ], 317 | "time": "2023-01-26T09:26:14+00:00" 318 | }, 319 | { 320 | "name": "symfony/polyfill-php83", 321 | "version": "v1.28.0", 322 | "source": { 323 | "type": "git", 324 | "url": "https://github.com/symfony/polyfill-php83.git", 325 | "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" 326 | }, 327 | "dist": { 328 | "type": "zip", 329 | "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", 330 | "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", 331 | "shasum": "" 332 | }, 333 | "require": { 334 | "php": ">=7.1", 335 | "symfony/polyfill-php80": "^1.14" 336 | }, 337 | "type": "library", 338 | "extra": { 339 | "branch-alias": { 340 | "dev-main": "1.28-dev" 341 | }, 342 | "thanks": { 343 | "name": "symfony/polyfill", 344 | "url": "https://github.com/symfony/polyfill" 345 | } 346 | }, 347 | "autoload": { 348 | "files": [ 349 | "bootstrap.php" 350 | ], 351 | "psr-4": { 352 | "Symfony\\Polyfill\\Php83\\": "" 353 | }, 354 | "classmap": [ 355 | "Resources/stubs" 356 | ] 357 | }, 358 | "notification-url": "https://packagist.org/downloads/", 359 | "license": [ 360 | "MIT" 361 | ], 362 | "authors": [ 363 | { 364 | "name": "Nicolas Grekas", 365 | "email": "p@tchwork.com" 366 | }, 367 | { 368 | "name": "Symfony Community", 369 | "homepage": "https://symfony.com/contributors" 370 | } 371 | ], 372 | "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", 373 | "homepage": "https://symfony.com", 374 | "keywords": [ 375 | "compatibility", 376 | "polyfill", 377 | "portable", 378 | "shim" 379 | ], 380 | "support": { 381 | "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" 382 | }, 383 | "funding": [ 384 | { 385 | "url": "https://symfony.com/sponsor", 386 | "type": "custom" 387 | }, 388 | { 389 | "url": "https://github.com/fabpot", 390 | "type": "github" 391 | }, 392 | { 393 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 394 | "type": "tidelift" 395 | } 396 | ], 397 | "time": "2023-08-16T06:22:46+00:00" 398 | }, 399 | { 400 | "name": "symfony/routing", 401 | "version": "v6.3.3", 402 | "source": { 403 | "type": "git", 404 | "url": "https://github.com/symfony/routing.git", 405 | "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a" 406 | }, 407 | "dist": { 408 | "type": "zip", 409 | "url": "https://api.github.com/repos/symfony/routing/zipball/e7243039ab663822ff134fbc46099b5fdfa16f6a", 410 | "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a", 411 | "shasum": "" 412 | }, 413 | "require": { 414 | "php": ">=8.1", 415 | "symfony/deprecation-contracts": "^2.5|^3" 416 | }, 417 | "conflict": { 418 | "doctrine/annotations": "<1.12", 419 | "symfony/config": "<6.2", 420 | "symfony/dependency-injection": "<5.4", 421 | "symfony/yaml": "<5.4" 422 | }, 423 | "require-dev": { 424 | "doctrine/annotations": "^1.12|^2", 425 | "psr/log": "^1|^2|^3", 426 | "symfony/config": "^6.2", 427 | "symfony/dependency-injection": "^5.4|^6.0", 428 | "symfony/expression-language": "^5.4|^6.0", 429 | "symfony/http-foundation": "^5.4|^6.0", 430 | "symfony/yaml": "^5.4|^6.0" 431 | }, 432 | "type": "library", 433 | "autoload": { 434 | "psr-4": { 435 | "Symfony\\Component\\Routing\\": "" 436 | }, 437 | "exclude-from-classmap": [ 438 | "/Tests/" 439 | ] 440 | }, 441 | "notification-url": "https://packagist.org/downloads/", 442 | "license": [ 443 | "MIT" 444 | ], 445 | "authors": [ 446 | { 447 | "name": "Fabien Potencier", 448 | "email": "fabien@symfony.com" 449 | }, 450 | { 451 | "name": "Symfony Community", 452 | "homepage": "https://symfony.com/contributors" 453 | } 454 | ], 455 | "description": "Maps an HTTP request to a set of configuration variables", 456 | "homepage": "https://symfony.com", 457 | "keywords": [ 458 | "router", 459 | "routing", 460 | "uri", 461 | "url" 462 | ], 463 | "support": { 464 | "source": "https://github.com/symfony/routing/tree/v6.3.3" 465 | }, 466 | "funding": [ 467 | { 468 | "url": "https://symfony.com/sponsor", 469 | "type": "custom" 470 | }, 471 | { 472 | "url": "https://github.com/fabpot", 473 | "type": "github" 474 | }, 475 | { 476 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 477 | "type": "tidelift" 478 | } 479 | ], 480 | "time": "2023-07-31T07:08:24+00:00" 481 | } 482 | ], 483 | "packages-dev": [ 484 | { 485 | "name": "myclabs/deep-copy", 486 | "version": "1.11.1", 487 | "source": { 488 | "type": "git", 489 | "url": "https://github.com/myclabs/DeepCopy.git", 490 | "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" 491 | }, 492 | "dist": { 493 | "type": "zip", 494 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", 495 | "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", 496 | "shasum": "" 497 | }, 498 | "require": { 499 | "php": "^7.1 || ^8.0" 500 | }, 501 | "conflict": { 502 | "doctrine/collections": "<1.6.8", 503 | "doctrine/common": "<2.13.3 || >=3,<3.2.2" 504 | }, 505 | "require-dev": { 506 | "doctrine/collections": "^1.6.8", 507 | "doctrine/common": "^2.13.3 || ^3.2.2", 508 | "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" 509 | }, 510 | "type": "library", 511 | "autoload": { 512 | "files": [ 513 | "src/DeepCopy/deep_copy.php" 514 | ], 515 | "psr-4": { 516 | "DeepCopy\\": "src/DeepCopy/" 517 | } 518 | }, 519 | "notification-url": "https://packagist.org/downloads/", 520 | "license": [ 521 | "MIT" 522 | ], 523 | "description": "Create deep copies (clones) of your objects", 524 | "keywords": [ 525 | "clone", 526 | "copy", 527 | "duplicate", 528 | "object", 529 | "object graph" 530 | ], 531 | "support": { 532 | "issues": "https://github.com/myclabs/DeepCopy/issues", 533 | "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" 534 | }, 535 | "funding": [ 536 | { 537 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 538 | "type": "tidelift" 539 | } 540 | ], 541 | "time": "2023-03-08T13:26:56+00:00" 542 | }, 543 | { 544 | "name": "nikic/php-parser", 545 | "version": "v4.17.1", 546 | "source": { 547 | "type": "git", 548 | "url": "https://github.com/nikic/PHP-Parser.git", 549 | "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" 550 | }, 551 | "dist": { 552 | "type": "zip", 553 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", 554 | "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", 555 | "shasum": "" 556 | }, 557 | "require": { 558 | "ext-tokenizer": "*", 559 | "php": ">=7.0" 560 | }, 561 | "require-dev": { 562 | "ircmaxell/php-yacc": "^0.0.7", 563 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" 564 | }, 565 | "bin": [ 566 | "bin/php-parse" 567 | ], 568 | "type": "library", 569 | "extra": { 570 | "branch-alias": { 571 | "dev-master": "4.9-dev" 572 | } 573 | }, 574 | "autoload": { 575 | "psr-4": { 576 | "PhpParser\\": "lib/PhpParser" 577 | } 578 | }, 579 | "notification-url": "https://packagist.org/downloads/", 580 | "license": [ 581 | "BSD-3-Clause" 582 | ], 583 | "authors": [ 584 | { 585 | "name": "Nikita Popov" 586 | } 587 | ], 588 | "description": "A PHP parser written in PHP", 589 | "keywords": [ 590 | "parser", 591 | "php" 592 | ], 593 | "support": { 594 | "issues": "https://github.com/nikic/PHP-Parser/issues", 595 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" 596 | }, 597 | "time": "2023-08-13T19:53:39+00:00" 598 | }, 599 | { 600 | "name": "phar-io/manifest", 601 | "version": "2.0.3", 602 | "source": { 603 | "type": "git", 604 | "url": "https://github.com/phar-io/manifest.git", 605 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53" 606 | }, 607 | "dist": { 608 | "type": "zip", 609 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", 610 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53", 611 | "shasum": "" 612 | }, 613 | "require": { 614 | "ext-dom": "*", 615 | "ext-phar": "*", 616 | "ext-xmlwriter": "*", 617 | "phar-io/version": "^3.0.1", 618 | "php": "^7.2 || ^8.0" 619 | }, 620 | "type": "library", 621 | "extra": { 622 | "branch-alias": { 623 | "dev-master": "2.0.x-dev" 624 | } 625 | }, 626 | "autoload": { 627 | "classmap": [ 628 | "src/" 629 | ] 630 | }, 631 | "notification-url": "https://packagist.org/downloads/", 632 | "license": [ 633 | "BSD-3-Clause" 634 | ], 635 | "authors": [ 636 | { 637 | "name": "Arne Blankerts", 638 | "email": "arne@blankerts.de", 639 | "role": "Developer" 640 | }, 641 | { 642 | "name": "Sebastian Heuer", 643 | "email": "sebastian@phpeople.de", 644 | "role": "Developer" 645 | }, 646 | { 647 | "name": "Sebastian Bergmann", 648 | "email": "sebastian@phpunit.de", 649 | "role": "Developer" 650 | } 651 | ], 652 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 653 | "support": { 654 | "issues": "https://github.com/phar-io/manifest/issues", 655 | "source": "https://github.com/phar-io/manifest/tree/2.0.3" 656 | }, 657 | "time": "2021-07-20T11:28:43+00:00" 658 | }, 659 | { 660 | "name": "phar-io/version", 661 | "version": "3.2.1", 662 | "source": { 663 | "type": "git", 664 | "url": "https://github.com/phar-io/version.git", 665 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" 666 | }, 667 | "dist": { 668 | "type": "zip", 669 | "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 670 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 671 | "shasum": "" 672 | }, 673 | "require": { 674 | "php": "^7.2 || ^8.0" 675 | }, 676 | "type": "library", 677 | "autoload": { 678 | "classmap": [ 679 | "src/" 680 | ] 681 | }, 682 | "notification-url": "https://packagist.org/downloads/", 683 | "license": [ 684 | "BSD-3-Clause" 685 | ], 686 | "authors": [ 687 | { 688 | "name": "Arne Blankerts", 689 | "email": "arne@blankerts.de", 690 | "role": "Developer" 691 | }, 692 | { 693 | "name": "Sebastian Heuer", 694 | "email": "sebastian@phpeople.de", 695 | "role": "Developer" 696 | }, 697 | { 698 | "name": "Sebastian Bergmann", 699 | "email": "sebastian@phpunit.de", 700 | "role": "Developer" 701 | } 702 | ], 703 | "description": "Library for handling version information and constraints", 704 | "support": { 705 | "issues": "https://github.com/phar-io/version/issues", 706 | "source": "https://github.com/phar-io/version/tree/3.2.1" 707 | }, 708 | "time": "2022-02-21T01:04:05+00:00" 709 | }, 710 | { 711 | "name": "phpunit/php-code-coverage", 712 | "version": "10.1.6", 713 | "source": { 714 | "type": "git", 715 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 716 | "reference": "56f33548fe522c8d82da7ff3824b42829d324364" 717 | }, 718 | "dist": { 719 | "type": "zip", 720 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/56f33548fe522c8d82da7ff3824b42829d324364", 721 | "reference": "56f33548fe522c8d82da7ff3824b42829d324364", 722 | "shasum": "" 723 | }, 724 | "require": { 725 | "ext-dom": "*", 726 | "ext-libxml": "*", 727 | "ext-xmlwriter": "*", 728 | "nikic/php-parser": "^4.15", 729 | "php": ">=8.1", 730 | "phpunit/php-file-iterator": "^4.0", 731 | "phpunit/php-text-template": "^3.0", 732 | "sebastian/code-unit-reverse-lookup": "^3.0", 733 | "sebastian/complexity": "^3.0", 734 | "sebastian/environment": "^6.0", 735 | "sebastian/lines-of-code": "^2.0", 736 | "sebastian/version": "^4.0", 737 | "theseer/tokenizer": "^1.2.0" 738 | }, 739 | "require-dev": { 740 | "phpunit/phpunit": "^10.1" 741 | }, 742 | "suggest": { 743 | "ext-pcov": "PHP extension that provides line coverage", 744 | "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" 745 | }, 746 | "type": "library", 747 | "extra": { 748 | "branch-alias": { 749 | "dev-main": "10.1-dev" 750 | } 751 | }, 752 | "autoload": { 753 | "classmap": [ 754 | "src/" 755 | ] 756 | }, 757 | "notification-url": "https://packagist.org/downloads/", 758 | "license": [ 759 | "BSD-3-Clause" 760 | ], 761 | "authors": [ 762 | { 763 | "name": "Sebastian Bergmann", 764 | "email": "sebastian@phpunit.de", 765 | "role": "lead" 766 | } 767 | ], 768 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 769 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 770 | "keywords": [ 771 | "coverage", 772 | "testing", 773 | "xunit" 774 | ], 775 | "support": { 776 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", 777 | "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", 778 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.6" 779 | }, 780 | "funding": [ 781 | { 782 | "url": "https://github.com/sebastianbergmann", 783 | "type": "github" 784 | } 785 | ], 786 | "time": "2023-09-19T04:59:03+00:00" 787 | }, 788 | { 789 | "name": "phpunit/php-file-iterator", 790 | "version": "4.1.0", 791 | "source": { 792 | "type": "git", 793 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 794 | "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" 795 | }, 796 | "dist": { 797 | "type": "zip", 798 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", 799 | "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", 800 | "shasum": "" 801 | }, 802 | "require": { 803 | "php": ">=8.1" 804 | }, 805 | "require-dev": { 806 | "phpunit/phpunit": "^10.0" 807 | }, 808 | "type": "library", 809 | "extra": { 810 | "branch-alias": { 811 | "dev-main": "4.0-dev" 812 | } 813 | }, 814 | "autoload": { 815 | "classmap": [ 816 | "src/" 817 | ] 818 | }, 819 | "notification-url": "https://packagist.org/downloads/", 820 | "license": [ 821 | "BSD-3-Clause" 822 | ], 823 | "authors": [ 824 | { 825 | "name": "Sebastian Bergmann", 826 | "email": "sebastian@phpunit.de", 827 | "role": "lead" 828 | } 829 | ], 830 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 831 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 832 | "keywords": [ 833 | "filesystem", 834 | "iterator" 835 | ], 836 | "support": { 837 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", 838 | "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", 839 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" 840 | }, 841 | "funding": [ 842 | { 843 | "url": "https://github.com/sebastianbergmann", 844 | "type": "github" 845 | } 846 | ], 847 | "time": "2023-08-31T06:24:48+00:00" 848 | }, 849 | { 850 | "name": "phpunit/php-invoker", 851 | "version": "4.0.0", 852 | "source": { 853 | "type": "git", 854 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 855 | "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" 856 | }, 857 | "dist": { 858 | "type": "zip", 859 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", 860 | "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", 861 | "shasum": "" 862 | }, 863 | "require": { 864 | "php": ">=8.1" 865 | }, 866 | "require-dev": { 867 | "ext-pcntl": "*", 868 | "phpunit/phpunit": "^10.0" 869 | }, 870 | "suggest": { 871 | "ext-pcntl": "*" 872 | }, 873 | "type": "library", 874 | "extra": { 875 | "branch-alias": { 876 | "dev-main": "4.0-dev" 877 | } 878 | }, 879 | "autoload": { 880 | "classmap": [ 881 | "src/" 882 | ] 883 | }, 884 | "notification-url": "https://packagist.org/downloads/", 885 | "license": [ 886 | "BSD-3-Clause" 887 | ], 888 | "authors": [ 889 | { 890 | "name": "Sebastian Bergmann", 891 | "email": "sebastian@phpunit.de", 892 | "role": "lead" 893 | } 894 | ], 895 | "description": "Invoke callables with a timeout", 896 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 897 | "keywords": [ 898 | "process" 899 | ], 900 | "support": { 901 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues", 902 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" 903 | }, 904 | "funding": [ 905 | { 906 | "url": "https://github.com/sebastianbergmann", 907 | "type": "github" 908 | } 909 | ], 910 | "time": "2023-02-03T06:56:09+00:00" 911 | }, 912 | { 913 | "name": "phpunit/php-text-template", 914 | "version": "3.0.1", 915 | "source": { 916 | "type": "git", 917 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 918 | "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" 919 | }, 920 | "dist": { 921 | "type": "zip", 922 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", 923 | "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", 924 | "shasum": "" 925 | }, 926 | "require": { 927 | "php": ">=8.1" 928 | }, 929 | "require-dev": { 930 | "phpunit/phpunit": "^10.0" 931 | }, 932 | "type": "library", 933 | "extra": { 934 | "branch-alias": { 935 | "dev-main": "3.0-dev" 936 | } 937 | }, 938 | "autoload": { 939 | "classmap": [ 940 | "src/" 941 | ] 942 | }, 943 | "notification-url": "https://packagist.org/downloads/", 944 | "license": [ 945 | "BSD-3-Clause" 946 | ], 947 | "authors": [ 948 | { 949 | "name": "Sebastian Bergmann", 950 | "email": "sebastian@phpunit.de", 951 | "role": "lead" 952 | } 953 | ], 954 | "description": "Simple template engine.", 955 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 956 | "keywords": [ 957 | "template" 958 | ], 959 | "support": { 960 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", 961 | "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", 962 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" 963 | }, 964 | "funding": [ 965 | { 966 | "url": "https://github.com/sebastianbergmann", 967 | "type": "github" 968 | } 969 | ], 970 | "time": "2023-08-31T14:07:24+00:00" 971 | }, 972 | { 973 | "name": "phpunit/php-timer", 974 | "version": "6.0.0", 975 | "source": { 976 | "type": "git", 977 | "url": "https://github.com/sebastianbergmann/php-timer.git", 978 | "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" 979 | }, 980 | "dist": { 981 | "type": "zip", 982 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", 983 | "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", 984 | "shasum": "" 985 | }, 986 | "require": { 987 | "php": ">=8.1" 988 | }, 989 | "require-dev": { 990 | "phpunit/phpunit": "^10.0" 991 | }, 992 | "type": "library", 993 | "extra": { 994 | "branch-alias": { 995 | "dev-main": "6.0-dev" 996 | } 997 | }, 998 | "autoload": { 999 | "classmap": [ 1000 | "src/" 1001 | ] 1002 | }, 1003 | "notification-url": "https://packagist.org/downloads/", 1004 | "license": [ 1005 | "BSD-3-Clause" 1006 | ], 1007 | "authors": [ 1008 | { 1009 | "name": "Sebastian Bergmann", 1010 | "email": "sebastian@phpunit.de", 1011 | "role": "lead" 1012 | } 1013 | ], 1014 | "description": "Utility class for timing", 1015 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1016 | "keywords": [ 1017 | "timer" 1018 | ], 1019 | "support": { 1020 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", 1021 | "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" 1022 | }, 1023 | "funding": [ 1024 | { 1025 | "url": "https://github.com/sebastianbergmann", 1026 | "type": "github" 1027 | } 1028 | ], 1029 | "time": "2023-02-03T06:57:52+00:00" 1030 | }, 1031 | { 1032 | "name": "phpunit/phpunit", 1033 | "version": "10.3.5", 1034 | "source": { 1035 | "type": "git", 1036 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1037 | "reference": "747c3b2038f1139e3dcd9886a3f5a948648b7503" 1038 | }, 1039 | "dist": { 1040 | "type": "zip", 1041 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/747c3b2038f1139e3dcd9886a3f5a948648b7503", 1042 | "reference": "747c3b2038f1139e3dcd9886a3f5a948648b7503", 1043 | "shasum": "" 1044 | }, 1045 | "require": { 1046 | "ext-dom": "*", 1047 | "ext-json": "*", 1048 | "ext-libxml": "*", 1049 | "ext-mbstring": "*", 1050 | "ext-xml": "*", 1051 | "ext-xmlwriter": "*", 1052 | "myclabs/deep-copy": "^1.10.1", 1053 | "phar-io/manifest": "^2.0.3", 1054 | "phar-io/version": "^3.0.2", 1055 | "php": ">=8.1", 1056 | "phpunit/php-code-coverage": "^10.1.5", 1057 | "phpunit/php-file-iterator": "^4.0", 1058 | "phpunit/php-invoker": "^4.0", 1059 | "phpunit/php-text-template": "^3.0", 1060 | "phpunit/php-timer": "^6.0", 1061 | "sebastian/cli-parser": "^2.0", 1062 | "sebastian/code-unit": "^2.0", 1063 | "sebastian/comparator": "^5.0", 1064 | "sebastian/diff": "^5.0", 1065 | "sebastian/environment": "^6.0", 1066 | "sebastian/exporter": "^5.1", 1067 | "sebastian/global-state": "^6.0.1", 1068 | "sebastian/object-enumerator": "^5.0", 1069 | "sebastian/recursion-context": "^5.0", 1070 | "sebastian/type": "^4.0", 1071 | "sebastian/version": "^4.0" 1072 | }, 1073 | "suggest": { 1074 | "ext-soap": "To be able to generate mocks based on WSDL files" 1075 | }, 1076 | "bin": [ 1077 | "phpunit" 1078 | ], 1079 | "type": "library", 1080 | "extra": { 1081 | "branch-alias": { 1082 | "dev-main": "10.3-dev" 1083 | } 1084 | }, 1085 | "autoload": { 1086 | "files": [ 1087 | "src/Framework/Assert/Functions.php" 1088 | ], 1089 | "classmap": [ 1090 | "src/" 1091 | ] 1092 | }, 1093 | "notification-url": "https://packagist.org/downloads/", 1094 | "license": [ 1095 | "BSD-3-Clause" 1096 | ], 1097 | "authors": [ 1098 | { 1099 | "name": "Sebastian Bergmann", 1100 | "email": "sebastian@phpunit.de", 1101 | "role": "lead" 1102 | } 1103 | ], 1104 | "description": "The PHP Unit Testing framework.", 1105 | "homepage": "https://phpunit.de/", 1106 | "keywords": [ 1107 | "phpunit", 1108 | "testing", 1109 | "xunit" 1110 | ], 1111 | "support": { 1112 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", 1113 | "security": "https://github.com/sebastianbergmann/phpunit/security/policy", 1114 | "source": "https://github.com/sebastianbergmann/phpunit/tree/10.3.5" 1115 | }, 1116 | "funding": [ 1117 | { 1118 | "url": "https://phpunit.de/sponsors.html", 1119 | "type": "custom" 1120 | }, 1121 | { 1122 | "url": "https://github.com/sebastianbergmann", 1123 | "type": "github" 1124 | }, 1125 | { 1126 | "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", 1127 | "type": "tidelift" 1128 | } 1129 | ], 1130 | "time": "2023-09-19T05:42:37+00:00" 1131 | }, 1132 | { 1133 | "name": "sebastian/cli-parser", 1134 | "version": "2.0.0", 1135 | "source": { 1136 | "type": "git", 1137 | "url": "https://github.com/sebastianbergmann/cli-parser.git", 1138 | "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" 1139 | }, 1140 | "dist": { 1141 | "type": "zip", 1142 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", 1143 | "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", 1144 | "shasum": "" 1145 | }, 1146 | "require": { 1147 | "php": ">=8.1" 1148 | }, 1149 | "require-dev": { 1150 | "phpunit/phpunit": "^10.0" 1151 | }, 1152 | "type": "library", 1153 | "extra": { 1154 | "branch-alias": { 1155 | "dev-main": "2.0-dev" 1156 | } 1157 | }, 1158 | "autoload": { 1159 | "classmap": [ 1160 | "src/" 1161 | ] 1162 | }, 1163 | "notification-url": "https://packagist.org/downloads/", 1164 | "license": [ 1165 | "BSD-3-Clause" 1166 | ], 1167 | "authors": [ 1168 | { 1169 | "name": "Sebastian Bergmann", 1170 | "email": "sebastian@phpunit.de", 1171 | "role": "lead" 1172 | } 1173 | ], 1174 | "description": "Library for parsing CLI options", 1175 | "homepage": "https://github.com/sebastianbergmann/cli-parser", 1176 | "support": { 1177 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues", 1178 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" 1179 | }, 1180 | "funding": [ 1181 | { 1182 | "url": "https://github.com/sebastianbergmann", 1183 | "type": "github" 1184 | } 1185 | ], 1186 | "time": "2023-02-03T06:58:15+00:00" 1187 | }, 1188 | { 1189 | "name": "sebastian/code-unit", 1190 | "version": "2.0.0", 1191 | "source": { 1192 | "type": "git", 1193 | "url": "https://github.com/sebastianbergmann/code-unit.git", 1194 | "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" 1195 | }, 1196 | "dist": { 1197 | "type": "zip", 1198 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", 1199 | "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", 1200 | "shasum": "" 1201 | }, 1202 | "require": { 1203 | "php": ">=8.1" 1204 | }, 1205 | "require-dev": { 1206 | "phpunit/phpunit": "^10.0" 1207 | }, 1208 | "type": "library", 1209 | "extra": { 1210 | "branch-alias": { 1211 | "dev-main": "2.0-dev" 1212 | } 1213 | }, 1214 | "autoload": { 1215 | "classmap": [ 1216 | "src/" 1217 | ] 1218 | }, 1219 | "notification-url": "https://packagist.org/downloads/", 1220 | "license": [ 1221 | "BSD-3-Clause" 1222 | ], 1223 | "authors": [ 1224 | { 1225 | "name": "Sebastian Bergmann", 1226 | "email": "sebastian@phpunit.de", 1227 | "role": "lead" 1228 | } 1229 | ], 1230 | "description": "Collection of value objects that represent the PHP code units", 1231 | "homepage": "https://github.com/sebastianbergmann/code-unit", 1232 | "support": { 1233 | "issues": "https://github.com/sebastianbergmann/code-unit/issues", 1234 | "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" 1235 | }, 1236 | "funding": [ 1237 | { 1238 | "url": "https://github.com/sebastianbergmann", 1239 | "type": "github" 1240 | } 1241 | ], 1242 | "time": "2023-02-03T06:58:43+00:00" 1243 | }, 1244 | { 1245 | "name": "sebastian/code-unit-reverse-lookup", 1246 | "version": "3.0.0", 1247 | "source": { 1248 | "type": "git", 1249 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1250 | "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" 1251 | }, 1252 | "dist": { 1253 | "type": "zip", 1254 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", 1255 | "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", 1256 | "shasum": "" 1257 | }, 1258 | "require": { 1259 | "php": ">=8.1" 1260 | }, 1261 | "require-dev": { 1262 | "phpunit/phpunit": "^10.0" 1263 | }, 1264 | "type": "library", 1265 | "extra": { 1266 | "branch-alias": { 1267 | "dev-main": "3.0-dev" 1268 | } 1269 | }, 1270 | "autoload": { 1271 | "classmap": [ 1272 | "src/" 1273 | ] 1274 | }, 1275 | "notification-url": "https://packagist.org/downloads/", 1276 | "license": [ 1277 | "BSD-3-Clause" 1278 | ], 1279 | "authors": [ 1280 | { 1281 | "name": "Sebastian Bergmann", 1282 | "email": "sebastian@phpunit.de" 1283 | } 1284 | ], 1285 | "description": "Looks up which function or method a line of code belongs to", 1286 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1287 | "support": { 1288 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", 1289 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" 1290 | }, 1291 | "funding": [ 1292 | { 1293 | "url": "https://github.com/sebastianbergmann", 1294 | "type": "github" 1295 | } 1296 | ], 1297 | "time": "2023-02-03T06:59:15+00:00" 1298 | }, 1299 | { 1300 | "name": "sebastian/comparator", 1301 | "version": "5.0.1", 1302 | "source": { 1303 | "type": "git", 1304 | "url": "https://github.com/sebastianbergmann/comparator.git", 1305 | "reference": "2db5010a484d53ebf536087a70b4a5423c102372" 1306 | }, 1307 | "dist": { 1308 | "type": "zip", 1309 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", 1310 | "reference": "2db5010a484d53ebf536087a70b4a5423c102372", 1311 | "shasum": "" 1312 | }, 1313 | "require": { 1314 | "ext-dom": "*", 1315 | "ext-mbstring": "*", 1316 | "php": ">=8.1", 1317 | "sebastian/diff": "^5.0", 1318 | "sebastian/exporter": "^5.0" 1319 | }, 1320 | "require-dev": { 1321 | "phpunit/phpunit": "^10.3" 1322 | }, 1323 | "type": "library", 1324 | "extra": { 1325 | "branch-alias": { 1326 | "dev-main": "5.0-dev" 1327 | } 1328 | }, 1329 | "autoload": { 1330 | "classmap": [ 1331 | "src/" 1332 | ] 1333 | }, 1334 | "notification-url": "https://packagist.org/downloads/", 1335 | "license": [ 1336 | "BSD-3-Clause" 1337 | ], 1338 | "authors": [ 1339 | { 1340 | "name": "Sebastian Bergmann", 1341 | "email": "sebastian@phpunit.de" 1342 | }, 1343 | { 1344 | "name": "Jeff Welch", 1345 | "email": "whatthejeff@gmail.com" 1346 | }, 1347 | { 1348 | "name": "Volker Dusch", 1349 | "email": "github@wallbash.com" 1350 | }, 1351 | { 1352 | "name": "Bernhard Schussek", 1353 | "email": "bschussek@2bepublished.at" 1354 | } 1355 | ], 1356 | "description": "Provides the functionality to compare PHP values for equality", 1357 | "homepage": "https://github.com/sebastianbergmann/comparator", 1358 | "keywords": [ 1359 | "comparator", 1360 | "compare", 1361 | "equality" 1362 | ], 1363 | "support": { 1364 | "issues": "https://github.com/sebastianbergmann/comparator/issues", 1365 | "security": "https://github.com/sebastianbergmann/comparator/security/policy", 1366 | "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" 1367 | }, 1368 | "funding": [ 1369 | { 1370 | "url": "https://github.com/sebastianbergmann", 1371 | "type": "github" 1372 | } 1373 | ], 1374 | "time": "2023-08-14T13:18:12+00:00" 1375 | }, 1376 | { 1377 | "name": "sebastian/complexity", 1378 | "version": "3.0.1", 1379 | "source": { 1380 | "type": "git", 1381 | "url": "https://github.com/sebastianbergmann/complexity.git", 1382 | "reference": "c70b73893e10757af9c6a48929fa6a333b56a97a" 1383 | }, 1384 | "dist": { 1385 | "type": "zip", 1386 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/c70b73893e10757af9c6a48929fa6a333b56a97a", 1387 | "reference": "c70b73893e10757af9c6a48929fa6a333b56a97a", 1388 | "shasum": "" 1389 | }, 1390 | "require": { 1391 | "nikic/php-parser": "^4.10", 1392 | "php": ">=8.1" 1393 | }, 1394 | "require-dev": { 1395 | "phpunit/phpunit": "^10.0" 1396 | }, 1397 | "type": "library", 1398 | "extra": { 1399 | "branch-alias": { 1400 | "dev-main": "3.0-dev" 1401 | } 1402 | }, 1403 | "autoload": { 1404 | "classmap": [ 1405 | "src/" 1406 | ] 1407 | }, 1408 | "notification-url": "https://packagist.org/downloads/", 1409 | "license": [ 1410 | "BSD-3-Clause" 1411 | ], 1412 | "authors": [ 1413 | { 1414 | "name": "Sebastian Bergmann", 1415 | "email": "sebastian@phpunit.de", 1416 | "role": "lead" 1417 | } 1418 | ], 1419 | "description": "Library for calculating the complexity of PHP code units", 1420 | "homepage": "https://github.com/sebastianbergmann/complexity", 1421 | "support": { 1422 | "issues": "https://github.com/sebastianbergmann/complexity/issues", 1423 | "security": "https://github.com/sebastianbergmann/complexity/security/policy", 1424 | "source": "https://github.com/sebastianbergmann/complexity/tree/3.0.1" 1425 | }, 1426 | "funding": [ 1427 | { 1428 | "url": "https://github.com/sebastianbergmann", 1429 | "type": "github" 1430 | } 1431 | ], 1432 | "time": "2023-08-31T09:55:53+00:00" 1433 | }, 1434 | { 1435 | "name": "sebastian/diff", 1436 | "version": "5.0.3", 1437 | "source": { 1438 | "type": "git", 1439 | "url": "https://github.com/sebastianbergmann/diff.git", 1440 | "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b" 1441 | }, 1442 | "dist": { 1443 | "type": "zip", 1444 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/912dc2fbe3e3c1e7873313cc801b100b6c68c87b", 1445 | "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b", 1446 | "shasum": "" 1447 | }, 1448 | "require": { 1449 | "php": ">=8.1" 1450 | }, 1451 | "require-dev": { 1452 | "phpunit/phpunit": "^10.0", 1453 | "symfony/process": "^4.2 || ^5" 1454 | }, 1455 | "type": "library", 1456 | "extra": { 1457 | "branch-alias": { 1458 | "dev-main": "5.0-dev" 1459 | } 1460 | }, 1461 | "autoload": { 1462 | "classmap": [ 1463 | "src/" 1464 | ] 1465 | }, 1466 | "notification-url": "https://packagist.org/downloads/", 1467 | "license": [ 1468 | "BSD-3-Clause" 1469 | ], 1470 | "authors": [ 1471 | { 1472 | "name": "Sebastian Bergmann", 1473 | "email": "sebastian@phpunit.de" 1474 | }, 1475 | { 1476 | "name": "Kore Nordmann", 1477 | "email": "mail@kore-nordmann.de" 1478 | } 1479 | ], 1480 | "description": "Diff implementation", 1481 | "homepage": "https://github.com/sebastianbergmann/diff", 1482 | "keywords": [ 1483 | "diff", 1484 | "udiff", 1485 | "unidiff", 1486 | "unified diff" 1487 | ], 1488 | "support": { 1489 | "issues": "https://github.com/sebastianbergmann/diff/issues", 1490 | "security": "https://github.com/sebastianbergmann/diff/security/policy", 1491 | "source": "https://github.com/sebastianbergmann/diff/tree/5.0.3" 1492 | }, 1493 | "funding": [ 1494 | { 1495 | "url": "https://github.com/sebastianbergmann", 1496 | "type": "github" 1497 | } 1498 | ], 1499 | "time": "2023-05-01T07:48:21+00:00" 1500 | }, 1501 | { 1502 | "name": "sebastian/environment", 1503 | "version": "6.0.1", 1504 | "source": { 1505 | "type": "git", 1506 | "url": "https://github.com/sebastianbergmann/environment.git", 1507 | "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951" 1508 | }, 1509 | "dist": { 1510 | "type": "zip", 1511 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951", 1512 | "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951", 1513 | "shasum": "" 1514 | }, 1515 | "require": { 1516 | "php": ">=8.1" 1517 | }, 1518 | "require-dev": { 1519 | "phpunit/phpunit": "^10.0" 1520 | }, 1521 | "suggest": { 1522 | "ext-posix": "*" 1523 | }, 1524 | "type": "library", 1525 | "extra": { 1526 | "branch-alias": { 1527 | "dev-main": "6.0-dev" 1528 | } 1529 | }, 1530 | "autoload": { 1531 | "classmap": [ 1532 | "src/" 1533 | ] 1534 | }, 1535 | "notification-url": "https://packagist.org/downloads/", 1536 | "license": [ 1537 | "BSD-3-Clause" 1538 | ], 1539 | "authors": [ 1540 | { 1541 | "name": "Sebastian Bergmann", 1542 | "email": "sebastian@phpunit.de" 1543 | } 1544 | ], 1545 | "description": "Provides functionality to handle HHVM/PHP environments", 1546 | "homepage": "https://github.com/sebastianbergmann/environment", 1547 | "keywords": [ 1548 | "Xdebug", 1549 | "environment", 1550 | "hhvm" 1551 | ], 1552 | "support": { 1553 | "issues": "https://github.com/sebastianbergmann/environment/issues", 1554 | "security": "https://github.com/sebastianbergmann/environment/security/policy", 1555 | "source": "https://github.com/sebastianbergmann/environment/tree/6.0.1" 1556 | }, 1557 | "funding": [ 1558 | { 1559 | "url": "https://github.com/sebastianbergmann", 1560 | "type": "github" 1561 | } 1562 | ], 1563 | "time": "2023-04-11T05:39:26+00:00" 1564 | }, 1565 | { 1566 | "name": "sebastian/exporter", 1567 | "version": "5.1.1", 1568 | "source": { 1569 | "type": "git", 1570 | "url": "https://github.com/sebastianbergmann/exporter.git", 1571 | "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc" 1572 | }, 1573 | "dist": { 1574 | "type": "zip", 1575 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/64f51654862e0f5e318db7e9dcc2292c63cdbddc", 1576 | "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc", 1577 | "shasum": "" 1578 | }, 1579 | "require": { 1580 | "ext-mbstring": "*", 1581 | "php": ">=8.1", 1582 | "sebastian/recursion-context": "^5.0" 1583 | }, 1584 | "require-dev": { 1585 | "phpunit/phpunit": "^10.0" 1586 | }, 1587 | "type": "library", 1588 | "extra": { 1589 | "branch-alias": { 1590 | "dev-main": "5.1-dev" 1591 | } 1592 | }, 1593 | "autoload": { 1594 | "classmap": [ 1595 | "src/" 1596 | ] 1597 | }, 1598 | "notification-url": "https://packagist.org/downloads/", 1599 | "license": [ 1600 | "BSD-3-Clause" 1601 | ], 1602 | "authors": [ 1603 | { 1604 | "name": "Sebastian Bergmann", 1605 | "email": "sebastian@phpunit.de" 1606 | }, 1607 | { 1608 | "name": "Jeff Welch", 1609 | "email": "whatthejeff@gmail.com" 1610 | }, 1611 | { 1612 | "name": "Volker Dusch", 1613 | "email": "github@wallbash.com" 1614 | }, 1615 | { 1616 | "name": "Adam Harvey", 1617 | "email": "aharvey@php.net" 1618 | }, 1619 | { 1620 | "name": "Bernhard Schussek", 1621 | "email": "bschussek@gmail.com" 1622 | } 1623 | ], 1624 | "description": "Provides the functionality to export PHP variables for visualization", 1625 | "homepage": "https://www.github.com/sebastianbergmann/exporter", 1626 | "keywords": [ 1627 | "export", 1628 | "exporter" 1629 | ], 1630 | "support": { 1631 | "issues": "https://github.com/sebastianbergmann/exporter/issues", 1632 | "security": "https://github.com/sebastianbergmann/exporter/security/policy", 1633 | "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.1" 1634 | }, 1635 | "funding": [ 1636 | { 1637 | "url": "https://github.com/sebastianbergmann", 1638 | "type": "github" 1639 | } 1640 | ], 1641 | "time": "2023-09-24T13:22:09+00:00" 1642 | }, 1643 | { 1644 | "name": "sebastian/global-state", 1645 | "version": "6.0.1", 1646 | "source": { 1647 | "type": "git", 1648 | "url": "https://github.com/sebastianbergmann/global-state.git", 1649 | "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4" 1650 | }, 1651 | "dist": { 1652 | "type": "zip", 1653 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/7ea9ead78f6d380d2a667864c132c2f7b83055e4", 1654 | "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4", 1655 | "shasum": "" 1656 | }, 1657 | "require": { 1658 | "php": ">=8.1", 1659 | "sebastian/object-reflector": "^3.0", 1660 | "sebastian/recursion-context": "^5.0" 1661 | }, 1662 | "require-dev": { 1663 | "ext-dom": "*", 1664 | "phpunit/phpunit": "^10.0" 1665 | }, 1666 | "type": "library", 1667 | "extra": { 1668 | "branch-alias": { 1669 | "dev-main": "6.0-dev" 1670 | } 1671 | }, 1672 | "autoload": { 1673 | "classmap": [ 1674 | "src/" 1675 | ] 1676 | }, 1677 | "notification-url": "https://packagist.org/downloads/", 1678 | "license": [ 1679 | "BSD-3-Clause" 1680 | ], 1681 | "authors": [ 1682 | { 1683 | "name": "Sebastian Bergmann", 1684 | "email": "sebastian@phpunit.de" 1685 | } 1686 | ], 1687 | "description": "Snapshotting of global state", 1688 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1689 | "keywords": [ 1690 | "global state" 1691 | ], 1692 | "support": { 1693 | "issues": "https://github.com/sebastianbergmann/global-state/issues", 1694 | "security": "https://github.com/sebastianbergmann/global-state/security/policy", 1695 | "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.1" 1696 | }, 1697 | "funding": [ 1698 | { 1699 | "url": "https://github.com/sebastianbergmann", 1700 | "type": "github" 1701 | } 1702 | ], 1703 | "time": "2023-07-19T07:19:23+00:00" 1704 | }, 1705 | { 1706 | "name": "sebastian/lines-of-code", 1707 | "version": "2.0.1", 1708 | "source": { 1709 | "type": "git", 1710 | "url": "https://github.com/sebastianbergmann/lines-of-code.git", 1711 | "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d" 1712 | }, 1713 | "dist": { 1714 | "type": "zip", 1715 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/649e40d279e243d985aa8fb6e74dd5bb28dc185d", 1716 | "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d", 1717 | "shasum": "" 1718 | }, 1719 | "require": { 1720 | "nikic/php-parser": "^4.10", 1721 | "php": ">=8.1" 1722 | }, 1723 | "require-dev": { 1724 | "phpunit/phpunit": "^10.0" 1725 | }, 1726 | "type": "library", 1727 | "extra": { 1728 | "branch-alias": { 1729 | "dev-main": "2.0-dev" 1730 | } 1731 | }, 1732 | "autoload": { 1733 | "classmap": [ 1734 | "src/" 1735 | ] 1736 | }, 1737 | "notification-url": "https://packagist.org/downloads/", 1738 | "license": [ 1739 | "BSD-3-Clause" 1740 | ], 1741 | "authors": [ 1742 | { 1743 | "name": "Sebastian Bergmann", 1744 | "email": "sebastian@phpunit.de", 1745 | "role": "lead" 1746 | } 1747 | ], 1748 | "description": "Library for counting the lines of code in PHP source code", 1749 | "homepage": "https://github.com/sebastianbergmann/lines-of-code", 1750 | "support": { 1751 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", 1752 | "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", 1753 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.1" 1754 | }, 1755 | "funding": [ 1756 | { 1757 | "url": "https://github.com/sebastianbergmann", 1758 | "type": "github" 1759 | } 1760 | ], 1761 | "time": "2023-08-31T09:25:50+00:00" 1762 | }, 1763 | { 1764 | "name": "sebastian/object-enumerator", 1765 | "version": "5.0.0", 1766 | "source": { 1767 | "type": "git", 1768 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1769 | "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" 1770 | }, 1771 | "dist": { 1772 | "type": "zip", 1773 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", 1774 | "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", 1775 | "shasum": "" 1776 | }, 1777 | "require": { 1778 | "php": ">=8.1", 1779 | "sebastian/object-reflector": "^3.0", 1780 | "sebastian/recursion-context": "^5.0" 1781 | }, 1782 | "require-dev": { 1783 | "phpunit/phpunit": "^10.0" 1784 | }, 1785 | "type": "library", 1786 | "extra": { 1787 | "branch-alias": { 1788 | "dev-main": "5.0-dev" 1789 | } 1790 | }, 1791 | "autoload": { 1792 | "classmap": [ 1793 | "src/" 1794 | ] 1795 | }, 1796 | "notification-url": "https://packagist.org/downloads/", 1797 | "license": [ 1798 | "BSD-3-Clause" 1799 | ], 1800 | "authors": [ 1801 | { 1802 | "name": "Sebastian Bergmann", 1803 | "email": "sebastian@phpunit.de" 1804 | } 1805 | ], 1806 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1807 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1808 | "support": { 1809 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", 1810 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" 1811 | }, 1812 | "funding": [ 1813 | { 1814 | "url": "https://github.com/sebastianbergmann", 1815 | "type": "github" 1816 | } 1817 | ], 1818 | "time": "2023-02-03T07:08:32+00:00" 1819 | }, 1820 | { 1821 | "name": "sebastian/object-reflector", 1822 | "version": "3.0.0", 1823 | "source": { 1824 | "type": "git", 1825 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1826 | "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" 1827 | }, 1828 | "dist": { 1829 | "type": "zip", 1830 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", 1831 | "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", 1832 | "shasum": "" 1833 | }, 1834 | "require": { 1835 | "php": ">=8.1" 1836 | }, 1837 | "require-dev": { 1838 | "phpunit/phpunit": "^10.0" 1839 | }, 1840 | "type": "library", 1841 | "extra": { 1842 | "branch-alias": { 1843 | "dev-main": "3.0-dev" 1844 | } 1845 | }, 1846 | "autoload": { 1847 | "classmap": [ 1848 | "src/" 1849 | ] 1850 | }, 1851 | "notification-url": "https://packagist.org/downloads/", 1852 | "license": [ 1853 | "BSD-3-Clause" 1854 | ], 1855 | "authors": [ 1856 | { 1857 | "name": "Sebastian Bergmann", 1858 | "email": "sebastian@phpunit.de" 1859 | } 1860 | ], 1861 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1862 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1863 | "support": { 1864 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", 1865 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" 1866 | }, 1867 | "funding": [ 1868 | { 1869 | "url": "https://github.com/sebastianbergmann", 1870 | "type": "github" 1871 | } 1872 | ], 1873 | "time": "2023-02-03T07:06:18+00:00" 1874 | }, 1875 | { 1876 | "name": "sebastian/recursion-context", 1877 | "version": "5.0.0", 1878 | "source": { 1879 | "type": "git", 1880 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1881 | "reference": "05909fb5bc7df4c52992396d0116aed689f93712" 1882 | }, 1883 | "dist": { 1884 | "type": "zip", 1885 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", 1886 | "reference": "05909fb5bc7df4c52992396d0116aed689f93712", 1887 | "shasum": "" 1888 | }, 1889 | "require": { 1890 | "php": ">=8.1" 1891 | }, 1892 | "require-dev": { 1893 | "phpunit/phpunit": "^10.0" 1894 | }, 1895 | "type": "library", 1896 | "extra": { 1897 | "branch-alias": { 1898 | "dev-main": "5.0-dev" 1899 | } 1900 | }, 1901 | "autoload": { 1902 | "classmap": [ 1903 | "src/" 1904 | ] 1905 | }, 1906 | "notification-url": "https://packagist.org/downloads/", 1907 | "license": [ 1908 | "BSD-3-Clause" 1909 | ], 1910 | "authors": [ 1911 | { 1912 | "name": "Sebastian Bergmann", 1913 | "email": "sebastian@phpunit.de" 1914 | }, 1915 | { 1916 | "name": "Jeff Welch", 1917 | "email": "whatthejeff@gmail.com" 1918 | }, 1919 | { 1920 | "name": "Adam Harvey", 1921 | "email": "aharvey@php.net" 1922 | } 1923 | ], 1924 | "description": "Provides functionality to recursively process PHP variables", 1925 | "homepage": "https://github.com/sebastianbergmann/recursion-context", 1926 | "support": { 1927 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", 1928 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" 1929 | }, 1930 | "funding": [ 1931 | { 1932 | "url": "https://github.com/sebastianbergmann", 1933 | "type": "github" 1934 | } 1935 | ], 1936 | "time": "2023-02-03T07:05:40+00:00" 1937 | }, 1938 | { 1939 | "name": "sebastian/type", 1940 | "version": "4.0.0", 1941 | "source": { 1942 | "type": "git", 1943 | "url": "https://github.com/sebastianbergmann/type.git", 1944 | "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" 1945 | }, 1946 | "dist": { 1947 | "type": "zip", 1948 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", 1949 | "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", 1950 | "shasum": "" 1951 | }, 1952 | "require": { 1953 | "php": ">=8.1" 1954 | }, 1955 | "require-dev": { 1956 | "phpunit/phpunit": "^10.0" 1957 | }, 1958 | "type": "library", 1959 | "extra": { 1960 | "branch-alias": { 1961 | "dev-main": "4.0-dev" 1962 | } 1963 | }, 1964 | "autoload": { 1965 | "classmap": [ 1966 | "src/" 1967 | ] 1968 | }, 1969 | "notification-url": "https://packagist.org/downloads/", 1970 | "license": [ 1971 | "BSD-3-Clause" 1972 | ], 1973 | "authors": [ 1974 | { 1975 | "name": "Sebastian Bergmann", 1976 | "email": "sebastian@phpunit.de", 1977 | "role": "lead" 1978 | } 1979 | ], 1980 | "description": "Collection of value objects that represent the types of the PHP type system", 1981 | "homepage": "https://github.com/sebastianbergmann/type", 1982 | "support": { 1983 | "issues": "https://github.com/sebastianbergmann/type/issues", 1984 | "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" 1985 | }, 1986 | "funding": [ 1987 | { 1988 | "url": "https://github.com/sebastianbergmann", 1989 | "type": "github" 1990 | } 1991 | ], 1992 | "time": "2023-02-03T07:10:45+00:00" 1993 | }, 1994 | { 1995 | "name": "sebastian/version", 1996 | "version": "4.0.1", 1997 | "source": { 1998 | "type": "git", 1999 | "url": "https://github.com/sebastianbergmann/version.git", 2000 | "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" 2001 | }, 2002 | "dist": { 2003 | "type": "zip", 2004 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", 2005 | "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", 2006 | "shasum": "" 2007 | }, 2008 | "require": { 2009 | "php": ">=8.1" 2010 | }, 2011 | "type": "library", 2012 | "extra": { 2013 | "branch-alias": { 2014 | "dev-main": "4.0-dev" 2015 | } 2016 | }, 2017 | "autoload": { 2018 | "classmap": [ 2019 | "src/" 2020 | ] 2021 | }, 2022 | "notification-url": "https://packagist.org/downloads/", 2023 | "license": [ 2024 | "BSD-3-Clause" 2025 | ], 2026 | "authors": [ 2027 | { 2028 | "name": "Sebastian Bergmann", 2029 | "email": "sebastian@phpunit.de", 2030 | "role": "lead" 2031 | } 2032 | ], 2033 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2034 | "homepage": "https://github.com/sebastianbergmann/version", 2035 | "support": { 2036 | "issues": "https://github.com/sebastianbergmann/version/issues", 2037 | "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" 2038 | }, 2039 | "funding": [ 2040 | { 2041 | "url": "https://github.com/sebastianbergmann", 2042 | "type": "github" 2043 | } 2044 | ], 2045 | "time": "2023-02-07T11:34:05+00:00" 2046 | }, 2047 | { 2048 | "name": "theseer/tokenizer", 2049 | "version": "1.2.1", 2050 | "source": { 2051 | "type": "git", 2052 | "url": "https://github.com/theseer/tokenizer.git", 2053 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" 2054 | }, 2055 | "dist": { 2056 | "type": "zip", 2057 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", 2058 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", 2059 | "shasum": "" 2060 | }, 2061 | "require": { 2062 | "ext-dom": "*", 2063 | "ext-tokenizer": "*", 2064 | "ext-xmlwriter": "*", 2065 | "php": "^7.2 || ^8.0" 2066 | }, 2067 | "type": "library", 2068 | "autoload": { 2069 | "classmap": [ 2070 | "src/" 2071 | ] 2072 | }, 2073 | "notification-url": "https://packagist.org/downloads/", 2074 | "license": [ 2075 | "BSD-3-Clause" 2076 | ], 2077 | "authors": [ 2078 | { 2079 | "name": "Arne Blankerts", 2080 | "email": "arne@blankerts.de", 2081 | "role": "Developer" 2082 | } 2083 | ], 2084 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 2085 | "support": { 2086 | "issues": "https://github.com/theseer/tokenizer/issues", 2087 | "source": "https://github.com/theseer/tokenizer/tree/1.2.1" 2088 | }, 2089 | "funding": [ 2090 | { 2091 | "url": "https://github.com/theseer", 2092 | "type": "github" 2093 | } 2094 | ], 2095 | "time": "2021-07-28T10:34:58+00:00" 2096 | } 2097 | ], 2098 | "aliases": [], 2099 | "minimum-stability": "stable", 2100 | "stability-flags": [], 2101 | "prefer-stable": false, 2102 | "prefer-lowest": false, 2103 | "platform": [], 2104 | "platform-dev": [], 2105 | "plugin-api-version": "2.6.0" 2106 | } 2107 | -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: '3.9' 2 | services: 3 | 4 | php-swoole: 5 | image: php-swoole 6 | hostname: php-swoole 7 | container_name: php-swoole 8 | build: 9 | context: ./ 10 | dockerfile: ./.docker/php/Dockerfile 11 | args: 12 | USER: ${USER} 13 | UID: ${UID} 14 | GID: ${GID} 15 | ports: 16 | - "8090:80" 17 | volumes: 18 | - ./:/var/www/ 19 | - ./.docker/php/ini/php.ini:/usr/local/etc/php/php.ini 20 | - ./.docker/php/ini/docker-php-ext-openswoole.ini:/usr/local/etc/php/conf.d/docker-php-ext-openswoole.ini 21 | command: ["php", "/var/www/app/swoole/server.php"] 22 | extra_hosts: 23 | - "host.docker.internal:host-gateway" 24 | networks: 25 | - network-digital-codigos 26 | 27 | networks: 28 | network-digital-codigos: 29 | driver: bridge 30 | external: false 31 | name: network-digital-codigos 32 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | app/src/Tests 9 | 10 | 11 | 12 | 13 | app/src 14 | 15 | 16 | 17 | --------------------------------------------------------------------------------