diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000000..de7a2802ee --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,40 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/php +{ + "name": "PHP", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/php:1-8.4-bullseye", + + // Features to add to the dev container. More info: https://containers.dev/features. + "features": { + "ghcr.io/devcontainers/features/github-cli:1": {}, + "ghcr.io/devcontainers/features/node:1": {} + }, + + // Configure tool-specific properties. + "customizations": { + // Configure properties specific to VS Code. + "vscode": { + "extensions": [ + "DEVSENSE.composer-php-vscode", + "editorconfig.editorconfig", + "ms-vscode.makefile-tools" + ] + } + }, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + "forwardPorts": [ + 8080 + ], + + // Use 'postCreateCommand' to run commands after the container is created. + "postCreateCommand": "sudo .devcontainer/post-create.sh && sudo chmod a+x \"$(pwd)\" && sudo ln -s \"$(pwd)\" /var/www/html", + "waitFor": "postCreateCommand", + "postAttachCommand": { + "Server": "apache2ctl start" + } + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/.devcontainer/post-create.sh b/.devcontainer/post-create.sh new file mode 100755 index 0000000000..c7161b9344 --- /dev/null +++ b/.devcontainer/post-create.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +test -f composer.json && composer install + +sed -i 's/Listen 80$//' /etc/apache2/ports.conf \ + && sed -i 's//ServerName 127.0.0.1\n/' /etc/apache2/sites-enabled/000-default.conf \ + && rm -rf /var/www/html diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..96497cb17d --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.js] +indent_size = 2 +indent_style = space + +[*.yaml] +indent_size = 2 +indent_style = space + +[Makefile] +indent_size = 4 +indent_style = tab diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000000..9919274261 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @saundefined @sy-records @sgolemon @derickr diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000000..c00267ff51 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,139 @@ +# CONTRIBUTING + +Anybody who programs in PHP can be a contributing member of the community that +develops and deploys www.php.net; the task of deploying the www.php.net website is a never-ending one. + +You don't need any special access to download, debug and begin submitting +code, tests or documentation. + +## Index + +* [Pull requests](#pull-requests) +* [Filing bugs](#filing-bugs) +* [Feature requests](#feature-requests) +* [Writing tests](#writing-tests) +* [Getting help](#getting-help) +* [Checklist for submitting contribution](#checklist-for-submitting-contribution) +* [What happens after submitting contribution?](#what-happens-after-submitting-contribution) +* [What happens when your contribution is applied?](#what-happens-when-your-contribution-is-applied) +* [Git commit rules](#git-commit-rules) + +## Pull requests + +www.php.net welcomes pull requests to [add tests](#writing-tests), fix bugs and to +implement features. Please be sure to include tests as appropriate! + +If your pull request exhibits conflicts with the base branch, please resolve +them by using `git rebase` instead of `git merge`. + +Fork the official www.php.net repository and send a pull request. A notification will be +sent to the pull request mailing list. Sending a note to [PHP php.net internal infrastructure discussion](mailto:php-webmaster@lists.php.net) may help getting more feedback and quicker turnaround. + +## Filing bugs + +Bugs can be filed on [GitHub Issues](https://github.com/php/web-php/issues). + +Where possible, please include a self-contained reproduction case! + +## Feature requests + +Feature requests can be filed on [GitHub Issues](https://github.com/php/web-php/issues). + +## Writing tests + +We love getting new tests! www.php.net is a fairly old project and improving test coverage is +a huge win for every www.php.net user. + +[Our QA site includes a page detailing how to write test cases.](https://qa.php.net/write-test.php) + +Submitting test scripts helps us to understand what functionality has changed. +It is important for the stability and maintainability of www.php.net that tests are +comprehensive. + +## Getting help + +If you are having trouble contributing to www.php.net, or just want to talk to a human +about what you're working on, you can contact us via the +[PHP php.net internal infrastructure discussion](mailto:php-webmaster@lists.php.net). + +## Checklist for submitting contribution + +- Update git source just before running your final `diff` and before testing. +- Create test scripts. +- Run + + ```shell + make tests + ``` + + to check your change doesn't break other features. +- Run + + ```shell + make coding-standards + ``` + + to automatically fix coding standard issues. +- Review the change once more just before submitting it. + +## What happens after submitting contribution? + +If your change is easy to review and obviously has no side-effects, it might be +committed relatively quickly. + +Because www.php.net is a volunteer-driven effort, more complex changes will require +patience on your side. If you do not receive feedback in a few days, consider +bumping. Before doing this think about these questions: + +- Did I send the patch to the right mailing list? +- Did I review the mailing list archives to see if these kind of changes had + been discussed before? +- Did I explain my change clearly? +- Is my change too hard to review? If so, why? + +## What happens when your contribution is applied? + +Your name will likely be included in the Git commit log. + +## Git commit rules + +This section refers to contributors that have Git push access and make commit +changes themselves. We'll assume you're basically familiar with Git, but feel +free to post your questions on the mailing list. Please have a look at the more +detailed [information on Git](https://git-scm.com/). + +www.php.net is developed through the efforts of a large number of people. Collaboration +is a Good Thing(tm), and Git lets us do this. Thus, following some basic rules +with regards to Git usage will: + +- Make everybody happier, especially those responsible for maintaining the website. +- Keep the changes consistently well documented and easily trackable. +- Prevent some of those 'Oops' moments. +- Increase the general level of good will on planet Earth. + +Having said that, here are the organizational rules: + +1. Respect other people working on the project. + +2. Discuss any significant changes on the list before committing. + +3. If you "strongly disagree" about something another person did, don't start + fighting publicly - take it up in private email. + +4. If you don't know how to do something, ask first! + +5. Test your changes before committing them. We mean it. Really. To do so use + + ```shell + make tests + ``` + +5. Fix coding standard issues before committing code. To do so use + + ```shell + make coding-standards + ``` + +6. Use reasonable commit messages. + +Thank you for contributing to https://www.php.net! diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 0000000000..47076371cf --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,62 @@ +name: "Bug Report" +description: "Report a bug to help us improve" +labels: ["Bug", "Status: Needs Triage"] + +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + Please provide as much detail as possible. + + - type: input + id: page_url + attributes: + label: Affected Page URL + description: The exact page address where the bug occurs + placeholder: e.g. https://www.php.net/manual/en/function.date.php + validations: + required: true + + - type: textarea + id: bug_description + attributes: + label: "Describe the bug" + description: "A clear and concise description of what the bug is." + placeholder: "Describe the issue here..." + validations: + required: true + + - type: textarea + id: steps_to_reproduce + attributes: + label: "Steps to reproduce" + description: "Explain how to reproduce the behavior." + placeholder: | + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error + validations: + required: true + + - type: textarea + id: expected_behavior + attributes: + label: "Expected behavior" + description: "What did you expect to happen?" + placeholder: "A clear and concise description..." + validations: + required: true + + - type: textarea + id: screenshots + attributes: + label: "Screenshots" + description: "If applicable, add screenshots to help explain your problem." + + - type: textarea + id: additional_context + attributes: + label: "Additional context" + description: "Add any other context about the problem here." diff --git a/.github/ISSUE_TEMPLATE/download-page.yml b/.github/ISSUE_TEMPLATE/download-page.yml new file mode 100644 index 0000000000..f0df85e84b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/download-page.yml @@ -0,0 +1,37 @@ +name: "Download Page" +description: "Suggest an idea for the downloads page" +labels: ["Page: downloads"] + +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to suggest an improvement or idea for the **Downloads Page**. + Please provide as much detail as possible so we can understand your suggestion. + Please **do not** use this issue tracker for reporting issues with installing PHP, as + this is not a support forum. Instead head to [our support page](https://www.php.net/support.php). + + - type: input + id: summary + attributes: + label: Summary + description: A brief description of your idea + placeholder: e.g. Add a new section for legacy downloads + validations: + required: true + + - type: textarea + id: details + attributes: + label: Details + description: Explain your idea in detail. What problem does it solve? How should it look or work? + placeholder: Write your detailed suggestion here... + validations: + required: true + + - type: textarea + id: additional + attributes: + label: Additional context + description: Add any other context, screenshots, or references about the idea here. + placeholder: e.g. Related links, mockups, etc. diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml new file mode 100644 index 0000000000..fb8b26f5f1 --- /dev/null +++ b/.github/dependabot.yaml @@ -0,0 +1,40 @@ +# https://docs.github.com/en/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 + +updates: + - package-ecosystem: "composer" + allow: + - dependency-type: "development" + commit-message: + include: "scope" + prefix: "composer" + directory: "/" + labels: + - "dependency" + open-pull-requests-limit: 10 + schedule: + interval: "weekly" + versioning-strategy: "increase" + + - package-ecosystem: "github-actions" + commit-message: + include: "scope" + prefix: "github-actions" + directory: "/" + labels: + - "dependency" + open-pull-requests-limit: 10 + schedule: + interval: "weekly" + + - package-ecosystem: "devcontainers" + commit-message: + include: "scope" + prefix: "devcontainers" + directory: "/" + labels: + - "dependency" + open-pull-requests-limit: 10 + schedule: + interval: "weekly" diff --git a/.github/workflows/close-needs-feedback.yml b/.github/workflows/close-needs-feedback.yml new file mode 100644 index 0000000000..27231303f1 --- /dev/null +++ b/.github/workflows/close-needs-feedback.yml @@ -0,0 +1,24 @@ +name: Close old issues that need feedback + +on: + schedule: + - cron: "0 0 * * *" + +permissions: + contents: read + +jobs: + build: + if: github.repository_owner == 'php' + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - name: Close old issues that need feedback + uses: dwieeb/needs-reply@v2 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + issue-label: "Status: Needs Feedback" + days-before-close: 14 + close-message: "No feedback was provided. The issue is being suspended because we assume that you are no longer experiencing the problem. If this is not the case and you are able to provide the information that was requested earlier, please do so. Thank you." diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml new file mode 100644 index 0000000000..021babda87 --- /dev/null +++ b/.github/workflows/integrate.yaml @@ -0,0 +1,160 @@ +# https://docs.github.com/en/actions + +name: "Integrate" + +on: + pull_request: null + push: + branches: + - "master" + +jobs: + code-coverage: + name: "Code Coverage" + + runs-on: "ubuntu-latest" + + strategy: + matrix: + php-version: + - "8.2" + + steps: + - name: "Checkout" + uses: "actions/checkout@v6" + + - name: "Set up PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "xdebug" + extensions: "none, curl, dom, json, mbstring, tokenizer, xml, xmlwriter, iconv" + php-version: "${{ matrix.php-version }}" + + - name: "Set up problem matchers for PHP" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"" + + - name: "Set up problem matchers for phpunit/phpunit" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/phpunit.json\"" + + - name: "Determine composer cache directory" + run: "echo \"COMPOSER_CACHE_DIR=$(composer config cache-dir)\" >> $GITHUB_ENV" + + - name: "Cache dependencies installed with composer" + uses: "actions/cache@v5" + with: + path: "${{ env.COMPOSER_CACHE_DIR }}" + key: "php-${{ matrix.php-version }}-composer-${{ hashFiles('composer.lock') }}" + restore-keys: "php-${{ matrix.php-version }}-composer-" + + - name: "Install dependencies with composer" + run: "composer install --ansi --no-interaction --no-progress" + + - name: "Collect code coverage from running unit tests with phpunit/phpunit" + env: + XDEBUG_MODE: "coverage" + run: "vendor/bin/phpunit --colors=always --configuration=tests/phpunit.xml --coverage-text --testsuite=unit" + + coding-standards: + name: "Coding Standards" + + runs-on: "ubuntu-latest" + + strategy: + matrix: + php-version: + - "8.2" + + steps: + - name: "Checkout" + uses: "actions/checkout@v6" + + - name: "Set up PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "none" + extensions: "none, curl, dom, json, mbstring, tokenizer, xml, xmlwriter, iconv" + php-version: "${{ matrix.php-version }}" + + - name: "Set up problem matchers for PHP" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"" + + - name: "Validate composer.json and composer.lock" + run: "composer validate --ansi --strict" + + - name: "Determine composer cache directory" + run: "echo \"COMPOSER_CACHE_DIR=$(composer config cache-dir)\" >> $GITHUB_ENV" + + - name: "Cache dependencies installed with composer" + uses: "actions/cache@v5" + with: + path: "${{ env.COMPOSER_CACHE_DIR }}" + key: "php-${{ matrix.php-version }}-composer-${{ hashFiles('composer.lock') }}" + restore-keys: "php-${{ matrix.php-version }}-composer-" + + - name: "Install dependencies with composer" + run: "composer install --ansi --no-interaction --no-progress" + + - name: "Run friendsofphp/php-cs-fixer" + run: "vendor/bin/php-cs-fixer fix --ansi --config=.php-cs-fixer.php --diff --dry-run --show-progress=dots --verbose" + + - name: "Get libxml2-utils" + run: | + set -x + export DEBIAN_FRONTEND=noninteractive + sudo apt-get update -y | true + sudo apt-get install -y libxml2-utils + + - name: "Validate XML files" + run: "for a in $(find . -name '*.xml'); do xmllint --quiet --noout $a; done" + + tests: + name: "Tests" + + runs-on: "ubuntu-latest" + + strategy: + matrix: + php-version: + - "8.2" + + env: + HTTP_HOST: "localhost:8080" + + steps: + - name: "Checkout" + uses: "actions/checkout@v6" + + - name: "Set up PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "none" + extensions: "none, curl, dom, json, mbstring, tokenizer, xml, xmlwriter, iconv" + php-version: "${{ matrix.php-version }}" + + - name: "Set up problem matchers for PHP" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"" + + - name: "Set up problem matchers for phpunit/phpunit" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/phpunit.json\"" + + - name: "Determine composer cache directory" + run: "echo \"COMPOSER_CACHE_DIR=$(composer config cache-dir)\" >> $GITHUB_ENV" + + - name: "Cache dependencies installed with composer" + uses: "actions/cache@v5" + with: + path: "${{ env.COMPOSER_CACHE_DIR }}" + key: "php-${{ matrix.php-version }}-composer-${{ hashFiles('composer.lock') }}" + restore-keys: "php-${{ matrix.php-version }}-composer-" + + - name: "Install dependencies with composer" + run: "composer install --ansi --no-interaction --no-progress" + + - name: "Run unit tests with phpunit/phpunit" + run: "vendor/bin/phpunit --colors=always --configuration=tests/phpunit.xml --testsuite=unit" + + - name: "Start built-in web server for PHP" + run: "php -S ${{ env.HTTP_HOST }} .router.php &" + + - name: "Run end-to-end tests with phpunit/phpunit" + run: "vendor/bin/phpunit --colors=always --configuration=tests/phpunit.xml --testsuite=end-to-end" diff --git a/.github/workflows/pr-closed.yml b/.github/workflows/pr-closed.yml new file mode 100644 index 0000000000..45f8f84bd0 --- /dev/null +++ b/.github/workflows/pr-closed.yml @@ -0,0 +1,18 @@ +name: Remove preview PR +on: + pull_request_target: + types: [ closed ] + +jobs: + build: + runs-on: "ubuntu-22.04" + if: github.repository_owner == 'php' + steps: + - uses: appleboy/ssh-action@v1.2.4 + with: + host: ${{ secrets.PREVIEW_REMOTE_HOST }} + username: ${{ secrets.PREVIEW_REMOTE_USER }} + key: ${{ secrets.PREVIEW_SSH_KEY }} + script: | + bash /home/thephpfoundation/scripts/pr_closed.sh web-php ${{ github.event.number }} + bash /home/thephpfoundation/scripts/pr_closed.sh web-php-regression-report ${{ github.event.number }} diff --git a/.github/workflows/pr-preview.yml b/.github/workflows/pr-preview.yml new file mode 100644 index 0000000000..01d1b58482 --- /dev/null +++ b/.github/workflows/pr-preview.yml @@ -0,0 +1,131 @@ +name: Preview PR +on: + pull_request_target: + types: [ labeled ] + +jobs: + build: + runs-on: "ubuntu-22.04" + if: "github.repository_owner == 'php' && github.event.label.name == 'Status: Preview Allowed'" + steps: + - uses: actions/checkout@v6 + with: + ref: "refs/pull/${{ github.event.number }}/merge" + + - uses: easingthemes/ssh-deploy@main + with: + REMOTE_HOST: ${{ secrets.PREVIEW_REMOTE_HOST }} + REMOTE_USER: ${{ secrets.PREVIEW_REMOTE_USER }} + SSH_PRIVATE_KEY: ${{ secrets.PREVIEW_SSH_KEY }} + TARGET: "/home/thephpfoundation/preview/web-php-pr-${{ github.event.number }}/public" + SCRIPT_BEFORE: bash /home/thephpfoundation/scripts/pr_created_pre.sh web-php ${{ github.event.number }} + SCRIPT_AFTER: bash /home/thephpfoundation/scripts/pr_created.sh web-php ${{ github.event.number }} + + - uses: peter-evans/find-comment@v4 + id: fc + with: + issue-number: ${{ github.event.number }} + comment-author: 'github-actions[bot]' + body-includes: 'Preview for commit' + + - uses: peter-evans/create-or-update-comment@v5 + with: + issue-number: ${{ github.event.number }} + comment-id: ${{ steps.fc.outputs.comment-id }} + edit-mode: 'replace' + body: | + 🚀 Preview for commit ${{ github.sha }} can be found at https://web-php-pr-${{ github.event.number }}.preview.thephp.foundation + + tests_visual: + name: "Visual Tests" + + runs-on: "ubuntu-latest" + if: "github.repository_owner == 'php' && github.event.label.name == 'Status: Preview Allowed'" + + strategy: + matrix: + php-version: + - "8.2" + node-version: + - "22.x" + + env: + HTTP_HOST: "localhost:8080" + + steps: + - uses: actions/checkout@v6 + with: + ref: "refs/pull/${{ github.event.number }}/merge" + + - uses: shivammathur/setup-php@v2 + with: + coverage: "none" + extensions: "none, curl, dom, json, mbstring, tokenizer, xml, xmlwriter, iconv" + php-version: "${{ matrix.php-version }}" + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v6 + with: + node-version: ${{ matrix.node-version }} + + - name: "Set up problem matchers for PHP" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"" + + - name: "Set up problem matchers for phpunit/phpunit" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/phpunit.json\"" + + - name: "Determine composer cache directory" + run: "echo \"COMPOSER_CACHE_DIR=$(composer config cache-dir)\" >> $GITHUB_ENV" + + - name: "Cache dependencies installed with composer" + uses: actions/cache@v5 + with: + path: "${{ env.COMPOSER_CACHE_DIR }}" + key: "php-${{ matrix.php-version }}-composer-${{ hashFiles('composer.lock') }}" + restore-keys: "php-${{ matrix.php-version }}-composer-" + + - name: "Install dependencies with composer" + run: "composer install --ansi --no-interaction --no-progress" + + - name: "Install dependencies" + run: "yarn install" + + - name: "Install Playwright" + run: "npx playwright install" + + - name: "Run visual tests" + run: "make tests_visual" + + - uses: actions/upload-artifact@v6 + if: ${{ !cancelled() }} + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 + + - uses: easingthemes/ssh-deploy@main + if: ${{ !cancelled() }} + with: + REMOTE_HOST: ${{ secrets.PREVIEW_REMOTE_HOST }} + REMOTE_USER: ${{ secrets.PREVIEW_REMOTE_USER }} + SSH_PRIVATE_KEY: ${{ secrets.PREVIEW_SSH_KEY }} + SOURCE: "playwright-report/" + TARGET: "/home/thephpfoundation/preview/web-php-regression-report-pr-${{ github.event.number }}/public" + SCRIPT_BEFORE: bash /home/thephpfoundation/scripts/pr_created_pre.sh web-php-regression-report ${{ github.event.number }} + + - uses: peter-evans/find-comment@v4 + if: ${{ !cancelled() }} + id: snapshot + with: + issue-number: ${{ github.event.number }} + comment-author: 'github-actions[bot]' + body-includes: 'Regression report for commit' + + - uses: peter-evans/create-or-update-comment@v5 + if: ${{ !cancelled() }} + with: + issue-number: ${{ github.event.number }} + comment-id: ${{ steps.snapshot.outputs.comment-id }} + edit-mode: 'replace' + body: | + 🚀 Regression report for commit ${{ github.sha }} is at https://web-php-regression-report-pr-${{ github.event.number }}.preview.thephp.foundation diff --git a/.github/workflows/remove-needs-feedback.yml b/.github/workflows/remove-needs-feedback.yml new file mode 100644 index 0000000000..8d1ff3e0a0 --- /dev/null +++ b/.github/workflows/remove-needs-feedback.yml @@ -0,0 +1,24 @@ +name: Remove needs feedback label + +on: + issue_comment: + types: + - created + +permissions: + contents: read + +jobs: + build: + if: "github.repository_owner == 'php' && contains(github.event.issue.labels.*.name, 'Status: Needs Feedback') && github.event.issue.user.login == github.event.sender.login" + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions-ecosystem/action-remove-labels@v1 + with: + labels: "Status: Needs Feedback" + - uses: actions-ecosystem/action-add-labels@v1 + with: + labels: "Status: Needs Triage" diff --git a/.github/workflows/update-screenshots.yaml b/.github/workflows/update-screenshots.yaml new file mode 100644 index 0000000000..f62197aaca --- /dev/null +++ b/.github/workflows/update-screenshots.yaml @@ -0,0 +1,74 @@ +# https://docs.github.com/en/actions + +name: "Update screenshots" + +on: + workflow_dispatch: + +jobs: + tests_update_snapshots: + name: "Update Tests snapshots" + + runs-on: "ubuntu-latest" + + strategy: + matrix: + php-version: + - "8.2" + node-version: + - "22.x" + + env: + HTTP_HOST: "localhost:8080" + + steps: + - name: "Checkout" + uses: "actions/checkout@v6" + + - name: "Set up PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "none" + extensions: "none, curl, dom, json, mbstring, tokenizer, xml, xmlwriter, iconv" + php-version: "${{ matrix.php-version }}" + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v6 + with: + node-version: ${{ matrix.node-version }} + + - name: "Set up problem matchers for PHP" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"" + + - name: "Set up problem matchers for phpunit/phpunit" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/phpunit.json\"" + + - name: "Determine composer cache directory" + run: "echo \"COMPOSER_CACHE_DIR=$(composer config cache-dir)\" >> $GITHUB_ENV" + + - name: "Cache dependencies installed with composer" + uses: "actions/cache@v5" + with: + path: "${{ env.COMPOSER_CACHE_DIR }}" + key: "php-${{ matrix.php-version }}-composer-${{ hashFiles('composer.lock') }}" + restore-keys: "php-${{ matrix.php-version }}-composer-" + + - name: "Install dependencies with composer" + run: "composer install --ansi --no-interaction --no-progress" + + - name: "Install dependencies" + run: "yarn install" + + - name: "Install Playwright" + run: "npx playwright install" + + - name: "Run visual tests" + run: "make tests_update_snapshots" + + - name: Update snapshots + uses: test-room-7/action-update-file@v2 + if: ${{ !cancelled() }} + with: + file-path: tests/Visual/**/* + commit-msg: Update snapshots + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index c67111cdca..5fa5cd36ef 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,12 @@ +/.build/ +/vendor/ + backend/mirror.gif backend/mirror.png backend/mirror.jpg -backend/mirror.jpg backend/GeoIP.dat -.idea -.DS_Store -.DS_Store? +node_modules/ +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ diff --git a/.htaccess b/.htaccess index 912ca12580..918a3f818e 100644 --- a/.htaccess +++ b/.htaccess @@ -1,4 +1,4 @@ - + Order allow,deny Deny from all diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php new file mode 100644 index 0000000000..feb6b4a4dd --- /dev/null +++ b/.php-cs-fixer.php @@ -0,0 +1,72 @@ +in(__DIR__); + +$config = new PhpCsFixer\Config(); + +$finder = $config->getFinder() + ->ignoreDotFiles(false) + ->in([ + __DIR__ . '/src', + __DIR__ . '/tests', + ]); + +$config + ->setCacheFile(__DIR__ . '/.build/php-cs-fixer/php-cs-fixer.cache') + ->setRiskyAllowed(true) + ->setRules([ + 'array_indentation' => true, + 'array_syntax' => true, + 'binary_operator_spaces' => true, + 'blank_line_after_namespace' => true, + 'blank_line_after_opening_tag' => true, + 'class_attributes_separation' => true, + 'class_definition' => true, + 'concat_space' => [ + 'spacing' => 'one', + ], + 'constant_case' => true, + 'elseif' => true, + 'function_declaration' => true, + 'include' => true, + 'increment_style' => [ + 'style' => 'post', + ], + 'indentation_type' => true, + 'is_null' => true, + 'line_ending' => true, + 'new_with_parentheses' => true, + 'no_extra_blank_lines' => true, + 'no_mixed_echo_print' => true, + 'no_singleline_whitespace_before_semicolons' => true, + 'no_spaces_after_function_name' => true, + 'no_superfluous_elseif' => true, + 'no_trailing_whitespace' => true, + 'ordered_class_elements' => true, + 'random_api_migration' => true, + 'single_space_around_construct' => [ + 'constructs_contain_a_single_space' => [ + 'yield_from', + ], + 'constructs_preceded_by_a_single_space' => [], + 'constructs_followed_by_a_single_space' => [], + ], + 'strict_param' => true, + 'switch_case_space' => true, + 'ternary_operator_spaces' => true, + 'trailing_comma_in_multiline' => [ + 'elements' => [ + 'arguments', + 'arrays', + 'match', + 'parameters', + ], + ], + 'trim_array_spaces' => true, + 'unary_operator_spaces' => true, + 'visibility_required' => true, + 'void_return' => true, + 'whitespace_after_comma_in_array' => true, + ]); + +return $config; diff --git a/.router.php b/.router.php index d40eda6049..c204ce635e 100644 --- a/.router.php +++ b/.router.php @@ -1,12 +1,15 @@ on 2025-11-16. + +# For instructions on how to update this file, read +# +-----BEGIN PGP SIGNATURE----- + +iQIzBAEBCAAdFiEE2VwDvHAr6VFTRK4zdORLyQZ3AaUFAmkaix4ACgkQdORLyQZ3 +AaVMzg/+Pf8BQ40Jo2BVBhz85iLyKtVQrQl7lFyOA+w8ek7zUb0+QA0jtFfGBYkg +gnMvDMlVZK45VupmSQQQFMH3FF7KPoDaqDpgb43cLODDBEIqf7ZQaRLm9hqx7ABX +a6DqiwMOuwViH8Neu/2BOGthfmUu2c7HghRMhuEW7CBJSRAO+uTlwS50WI/D6olN +Uk2Foh6S2PB96xP3do08go7AFYNuU/YM+n3cCWKiKpyHo0xQyMR9E1jpOIdwpptz +u7e3z195wXz+2oCrMvak0u6zV0RmFxg9B/AYujl4boqmNRrd5fWoF11ku2KtllFE +MrGYUNxfJYfaLNtB44exC1CTFSMxsQi2T8Xk7Rd+gcT1WLpD7/CF/1Qqz+I3BQ9h +xaeBgaHEBSNpDGt7uelW66bvvin8UeQ4ULwWio3gq4OwvqWh3EGN+kfazqxJQKpV +EfF25BG/cUubGzsR12jfxg/9Dav8QIuSbEKx0+DGrxQGXctn0Cqc1YSTY8HgR1JK +XndS/j/ZCF9dZb8eqvfkbtxvpx89CDvfg6rPXpQm3dHadDhVAFXOWuXOCa9i1dAv +usAKHx1lAwsWegYc+GIg9/jbZg2zMvxLWOBBYHYGqAW7uv0DQL8NBVfHJhLTGLXC +lt2zVD1cgLMB+0zazdVlv5+JjgC3epqY3ORYux64VtjfrN0NPjY= +=d0Ww +-----END PGP SIGNATURE----- diff --git a/ChangeLog-7.php b/ChangeLog-7.php index f58c795c7c..1cadc9b673 100644 --- a/ChangeLog-7.php +++ b/ChangeLog-7.php @@ -8,6 +8,238 @@ ?> +
+

Version 7.4.33

+ +
  • GD: +
      +
    • : OOB read due to insufficient input validation in imageloadfont(). (CVE-2022-31630)
    • +
  • +
  • Hash: +
      +
    • : buffer overflow in hash_update() on long parameter. (CVE-2022-37454)
    • +
  • +
+
+ + + +
+

Version 7.4.32

+ +
  • Core: +
      +
    • : phar wrapper: DOS when using quine gzip file. (CVE-2022-31628)
    • +
    • : Don't mangle HTTP variable names that clash with ones that have a specific semantic meaning. (CVE-2022-31629)
    • +
  • +
+
+ + + +
+

Version 7.4.30

+ +
  • mysqlnd: +
      +
    • : mysqlnd/pdo password buffer overflow. (CVE-2022-31626)
    • +
  • +
  • pgsql: +
      +
    • : Uninitialized array in pg_query_params(). (CVE-2022-31625)
    • +
  • +
+
+ + + +
+

Version 7.4.29

+ +
  • Core: +
      +
    • No source changes to this release. This update allows for re-building the + Windows binaries against upgraded dependencies which have received security + updates.
    • +
  • +
  • Date: +
      +
    • Updated to latest IANA timezone database (2022a).
    • +
  • +
+
+ + + +
+

Version 7.4.28

+ +
  • Filter: +
      +
    • Fix #81708: UAF due to php_filter_float() failing for ints (CVE-2021-21708)
    • +
  • +
+
+ + + +
+

Version 7.4.27

+ +
  • Core: +
      +
    • (Error on use static:: in __сallStatic() wrapped to Closure::fromCallable()).
    • +
  • +
  • FPM: +
      +
    • (Future possibility for heap overflow in FPM zlog).
    • +
  • +
  • GD: +
      +
    • (libpng warning from imagecreatefromstring).
    • +
  • +
  • OpenSSL: +
      +
    • (./configure: detecting RAND_egd).
    • +
  • +
  • PCRE: +
      +
    • (Out of bounds in php_pcre_replace_impl).
    • +
  • +
  • Standard: +
      +
    • (dns_get_record fails on FreeBSD for missing type).
    • +
    • (stream_get_contents() may unnecessarily overallocate).
    • +
  • +
+
+ + + +
+

Version 7.4.26

+ +
  • Core: +
      +
    • (Header injection via default_mimetype / default_charset).
    • +
  • +
  • Date: +
      +
    • (Interval serialization regression since 7.3.14 / 7.4.2).
    • +
  • +
  • MBString: +
      +
    • (mbstring may use pointer from some previous request).
    • +
  • +
  • MySQLi: +
      +
    • (Stopped unbuffered query does not throw error).
    • +
  • +
  • PCRE: +
      +
    • (PCRE2 10.35 JIT performance regression).
    • +
  • +
  • Streams: +
      +
    • (Memory corruption with user_filter).
    • +
  • +
  • XML: +
      +
    • (special character is breaking the path in xml function). (CVE-2021-21707)
    • +
  • +
+
+ + + +
+

Version 7.4.25

+ +
  • DOM: +
      +
    • (DOMElement::setIdAttribute() called twice may remove ID).
    • +
  • +
  • FFI: +
      +
    • ("TYPE *" shows unhelpful message when type is not defined).
    • +
  • +
  • Fileinfo: +
      +
    • (High memory usage during encoding detection).
    • +
  • +
  • Filter: +
      +
    • (FILTER_FLAG_IPV6/FILTER_FLAG_NO_PRIV|RES_RANGE failing).
    • +
  • +
  • FPM: +
      +
    • (PHP-FPM oob R/W in root process leading to privilege escalation) (CVE-2021-21703).
    • +
  • +
  • SPL: +
      +
    • (Recursive SplFixedArray::setSize() may cause double-free).
    • +
  • +
  • Streams: +
      +
    • (stream_isatty emits warning with attached stream wrapper).
    • +
  • +
  • XML: +
      +
    • (XML_OPTION_SKIP_WHITE strips embedded whitespace).
    • +
  • +
  • Zip: +
      +
    • (ZipArchive::extractTo() may leak memory).
    • +
    • (Dirname ending in colon unzips to wrong dir).
    • +
  • +
+
+ + + +
+

Version 7.4.24

+ +
  • Core: +
      +
    • (Stream position after stream filter removed).
    • +
    • (Non-seekable streams don't update position after write).
    • +
    • (Integer Overflow when concatenating strings).
    • +
  • +
  • GD: +
      +
    • (During resize gdImageCopyResampled cause colors change).
    • +
  • +
  • Opcache: +
      +
    • (segfault with preloading and statically bound closure).
    • +
  • +
  • Shmop: +
      +
    • (shmop_open won't attach and causes php to crash).
    • +
  • +
  • Standard: +
      +
    • (disk_total_space does not work with relative paths).
    • +
    • (Unterminated string in dns_get_record() results).
    • +
  • +
  • SysVMsg: +
      +
    • (Heap Overflow in msg_send).
    • +
  • +
  • XML: +
      +
    • (xml_parse may fail, but has no error code).
    • +
  • +
  • Zip: +
      +
    • (ZipArchive::extractTo extracts outside of destination). (CVE-2021-21706)
    • +
  • +
+
+ + +

Version 7.4.23

@@ -1732,6 +1964,42 @@ +
+

Version 7.3.33

+ +
  • XML: +
      +
    • (special character is breaking the path in xml function). (CVE-2021-21707)
    • +
  • +
+
+ + + +
+

Version 7.3.32

+ +
  • FPM: +
      +
    • (PHP-FPM oob R/W in root process leading to privilege escalation). (CVE-2021-21703)
    • +
  • +
+
+ + + +
+

Version 7.3.31

+ +
  • Zip: +
      +
    • (ZipArchive::extractTo extracts outside of destination). (CVE-2021-21706)
    • +
  • +
+
+ + +

Version 7.3.30

diff --git a/ChangeLog-8.php b/ChangeLog-8.php index dacef19159..e0acbcc201 100644 --- a/ChangeLog-8.php +++ b/ChangeLog-8.php @@ -3,11 +3,10559 @@ include_once __DIR__ . '/include/prepend.inc'; include_once __DIR__ . '/include/changelogs.inc'; -$MINOR_VERSIONS = ['8.0']; +$MINOR_VERSIONS = ['8.5', '8.4', '8.3', '8.2', '8.1', '8.0']; changelog_header(8, $MINOR_VERSIONS); ?> + + + +
+

Version 8.5.1

+ +
  • Core: +
      +
    • Sync all boost.context files with release 1.86.0.
    • +
    • Fixed bug (SensitiveParameter doesn't work for named argument passing to variadic parameter).
    • +
    • Fixed bug (preserve_none attribute configure check on macOs issue).
    • +
    • Fixed bug (use-after-destroy during userland stream_close()).
    • +
  • +
  • Bz2: +
      +
    • Fix assertion failures resulting in crashes with stream filter object parameters.
    • +
  • +
  • DOM: +
      +
    • Fix memory leak when edge case is hit when registering xpath callback.
    • +
    • Fixed bug (querySelector and querySelectorAll requires elements in $selectors to be lowercase).
    • +
    • Fix missing NUL byte check on C14NFile().
    • +
  • +
  • Fibers: +
      +
    • Fixed bug (ASAN stack overflow with fiber.stack_size INI small value).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (Spoofchecker::setRestrictionLevel() error message suggests missing constants).
    • +
  • +
  • Lexbor: +
      +
    • Fixed bug (\Uri\WhatWg\Url lose host after calling withPath() or withQuery()).
    • +
    • Fixed bug (\Uri\WhatWg\Url crashes (SEGV) when parsing malformed URL due to Lexbor memory corruption).
    • +
  • +
  • LibXML: +
      +
    • Fix some deprecations on newer libxml versions regarding input buffer/parser handling.
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (Regression breaks mysql connexion using an IPv6 address enclosed in square brackets).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (opcache.file_cache broken with full interned string buffer).
    • +
  • +
  • PDO: +
      +
    • Fixed bug (PDO::FETCH_CLASSTYPE ignores $constructorArgs in PHP 8.5.0).
    • +
    • Fixed (PDO quoting result null deref). (CVE-2025-14180)
    • +
  • +
  • Phar: +
      +
    • Fixed bug (Phar does not respect case-insensitiveness of __halt_compiler() when reading stub).
    • +
    • Fix broken return value of fflush() for phar file entries.
    • +
    • Fix assertion failure when fseeking a phar file out of bounds.
    • +
  • +
  • PHPDBG: +
      +
    • Fixed ZPP type violation in phpdbg_get_executable() and phpdbg_end_oplog().
    • +
  • +
  • SPL: +
      +
    • Fixed bug (SplFixedArray incorrectly handles references in deserialization).
    • +
  • +
  • Standard: +
      +
    • Fix memory leak in array_diff() with custom type checks.
    • +
    • Fixed bug (Stack overflow in http_build_query via deep structures).
    • +
    • Fixed (Null byte termination in dns_get_record()).
    • +
    • Fixed (Heap buffer overflow in array_merge()). (CVE-2025-14178)
    • +
    • Fixed (Information Leak of Memory in getimagesize). (CVE-2025-14177)
    • +
  • +
  • URI: +
      +
    • Fixed bug (ext/uri incorrectly throws ValueError when encountering null byte).
    • +
    • Fixed CVE-2025-67899 (uriparser through 0.9.9 allows unbounded recursion and stack consumption).
    • +
  • +
  • XML: +
      +
    • Fixed bug (xml_set_default_handler() does not properly handle special characters in attributes when passing data to callback).
    • +
  • +
  • Zip: +
      +
    • Fix crash in property existence test.
    • +
    • Don't truncate return value of zip_fread() with user sizes.
    • +
  • +
  • Zlib: +
      +
    • Fix assertion failures resulting in crashes with stream filter object parameters.
    • +
  • +
+
+ + + +
+

Version 8.5.0

+ +
  • Core: +
      +
    • Added the #[\NoDiscard] attribute to indicate that a function's return value is important and should be consumed.
    • +
    • Added the (void) cast to indicate that not using a value is intentional.
    • +
    • Added get_error_handler(), get_exception_handler() functions.
    • +
    • Added support for casts in constant expressions.
    • +
    • Added the pipe (|>) operator.
    • +
    • Added the #[\DelayedTargetValidation] attribute to delay target errors for internal attributes from compile time to runtime.
    • +
    • Added support for `final` with constructor property promotion.
    • +
    • Added support for configuring the URI parser for the FTP/FTPS as well as the SSL/TLS stream wrappers as described in https://wiki.php.net/rfc/url_parsing_api#plugability.
    • +
    • Added PHP_BUILD_PROVIDER constant.
    • +
    • Added PHP_BUILD_DATE constant.
    • +
    • Added support for Closures and first class callables in constant expressions.
    • +
    • Add support for backtraces for fatal errors.
    • +
    • Add clone-with support to the clone() function.
    • +
    • Add RFC 3986 and WHATWG URL compliant APIs for URL parsing and manipulation (kocsismate, timwolla)
    • +
    • Fixed AST printing for immediately invoked Closure.
    • +
    • Properly handle __debugInfo() returning an array reference.
    • +
    • Properly handle reference return value from __toString().
    • +
    • Improved error message of UnhandledMatchError for zend.exception_string_param_max_len=0.
    • +
    • Fixed bug and (Bind traits before parent class).
    • +
    • Fixed bug (memory_limit is not always limited by max_memory_limit).
    • +
    • Fixed bug (Stale EG(opline_before_exception) pointer through eval).
    • +
    • Fixed bug (Missing new Foo(...) error in constant expressions).
    • +
    • Fixed bug (Don't bail when closing resources on shutdown).
    • +
    • Fixed bug (Accessing overridden private property in get_object_vars() triggers assertion error).
    • +
    • Fix OSS-Fuzz #447521098 (Fatal error during sccp shift eval).
    • +
    • Fixed bug (Broken build on *BSD with MSAN).
    • +
    • Fixed bug (Cross-compilation with musl C library).
    • +
    • Fixed bug (object_properties_load() bypasses readonly property checks).
    • +
    • Fixed hard_timeout with --enable-zend-max-execution-timers.
    • +
    • Fixed bug (Incorrect HASH_FLAG_HAS_EMPTY_IND flag on userland array).
    • +
    • Fixed bug (register_argc_argv deprecation emitted twice when using OPcache).
    • +
    • Fixed bug (error_log php.ini cannot be unset when open_basedir is configured).
    • +
    • Fixed bug (Allow empty statements before declare(strict_types)).
    • +
    • Fixed bug (CGI with auto_globals_jit=0 causes uouv).
    • +
    • Fixed bug (Stale array iterator pointer).
    • +
    • Fixed bug (zend_ssa_range_widening may fail to converge).
    • +
    • Fixed bug (PHP_EXPAND_PATH broken with bash 5.3.0).
    • +
    • Fixed bug (Repeated inclusion of file with __halt_compiler() triggers "Constant already defined" warning).
    • +
    • Fixed bug (pipe operator fails to correctly handle returning by reference).
    • +
    • Fixed bug (Wrong lineno in property error with constructor property promotion).
    • +
    • Fixed bug (Relax missing trait fatal error to error exception).
    • +
    • Fixed bug (NULL-ptr dereference when using register_tick_function in destructor).
    • +
    • Fixed bug (Improve "expecting token" error for ampersand).
    • +
    • The report_memleaks INI directive has been deprecated.
    • +
    • Fixed OSS-Fuzz #439125710 (Pipe cannot be used in write context).
    • +
    • Fixed bug (Shared memory violation on property inheritance).
    • +
    • Fixed bug (GC treats ZEND_WEAKREF_TAG_MAP references as WeakMap references).
    • +
    • Fixed bug (Don't substitute self/parent with anonymous class).
    • +
    • Fix support for non-userland stream notifiers.
    • +
    • Fixed bug (Operands may be being released during comparison).
    • +
    • Fixed bug (Generator can be resumed while fetching next value from delegated Generator).
    • +
    • Fixed bug (Calling Generator::throw() on a running generator with a non-Generator delegate crashes).
    • +
    • Fix OSS-Fuzz #427814452 (pipe compilation fails with assert).
    • +
    • Fixed bug (\array and \callable should not be usable in class_alias).
    • +
    • Use `clock_gettime_nsec_np()` for high resolution timer on macOS if available.
    • +
    • Make `clone()` a function.
    • +
    • Introduced the TAILCALL VM, enabled by default when compiling with Clang>=19 on x86_64 or aarch64.
    • +
    • Enacted the follow-up phase of the "Path to Saner Increment/Decrement operators" RFC, meaning that incrementing non-numeric strings is now deprecated. (Girgias).
    • +
    • Various closure binding issues are now deprecated.
    • +
    • Constant redeclaration has been deprecated.
    • +
    • Marks the stack as non-executable on Haiku.
    • +
    • Deriving $_SERVER['argc'] and $_SERVER['argv'] from the query string is now deprecated.
    • +
    • Using null as an array offset or when calling array_key_exists() is now deprecated.
    • +
    • The disable_classes INI directive has been removed.
    • +
    • The locally predefined variable $http_response_header is deprecated.
    • +
    • Non-canonical cast names (boolean), (integer), (double), and (binary) have been deprecated.
    • +
    • The $exclude_disabled parameter of the get_defined_functions() function has been deprecated, as it no longer has any effect since PHP 8.0.
    • +
    • Terminating case statements with a semicolon instead of a colon has been deprecated.
    • +
    • The backtick operator as an alias for shell_exec() has been deprecated.
    • +
    • Returning null from __debugInfo() has been deprecated.
    • +
    • Support #[\Override] on properties.
    • +
    • Destructing non-array values (other than NULL) using [] or list() now emits a warning.
    • +
    • Casting floats that are not representable as ints now emits a warning.
    • +
    • Casting NAN to other types now emits a warning.
    • +
    • Implement (Enhance zend_dump_op_array to properly represent non-printable characters in string literals).
    • +
    • Fixed bug (Engine UAF with reference assign and dtor).
    • +
    • Do not use RTLD_DEEPBIND if dlmopen is available.
    • +
  • +
  • BCMath: +
      +
    • Simplify `bc_divide()` code.
    • +
    • If the result is 0, n_scale is set to 0.
    • +
    • If size of BC_VECTOR array is within 64 bytes, stack area is now used.
    • +
    • Fixed bug (Power of 0 of BcMath number causes UB).
    • +
  • +
  • Bz2: +
      +
    • Fixed bug (Broken bzopen() stream mode validation).
    • +
  • +
  • CLI: +
      +
    • Add --ini=diff to print INI settings changed from the builtin default.
    • +
    • Drop support for -z CLI/CGI flag.
    • +
    • Fixed - development server 404 page does not adapt to mobiles.
    • +
    • Fix useless "Failed to poll event" error logs due to EAGAIN in CLI server with PHP_CLI_SERVER_WORKERS.
    • +
    • Fixed bug (Improve error message on listening error with IPv6 address).
    • +
  • +
  • COM: +
      +
    • Fixed property access of PHP objects wrapped in variant.
    • +
    • Fixed method calls for PHP objects wrapped in variant.
    • +
  • +
  • Curl: +
      +
    • Added CURLFOLLOW_ALL, CURLFOLLOW_OBEYCODE and CURLFOLLOW_FIRSTONLY values for CURLOPT_FOLLOWLOCATION curl_easy_setopt option.
    • +
    • Added curl_multi_get_handles().
    • +
    • Added curl_share_init_persistent().
    • +
    • Added CURLINFO_USED_PROXY, CURLINFO_HTTPAUTH_USED, and CURLINFO_PROXYAUTH_USED support to curl_getinfo.
    • +
    • Add support for CURLINFO_CONN_ID in curl_getinfo() (thecaliskan)
    • +
    • Add support for CURLINFO_QUEUE_TIME_T in curl_getinfo() (thecaliskan)
    • +
    • Add support for CURLOPT_SSL_SIGNATURE_ALGORITHMS.
    • +
    • The curl_close() function has been deprecated.
    • +
    • The curl_share_close() function has been deprecated.
    • +
    • Fix cloning of CURLOPT_POSTFIELDS when using the clone operator instead of the curl_copy_handle() function to clone a CurlHandle.
    • +
  • +
  • Date: +
      +
    • Fix undefined behaviour problems regarding integer overflow in extreme edge cases.
    • +
    • The DATE_RFC7231 and DateTimeInterface::RFC7231 constants have been deprecated.
    • +
    • Fixed date_sunrise() and date_sunset() with partial-hour UTC offset.
    • +
    • Fixed : "P" format for ::createFromFormat swallows string literals.
    • +
    • The __wakeup() magic method of DateTimeInterface, DateTime, DateTimeImmutable, DateTimeZone, DateInterval, and DatePeriod has been deprecated in favour of the __unserialize() magic method.
    • +
  • +
  • DOM: +
      +
    • Added Dom\Element::$outerHTML.
    • +
    • Added Dom\Element::insertAdjacentHTML().
    • +
    • Added $children property to ParentNode implementations.
    • +
    • Make cloning DOM node lists, maps, and collections fail.
    • +
    • Added Dom\Element::getElementsByClassName().
    • +
    • Fixed bug (\Dom\HTMLDocument querySelectorAll selecting only the first when using ~ and :has).
    • +
    • Fix getNamedItemNS() incorrect namespace check.
    • +
  • +
  • Enchant: +
      +
    • Added enchant_dict_remove_from_session().
    • +
    • Added enchant_dict_remove().
    • +
    • Fix missing empty string checks.
    • +
  • +
  • EXIF: +
      +
    • Add OffsetTime* Exif tags.
    • +
    • Added support to retrieve Exif from HEIF file.
    • +
    • Fix OSS-Fuzz #442954659 (zero-size box in HEIF file causes infinite loop).
    • +
    • Fix OSS-Fuzz #442954659 (Crash in exif_scan_HEIF_header).
    • +
    • Various hardening fixes to HEIF parsing.
    • +
  • +
  • FileInfo: +
      +
    • The finfo_close() function has been deprecated.
    • +
    • The $context parameter of the finfo_buffer() function has been deprecated as it is ignored.
    • +
    • Upgrade to file 5.46.
    • +
    • Change return type of finfo_close() to true.
    • +
  • +
  • Filter: +
      +
    • Added support for configuring the URI parser for FILTER_VALIDATE_URL as described in https://wiki.php.net/rfc/url_parsing_api#plugability.
    • +
    • Fixed bug (filter_var_array with FILTER_VALIDATE_INT|FILTER_NULL_ON_FAILURE should emit warning for invalid filter usage).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (Decode SCRIPT_FILENAME issue in php 8.5).
    • +
    • Fixed bug (PHP 8.5 FPM access log lines also go to STDERR).
    • +
    • Fixed (FPM with httpd ProxyPass does not decode script path).
    • +
    • Make FPM access log limit configurable using log_limit.
    • +
    • Fixed failed debug assertion when php_admin_value setting fails.
    • +
    • Fixed (post_max_size evaluates .user.ini too late in php-fpm).
    • +
  • +
  • GD: +
      +
    • (Transparent artifacts when using imagerotate).
    • +
    • (ZTS GD fails to find system TrueType font).
    • +
    • Fix incorrect comparison with result of php_stream_can_cast().
    • +
    • The imagedestroy() function has been deprecated.
    • +
  • +
  • Iconv: +
      +
    • Extends the ICONV_CONST preprocessor for illumos/solaris.
    • +
  • +
  • Intl: +
      +
    • Bumped ICU requirement to ICU >= 57.1.
    • +
    • IntlDateFormatter::setTimeZone()/datefmt_set_timezone() throws an exception with uninitialised classes or clone failure.
    • +
    • Added DECIMAL_COMPACT_SHORT/DECIMAL_COMPACT_LONG for NumberFormatter class.
    • +
    • Added Locale::isRightToLeft to check if a locale is written right to left.
    • +
    • Added null bytes presence in locale inputs for Locale class.
    • +
    • Added grapheme_levenshtein() function.
    • +
    • Added Locale::addLikelySubtags/Locale::minimizeSubtags to handle adding/removing likely subtags to a locale.
    • +
    • Added IntlListFormatter class to format a list of items with a locale, operands types and units.
    • +
    • Added grapheme_strpos(), grapheme_stripos(), grapheme_strrpos(), grapheme_strripos(), grapheme_substr(), grapheme_strstr(), grapheme_stristr() and grapheme_levenshtein() functions add $locale parameter (Yuya Hamada).
    • +
    • Fixed bug (Fix locale strings canonicalization for IntlDateFormatter and NumberFormatter).
    • +
    • Fixed bug ([intl] Weird numeric sort in Collator).
    • +
    • Fix return value on failure for resourcebundle count handler.
    • +
    • Fixed bug (PGO builds of shared ext-intl are broken).
    • +
    • Intl's internal error mechanism has been modernized so that it indicates more accurately which call site caused what error. Moreover, some ext/date exceptions have been wrapped inside a IntlException now.
    • +
    • The intl.error_level INI setting has been deprecated.
    • +
  • +
  • LDAP: +
      +
    • Allow ldap_get_option to retrieve global option by allowing NULL for connection instance ($ldap).
    • +
  • +
  • MBstring: +
      +
    • Updated Unicode data tables to Unicode 17.0.
    • +
  • +
  • MySQLi: +
      +
    • Fixed bugs and (calling mysqli::__construct twice).
    • +
    • The mysqli_execute() alias function has been deprecated.
    • +
  • +
  • MySQLnd: +
      +
    • Added mysqlnd.collect_memory_statistics to ini quick reference.
    • +
  • +
  • ODBC: +
      +
    • Removed driver-specific build flags and support.
    • +
    • Remove ODBCVER and assume ODBC 3.5.
    • +
  • +
  • Opcache: +
      +
    • Make OPcache non-optional (Arnaud, timwolla)
    • +
    • Added opcache.file_cache_read_only.
    • +
    • Updated default value of opcache.jit_hot_loop.
    • +
    • Log a warning when opcache lock file permissions could not be changed.
    • +
    • Fixed bug (heap buffer overflow in jit).
    • +
    • Partially fixed bug (Avoid calling wrong function when reusing file caches across differing environments).
    • +
    • Disallow changing opcache.memory_consumption when SHM is already set up.
    • +
    • Fixed bug (Compiling opcache statically into ZTS PHP fails).
    • +
    • Fixed bug (OPcache bypasses the user-defined error handler for deprecations).
    • +
    • Fixed bug (opcache build failure).
    • +
    • Fixed bug (access to uninitialized vars in preload_load()).
    • +
    • Fixed bug (JIT broken in ZTS builds on MacOS 15).
    • +
    • Fixed bug (JIT 1205 segfault on large file compiled in subprocess).
    • +
    • Fixed segfault in function JIT due to NAN to bool warning.
    • +
    • Fixed bug (Double-free of EG(errors)/persistent_script->warnings on persist of already persisted file).
    • +
    • Fixed bug (race condition in zend_runtime_jit(), zend_jit_hot_func()).
    • +
    • Fixed bug (assertion failure in zend_jit_trace_type_to_info_ex).
    • +
    • Fixed bug (function JIT may not deref property value).
    • +
    • Fixed bug (Incorrect opline after deoptimization).
    • +
    • Fixed bug (Wrong JIT stack setup on aarch64/clang).
    • +
    • Fixed bug (Broken opcache.huge_code_pages).
    • +
    • Fixed bug (Build fails on non-glibc/musl/freebsd/macos/win platforms).
    • +
    • Fixed ZTS OPcache build on Cygwin.
    • +
    • Fixed bug (JIT variable not stored before YIELD).
    • +
  • +
  • OpenSSL: +
      +
    • Added openssl.libctx INI that allows to select the OpenSSL library context type and convert various parts of the extension to use the custom libctx.
    • +
    • Add $digest_algo parameter to openssl_public_encrypt() and openssl_private_decrypt() functions.
    • +
    • Implement #81724 (openssl_cms_encrypt only allows specific ciphers).
    • +
    • Implement #80495 (Enable to set padding in openssl_(sign|verify).
    • +
    • Implement #47728 (openssl_pkcs7_sign ignores new openssl flags).
    • +
    • Fixed bug (openssl_get_cipher_methods inconsistent with fetching).
    • +
    • Fixed build when --with-openssl-legacy-provider set.
    • +
    • Fixed bug (8.5 | Regression in openssl_sign() - support for alias algorithms appears to be broken).
    • +
    • The $key_length parameter for openssl_pkey_derive() has been deprecated.
    • +
  • +
  • Output: +
      +
    • Fixed calculation of aligned buffer size.
    • +
  • +
  • PCNTL: +
      +
    • Extend pcntl_waitid with rusage parameter.
    • +
  • +
  • PCRE: +
      +
    • Remove PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK from pcre compile options.
    • +
  • +
  • PDO: +
      +
    • Fixed bug (Incorrect class name in deprecation message for PDO mixins).
    • +
    • Driver specific methods and constants in the PDO class are now deprecated.
    • +
    • The "uri:" DSN scheme has been deprecated due to security concerns with DSNs coming from remote URIs.
    • +
  • +
  • PDO_ODBC: +
      +
    • Fetch larger block sizes and better handle SQL_NO_TOTAL when calling SQLGetData.
    • +
  • +
  • PDO_PGSQL: +
      +
    • Added Iterable support for PDO::pgsqlCopyFromArray.
    • +
    • Implement Pdo\Pgsql::setAttribute(PDO::ATTR_PREFETCH, 0) or Pdo\Pgsql::prepare(…, [ PDO::ATTR_PREFETCH => 0 ]) make fetch() lazy instead of storing the whole result set in memory (Guillaume Outters)
    • +
  • +
  • PDO_SQLITE: +
      +
    • Add PDO\Sqlite::ATTR_TRANSACTION_MODE connection attribute.
    • +
    • Implement : Add setAuthorizer to Pdo\Sqlite.
    • +
    • PDO::sqliteCreateCollation now throws a TypeError if the callback has a wrong return type.
    • +
    • Added Pdo_Sqlite::ATTR_BUSY_STATEMENT constant to check if a statement is currently executing.
    • +
    • Added Pdo_Sqlite::ATTR_EXPLAIN_STATEMENT constant to set a statement in either EXPLAIN_MODE_PREPARED, EXPLAIN_MODE_EXPLAIN, EXPLAIN_MODE_EXPLAIN_QUERY_PLAN modes.
    • +
    • Fix bug (sqlite PDO::quote silently corrupts strings with null bytes) by throwing on null bytes.
    • +
  • +
  • PGSQL: +
      +
    • Added pg_close_stmt to close a prepared statement while allowing its name to be reused.
    • +
    • Added Iterable support for pgsql_copy_from.
    • +
    • pg_connect checks if connection_string contains any null byte, pg_close_stmt check if the statement contains any null byte.
    • +
    • Added pg_service to get the connection current service identifier.
    • +
    • Fix segfaults when attempting to fetch row into a non-instantiable class name.
    • +
  • +
  • Phar: +
      +
    • Fix potential buffer length truncation due to usage of type int instead of type size_t.
    • +
    • Fixed memory leaks when verifying OpenSSL signature.
    • +
  • +
  • POSIX: +
      +
    • Added POSIX_SC_OPEN_MAX constant to get the number of file descriptors a process can handle.
    • +
    • posix_ttyname() sets last_error to EBADF on invalid file descriptors, posix_isatty() raises E_WARNING on invalid file descriptors, posix_fpathconf checks invalid file descriptors.
    • +
    • posix_kill and posix_setpgid throws a ValueError on invalid process_id.
    • +
    • posix_setpgid throws a ValueError on invalid process_group_id, posix_setrlimit throws a ValueError on invalid soft_limit and hard_limit arguments.
    • +
  • +
  • Random: +
      +
    • Moves from /dev/urandom usage to arc4random_buf on Haiku.
    • +
  • +
  • Reflection: +
      +
    • Added ReflectionConstant::getExtension() and ::getExtensionName().
    • +
    • Added ReflectionProperty::getMangledName() method.
    • +
    • ReflectionConstant is no longer final.
    • +
    • The setAccessible() methods of various Reflection objects have been deprecated, as those no longer have an effect.
    • +
    • ReflectionClass::getConstant() for constants that do not exist has been deprecated.
    • +
    • ReflectionProperty::getDefaultValue() for properties without default values has been deprecated.
    • +
    • Fixed bug (ReflectionClass::getStaticPropertyValue() returns UNDEF zval for uninitialized typed properties).
    • +
    • Fixed bug (ReflectionClass::__toString() should have better output for enums).
    • +
    • Fix (getModifierNames() not reporting asymmetric visibility).
    • +
    • Fixed bug (Reflection: have some indication of property hooks in `_property_string()`).
    • +
    • Fixed bug (ReflectionNamedType::getName() prints nullable type when retrieved from ReflectionProperty::getSettableType()).
    • +
    • Fixed bug (ReflectionClass::isIterable() incorrectly returns true for classes with property hooks).
    • +
  • +
  • SAPI: +
      +
    • Fixed bug and #81451: http_response_code() does not override the status code generated by header().
    • +
  • +
  • Session: +
      +
    • session_start() throws a ValueError on option argument if not a hashmap or a TypeError if read_and_close value is not compatible with int.
    • +
    • Added support for partitioned cookies.
    • +
    • Fix RC violation of session SID constant deprecation attribute.
    • +
    • Fixed : build broken with ZEND_STRL usage with memcpy when implemented as macro.
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (SimpleXML xpath should warn when returning other return types than node lists).
    • +
  • +
  • SNMP: +
      +
    • snmpget, snmpset, snmp_get2, snmp_set2, snmp_get3, snmp_set3 and SNMP::__construct() throw an exception on invalid hostname, community timeout and retries arguments.
    • +
  • +
  • SOAP: +
      +
    • Added support for configuring the URI parser for SoapClient::__doRequest() as described in https://wiki.php.net/rfc/url_parsing_api#plugability.
    • +
    • Implement request #55503 (Extend __getTypes to support enumerations).
    • +
    • Implement request #61105 (Support Soap 1.2 SoapFault Reason Text lang attribute).
    • +
    • (SoapServer calls wrong function, although "SOAP action" header is correct).
    • +
    • Fix namespace handling of WSDL and XML schema in SOAP, fixing at least and bug #68576.
    • +
    • (Segmentation fault on invalid WSDL cache).
    • +
    • Fixed bug (SIGSEGV due to uninitialized soap_globals->lang_en).
    • +
    • Fixed bug (Segfault when spawning new thread in soap extension).
    • +
  • +
  • Sockets: +
      +
    • Added IPPROTO_ICMP/IPPROTO_ICMPV6 to create raw socket for ICMP usage.
    • +
    • Added TCP_FUNCTION_BLK to change the TCP stack algorithm on FreeBSD.
    • +
    • Added IP_BINDANY for a socket to bind to any address.
    • +
    • Added SO_BUSY_POOL to reduce packets poll latency.
    • +
    • Added UDP_SEGMENT support to optimise multiple large datagrams over UDP if the kernel and hardware supports it.
    • +
    • Added SHUT_RD, SHUT_WR and SHUT_RDWR constants for socket_shutdown().
    • +
    • Added TCP_FUNCTION_ALIAS, TCP_REUSPORT_LB_NUMA, TCP_REUSPORT_LB_NUMA_NODOM, TCP_REUSPORT_LB_CURDOM, TCP_BBR_ALGORITHM constants.
    • +
    • socket_set_option() catches possible overflow with SO_RCVTIMEO/SO_SNDTIMEO with timeout setting on windows.
    • +
    • socket_create_listen() throws an exception on invalid port value.
    • +
    • socket_bind() throws an exception on invalid port value.
    • +
    • socket_sendto() throws an exception on invalid port value.
    • +
    • socket_addrinfo_lookup throws an exception on invalid hints value types.
    • +
    • socket_addrinfo_lookup throws an exception if any of the hints value overflows.
    • +
    • socket_addrinfo_lookup throws an exception if one or more hints entries has an index as numeric.
    • +
    • socket_set_option with the options MCAST_LEAVE_GROUP/MCAST_LEAVE_SOURCE_GROUP will throw an exception if its value is not a valid array/object.
    • +
    • socket_getsockname/socket_create/socket_bind handled AF_PACKET family socket.
    • +
    • socket_set_option for multicast context throws a ValueError when the socket family is not of AF_INET/AF_INET6 family.
    • +
  • +
  • Sodium: +
      +
    • Fix overall theoretical overflows on zend_string buffer allocations.
    • +
  • +
  • SPL: +
      +
    • Fixed bug (SplHeap/SplPriorityQueue serialization exposes INDIRECTs).
    • +
    • Improve __unserialize() hardening for SplHeap/SplPriorityQueue.
    • +
    • Deprecate ArrayObject and ArrayIterator with objects.
    • +
    • Unregistering all autoloaders by passing the spl_autoload_call() function as a callback argument to spl_autoload_unregister() has been deprecated. Instead if this is needed, one should iterate over the return value of spl_autoload_functions() and call spl_autoload_unregister() on each value.
    • +
    • The SplObjectStorage::contains(), SplObjectStorage::attach(), and SplObjectStorage::detach() methods have been deprecated in favour of SplObjectStorage::offsetExists(), SplObjectStorage::offsetSet(), and SplObjectStorage::offsetUnset() respectively.
    • +
  • +
  • Sqlite: +
      +
    • Added Sqlite3Stmt::busy to check if a statement is still being executed.
    • +
    • Added Sqlite3Stmt::explain to produce an explain query plan from the statement.
    • +
    • Added Sqlite3Result::fetchAll to return all results at once from a query.
    • +
  • +
  • Standard: +
      +
    • Add HEIF/HEIC support to getimagesize.
    • +
    • Added support for partitioned cookies.
    • +
    • Implement #71517 (Implement SVG support for getimagesize() and friends).
    • +
    • Implement : Add support for new INI mail.cr_lf_mode.
    • +
    • Optimized PHP html_entity_decode function.
    • +
    • Minor optimization to array_chunk().
    • +
    • Optimized pack().
    • +
    • Fixed crypt() tests on musl when using --with-external-libcrypt (Michael Orlitzky).
    • +
    • Fixed bug (is_callable(func(...), callable_name: $name) for first class callables returns wrong name).
    • +
    • Added array_first() and array_last().
    • +
    • Fixed bug (setlocale's 2nd and 3rd argument ignores strict_types).
    • +
    • Fixed exit code handling of sendmail cmd and added warnings.
    • +
    • Fixed bug (printf: empty precision is interpreted as precision 6, not as precision 0).
    • +
    • Fixed bug (mail() heap overflow with an empty message in lf mode).
    • +
    • Fixed bug (AVIF images misdetected as HEIF after introducing HEIF support in getimagesize()).
    • +
    • Fixed bug (reset internal pointer earlier while splicing array while COW violation flag is still set).
    • +
    • Fixed bug (leaks in var_dump() and debug_zval_dump()).
    • +
    • Fixed (SplPriorityQueue, SplMinHeap, and SplMaxHeap lost their data on serialize()).
    • +
    • Fixed (Deprecation warnings in functions taking as argument).
    • +
    • Fixed bug (Avoid integer overflow when using a small offset and PHP_INT_MAX with LimitIterator).
    • +
    • Fixed bug (#[\Attribute] validation should error on trait/interface/enum/abstract class).
    • +
    • Fixed bug (setlocale($type, NULL) should not be deprecated).
    • +
    • Fixed bug (UAF during array_splice).
    • +
    • Passing strings which are not one byte long to ord() is now deprecated.
    • +
    • Passing integers outside the interval [0, 255] to chr() is now deprecated.
    • +
    • The socket_set_timeout() alias function has been deprecated.
    • +
    • Passing null to readdir(), rewinddir(), and closedir() to use the last opened directory has been deprecated.
    • +
  • +
  • Streams: +
      +
    • Fixed bug (stream_select() timeout useless for pipes on Windows).
    • +
    • Fixed bug : XP_SOCKET XP_SSL (Socket stream modules): Incorrect condition for Win32/Win64.
    • +
    • Fixed bug (Closing a userspace stream inside a userspace handler causes heap corruption).
    • +
    • Avoid double conversion to string in php_userstreamop_readdir().
    • +
  • +
  • Tests: +
      +
    • Allow to shuffle tests even in non-parallel mode.
    • +
  • +
  • Tidy: +
      +
    • tidy::__construct/parseFile/parseString methods throw an exception if the configuration argument is invalid.
    • +
    • Fixed (improved tidyOptGetCategory detection).
    • +
  • +
  • Tokenizer: +
      +
    • Fixed bug (Corrupted result after recursive tokenization during token_get_all()).
    • +
  • +
  • URI: +
      +
    • Add new URI extension.
    • +
  • +
  • Windows: +
      +
    • Fixed bug (Improper long path support for relative paths).
    • +
    • Fixed bug (Windows phpize builds ignore source subfolders).
    • +
    • Fix (_get_osfhandle asserts in debug mode when given a socket).
    • +
  • +
  • XML: +
      +
    • The xml_parser_free() function has been deprecated.
    • +
  • +
  • XMLWriter: +
      +
    • Improved performance and reduce memory consumption.
    • +
  • +
  • XSL: +
      +
    • Implement request #30622 (make $namespace parameter functional).
    • +
  • +
  • Zlib: +
      +
    • gzfile, gzopen and readgzfile, their "use_include_path" argument is now a boolean.
    • +
    • Fixed bug (gzopen() does not use the default stream context when opening HTTP URLs).
    • +
    • Implemented (zlib streams should support locking).
    • +
  • +
  • Zip: +
      +
    • Fixed missing zend_release_fcall_info_cache on the following methods ZipArchive::registerProgressCallback() and ZipArchive::registerCancelCallback() on failure.
    • +
  • +
+
+ + + + + +
+

Version 8.4.16

+ +
  • Core: +
      +
    • Sync all boost.context files with release 1.86.0.
    • +
    • Fixed bug (SensitiveParameter doesn't work for named argument passing to variadic parameter).
    • +
    • Fixed bug (use-after-destroy during userland stream_close()).
    • +
  • +
  • Bz2: +
      +
    • Fix assertion failures resulting in crashes with stream filter object parameters.
    • +
  • +
  • Date: +
      +
    • Fix crashes when trying to instantiate uninstantiable classes via date static constructors.
    • +
  • +
  • DOM: +
      +
    • Fix memory leak when edge case is hit when registering xpath callback.
    • +
    • Fixed bug (querySelector and querySelectorAll requires elements in $selectors to be lowercase).
    • +
    • Fix missing NUL byte check on C14NFile().
    • +
  • +
  • Fibers: +
      +
    • Fixed bug (ASAN stack overflow with fiber.stack_size INI small value).
    • +
  • +
  • FTP: +
      +
    • Fixed bug (ftp_connect overflow on timeout).
    • +
  • +
  • GD: +
      +
    • Fixed bug (imagegammacorrect out of range input/output values).
    • +
    • Fixed bug (imagescale overflow with large height values).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (Spoofchecker::setRestrictionLevel() error message suggests missing constants).
    • +
  • +
  • LibXML: +
      +
    • Fix some deprecations on newer libxml versions regarding input buffer/parser handling.
    • +
  • +
  • MbString: +
      +
    • Fixed bug (SLES15 compile error with mbstring oniguruma).
    • +
    • Fixed bug (mbstring compile warning due to non-strings).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (Regression breaks mysql connexion using an IPv6 address enclosed in square brackets).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (opcache.file_cache broken with full interned string buffer).
    • +
  • +
  • PDO: +
      +
    • Fixed (PDO quoting result null deref). (CVE-2025-14180)
    • +
  • +
  • Phar: +
      +
    • Fixed bug (Phar does not respect case-insensitiveness of __halt_compiler() when reading stub).
    • +
    • Fix broken return value of fflush() for phar file entries.
    • +
    • Fix assertion failure when fseeking a phar file out of bounds.
    • +
  • +
  • PHPDBG: +
      +
    • Fixed ZPP type violation in phpdbg_get_executable() and phpdbg_end_oplog().
    • +
  • +
  • SPL: +
      +
    • Fixed bug (SplFixedArray incorrectly handles references in deserialization).
    • +
  • +
  • Standard: +
      +
    • Fix memory leak in array_diff() with custom type checks.
    • +
    • Fixed bug (Stack overflow in http_build_query via deep structures).
    • +
    • Fixed (Null byte termination in dns_get_record()).
    • +
    • Fixed (Heap buffer overflow in array_merge()). (CVE-2025-14178)
    • +
    • Fixed (Information Leak of Memory in getimagesize). (CVE-2025-14177)
    • +
  • +
  • Tidy: +
      +
    • Fixed bug (PHP with tidy and custom-tags).
    • +
  • +
  • XML: +
      +
    • Fixed bug (xml_set_default_handler() does not properly handle special characters in attributes when passing data to callback).
    • +
  • +
  • Zip: +
      +
    • Fix crash in property existence test.
    • +
    • Don't truncate return value of zip_fread() with user sizes.
    • +
  • +
  • Zlib: +
      +
    • Fix assertion failures resulting in crashes with stream filter object parameters.
    • +
  • +
+
+ + + +
+

Version 8.4.15

+ +
  • Core: +
      +
    • Fixed bug (CGI with auto_globals_jit=0 causes uouv).
    • +
    • Fixed bug (Assertion failure in WeakMap offset operations on reference).
    • +
    • Fixed bug (Assertion failure when combining lazy object get_properties exception with foreach loop).
    • +
    • Fixed bug (Don't bail when closing resources on shutdown).
    • +
    • Fixed bug (Accessing overridden private property in get_object_vars() triggers assertion error).
    • +
    • Fixed bug (Broken parent hook call with named arguments).
    • +
    • Fixed bug (Stale EG(opline_before_exception) pointer through eval).
    • +
  • +
  • DOM: +
      +
    • Partially fixed bug (DOM classes do not allow __debugInfo() overrides to work).
    • +
    • Fixed bug (\Dom\Document::getElementById() is inconsistent after nodes are removed).
    • +
  • +
  • Exif: +
      +
    • Fix possible memory leak when tag is empty.
    • +
  • +
  • FPM: +
      +
    • Fixed bug (fpm_status_export_to_zval segfault for parallel execution).
    • +
  • +
  • FTP: +
      +
    • Fixed bug (FTP with SSL: ftp_fput(): Connection timed out on successful writes).
    • +
  • +
  • GD: +
      +
    • Fixed bug (Return type violation in imagefilter when an invalid filter is provided).
    • +
  • +
  • Intl: +
      +
    • Fix memory leak on error in locale_filter_matches().
    • +
  • +
  • LibXML: +
      +
    • Fix not thread safe schema/relaxng calls.
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (SSL certificate verification fails (port doubled)).
    • +
    • Fixed bug (getColumnMeta() for JSON-column in MySQL).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (access to uninitialized vars in preload_load()).
    • +
    • Fixed bug (JIT broken in ZTS builds on MacOS 15).
    • +
    • Fixed bug (JIT 1205 segfault on large file compiled in subprocess).
    • +
    • Fixed bug (heap buffer overflow in jit).
    • +
    • Partially fixed bug (Avoid calling wrong function when reusing file caches across differing environments).
    • +
  • +
  • PgSql: +
      +
    • Fix memory leak when first string conversion fails.
    • +
    • Fix segfaults when attempting to fetch row into a non-instantiable class name.
    • +
  • +
  • Phar: +
      +
    • Fix memory leak of argument in webPhar.
    • +
    • Fix memory leak when setAlias() fails.
    • +
    • Fix a bunch of memory leaks in phar_parse_zipfile() error handling.
    • +
    • Fix file descriptor/memory leak when opening central fp fails.
    • +
    • Fix memleak+UAF when opening temp stream in buildFromDirectory() fails.
    • +
    • Fix potential buffer length truncation due to usage of type int instead of type size_t.
    • +
    • Fix memory leak when openssl polyfill returns garbage.
    • +
    • Fix file descriptor leak in phar_zip_flush() on failure.
    • +
    • Fix memory leak when opening temp file fails while trying to open gzip-compressed archive.
    • +
    • Fixed bug (Freeing a phar alias may invalidate PharFileInfo objects).
    • +
  • +
  • Random: +
      +
    • Fix Randomizer::__serialize() w.r.t. INDIRECTs.
    • +
  • +
  • Reflection: +
      +
    • Fixed bug (ReflectionClass::isIterable() incorrectly returns true for classes with property hooks).
    • +
  • +
  • SimpleXML: +
      +
    • Partially fixed bug (SimpleXML does not allow __debugInfo() overrides to work).
    • +
  • +
  • Streams: +
      +
    • Fixed bug : XP_SOCKET XP_SSL (Socket stream modules): Incorrect condition for Win32/Win64.
    • +
  • +
  • Tidy: +
      +
    • Fixed (improved tidyOptGetCategory detection).
    • +
    • Fix UAF in tidy when tidySetErrorBuffer() fails.
    • +
  • +
  • XMLReader: +
      +
    • Fix arginfo/zpp violations when LIBXML_SCHEMAS_ENABLED is not available.
    • +
  • +
  • Windows: +
      +
    • Fix (_get_osfhandle asserts in debug mode when given a socket).
    • +
  • +
+
+ + + +
+

Version 8.4.14

+ +
  • Core: +
      +
    • Fixed bug (object_properties_load() bypasses readonly property checks).
    • +
    • Fixed hard_timeout with --enable-zend-max-execution-timers.
    • +
    • Fixed bug (SCCP causes UAF for return value if both warning and exception are triggered).
    • +
    • Fixed bug (Closure named argument unpacking between temporary closures can cause a crash).
    • +
    • Fixed bug (Incorrect HASH_FLAG_HAS_EMPTY_IND flag on userland array).
    • +
    • Fixed bug (error_log php.ini cannot be unset when open_basedir is configured).
    • +
    • Fixed bug (Broken build on *BSD with MSAN).
    • +
  • +
  • CLI: +
      +
    • Fix useless "Failed to poll event" error logs due to EAGAIN in CLI server with PHP_CLI_SERVER_WORKERS.
    • +
  • +
  • Curl: +
      +
    • Fix cloning of CURLOPT_POSTFIELDS when using the clone operator instead of the curl_copy_handle() function to clone a CurlHandle.
    • +
    • Fix curl build and test failures with version 8.16.
    • +
  • +
  • Date: +
      +
    • Fixed : "P" format for ::createFromFormat swallows string literals.
    • +
  • +
  • DOM: +
      +
    • Fix macro name clash on macOS.
    • +
    • Fixed bug (docker-php-ext-install DOM failed).
    • +
  • +
  • GD: +
      +
    • Fixed (imagefttext() memory leak).
    • +
  • +
  • MySQLnd: +
      +
    • (mysqli compiled with mysqlnd does not take ipv6 adress as parameter).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (assertion failure in zend_jit_trace_type_to_info_ex).
    • +
    • Fixed bug (function JIT may not deref property value).
    • +
    • Fixed bug (race condition in zend_runtime_jit(), zend_jit_hot_func()).
    • +
  • +
  • Phar: +
      +
    • Fix memory leak and invalid continuation after tar header writing fails.
    • +
    • Fix memory leaks when creating temp file fails when applying zip signature.
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (zend_string_init with NULL pointer in simplexml (UB)).
    • +
  • +
  • Soap: +
      +
    • Fixed bug (SoapServer memory leak).
    • +
    • Fixed bug (Array of SoapVar of unknown type causes crash).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Cloning an object breaks serialization recursion).
    • +
    • Fixed bug (Serialize/deserialize loses some data).
    • +
    • Fixed bug (leaks in var_dump() and debug_zval_dump()).
    • +
    • Fixed bug (array_unique assertion failure with RC1 array causing an exception on sort).
    • +
    • Fixed bug (reset internal pointer earlier while splicing array while COW violation flag is still set).
    • +
    • Fixed bug (unable to fseek in /dev/zero and /dev/null).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (Use strerror_r instead of strerror in main).
    • +
    • Fixed bug (Bug #35916 was not completely fixed).
    • +
    • Fixed bug (segmentation when attempting to flush on non seekable stream.
    • +
  • +
  • XMLReader: +
      +
    • Fixed bug (XMLReader leak on RelaxNG schema failure).
    • +
  • +
  • Zip: +
      +
    • Fixed bug (Remove pattern overflow in zip addGlob()).
    • +
    • Fixed bug (Memory leak in zip setEncryptionName()/setEncryptionIndex()).
    • +
  • +
+
+ + + +
+

Version 8.4.13

+ +
  • Core: +
      +
    • Fixed bug (Repeated inclusion of file with __halt_compiler() triggers "Constant already defined" warning).
    • +
    • Partially fixed bug (Scanning of string literals >=2GB will fail due to signed int overflow).
    • +
    • Fixed bug (GC treats ZEND_WEAKREF_TAG_MAP references as WeakMap references).
    • +
    • Fixed bug (Stale array iterator pointer).
    • +
    • Fixed bug (zend_ssa_range_widening may fail to converge).
    • +
    • Fixed bug (PHP_EXPAND_PATH broken with bash 5.3.0).
    • +
    • Fixed bug (Assertion failure when error handler throws when accessing a deprecated constant).
    • +
  • +
  • CLI: +
      +
    • Fixed bug (Improve error message on listening error with IPv6 address).
    • +
  • +
  • Date: +
      +
    • Fixed date_sunrise() and date_sunset() with partial-hour UTC offset.
    • +
  • +
  • DBA: +
      +
    • Fixed bug (dba stream resource mismanagement).
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Mitigate libxml2 tree dictionary bug).
    • +
  • +
  • FPM: +
      +
    • Fixed failed debug assertion when php_admin_value setting fails.
    • +
  • +
  • Intl: +
      +
    • Fixed bug (Fix locale strings canonicalization for IntlDateFormatter and NumberFormatter).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (JIT variable not stored before YIELD).
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (Success error message on TLS stream accept failure).
    • +
  • +
  • PGSQL: +
      +
    • Fixed bug (potential use after free when using persistent pgsql connections).
    • +
  • +
  • Phar: +
      +
    • Fixed memory leaks when verifying OpenSSL signature.
    • +
    • Fix memory leak in phar tar temporary file error handling code.
    • +
    • Fix metadata leak when phar convert logic fails.
    • +
    • Fix memory leak on failure in phar_convert_to_other().
    • +
    • Fixed bug (Phar decompression with invalid extension can cause UAF).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (UAF during array_splice).
    • +
    • Fixed bug (Avoid integer overflow when using a small offset and PHP_INT_MAX with LimitIterator).
    • +
  • +
  • Streams: +
      +
    • Remove incorrect call to zval_ptr_dtor() in user_wrapper_metadata().
    • +
    • Fix OSS-Fuzz #385993744.
    • +
  • +
  • Zip: +
      +
    • Fix memory leak in zip when encountering empty glob result.
    • +
  • +
+
+ + + +
+

Version 8.4.12

+ +
  • Core: +
      +
    • Fixed build issue with C++17 and ZEND_STATIC_ASSERT macro.
    • +
    • Fixed bug (Duplicate property slot with hooks and interface property).
    • +
    • Fixed bug (Protected properties are not scoped according to their prototype).
    • +
    • Fixed bug (Coerce numeric string keys from iterators when argument unpacking).
    • +
    • Fixed OSS-Fuzz #434346548 (Failed assertion with throwing __toString in binary const expr).
    • +
    • Fixed bug (Operands may be being released during comparison).
    • +
    • Fixed bug (Unpacking empty packed array into uninitialized array causes assertion failure).
    • +
    • Fixed bug (Generator can be resumed while fetching next value from delegated Generator).
    • +
    • Fixed bug (Calling Generator::throw() on a running generator with a non-Generator delegate crashes).
    • +
    • Fixed bug (Stale array iterator position on rehashing).
    • +
    • Fixed bug (Circumvented type check with return by ref + finally).
    • +
    • Fixed bug (Long match statement can segfault compiler during recursive SSA renaming).
    • +
  • +
  • Calendar: +
      +
    • Fixed bug (integer overflow in calendar.c).
    • +
  • +
  • FTP: +
      +
    • Fix theoretical issues with hrtime() not being available.
    • +
  • +
  • GD: +
      +
    • Fix incorrect comparison with result of php_stream_can_cast().
    • +
  • +
  • Hash: +
      +
    • Fix crash on clone failure.
    • +
  • +
  • Intl: +
      +
    • Fix memleak on failure in collator_get_sort_key().
    • +
    • Fix return value on failure for resourcebundle count handler.
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (additional inheriting of TLS int options).
    • +
  • +
  • LibXML: +
      +
    • Fixed bug (libxml<2.13 segmentation fault caused by php_libxml_node_free).
    • +
  • +
  • MbString: +
      +
    • Fixed bug (mb_list_encodings() can cause crashes on shutdown).
    • +
  • +
  • Opcache: +
      +
    • Reset global pointers to prevent use-after-free in zend_jit_status().
    • +
    • Fix issue with JIT restart and hooks.
    • +
    • Fix crash with dynamic function defs in hooks during preload.
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (OpenSSL backend: incorrect RAND_{load,write}_file() return value check).
    • +
    • Fix error return check of EVP_CIPHER_CTX_ctrl().
    • +
    • Fixed bug (openssl_pkey_derive segfaults for DH derive with low key_length param).
    • +
  • +
  • PDO Pgsql: +
      +
    • Fixed dangling pointer access on _pdo_pgsql_trim_message helper.
    • +
  • +
  • SOAP: +
      +
    • Fixed bug (heap-use-after-free ext/soap/php_encoding.c:299:32 in soap_check_zval_ref).
    • +
  • +
  • Sockets: +
      +
    • Fix some potential crashes on incorrect argument value.
    • +
  • +
  • Standard: +
      +
    • Fixed OSS Fuzz #433303828 (Leak in failed unserialize() with opcache).
    • +
    • Fix theoretical issues with hrtime() not being available.
    • +
    • Fixed bug (Nested array_multisort invocation with error breaks).
    • +
  • +
  • Windows: +
      +
    • Free opened_path when opened_path_len >= MAXPATHLEN.
    • +
  • +
+
+ + + +
+

Version 8.4.11

+ +
  • Calendar: +
      +
    • Fixed jewishtojd overflow on year argument.
    • +
  • +
  • Core: +
      +
    • Fixed bug (Use after free with weakmaps dependent on destruction order).
    • +
    • Fixed bug (Leak when creating cycle in hook).
    • +
    • Fix OSS-Fuzz #427814456.
    • +
    • Fix OSS-Fuzz #428983568 and #428760800.
    • +
    • Fixed bug (-Wuseless-escape warnings emitted by re2c).
    • +
    • Fixed bug (Undefined symbol 'execute_ex' on Windows ARM64).
    • +
  • +
  • Curl: +
      +
    • Fix memory leaks when returning refcounted value from curl callback.
    • +
    • Remove incorrect string release.
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Dom\XMLDocument::createComment() triggers undefined behavior with null byte).
    • +
  • +
  • LDAP: +
      +
    • Fixed ldap_exop/ldap_exop_sync assert triggered on empty request OID.
    • +
  • +
  • MbString: +
      +
    • Fixed bug (integer overflow mb_split).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Internal class aliases can break preloading + JIT).
    • +
    • Fixed bug (JIT function crash when emitting undefined variable warning and opline is not set yet).
    • +
    • Fixed bug (Segmentation fault on unknown address 0x600000000018 in ext/opcache/jit/zend_jit.c).
    • +
    • Fixed bug (SEGV zend_jit_op_array_hot with property hooks and preloading).
    • +
  • +
  • OpenSSL: +
      +
    • (It is not possible to get client peer certificate with stream_socket_server).
    • +
  • +
  • PCNTL: +
      +
    • Fixed bug (Fatal error during shutdown after pcntl_rfork() or pcntl_forkx() with zend-max-execution-timers).
    • +
  • +
  • Phar: +
      +
    • Fix stream double free in phar.
    • +
    • Fix phar crash and file corruption with SplFileObject.
    • +
  • +
  • SOAP: +
      +
    • Fixed bug , bug #81029, bug #47314 (SOAP HTTP socket not closing on object destruction).
    • +
    • Fix memory leak when URL parsing fails in redirect.
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Attaching class with no Iterator implementation to MultipleIterator causes crash).
    • +
  • +
  • Standard: +
      +
    • Fix misleading errors in printf().
    • +
    • Fix RCN violations in array functions.
    • +
    • Fixed pack() overflow with h/H format and INT_MAX repeater value.
    • +
  • +
  • Streams: +
      +
    • Fixed (fgets() and stream_get_line() do not return false on filter fatal error).
    • +
  • +
  • Zip: +
      +
    • Fix leak when path is too long in ZipArchive::extractTo().
    • +
  • +
+
+ + + +
+

Version 8.4.10

+ +
  • BcMath: +
      +
    • Fixed bug (Accessing a BcMath\Number property by ref crashes).
    • +
  • +
  • Core: +
      +
    • Fixed bugs and (Infinite recursion on deprecated attribute evaluation) and (Recursion protection for deprecation constants not released on bailout).
    • +
    • Fixed (zend_ast_export() - float number is not preserved).
    • +
    • Fix handling of references in zval_try_get_long().
    • +
    • Do not delete main chunk in zend_gc.
    • +
    • Fix compile issues with zend_alloc and some non-default options.
    • +
  • +
  • Curl: +
      +
    • Fix memory leak when setting a list via curl_setopt fails.
    • +
  • +
  • Date: +
      +
    • Fix leaks with multiple calls to DatePeriod iterator current().
    • +
  • +
  • DOM: +
      +
    • Fixed bug (classList works not correctly if copy HTMLElement by clone keyword).
    • +
  • +
  • FPM: +
      +
    • Fixed (fpm_get_status segfault).
    • +
  • +
  • Hash: +
      +
    • Fixed bug (PGO build fails with xxhash).
    • +
  • +
  • Intl: +
      +
    • Fix memory leak in intl_datetime_decompose() on failure.
    • +
    • Fix memory leak in locale lookup on failure.
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Incompatibility in Inline TLS Assembly on Alpine 3.22).
    • +
  • +
  • ODBC: +
      +
    • Fix memory leak on php_odbc_fetch_hash() failure.
    • +
  • +
  • OpenSSL: +
      +
    • Fix memory leak of X509_STORE in php_openssl_setup_verify() on failure.
    • +
    • (Requests through http proxy set peer name).
    • +
  • +
  • PGSQL: +
      +
    • Fixed (pgsql extension does not check for errors during escaping). (CVE-2025-1735)
    • +
    • Fix warning not being emitted when failure to cancel a query with pg_cancel_query().
    • +
  • +
  • PDO ODBC: +
      +
    • Fix memory leak if WideCharToMultiByte() fails.
    • +
  • +
  • PDO Sqlite: +
      +
    • Fixed memory leak with Pdo_Sqlite::createCollation when the callback has an incorrect return type.
    • +
  • +
  • Phar: +
      +
    • Add missing filter cleanups on phar failure.
    • +
    • Fixed bug (Signed integer overflow in ext/phar fseek).
    • +
  • +
  • PHPDBG: +
      +
    • Fix 'phpdbg --help' segfault on shutdown with USE_ZEND_ALLOC=0.
    • +
  • +
  • Random: +
      +
    • Fix reference type confusion and leak in user random engine.
    • +
  • +
  • Readline: +
      +
    • Fix memory leak when calloc() fails in php_readline_completion_cb().
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (Heap-buffer-overflow in zend_alloc.c when assigning string with UTF-8 bytes).
    • +
  • +
  • SOAP: +
      +
    • Fix memory leaks in php_http.c when call_user_function() fails.
    • +
    • Fixed (NULL Pointer Dereference in PHP SOAP Extension via Large XML Namespace Prefix). (CVE-2025-6491)
    • +
  • +
  • Standard: +
      +
    • Fixed (Null byte termination in hostnames). (CVE-2025-1220)
    • +
  • +
  • Tidy: +
      +
    • Fix memory leak in tidy output handler on error.
    • +
    • Fix tidyOptIsReadonly deprecation, using tidyOptGetCategory.
    • +
  • +
+
+ + + +
+

Version 8.4.8

+ +
  • Core: +
      +
    • Fixed (array_splice with large values for offset/length arguments).
    • +
    • Partially fixed (nested object comparisons leading to stack overflow).
    • +
    • Fixed OSS-Fuzz #417078295.
    • +
    • Fixed OSS-Fuzz #418106144.
    • +
  • +
  • Curl: +
      +
    • Fixed (curl_easy_setopt with CURLOPT_USERPWD/CURLOPT_USERNAME/ CURLOPT_PASSWORD set the Authorization header when set to NULL).
    • +
  • +
  • Date: +
      +
    • Fixed bug (Since PHP 8, the date_sun_info() function returns inaccurate sunrise and sunset times, but other calculated times are correct) (JiriJozif).
    • +
    • Fixed bug (date_sunrise with unexpected nan value for the offset).
    • +
  • +
  • DOM: +
      +
    • Backport lexbor/lexbor#274.
    • +
  • +
  • Intl: +
      +
    • Fix various reference issues.
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (ldap no longer respects TLS_CACERT from ldaprc in ldap_start_tls()).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Windows SHM reattachment fails when increasing memory_consumption or jit_buffer_size).
    • +
    • Fixed bug (Exception not handled when jit guard is triggered).
    • +
    • Fixed bug (Snapshotted poly_func / poly_this may be spilled).
    • +
    • Fixed bug (Preloading with internal class alias triggers assertion failure).
    • +
    • Fixed bug (FPM exit code 70 with enabled opcache and hooked properties in traits).
    • +
    • Fix leak of accel_globals->key.
    • +
  • +
  • OpenSSL: +
      +
    • Fix missing checks against php_set_blocking() in xp_ssl.c.
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Integer overflow with large numbers in LimitIterator).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Potential deadlock when putenv fails).
    • +
    • Fixed bug (http_build_query type error is inaccurate).
    • +
    • Fixed bug (Dynamic calls to assert() ignore zend.assertions).
    • +
  • +
  • Windows: +
      +
    • Fix leak+crash with sapi_windows_set_ctrl_handler().
    • +
  • +
  • Zip: +
      +
    • Fixed bug (Registering ZIP progress callback twice doesn't work).
    • +
    • Fixed bug (Handling of empty data and errors in ZipArchive::addPattern).
    • +
  • +
+
+ + + +
+

Version 8.4.7

+ +
  • Core: +
      +
    • Fixed bug (Lazy proxy calls magic methods twice).
    • +
    • Fixed bug (Use-after-free in extract() with EXTR_REFS).
    • +
    • Fixed bug (Segfault in array_walk() on object with added property hooks).
    • +
    • Fixed bug (Changing the properties of a DateInterval through dynamic properties triggers a SegFault).
    • +
    • Fix some leaks in php_scandir.
    • +
  • +
  • DBA: +
      +
    • FIxed bug dba_popen() memory leak on invalid path.
    • +
  • +
  • Filter: +
      +
    • Fixed bug (ipv6 filter integer overflow).
    • +
  • +
  • GD: +
      +
    • Fixed imagecrop() overflow with rect argument with x/width y/heigh usage in gdImageCrop().
    • +
    • Fixed imagettftext() overflow/underflow on font size value.
    • +
  • +
  • Intl: +
      +
    • Fix reference support for intltz_get_offset().
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (LDAP_OPT_X_TLS_* options can't be overridden).
    • +
    • Fix NULL deref on high modification key.
    • +
  • +
  • libxml: +
      +
    • Fixed custom external entity loader returning an invalid resource leading to a confusing TypeError message.
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (assertion failure zend_jit_ir.c).
    • +
    • Fixed bug (Fix segfault in JIT).
    • +
    • Fixed bug (tracing JIT floating point register clobbering on Windows and ARM64).
    • +
  • +
  • OpenSSL: +
      +
    • Fix memory leak in openssl_sign() when passing invalid algorithm.
    • +
    • Fix potential leaks when writing to BIO fails.
    • +
  • +
  • PDO Firebird: +
      +
    • Fixed bug (persistent connection - "zend_mm_heap corrupted" with setAttribute()) (SakiTakamachi).
    • +
    • Fixed bug (PDOException has wrong code and message since PHP 8.4) (SakiTakamachi).
    • +
  • +
  • PDO Sqlite: +
      +
    • Fix memory leak on error return of collation callback.
    • +
  • +
  • PgSql: +
      +
    • Fix uouv in pg_put_copy_end().
    • +
  • +
  • SPL: +
      +
    • Fixed bug (SplObjectStorage debug handler mismanages memory).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (php8ts crashes in php_clear_stat_cache()).
    • +
    • Fix resource leak in iptcembed() on error.
    • +
  • +
  • Tests: +
      +
    • Address deprecated PHP 8.4 session options to prevent test failures.
    • +
  • +
  • Zip: +
      +
    • Fix uouv when handling empty options in ZipArchive::addGlob().
    • +
    • Fix memory leak when handling a too long path in ZipArchive::addGlob().
    • +
  • +
+
+ + + +
+

Version 8.4.6

+ +
  • BCMath: +
      +
    • Fixed pointer subtraction for scale.
    • +
  • +
  • Core: +
      +
    • Fixed property hook backing value access in multi-level inheritance.
    • +
    • Fixed accidentally inherited default value in overridden virtual properties.
    • +
    • Fixed bug (Broken JIT polymorphism for property hooks added to child class).
    • +
    • Fixed bug (ReflectionFunction::isDeprecated() returns incorrect results for closures created from magic __call()).
    • +
    • Fixed bug (Stack-use-after-return with lazy objects and hooks).
    • +
    • Fixed bug (Incorrect handling of hooked props without get hook in get_object_vars()).
    • +
    • Fixed bug (Skipped lazy object initialization on primed SIMPLE_WRITE cache).
    • +
    • Fixed bug (Assignment to backing value in set hook of lazy proxy calls hook again).
    • +
    • Fixed bug (use-after-free during dl()'ed module class destruction).
    • +
    • Fixed bug (dl() of module with aliased class crashes in shutdown).
    • +
    • Fixed OSS-Fuzz #403308724.
    • +
    • Fixed bug again (Significant performance degradation in 'foreach').
    • +
  • +
  • DBA: +
      +
    • Fixed assertion violation when opening the same file with dba_open multiple times.
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Assertion failure dom_attr_value_write).
    • +
    • Fix weird unpack behaviour in DOM.
    • +
    • Fixed bug (DOM: Svg attributes and tag names are being lowercased).
    • +
    • Fix xinclude destruction of live attributes.
    • +
  • +
  • Fuzzer: +
      +
    • Fixed bug (Memory leaks in error paths of fuzzer SAPI).
    • +
  • +
  • GD: +
      +
    • Fixed bug (calls with arguments as array with references).
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (Error messages for ldap_mod_replace are confusing).
    • +
  • +
  • Mbstring: +
      +
    • Fixed bug (mb_output_handler crash with unset http_output_conv_mimetypes).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Segfault with hook "simple get" cache slot and minimal JIT).
    • +
    • Fixed bug (Symfony JIT 1205 assertion failure).
    • +
    • Fixed bug (SEGV Zend/zend_execute.c).
    • +
    • Fixed bug (IN_ARRAY optimization in DFA pass is broken).
    • +
    • Fixed bug (stack-buffer-overflow ext/opcache/jit/ir/ir_sccp.c).
    • +
    • Fixed bug (NULL access with preloading and INI option).
    • +
    • Fixed bug (Opcache CFG jmp optimization with try-finally breaks the exception table).
    • +
  • +
  • PDO: +
      +
    • Fix memory leak when destroying PDORow.
    • +
  • +
  • Standard: +
      +
    • Fix memory leaks in array_any() / array_all().
    • +
  • +
  • SOAP: +
      +
    • (Typemap can break parsing in parse_packet_soap leading to a segfault) .
    • +
  • +
  • SPL: +
      +
    • Fixed bug (RC1 data returned from offsetGet causes UAF in ArrayObject).
    • +
  • +
  • Treewide: +
      +
    • Fixed bug (Assertion failure zend_reference_destroy()).
    • +
  • +
  • Windows: +
      +
    • Fixed bug (zend_vm_gen.php shouldn't break on Windows line endings).
    • +
  • +
+
+ + + +
+

Version 8.4.5

+ +
  • BCMath: +
      +
    • Fixed bug (bcmul memory leak).
    • +
  • +
  • Core: +
      +
    • Fixed bug (Broken stack overflow detection for variable compilation).
    • +
    • Fixed bug (UnhandledMatchError does not take zend.exception_ignore_args=1 into account).
    • +
    • Fix fallback paths in fast_long_{add,sub}_function.
    • +
    • Fixed bug OSS-Fuzz #391975641 (Crash when accessing property backing value by reference).
    • +
    • Fixed bug (Calling static methods on an interface that has `__callStatic` is allowed).
    • +
    • Fixed bug (ReflectionProperty::getRawValue() and related methods may call hooks of overridden properties).
    • +
    • Fixed bug (Final abstract properties should error).
    • +
    • Fixed bug (zend_mm_heap corrupted error after upgrading from 8.4.3 to 8.4.4).
    • +
    • Fixed (Reference counting in php_request_shutdown causes Use-After-Free). (CVE-2024-11235)
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Typo in error message: Dom\NO_DEFAULT_NS instead of Dom\HTML_NO_DEFAULT_NS).
    • +
    • Fixed bug (\Dom\HTMLDocument querySelector attribute name is case sensitive in HTML).
    • +
    • Fixed bug (xinclude destroys live node).
    • +
    • Fix using Dom\Node with Dom\XPath callbacks.
    • +
  • +
  • GD: +
      +
    • Fixed bug (imagescale with both width and height negative values triggers only an Exception on width).
    • +
    • Fixed bug (imagepalettetotruecolor crash with memory_limit=2M).
    • +
  • +
  • FFI: +
      +
    • Fix FFI Parsing of Pointer Declaration Lists.
    • +
  • +
  • FPM: +
      +
    • Fixed bug (FPM with httpd ProxyPass encoded PATH_INFO env).
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (ldap_search fails when $attributes contains a non-packed array with numerical keys).
    • +
  • +
  • LibXML: +
      +
    • Fixed (Reocurrence of #72714).
    • +
    • Fixed (libxml streams use wrong `content-type` header when requesting a redirected resource). (CVE-2025-1219)
    • +
  • +
  • MBString: +
      +
    • Fixed bug (Undefined float conversion in mb_convert_variables).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Multiple classes using same trait causes function JIT crash).
    • +
    • Fixed bug (JIT packed type guard crash).
    • +
    • Fixed bug (Exception on reading property in register-based FETCH_OBJ_R breaks JIT).
    • +
    • Fixed bug (Null pointer deref in observer API when calling cases() method on preloaded enum).
    • +
    • Fixed bug (Cannot allocate memory with tracing JIT on 8.4.4).
    • +
  • +
  • PDO_SQLite: +
      +
    • Fixed ()::getColumnMeta() on unexecuted statement segfaults).
    • +
    • Fix cycle leak in sqlite3 setAuthorizer().
    • +
    • Fix memory leaks in pdo_sqlite callback registration.
    • +
  • +
  • Phar: +
      +
    • Fixed bug : PharFileInfo refcount bug.
    • +
  • +
  • PHPDBG: +
      +
    • Partially fixed bug (Trivial crash in phpdbg lexer).
    • +
    • Fix memory leak in phpdbg calling registered function.
    • +
  • +
  • Reflection: +
      +
    • Fixed bug (Core dumped in ext/reflection/php_reflection.c).
    • +
    • Fixed missing final and abstract flags when dumping properties.
    • +
  • +
  • Standard: +
      +
    • (stat cache clearing inconsistent between file:// paths and plain paths).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (realloc with size 0 in user_filters.c).
    • +
    • Fix memory leak on overflow in _php_stream_scandir().
    • +
    • Fixed (Stream HTTP wrapper header check might omit basic auth header). (CVE-2025-1736)
    • +
    • Fixed (Stream HTTP wrapper truncate redirect location to 1024 bytes). (CVE-2025-1861)
    • +
    • Fixed (Streams HTTP wrapper does not fail for headers without colon). (CVE-2025-1734)
    • +
    • Fixed (Header parser of `http` stream wrapper does not handle folded headers). (CVE-2025-1217)
    • +
  • +
  • Windows: +
      +
    • Fixed phpize for Windows 11 (24H2).
    • +
    • Fixed (CURL_STATICLIB flag set even if linked with shared lib).
    • +
  • +
  • Zlib: +
      +
    • Fixed bug (zlib extension incorrectly handles object arguments).
    • +
    • Fix memory leak when encoding check fails.
    • +
    • Fix zlib support for large files.
    • +
  • +
+
+ + + +
+

Version 8.4.4

+ +
  • Core: +
      +
    • Fixed bug (Numeric parent hook call fails with assertion).
    • +
    • Fixed bug (ini_parse_quantity() fails to parse inputs starting with 0x0b).
    • +
    • Fixed bug (ini_parse_quantity() fails to emit warning for 0x+0).
    • +
    • Fixed bug (__PROPERTY__ magic constant does not work in all constant expression contexts).
    • +
    • Fixed bug (Relax final+private warning for trait methods with inherited final).
    • +
    • Fixed NULL arithmetic during system program execution on Windows.
    • +
    • Fixed potential OOB when checking for trailing spaces on Windows.
    • +
    • Fixed bug (Assertion failure Zend/zend_exceptions.c).
    • +
    • Fix may_have_extra_named_args flag for ZEND_AST_UNPACK.
    • +
    • Fix NULL arithmetic in System V shared memory emulation for Windows.
    • +
    • Fixed bug (#[\Deprecated] does not work for __call() and __callStatic()).
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Assertion failure ext/dom/php_dom.c).
    • +
    • Fixed bug (Incorrect error line numbers reported in Dom\HTMLDocument::createFromString).
    • +
    • Fixed bug (UTF-8 corruption in \Dom\HTMLDocument).
    • +
    • Fixed bug (Segfault with requesting nodeName on nameless doctype).
    • +
    • Fixed bug (upstream fix, Self-closing tag on void elements shouldn't be a parse error/warning in \Dom\HTMLDocument).
    • +
    • Fixed bug (getElementsByTagName returns collections with tagName-based indexing).
    • +
  • +
  • Enchant: +
      +
    • Fix crashes in enchant when passing null bytes.
    • +
  • +
  • FTP: +
      +
    • Fixed bug (ftp functions can abort with EINTR).
    • +
  • +
  • GD: +
      +
    • Fixed bug (Tiled truecolor filling looses single color transparency).
    • +
    • Fixed bug (imagefttext() ignores clipping rect for palette images).
    • +
    • Ported fix for libgd 223 (gdImageRotateGeneric() does not properly interpolate).
    • +
    • Added support for reading GIFs without colormap to bundled libgd.
    • +
  • +
  • Gettext: +
      +
    • Fixed bug (bindtextdomain SEGV on invalid domain).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (intl causing segfault in docker images).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Segfault with frameless jumps and minimal JIT).
    • +
    • Fixed bug (Internal closure causes JIT failure).
    • +
    • Fixed bug (Assertion failure ext/opcache/jit/zend_jit_ir.c:8940).
    • +
    • Fixed bug (Potential UB when reading from / writing to struct padding).
    • +
  • +
  • PCNTL: +
      +
    • Fixed pcntl_setcpuaffinity exception type from ValueError to TypeError for the cpu mask argument with entries type different than int/string.
    • +
  • +
  • PCRE: +
      +
    • Fixed bug (memory leak in regex).
    • +
  • +
  • PDO: +
      +
    • Fixed a memory leak when the GC is used to free a PDOStatment.
    • +
    • Fixed a crash in the PDO Firebird Statement destructor.
    • +
    • Fixed UAFs when changing default fetch class ctor args.
    • +
  • +
  • PgSql: +
      +
    • Fixed build failure when the constant PGRES_TUPLES_CHUNK is not present in the system.
    • +
  • +
  • Phar: +
      +
    • Fixed bug (offset overflow phar extractTo()).
    • +
  • +
  • PHPDBG: +
      +
    • Fix crashes in function registration + test.
    • +
  • +
  • Session: +
      +
    • Fix type confusion with session SID constant.
    • +
    • Fixed bug (ext/session NULL pointer dereferencement during ID reset).
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (Assertion failure Zend/zend_hash.c:1730).
    • +
  • +
  • SNMP: +
      +
    • Fixed bug (SNMP::setSecurity segfault on closed session).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Segmentation fault (access null pointer) in ext/spl/spl_array.c).
    • +
    • Fixed bug (SplFileTempObject::getPathInfo() Undefined behavior on invalid class).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Assertion failure when array popping a self addressing variable).
    • +
  • +
  • Windows: +
      +
    • Fixed clang compiler detection.
    • +
  • +
  • Zip: +
      +
    • Fixed bug (Fix zip_entry_name() crash on invalid entry).
    • +
  • +
+
+ + + +
+

Version 8.4.3

+ +
  • BcMath: +
      +
    • Fixed bug (Correctly compare 0 and -0).
    • +
    • Fixed bug (Now Number::round() does not remove trailing zeros).
    • +
    • Fixed bug (Correctly round rounding mode with zero edge case).
    • +
    • Fixed bug (Fixed the calculation logic of dividend scale).
    • +
  • +
  • Core: +
      +
    • Fixed bug OSS-Fuzz #382922236 (Duplicate dynamic properties in hooked object iterator properties table).
    • +
    • Fixed unstable get_iterator pointer for hooked classes in shm on Windows.
    • +
    • Fixed bug (ZEND_MATCH_ERROR misoptimization).
    • +
    • Fixed bug (zend_array_try_init() with dtor can cause engine UAF).
    • +
    • Fixed bug (AST->string does not reproduce constructor property promotion correctly).
    • +
    • Fixed bug (Incorrect dynamic prop offset in hooked prop iterator).
    • +
    • Fixed bug (Trampoline crash on error).
    • +
  • +
  • DBA: +
      +
    • Skip test if inifile is disabled.
    • +
  • +
  • DOM: +
      +
    • Fixed bug (DOM memory leak).
    • +
    • Fixed bug (Dom\TokenList issues with interned string replace).
    • +
    • Fixed bug (UAF in importNode).
    • +
  • +
  • Embed: +
      +
    • Make build command for program using embed portable.
    • +
  • +
  • FFI: +
      +
    • (FFI header parser chokes on comments).
    • +
    • Fix memory leak on ZEND_FFI_TYPE_CHAR conversion failure.
    • +
    • Fixed bug and bug #80857 (Big endian issues).
    • +
  • +
  • Fileinfo: +
      +
    • Fixed bug (PHP 8.4: Incorrect MIME content type).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (FPM: ERROR: scoreboard: failed to lock (already locked)).
    • +
    • Fixed bug (Macro redefinitions).
    • +
    • Fixed bug (bug64539-status-json-encoding.phpt fail on 32-bits).
    • +
  • +
  • GD: +
      +
    • Fixed bug (Unexpected nan value in ext/gd/libgd/gd_filter.c).
    • +
    • Ported fix for libgd bug 276 (Sometimes pixels are missing when storing images as BMPs).
    • +
  • +
  • Gettext: +
      +
    • Fixed bug (Segmentation fault ext/gettext/gettext.c bindtextdomain()).
    • +
  • +
  • Iconv: +
      +
    • Fixed bug (UAF on iconv filter failure).
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (ldap_search() fails when $attributes array has holes).
    • +
  • +
  • LibXML: +
      +
    • Fixed bug (Memory leak in libxml encoding handling).
    • +
  • +
  • MBString: +
      +
    • Fixed bug (Macro redefinitions).
    • +
  • +
  • Opcache: +
      +
    • opcache_get_configuration() properly reports jit_prof_threshold.
    • +
    • Fixed bug (Assertion failure in JIT trace exit with ZEND_FETCH_DIM_FUNC_ARG).
    • +
    • Fixed bug (Incorrect RC inference of op1 of FETCH_OBJ and INIT_METHOD_CALL).
    • +
    • Fixed bug (GC during SCCP causes segfault).
    • +
    • Fixed bug (UBSAN warning in ext/opcache/jit/zend_jit_vm_helpers.c).
    • +
  • +
  • PCNTL: +
      +
    • Fix memory leak in cleanup code of pcntl_exec() when a non stringable value is encountered past the first entry.
    • +
  • +
  • PgSql: +
      +
    • Fixed bug (pg_fetch_result Shows Incorrect ArgumentCountError Message when Called With 1 Argument).
    • +
    • Fixed further ArgumentCountError for calls with flexible number of arguments.
    • +
  • +
  • Phar: +
      +
    • Fixed bug (Segmentation fault ext/phar/phar.c).
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (SimpleXML's unset can break DOM objects).
    • +
    • Fixed bug (SimpleXML crash when using autovivification on document).
    • +
  • +
  • Sockets: +
      +
    • Fixed bug (socket_strerror overflow handling with INT_MIN).
    • +
    • Fixed overflow on SO_LINGER values setting, strengthening values check on SO_SNDTIMEO/SO_RCVTIMEO for socket_set_option().
    • +
  • +
  • SPL: +
      +
    • Fixed bug (SplFixedArray assertion failure with get_object_vars).
    • +
    • Fixed bug (NULL deref in spl_directory.c).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (UAF in user filter when adding existing filter name due to incorrect error handling).
    • +
    • Fixed bug (overflow on fopen HTTP wrapper timeout value).
    • +
    • Fixed bug (glob:// wrapper doesn't cater to CWD for ZTS builds).
    • +
  • +
  • Windows: +
      +
    • Hardened proc_open() against cmd.exe hijacking.
    • +
  • +
  • XML: +
      +
    • Fixed bug (unreachable program point in zend_hash).
    • +
  • +
+
+ + + +
+

Version 8.4.2

+ +
  • BcMath: +
      +
    • Fixed bug (Avoid unnecessary padding with leading zeros) (Saki Takamachi)
    • +
  • +
  • Calendar: +
      +
    • Fixed jdtogregorian overflow.
    • +
    • Fixed cal_to_jd julian_days argument overflow.
    • +
  • +
  • COM: +
      +
    • Fixed bug (Getting typeinfo of non DISPATCH variant segfaults).
    • +
  • +
  • Core: +
      +
    • Fail early in *nix configuration build script.
    • +
    • Fixed bug (setRawValueWithoutLazyInitialization() and skipLazyInitialization() may change initialized proxy).
    • +
    • Fixed bug (Opcache bad signal 139 crash in ZTS bookworm (frankenphp)).
    • +
    • Fixed bug (Assertion failure at Zend/zend_vm_execute.h:7469).
    • +
    • Fixed bug (UAF in lexer with encoding translation and heredocs).
    • +
    • Fix is_zend_ptr() huge block comparison.
    • +
    • Fixed potential OOB read in zend_dirname() on Windows.
    • +
    • Fixed bug (printf() can strip sign of -INF).
    • +
  • +
  • Curl: +
      +
    • Fixed bug (open_basedir bypass using curl extension).
    • +
    • Fix various memory leaks in curl mime handling.
    • +
  • +
  • DBA: +
      +
    • Fixed bug (dba_list() is now zero-indexed instead of using resource ids) (kocsismate)
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Calling the constructor again on a DOM object after it is in a document causes UAF).
    • +
    • Fixed bug (Reloading document can cause UAF in iterator).
    • +
  • +
  • FPM: +
      +
    • Fixed (PHP-FPM 8.2 SIGSEGV in fpm_get_status).
    • +
    • Fixed bug (wrong FPM status output).
    • +
  • +
  • GD: +
      +
    • Fixed (imagecreatefromstring overflow).
    • +
  • +
  • GMP: +
      +
    • Fixed bug (array_sum() with GMP can loose precision (LLP64)).
    • +
  • +
  • Hash: +
      +
    • Fixed : Segfault in mhash().
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (JIT_G(enabled) not set correctly on other threads).
    • +
    • Fixed bug (Set of opcache tests fail zts+aarch64).
    • +
    • Fixed bug (JIT dead code skipping does not update call_level).
    • +
  • +
  • OpenSSL: +
      +
    • Prevent unexpected array entry conversion when reading key.
    • +
    • Fix various memory leaks related to openssl exports.
    • +
    • Fix memory leak in php_openssl_pkey_from_zval().
    • +
  • +
  • PDO: +
      +
    • Fixed memory leak of `setFetchMode()`.
    • +
  • +
  • Phar: +
      +
    • Fixed bug (phar:// tar parser and zero-length file header blocks).
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (Segfault with breakpoint map and phpdbg_clear()).
    • +
  • +
  • SAPI: +
      +
    • Fixed bug (UBSAN warning in rfc1867).
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (Segmentation fault in RecursiveIteratorIterator ->current() with a xml element input).
    • +
  • +
  • SOAP: +
      +
    • Fix make check being invoked in ext/soap.
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Internal iterator functions can't handle UNDEF properties).
    • +
    • Fixed bug (Assertion failure in array_shift with self-referencing array).
    • +
  • +
  • Streams: +
      +
    • Fixed network connect poll interuption handling.
    • +
  • +
  • Windows: +
      +
    • Fixed bug (Error dialog causes process to hang).
    • +
    • Windows Server 2025 is now properly reported.
    • +
  • +
+
+ + + +
+

Version 8.4.1

+ +
  • BcMath: +
      +
    • [RFC] Add bcfloor, bcceil and bcround to BCMath.
    • +
    • Improve performance.
    • +
    • Adjust bcround()'s $mode parameter to only accept the RoundingMode enum.
    • +
    • Fixed LONG_MAX in BCMath ext.
    • +
    • Fixed bcdiv() div by one.
    • +
    • [RFC] Support object types in BCMath.
    • +
    • bcpow() performance improvement.
    • +
    • ext/bcmath: Check for scale overflow.
    • +
    • [RFC] ext/bcmath: Added bcdivmod.
    • +
    • Fix (Avoid converting objects to strings in operator calculations).
    • +
    • Fixed bug (Added early return case when result is 0) (Saki Takamachi).
    • +
    • Fixed bug (Fixed a bug where size_t underflows) (Saki Takamachi).
    • +
    • Fixed (Fixed a bug in BcMath\Number::pow() and bcpow() when raising negative powers of 0) (Saki Takamachi).
    • +
  • +
  • Core: +
      +
    • Added zend_call_stack_get implementation for NetBSD, DragonFlyBSD, Solaris and Haiku.
    • +
    • Enabled ifunc checks on FreeBSD from the 12.x releases.
    • +
    • Changed the type of PHP_DEBUG and PHP_ZTS constants to bool.
    • +
    • Fixed bug (Undefined variable name is shortened when contains \0).
    • +
    • Fixed bug (Iterator positions incorrect when converting packed array to hashed).
    • +
    • Fixed zend fiber build for solaris default mode (32 bits).
    • +
    • Fixed zend call stack size for macOs/arm64.
    • +
    • Added support for Zend Max Execution Timers on FreeBSD.
    • +
    • Ensure fiber stack is not backed by THP.
    • +
    • Implement (Dump wrapped object in WeakReference class).
    • +
    • Added sparc64 arch assembly support for zend fiber.
    • +
    • Fixed no space available for TLS on NetBSD.
    • +
    • Added fiber Sys-V loongarch64 support.
    • +
    • Adjusted closure names to include the parent function's name.
    • +
    • Improve randomness of uploaded file names and files created by tempnam().
    • +
    • Added gc and shutdown callbacks to zend_mm custom handlers.
    • +
    • Fixed bug (Compute the size of pages before allocating memory).
    • +
    • Fixed bug (The --enable-re2c-cgoto doesn't add the -g flag).
    • +
    • Added the #[\Deprecated] attribute.
    • +
    • Fixed (Allow suspending fibers in destructors).
    • +
    • Fixed bug (Fix build for armv7).
    • +
    • Implemented property hooks RFC.
    • +
    • Fix (The xmlreader extension phpize build).
    • +
    • Throw Error exception when encountering recursion during comparison, rather than fatal error.
    • +
    • Added missing cstddef include for C++ builds.
    • +
    • Updated build system scripts config.guess to 2024-07-27 and config.sub to 2024-05-27.
    • +
    • Fixed bug (Infinite recursion in trait hook).
    • +
    • Fixed bug (Missing variance check for abstract set with asymmetric type).
    • +
    • Fixed bug (Disabled output handler is flushed again).
    • +
    • Passing E_USER_ERROR to trigger_error() is now deprecated.
    • +
    • Fixed bug (Dynamic AVX detection is broken for MSVC).
    • +
    • Using "_" as a class name is now deprecated.
    • +
    • Exiting a namespace now clears seen symbols.
    • +
    • The exit (and die) language constructs now behave more like a function. They can be passed liked callables, are affected by the strict_types declare statement, and now perform the usual type coercions instead of casting any non-integer value to a string. As such, passing invalid types to exit/die may now result in a TypeError being thrown.
    • +
    • Fixed bug (Hooks on constructor promoted properties without visibility are ignored).
    • +
    • Fixed bug (Missing readonly+hook incompatibility check for readonly classes).
    • +
    • Fixed bug (Various hooked object iterator issues).
    • +
    • Fixed bug (Crash in get_class_vars() on virtual properties).
    • +
    • Fixed bug (Windows HAVE_<header>_H macros defined to 1 or undefined).
    • +
    • Implemented asymmetric visibility for properties.
    • +
    • Fixed bug (Asymmetric visibility doesn't work with hooks).
    • +
    • Implemented lazy objects RFC.
    • +
    • Fixed bug (Building shared iconv with external iconv library).
    • +
    • Fixed missing error when adding asymmetric visibility to unilateral virtual property.
    • +
    • Fixed bug (Unnecessary include in main.c bloats binary).
    • +
    • Fixed bug (AllowDynamicProperties validation should error on enums).
    • +
    • Fixed bug (Use-after-free of object released in hook).
    • +
    • Fixed bug (Reuse of dtor fiber during shutdown).
    • +
    • Fixed bug (zend_std_write_property() assertion failure with lazy objects).
    • +
    • Fixed bug (Foreach edge cases with lazy objects).
    • +
    • Fixed bug (Various hooked object iterator issues).
    • +
    • Fixed bug OSS-Fuzz #371445205 (Heap-use-after-free in attr_free).
    • +
    • Fixed missing error when adding asymmetric visibility to static properties.
    • +
    • Fixed bug OSS-Fuzz #71407 (Null-dereference WRITE in zend_lazy_object_clone).
    • +
    • Fixed bug (Incorrect error "undefined method" messages).
    • +
    • Fixed bug (EG(strtod_state).freelist leaks with opcache.preload).
    • +
    • Fixed bug (Assertion failure in zend_std_read_property).
    • +
    • Fixed bug (Added ReflectionProperty::isLazy()).
    • +
    • Fixed bug (Incorrect access check for non-hooked props in hooked object iterator).
    • +
  • +
  • Curl: +
      +
    • Deprecated the CURLOPT_BINARYTRANSFER constant.
    • +
    • Bumped required libcurl version to 7.61.0.
    • +
    • Added feature_list key to the curl_version() return value.
    • +
    • Added constants CURL_HTTP_VERSION_3 (libcurl 7.66) and CURL_HTTP_VERSION_3ONLY (libcurl 7.88) as options for CURLOPT_HTTP_VERSION (Ayesh Karunaratne)
    • +
    • Added CURLOPT_TCP_KEEPCNT to set the number of probes to send before dropping the connection.
    • +
    • Added CURLOPT_PREREQFUNCTION Curl option to set a custom callback after the connection is established, but before the request is performed.
    • +
    • Added CURLOPT_SERVER_RESPONSE_TIMEOUT, which was formerly known as CURLOPT_FTP_RESPONSE_TIMEOUT.
    • +
    • The CURLOPT_DNS_USE_GLOBAL_CACHE option is now silently ignored.
    • +
    • Added CURLOPT_DEBUGFUNCTION as a Curl option.
    • +
    • Fixed bug (crash with curl_setopt* CURLOPT_WRITEFUNCTION without null callback).
    • +
    • Fixed bug (CURLMOPT_PUSHFUNCTION issues).
    • +
  • +
  • Date: +
      +
    • Added DateTime[Immutable]::createFromTimestamp.
    • +
    • Added DateTime[Immutable]::[get|set]Microsecond.
    • +
    • Constants SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING, and SUNFUNCS_RET_DOUBLE are now deprecated.
    • +
    • Fixed bug (DatePeriod not taking into account microseconds for end date).
    • +
  • +
  • DBA: +
      +
    • Passing null or false to dba_key_split() is deprecated.
    • +
  • +
  • Debugging: +
      +
    • Fixed bug (GDB: Python Exception <class 'TypeError'>: exceptions must derive from BaseException).
    • +
  • +
  • DOM: +
      +
    • Added DOMNode::compareDocumentPosition().
    • +
    • Implement #53655 (Improve speed of DOMNode::C14N() on large XML documents).
    • +
    • Fix cloning attribute with namespace disappearing namespace.
    • +
    • Implement DOM HTML5 parsing and serialization RFC.
    • +
    • Fix DOMElement->prefix with empty string creates bogus prefix.
    • +
    • Handle OOM more consistently.
    • +
    • Implemented "Improve callbacks in ext/dom and ext/xsl" RFC.
    • +
    • Added DOMXPath::quote() static method.
    • +
    • Implemented opt-in ext/dom spec compliance RFC.
    • +
    • (getElementById does not correctly work with duplicate definitions).
    • +
    • Implemented "New ext-dom features in PHP 8.4" RFC.
    • +
    • Fixed (segfault on DOM node dereference).
    • +
    • Improve support for template elements.
    • +
    • Fix trampoline leak in xpath callables.
    • +
    • Throw instead of silently failing when creating a too long text node in (DOM)ParentNode and (DOM)ChildNode.
    • +
    • Fixed bug (Segmentation fault in dom extension (html5_serializer)).
    • +
    • Deprecated DOM_PHP_ERR constant.
    • +
    • Removed DOMImplementation::getFeature().
    • +
    • Fixed bug (Element::$substitutedNodeValue test failed).
    • +
    • Fixed bug (Segmentation fault (access null pointer) in ext/dom/html5_serializer.c).
    • +
    • Fixed bug (Storing DOMElement consume 4 times more memory in PHP 8.1 than in PHP 8.0).
    • +
    • Fix XML serializer errata: xmlns="" serialization should be allowed.
    • +
    • Fixed bug (Assertion failure in ext/dom/element.c).
    • +
    • Fix unsetting DOM properties.
    • +
    • Fixed bug (Using reflection to call Dom\Node::__construct causes assertion failure).
    • +
    • Fix edge-case in DOM parsing decoding.
    • +
    • Fixed bug (Heap buffer overflow in DOMNode->getElementByTagName).
    • +
    • Fixed bug (Assertion failure in DOM -> before).
    • +
  • +
  • Fileinfo: +
      +
    • Update to libmagic 5.45.
    • +
    • (PHP fails to compile ext/fileinfo).
    • +
  • +
  • FPM: +
      +
    • Implement (flush headers without body when calling flush()).
    • +
    • Added DragonFlyBSD system to the list which set FPM_BACKLOG_DEFAULT to SOMAXCONN.
    • +
    • /dev/poll events.mechanism for Solaris/Illumos setting had been retired.
    • +
    • Added memory peak to the scoreboard / status page.
    • +
  • +
  • FTP: +
      +
    • Removed the deprecated inet_ntoa call support.
    • +
    • (Upload speed 10 times slower with PHP).
    • +
  • +
  • GD: +
      +
    • Fix parameter numbers and missing alpha check for imagecolorset().
    • +
    • imagepng/imagejpeg/imagewep/imageavif now throw an exception on invalid quality parameter.
    • +
    • Check overflow/underflow for imagescale/imagefilter.
    • +
    • Added gdImageClone to bundled libgd.
    • +
  • +
  • Gettext: +
      +
    • bind_textdomain_codeset, textdomain and d(*)gettext functions now throw an exception on empty domain.
    • +
  • +
  • GMP: +
      +
    • The GMP class is now final and cannot be extended anymore.
    • +
    • RFC: Change GMP bool cast behavior.
    • +
  • +
  • Hash: +
      +
    • Changed return type of hash_update() to true.
    • +
    • Added HashContext::__debugInfo().
    • +
    • Deprecated passing incorrect data types for options to ext/hash functions.
    • +
    • Added SSE2 and SHA-NI implementation of SHA-256.
    • +
    • Fix (Build fails on Alpine / Musl for amd64).
    • +
    • Fixed bug (php_hash_sha.h incompatible with C++).
    • +
  • +
  • IMAP: +
      +
    • Moved to PECL.
    • +
  • +
  • Intl: +
      +
    • Added IntlDateFormatter::PATTERN constant.
    • +
    • Fixed Numberformatter::__construct when the locale is invalid, now throws an exception.
    • +
    • Added NumberFormatter::ROUND_TOWARD_ZERO and ::ROUND_AWAY_FROM_ZERO as aliases for ::ROUND_DOWN and ::ROUND_UP.
    • +
    • Added NumberFormatter::ROUND_HALFODD.
    • +
    • Added PROPERTY_IDS_UNARY_OPERATOR, PROPERTY_ID_COMPAT_MATH_START and PROPERTY_ID_COMPAT_MATH_CONTINUE constants.
    • +
    • Added IntlDateFormatter::getIanaID/intltz_get_iana_id method/function.
    • +
    • Set to C++17 standard for icu 74 and onwards.
    • +
    • resourcebundle_get(), ResourceBundle::get(), and accessing offsets on a ResourceBundle object now throw: - TypeError for invalid offset types - ValueError for an empty string - ValueError if the integer index does not fit in a signed 32 bit integer
    • +
    • ResourceBundle::get() now has a tentative return type of: ResourceBundle|array|string|int|null
    • +
    • Added the new Grapheme function grapheme_str_split.
    • +
    • Added IntlDateFormatter::parseToCalendar.
    • +
    • Added SpoofChecker::setAllowedChars to set unicode chars ranges.
    • +
  • +
  • LDAP: +
      +
    • Added LDAP_OPT_X_TLS_PROTOCOL_MAX/LDAP_OPT_X_TLS_PROTOCOL_TLS1_3 constants.
    • +
  • +
  • LibXML: +
      +
    • Added LIBXML_RECOVER constant.
    • +
    • libxml_set_streams_context() now throws immediately on an invalid context instead of at the use-site.
    • +
    • Added LIBXML_NO_XXE constant.
    • +
  • +
  • MBString: +
      +
    • Added mb_trim, mb_ltrim and mb_rtrim.
    • +
    • Added mb_ucfirst and mb_lcfirst.
    • +
    • Updated Unicode data tables to Unicode 15.1.
    • +
    • Fixed bug (mb_detect_encoding(): Argument $encodings contains invalid encoding "UTF8").
    • +
    • Updated Unicode data tables to Unicode 16.0.
    • +
  • +
  • Mysqli: +
      +
    • The mysqli_ping() function and mysqli::ping() method are now deprecated, as the reconnect feature was removed in PHP 8.2.
    • +
    • The mysqli_kill() function and mysqli::kill() method are now deprecated. If this functionality is needed a SQL "KILL" command can be used instead.
    • +
    • The mysqli_refresh() function and mysqli::refresh() method are now deprecated. If this functionality is needed a SQL "FLUSH" command can be used instead.
    • +
    • Passing explicitly the $mode parameter to mysqli_store_result() has been deprecated. As the MYSQLI_STORE_RESULT_COPY_DATA constant was only used in conjunction with this function it has also been deprecated.
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (PDO quote bottleneck).
    • +
    • Fixed bug (Apache crash on Windows when using a self-referencing anonymous function inside a class with an active mysqli connection).
    • +
  • +
  • Opcache: +
      +
    • Added large shared segments support for FreeBSD.
    • +
    • If JIT is enabled, PHP will now exit with a fatal error on startup in case of JIT startup initialization issues.
    • +
    • Increased the maximum value of opcache.interned_strings_buffer to 32767 on 64bit archs.
    • +
    • Fixed bug (Applying non-zero offset 36 to null pointer in zend_jit.c).
    • +
    • Fixed bug (Deep recursion in zend_cfg.c causes segfault).
    • +
    • Fixed bug (PHP 8.4 min function fails on typed integer).
    • +
    • Fixed bug (Building of callgraph modifies preloaded symbols).
    • +
    • Fixed bug (Assertion in tracing JIT on hooks).
    • +
    • Fixed bug (Segmentation fault in dasm_x86.h).
    • +
    • Added opcache_jit_blacklist() function.
    • +
    • Fixed bug (Segmentation fault with frameless functions and undefined CVs).
    • +
    • Fixed bug (Assertion failure in Zend/zend_operators.c).
    • +
    • Fixed bug (Incorrect result with reflection in low-trigger JIT).
    • +
    • Fixed (Error on building Opcache JIT for Windows ARM64).
    • +
  • +
  • OpenSSL: +
      +
    • (OpenSSL sets Subject wrong with extraattribs parameter).
    • +
    • Implement request #48520 (openssl_csr_new - allow multiple values in DN).
    • +
    • Introduced new serial_hex parameter to openssl_csr_sign.
    • +
    • Added X509_PURPOSE_OCSP_HELPER and X509_PURPOSE_TIMESTAMP_SIGN constants.
    • +
    • Bumped minimum required OpenSSL version to 1.1.1.
    • +
    • Added compile-time option --with-openssl-legacy-provider to enable legacy provider.
    • +
    • Added support for Curve25519 + Curve448 based keys.
    • +
    • Fixed bug (openssl_x509_parse should not allow omitted seconds in UTCTimes).
    • +
    • Bumped minimum required OpenSSL version to 1.1.0.
    • +
    • Implement PASSWORD_ARGON2 from OpenSSL 3.2.
    • +
  • +
  • Output: +
      +
    • Clear output handler status flags during handler initialization.
    • +
    • Fixed bug with url_rewriter.hosts not used by output_add_rewrite_var().
    • +
  • +
  • PCNTL: +
      +
    • Added pcntl_setns for Linux.
    • +
    • Added pcntl_getcpuaffinity/pcntl_setcpuaffinity.
    • +
    • Updated pcntl_get_signal_handler signal id upper limit to be more in line with platforms limits.
    • +
    • Added pcntl_getcpu for Linux/FreeBSD/Solaris/Illumos.
    • +
    • Added pcntl_getqos_class/pcntl_setqos_class for macOs.
    • +
    • Added SIGCKPT/SIGCKPTEXIT constants for DragonFlyBSD.
    • +
    • Added FreeBSD's SIGTRAP handling to pcntl_siginfo_to_zval.
    • +
    • Added POSIX pcntl_waitid.
    • +
    • Fixed bug : (pcntl_sigwaitinfo aborts on signal value as reference).
    • +
  • +
  • PCRE: +
      +
    • Upgrade bundled pcre2lib to version 10.43.
    • +
    • Add "/r" modifier.
    • +
    • Upgrade bundled pcre2lib to version 10.44.
    • +
    • Fixed (underflow on offset argument).
    • +
    • Fix UAF issues with PCRE after request shutdown.
    • +
  • +
  • PDO: +
      +
    • Fixed setAttribute and getAttribute.
    • +
    • Implemented PDO driver-specific subclasses RFC.
    • +
    • Added support for PDO driver-specific SQL parsers.
    • +
    • Fixed bug (Compilation failure on pdo_* extensions).
    • +
    • mysqlnd: support ER_CLIENT_INTERACTION_TIMEOUT.
    • +
    • The internal header php_pdo_int.h is no longer installed; it is not supposed to be used by PDO drivers.
    • +
    • Fixed bug (Prevent mixing PDO sub-classes with different DSN).
    • +
    • Fixed bug ("Pdo\Mysql object is uninitialized" when opening a persistent connection).
    • +
  • +
  • PDO_DBLIB: +
      +
    • Fixed setAttribute and getAttribute.
    • +
    • Added class Pdo\DbLib.
    • +
  • +
  • PDO_Firebird: +
      +
    • Fixed setAttribute and getAttribute.
    • +
    • Feature: Add transaction isolation level and mode settings to pdo_firebird.
    • +
    • Added class Pdo\Firebird.
    • +
    • Added Pdo\Firebird::ATTR_API_VERSION.
    • +
    • Added getApiVersion() and removed from getAttribute().
    • +
    • Supported Firebird 4.0 datatypes.
    • +
    • Support proper formatting of time zone types.
    • +
    • Fixed (Always make input parameters nullable).
    • +
  • +
  • PDO_MYSQL: +
      +
    • Fixed setAttribute and getAttribute.
    • +
    • Added class Pdo\Mysql.
    • +
    • Added custom SQL parser.
    • +
    • Fixed (PDO_MySQL not properly quoting PDO_PARAM_LOB binary data).
    • +
  • +
  • PDO_ODBC: +
      +
    • Added class Pdo\Odbc.
    • +
  • +
  • PDO_PGSQL: +
      +
    • Fixed , DSN credentials being prioritized over the user/password PDO constructor arguments.
    • +
    • Fixed native float support with pdo_pgsql query results.
    • +
    • Added class Pdo\Pgsql.
    • +
    • Retrieve the memory usage of the query result resource.
    • +
    • Added Pdo\Pgsql::setNoticeCallBack method to receive DB notices.
    • +
    • Added custom SQL parser.
    • +
    • Fixed (Double-free due to Pdo\Pgsql::setNoticeCallback()).
    • +
    • Fixed (Using PQclosePrepared when available instead of the DEALLOCATE command to free statements resources).
    • +
    • Remove PGSQL_ATTR_RESULT_MEMORY_SIZE constant as it is provided by the new PDO Subclass as Pdo\Pgsql::ATTR_RESULT_MEMORY_SIZE.
    • +
  • +
  • PDO_SQLITE: +
      +
    • Added class Pdo\Sqlite.
    • +
    • (PDO::inTransaction reports false when in transaction).
    • +
    • Added custom SQL parser.
    • +
  • +
  • PHPDBG: +
      +
    • array out of bounds, stack overflow handled for segfault handler on windows.
    • +
    • Fixed bug (Support stack limit in phpdbg).
    • +
  • +
  • PGSQL: +
      +
    • Added the possibility to have no conditions for pg_select.
    • +
    • Persistent connections support the PGSQL_CONNECT_FORCE_RENEW flag.
    • +
    • Added pg_result_memory_size to get the query result memory usage.
    • +
    • Added pg_change_password to alter an user's password.
    • +
    • Added pg_put_copy_data/pg_put_copy_end to send COPY commands and signal the end of the COPY.
    • +
    • Added pg_socket_poll to poll on the connection.
    • +
    • Added pg_jit to get infos on server JIT support.
    • +
    • Added pg_set_chunked_rows_size to fetch results per chunk.
    • +
    • pg_convert/pg_insert/pg_update/pg_delete ; regexes are now cached.
    • +
  • +
  • Phar: +
      +
    • Fixed bug (PharData created from zip has incorrect timestamp).
    • +
  • +
  • POSIX: +
      +
    • Added POSIX_SC_CHILD_MAX and POSIX_SC_CLK_TCK constants.
    • +
    • Updated posix_isatty to set the error number on file descriptors.
    • +
  • +
  • PSpell: +
      +
    • Moved to PECL.
    • +
  • +
  • Random: +
      +
    • Fixed bug (php_random_default_engine() is not C++ conforming).
    • +
    • lcg_value() is now deprecated.
    • +
  • +
  • Readline: +
      +
    • Fixed readline_info, rl_line_buffer_length/rl_len globals on update.
    • +
    • (Shared readline build fails).
    • +
    • Fixed UAF with readline_info().
    • +
  • +
  • Reflection: +
      +
    • Implement (Show attribute name/class in ReflectionAttribute dump).
    • +
    • Make ReflectionGenerator::getFunction() legal after generator termination.
    • +
    • Added ReflectionGenerator::isClosed().
    • +
    • Fixed bug (Segfault on ReflectionProperty::get{Hook,Hooks}() on dynamic properties).
    • +
    • Fixed bug (ReflectionProperty::isInitialized() is incorrect for hooked properties).
    • +
    • Add missing ReflectionProperty::hasHook[s]() methods.
    • +
    • Add missing ReflectionProperty::isFinal() method.
    • +
    • Fixed bug (The return value of ReflectionFunction::getNamespaceName() and ReflectionFunction::inNamespace() for closures is incorrect).
    • +
    • Fixed bug (No ReflectionProperty::IS_VIRTUAL) (DanielEScherzer)
    • +
    • Fixed the name of the second parameter of ReflectionClass::resetAsLazyGhost().
    • +
  • +
  • Session: +
      +
    • INI settings session.sid_length and session.sid_bits_per_character are now deprecated.
    • +
    • Emit warnings for non-positive values of session.gc_divisor and negative values of session.gc_probability.
    • +
    • Fixed bug (UAF in session_encode()).
    • +
  • +
  • SimpleXML: +
      +
    • Fix signature of simplexml_import_dom().
    • +
  • +
  • SNMP: +
      +
    • Removed the deprecated inet_ntoa call support.
    • +
  • +
  • SOAP: +
      +
    • Add support for clark notation for namespaces in class map.
    • +
    • Mitigate #51561 (SoapServer with a extented class and using sessions, lost the setPersistence()).
    • +
    • (SoapClient::__getLastResponseHeaders returns NULL if wsdl operation !has output).
    • +
    • (PHP DateTime not converted to xsd:datetime).
    • +
    • Fixed bug (soap with session persistence will silently fail when "session" built as a shared object).
    • +
    • Passing an int to SoapServer::addFunction() is now deprecated. If all PHP functions need to be provided flatten the array returned by get_defined_functions().
    • +
    • The SOAP_FUNCTIONS_ALL constant is now deprecated.
    • +
    • (SOAP functions require at least one space after HTTP header colon).
    • +
    • Implement request #47317 (SoapServer::__getLastResponse()).
    • +
  • +
  • Sockets: +
      +
    • Removed the deprecated inet_ntoa call support.
    • +
    • Added the SO_EXECLUSIVEADDRUSE windows constant.
    • +
    • Added the SOCK_CONN_DGRAM/SOCK_DCCP netbsd constants.
    • +
    • Added multicast group support for ipv4 on FreeBSD.
    • +
    • Added the TCP_SYNCNT constant for Linux to set number of attempts to send SYN packets from the client.
    • +
    • Added the SO_EXCLBIND constant for exclusive socket binding on illumos/solaris.
    • +
    • Updated the socket_create_listen backlog argument default value to SOMAXCONN.
    • +
    • Added the SO_NOSIGPIPE constant to control the generation of SIGPIPE for macOs and FreeBSD.
    • +
    • Added SO_LINGER_SEC for macOs, true equivalent of SO_LINGER in other platforms.
    • +
    • Add close-on-exec on socket created with socket_accept on unixes.
    • +
    • Added IP_PORTRANGE* constants for BSD systems to control ephemeral port ranges.
    • +
    • Added SOCK_NONBLOCK/SOCK_CLOEXEC constants for socket_create and socket_create_pair to apply O_NONBLOCK/O_CLOEXEC flags to the newly created sockets.
    • +
    • Added SO_BINDTOIFINDEX to bind a socket to an interface index.
    • +
  • +
  • Sodium: +
      +
    • Add support for AEGIS-128L and AEGIS-256.
    • +
    • Enable AES-GCM on aarch64 with the ARM crypto extensions.
    • +
  • +
  • SPL: +
      +
    • Implement SeekableIterator for SplObjectStorage.
    • +
    • The SplFixedArray::__wakeup() method has been deprecated as it implements __serialize() and __unserialize() which need to be overwritten instead.
    • +
    • Passing a non-empty string for the $escape parameter of: - SplFileObject::setCsvControl() - SplFileObject::fputcsv() - SplFileObject::fgetcsv() is now deprecated.
    • +
  • +
  • Standard: +
      +
    • Implement (Indication for the int size in phpinfo()).
    • +
    • Partly fix (Incorrect round() result for 0.49999999999999994).
    • +
    • Fix (round(): Validate the rounding mode).
    • +
    • Increase the default BCrypt cost to 12.
    • +
    • Fixed bug (strcspn() odd behaviour with NUL bytes and empty mask).
    • +
    • Removed the deprecated inet_ntoa call support.
    • +
    • Cast large floats that are within int range to int in number_format so the precision is not lost.
    • +
    • Add support for 4 new rounding modes to the round() function.
    • +
    • debug_zval_dump() now indicates whether an array is packed.
    • +
    • Fix (Optimize round).
    • +
    • Changed return type of long2ip to string from string|false.
    • +
    • Fix (Extend the maximum precision round can handle by one digit).
    • +
    • Added the http_get_last_response_headers() and http_clear_last_response_headers() that allows retrieving the same content as the magic $http_response_header variable.
    • +
    • Add php_base64_encode_ex() API.
    • +
    • Implemented "Raising zero to the power of negative number" RFC.
    • +
    • Added array_find(), array_find_key(), array_all(), and array_any().
    • +
    • Change highlight_string() and print_r() return type to string|true.
    • +
    • Fix references in request_parse_body() options array.
    • +
    • Add RoundingMode enum.
    • +
    • Unserializing the uppercase 'S' tag is now deprecated.
    • +
    • Enables crc32 auxiliary detection on OpenBSD.
    • +
    • Passing a non-empty string for the $escape parameter of: - fputcsv() - fgetcsv() - str_getcsv() is now deprecated.
    • +
    • The str_getcsv() function now throws ValueErrors when the $separator and $enclosure arguments are not one byte long, or if the $escape is not one byte long or the empty string. This aligns the behaviour to be identical to that of fputcsv() and fgetcsv().
    • +
    • php_uname() now throws ValueErrors on invalid inputs.
    • +
    • The "allowed_classes" option for unserialize() now throws TypeErrors and ValueErrors if it is not an array of class names.
    • +
    • Implemented (improve proc_open error reporting on Windows).
    • +
    • Add support for backed enums in http_build_query().
    • +
    • Fixed bug (Assertion failure with array_find when references are involved).
    • +
    • Fixed parameter names of fpow() to be identical to pow().
    • +
  • +
  • Streams: +
      +
    • Implemented (Stream context is lost when custom stream wrapper is being filtered).
    • +
  • +
  • Tidy: +
      +
    • Failures in the constructor now throw exceptions rather than emitting warnings and having a broken object.
    • +
    • Add tidyNode::getNextSibling() and tidyNode::getPreviousSibling().
    • +
  • +
  • Windows: +
      +
    • Update the icon of the Windows executables, e.g. php.exe.
    • +
    • Fixed bug (GREP_HEADER() is broken).
    • +
  • +
  • XML: +
      +
    • Added XML_OPTION_PARSE_HUGE parser option.
    • +
    • (xml_get_current_byte_index limited to 32-bit numbers on 64-bit builds).
    • +
    • The xml_set_object() function has been deprecated.
    • +
    • Passing non-callable strings to the xml_set_*_handler() functions is now deprecated.
    • +
  • +
  • XMLReader: +
      +
    • Declares class constant types.
    • +
    • Add XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString().
    • +
    • Fixed bug (var_dump doesn't actually work on XMLReader).
    • +
  • +
  • XMLWriter: +
      +
    • Add XMLWriter::toStream(), XMLWriter::toUri(), XMLWriter::toMemory().
    • +
  • +
  • XSL: +
      +
    • Implement request #64137 (XSLTProcessor::setParameter() should allow both quotes to be used).
    • +
    • Implemented "Improve callbacks in ext/dom and ext/xsl" RFC.
    • +
    • Added XSLTProcessor::$maxTemplateDepth and XSLTProcessor::$maxTemplateVars.
    • +
    • Fix trampoline leak in xpath callables.
    • +
  • +
  • Zip: +
      +
    • Added ZipArchive::ER_TRUNCATED_ZIP added in libzip 1.11.
    • +
  • +
+
+ + + + + +
+

Version 8.3.29

+ +
  • Core: +
      +
    • Sync all boost.context files with release 1.86.0.
    • +
    • Fixed bug (SensitiveParameter doesn't work for named argument passing to variadic parameter).
    • +
    • Fixed bug (use-after-destroy during userland stream_close()).
    • +
  • +
  • Bz2: +
      +
    • Fix assertion failures resulting in crashes with stream filter object parameters.
    • +
  • +
  • Date: +
      +
    • Fix crashes when trying to instantiate uninstantiable classes via date static constructors.
    • +
  • +
  • DOM: +
      +
    • Fix missing NUL byte check on C14NFile().
    • +
  • +
  • Fibers: +
      +
    • Fixed bug (ASAN stack overflow with fiber.stack_size INI small value).
    • +
  • +
  • FTP: +
      +
    • Fixed bug (ftp_connect overflow on timeout).
    • +
  • +
  • GD: +
      +
    • Fixed bug (imagegammacorrect out of range input/output values).
    • +
    • Fixed bug (imagescale overflow with large height values).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (Spoofchecker::setRestrictionLevel() error message suggests missing constants).
    • +
  • +
  • LibXML: +
      +
    • Fix some deprecations on newer libxml versions regarding input buffer/parser handling.
    • +
  • +
  • MbString: +
      +
    • Fixed bug (SLES15 compile error with mbstring oniguruma).
    • +
    • Fixed bug (mbstring compile warning due to non-strings).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (Regression breaks mysql connexion using an IPv6 address enclosed in square brackets).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (opcache.file_cache broken with full interned string buffer).
    • +
  • +
  • PDO: +
      +
    • Fixed (PDO quoting result null deref). (CVE-2025-14180)
    • +
  • +
  • Phar: +
      +
    • Fixed bug (Phar does not respect case-insensitiveness of __halt_compiler() when reading stub).
    • +
    • Fix broken return value of fflush() for phar file entries.
    • +
    • Fix assertion failure when fseeking a phar file out of bounds.
    • +
  • +
  • PHPDBG: +
      +
    • Fixed ZPP type violation in phpdbg_get_executable() and phpdbg_end_oplog().
    • +
  • +
  • SPL: +
      +
    • Fixed bug (SplFixedArray incorrectly handles references in deserialization).
    • +
  • +
  • Standard: +
      +
    • Fix memory leak in array_diff() with custom type checks.
    • +
    • Fixed bug (Stack overflow in http_build_query via deep structures).
    • +
    • Fixed (Null byte termination in dns_get_record()).
    • +
    • Fixed (Heap buffer overflow in array_merge()). (CVE-2025-14178)
    • +
    • Fixed (Information Leak of Memory in getimagesize). (CVE-2025-14177)
    • +
  • +
  • Tidy: +
      +
    • Fixed bug (PHP with tidy and custom-tags).
    • +
  • +
  • XML: +
      +
    • Fixed bug (xml_set_default_handler() does not properly handle special characters in attributes when passing data to callback).
    • +
  • +
  • Zip: +
      +
    • Fix crash in property existence test.
    • +
    • Don't truncate return value of zip_fread() with user sizes.
    • +
  • +
  • Zlib: +
      +
    • Fix assertion failures resulting in crashes with stream filter object parameters.
    • +
  • +
+
+ + + +
+

Version 8.3.28

+ +
  • Core: +
      +
    • Fixed bug (CGI with auto_globals_jit=0 causes uouv).
    • +
    • Fixed bug (Assertion failure in WeakMap offset operations on reference).
    • +
    • Fixed bug (Don't bail when closing resources on shutdown).
    • +
    • Fixed bug (Accessing overridden private property in get_object_vars() triggers assertion error).
    • +
    • Fixed bug (Stale EG(opline_before_exception) pointer through eval).
    • +
  • +
  • DOM: +
      +
    • Partially fixed bug (DOM classes do not allow __debugInfo() overrides to work).
    • +
  • +
  • Exif: +
      +
    • Fix possible memory leak when tag is empty.
    • +
  • +
  • FPM: +
      +
    • Fixed bug (fpm_status_export_to_zval segfault for parallel execution).
    • +
  • +
  • FTP: +
      +
    • Fixed bug (FTP with SSL: ftp_fput(): Connection timed out on successful writes).
    • +
  • +
  • GD: +
      +
    • Fixed bug (Return type violation in imagefilter when an invalid filter is provided).
    • +
  • +
  • Intl: +
      +
    • Fix memory leak on error in locale_filter_matches().
    • +
  • +
  • LibXML: +
      +
    • Fix not thread safe schema/relaxng calls.
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (SSL certificate verification fails (port doubled)).
    • +
    • Fixed bug (getColumnMeta() for JSON-column in MySQL).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (access to uninitialized vars in preload_load()).
    • +
    • Fixed bug (JIT broken in ZTS builds on MacOS 15).
    • +
  • +
  • PgSql: +
      +
    • Fix memory leak when first string conversion fails.
    • +
    • Fix segfaults when attempting to fetch row into a non-instantiable class name.
    • +
  • +
  • Phar: +
      +
    • Fix memory leak of argument in webPhar.
    • +
    • Fix memory leak when setAlias() fails.
    • +
    • Fix a bunch of memory leaks in phar_parse_zipfile() error handling.
    • +
    • Fix file descriptor/memory leak when opening central fp fails.
    • +
    • Fix memleak+UAF when opening temp stream in buildFromDirectory() fails.
    • +
    • Fix potential buffer length truncation due to usage of type int instead of type size_t.
    • +
    • Fix memory leak when openssl polyfill returns garbage.
    • +
    • Fix file descriptor leak in phar_zip_flush() on failure.
    • +
    • Fix memory leak when opening temp file fails while trying to open gzip-compressed archive.
    • +
    • Fixed bug (Freeing a phar alias may invalidate PharFileInfo objects).
    • +
  • +
  • Random: +
      +
    • Fix Randomizer::__serialize() w.r.t. INDIRECTs.
    • +
  • +
  • SimpleXML: +
      +
    • Partially fixed bug (SimpleXML does not allow __debugInfo() overrides to work).
    • +
  • +
  • Standard: +
      +
    • Fix shm corruption with coercion in options of unserialize().
    • +
  • +
  • Streams: +
      +
    • Fixed bug : XP_SOCKET XP_SSL (Socket stream modules): Incorrect condition for Win32/Win64.
    • +
  • +
  • Tidy: +
      +
    • Fixed (improved tidyOptGetCategory detection).
    • +
    • Fix UAF in tidy when tidySetErrorBuffer() fails.
    • +
  • +
  • XMLReader: +
      +
    • Fix arginfo/zpp violations when LIBXML_SCHEMAS_ENABLED is not available.
    • +
  • +
  • Windows: +
      +
    • Fix (_get_osfhandle asserts in debug mode when given a socket).
    • +
  • +
  • Zip: +
      +
    • Fix memory leak when passing enc_method/enc_password is passed as option for ZipArchive::addGlob()/addPattern() and with consecutive calls.
    • +
  • +
+
+ + + +
+

Version 8.3.27

+ +
  • Core: +
      +
    • Fixed bug (object_properties_load() bypasses readonly property checks).
    • +
    • Fixed hard_timeout with --enable-zend-max-execution-timers.
    • +
    • Fixed bug (SCCP causes UAF for return value if both warning and exception are triggered).
    • +
    • Fixed bug (Closure named argument unpacking between temporary closures can cause a crash).
    • +
    • Fixed bug (Incorrect HASH_FLAG_HAS_EMPTY_IND flag on userland array).
    • +
    • Fixed bug (error_log php.ini cannot be unset when open_basedir is configured).
    • +
    • Fixed bug (Broken build on *BSD with MSAN).
    • +
  • +
  • CLI: +
      +
    • Fix useless "Failed to poll event" error logs due to EAGAIN in CLI server with PHP_CLI_SERVER_WORKERS.
    • +
  • +
  • Curl: +
      +
    • Fix cloning of CURLOPT_POSTFIELDS when using the clone operator instead of the curl_copy_handle() function to clone a CurlHandle.
    • +
    • Fix curl build and test failures with version 8.16.
    • +
  • +
  • Date: +
      +
    • Fixed : "P" format for ::createFromFormat swallows string literals.
    • +
  • +
  • DBA: +
      +
    • Fixed (dba_fetch() overflow on skip argument).
    • +
  • +
  • GD: +
      +
    • Fixed (imagefttext() memory leak).
    • +
  • +
  • MySQLnd: +
      +
    • (mysqli compiled with mysqlnd does not take ipv6 adress as parameter).
    • +
  • +
  • Phar: +
      +
    • Fix memory leak and invalid continuation after tar header writing fails.
    • +
    • Fix memory leaks when creating temp file fails when applying zip signature.
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (zend_string_init with NULL pointer in simplexml (UB)).
    • +
  • +
  • Soap: +
      +
    • Fixed bug (SoapServer memory leak).
    • +
    • Fixed bug (Array of SoapVar of unknown type causes crash).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Cloning an object breaks serialization recursion).
    • +
    • Fixed bug (Serialize/deserialize loses some data).
    • +
    • Fixed bug (leaks in var_dump() and debug_zval_dump()).
    • +
    • Fixed bug (array_unique assertion failure with RC1 array causing an exception on sort).
    • +
    • Fixed bug (reset internal pointer earlier while splicing array while COW violation flag is still set).
    • +
    • Fixed bug (unable to fseek in /dev/zero and /dev/null).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (Use strerror_r instead of strerror in main).
    • +
    • Fixed bug (Bug #35916 was not completely fixed).
    • +
    • Fixed bug (segmentation when attempting to flush on non seekable stream.
    • +
  • +
  • XMLReader: +
      +
    • Fixed bug (XMLReader leak on RelaxNG schema failure).
    • +
  • +
  • Zip: +
      +
    • Fixed bug (Remove pattern overflow in zip addGlob()).
    • +
    • Fixed bug (Memory leak in zip setEncryptionName()/setEncryptionIndex()).
    • +
  • +
  • Zlib: +
      +
    • Fixed bug (Double free on gzopen).
    • +
  • +
+
+ + + +
+

Version 8.3.26

+ +
  • Core: +
      +
    • Fixed bug (Repeated inclusion of file with __halt_compiler() triggers "Constant already defined" warning).
    • +
    • Partially fixed bug (Scanning of string literals >=2GB will fail due to signed int overflow).
    • +
    • Fixed bug (GC treats ZEND_WEAKREF_TAG_MAP references as WeakMap references).
    • +
    • Fixed bug (Stale array iterator pointer).
    • +
    • Fixed bug (zend_ssa_range_widening may fail to converge).
    • +
    • Fixed bug (PHP_EXPAND_PATH broken with bash 5.3.0).
    • +
    • Fixed bug (Assertion failure when error handler throws when accessing a deprecated constant).
    • +
  • +
  • CLI: +
      +
    • Fixed bug (Improve error message on listening error with IPv6 address).
    • +
  • +
  • Date: +
      +
    • Fixed date_sunrise() and date_sunset() with partial-hour UTC offset.
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Mitigate libxml2 tree dictionary bug).
    • +
  • +
  • FPM: +
      +
    • Fixed failed debug assertion when php_admin_value setting fails.
    • +
  • +
  • GD: +
      +
    • Fixed bug (imagefilledellipse underflow on width argument).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (Fix locale strings canonicalization for IntlDateFormatter and NumberFormatter).
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (Success error message on TLS stream accept failure).
    • +
  • +
  • PGSQL: +
      +
    • Fixed bug (potential use after free when using persistent pgsql connections).
    • +
  • +
  • Phar: +
      +
    • Fixed memory leaks when verifying OpenSSL signature.
    • +
    • Fix memory leak in phar tar temporary file error handling code.
    • +
    • Fix metadata leak when phar convert logic fails.
    • +
    • Fix memory leak on failure in phar_convert_to_other().
    • +
    • Fixed bug (Phar decompression with invalid extension can cause UAF).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (UAF during array_splice).
    • +
    • Fixed bug (Avoid integer overflow when using a small offset and PHP_INT_MAX with LimitIterator).
    • +
  • +
  • Streams: +
      +
    • Remove incorrect call to zval_ptr_dtor() in user_wrapper_metadata().
    • +
    • Fix OSS-Fuzz #385993744.
    • +
  • +
  • Tidy: +
      +
    • Fixed build issue with libtidy in regard of tidyOptIsReadonly deprecation and TidyInternalCategory being available later than tidyOptGetCategory.
    • +
  • +
  • Zip: +
      +
    • Fix memory leak in zip when encountering empty glob result.
    • +
  • +
+
+ + + +
+

Version 8.3.25

+ +
  • Core: +
      +
    • Fixed build issue with C++17 and ZEND_STATIC_ASSERT macro.
    • +
    • Fixed bug (Coerce numeric string keys from iterators when argument unpacking).
    • +
    • Fixed OSS-Fuzz #434346548 (Failed assertion with throwing __toString in binary const expr).
    • +
    • Fixed bug (Operands may be being released during comparison).
    • +
    • Fixed bug (Unpacking empty packed array into uninitialized array causes assertion failure).
    • +
    • Fixed bug (Generator can be resumed while fetching next value from delegated Generator).
    • +
    • Fixed bug (Calling Generator::throw() on a running generator with a non-Generator delegate crashes).
    • +
    • Fixed bug (Circumvented type check with return by ref + finally).
    • +
    • Fixed zend call stack size for macOs/arm64.
    • +
    • Fixed bug (Long match statement can segfault compiler during recursive SSA renaming).
    • +
  • +
  • Calendar: +
      +
    • Fixed bug (integer overflow in calendar.c).
    • +
  • +
  • FTP: +
      +
    • Fix theoretical issues with hrtime() not being available.
    • +
  • +
  • GD: +
      +
    • Fix incorrect comparison with result of php_stream_can_cast().
    • +
  • +
  • Hash: +
      +
    • Fix crash on clone failure.
    • +
  • +
  • Intl: +
      +
    • Fixed : msgfmt_parse_message leaks on message creation failure.
    • +
    • Fix return value on failure for resourcebundle count handler.
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (additional inheriting of TLS int options).
    • +
  • +
  • LibXML: +
      +
    • Fixed bug (libxml<2.13 segmentation fault caused by php_libxml_node_free).
    • +
  • +
  • MbString: +
      +
    • Fixed bug (mb_list_encodings() can cause crashes on shutdown).
    • +
  • +
  • Opcache: +
      +
    • Reset global pointers to prevent use-after-free in zend_jit_status().
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (OpenSSL backend: incorrect RAND_{load,write}_file() return value check).
    • +
    • Fix error return check of EVP_CIPHER_CTX_ctrl().
    • +
    • Fixed bug (openssl_pkey_derive segfaults for DH derive with low key_length param).
    • +
  • +
  • PDO Pgsql: +
      +
    • Fixed dangling pointer access on _pdo_pgsql_trim_message helper.
    • +
  • +
  • Readline: +
      +
    • Fixed bug and bug #51360 (Invalid conftest for rl_pending_input).
    • +
  • +
  • SOAP: +
      +
    • Fixed bug (heap-use-after-free ext/soap/php_encoding.c:299:32 in soap_check_zval_ref).
    • +
  • +
  • Sockets: +
      +
    • Fix some potential crashes on incorrect argument value.
    • +
  • +
  • Standard: +
      +
    • Fixed OSS Fuzz #433303828 (Leak in failed unserialize() with opcache).
    • +
    • Fix theoretical issues with hrtime() not being available.
    • +
    • Fixed bug (Nested array_multisort invocation with error breaks).
    • +
  • +
  • Windows: +
      +
    • Free opened_path when opened_path_len >= MAXPATHLEN.
    • +
  • +
+
+ + + +
+

Version 8.3.24

+ +
  • Calendar: +
      +
    • Fixed jewishtojd overflow on year argument.
    • +
  • +
  • Core: +
      +
    • Fixed bug (Use after free with weakmaps dependent on destruction order).
    • +
    • Fix OSS-Fuzz #427814456.
    • +
    • Fix OSS-Fuzz #428983568 and #428760800.
    • +
    • Fixed bug -Wuseless-escape warnings emitted by re2c.
    • +
  • +
  • Curl: +
      +
    • Fix memory leaks when returning refcounted value from curl callback.
    • +
    • Remove incorrect string release.
    • +
  • +
  • LDAP: +
      +
    • Fixed ldap_exop/ldap_exop_sync assert triggered on empty request OID.
    • +
  • +
  • MbString: +
      +
    • Fixed bug (integer overflow mb_split).
    • +
  • +
  • OCI8: +
      +
    • Fixed bug (OCI_RETURN_LOBS flag causes oci8 to leak memory).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Internal class aliases can break preloading + JIT).
    • +
    • Fixed bug (Segmentation fault on unknown address 0x600000000018 in ext/opcache/jit/zend_jit.c).
    • +
  • +
  • OpenSSL: +
      +
    • (It is not possible to get client peer certificate with stream_socket_server).
    • +
  • +
  • PCNTL: +
      +
    • Fixed bug (Fatal error during shutdown after pcntl_rfork() or pcntl_forkx() with zend-max-execution-timers).
    • +
  • +
  • Phar: +
      +
    • Fix stream double free in phar.
    • +
    • Fix phar crash and file corruption with SplFileObject.
    • +
  • +
  • SOAP: +
      +
    • Fixed bug , bug #81029, bug #47314 (SOAP HTTP socket not closing on object destruction).
    • +
    • Fix memory leak when URL parsing fails in redirect.
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Attaching class with no Iterator implementation to MultipleIterator causes crash).
    • +
  • +
  • Standard: +
      +
    • Fix misleading errors in printf().
    • +
    • Fix RCN violations in array functions.
    • +
    • Fixed pack() overflow with h/H format and INT_MAX repeater value.
    • +
  • +
  • Streams: +
      +
    • Fixed (fgets() and stream_get_line() do not return false on filter fatal error).
    • +
  • +
  • Zip: +
      +
    • Fix leak when path is too long in ZipArchive::extractTo().
    • +
  • +
+
+ + + +
+

Version 8.3.23

+ +
  • Core: +
      +
    • Fixed (zend_ast_export() - float number is not preserved).
    • +
    • Do not delete main chunk in zend_gc.
    • +
    • Fix compile issues with zend_alloc and some non-default options.
    • +
  • +
  • Curl: +
      +
    • Fix memory leak when setting a list via curl_setopt fails.
    • +
    • Fix incorrect OpenSSL version detection.
    • +
  • +
  • Date: +
      +
    • Fix leaks with multiple calls to DatePeriod iterator current().
    • +
  • +
  • FPM: +
      +
    • Fixed (fpm_get_status segfault).
    • +
  • +
  • Hash: +
      +
    • Fixed bug (PGO build fails with xxhash).
    • +
  • +
  • Intl: +
      +
    • Fix memory leak in intl_datetime_decompose() on failure.
    • +
    • Fix memory leak in locale lookup on failure.
    • +
  • +
  • ODBC: +
      +
    • Fix memory leak on php_odbc_fetch_hash() failure.
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Incompatibility in Inline TLS Assembly on Alpine 3.22).
    • +
  • +
  • OpenSSL: +
      +
    • Fix memory leak of X509_STORE in php_openssl_setup_verify() on failure.
    • +
    • (Requests through http proxy set peer name).
    • +
  • +
  • PGSQL: +
      +
    • Fixed (pgsql extension does not check for errors during escaping). (CVE-2025-1735)
    • +
    • Fix warning not being emitted when failure to cancel a query with pg_cancel_query().
    • +
  • +
  • Phar: +
      +
    • Add missing filter cleanups on phar failure.
    • +
    • Fixed bug (Signed integer overflow in ext/phar fseek).
    • +
  • +
  • PHPDBG: +
      +
    • Fix 'phpdbg --help' segfault on shutdown with USE_ZEND_ALLOC=0.
    • +
  • +
  • PDO ODBC: +
      +
    • Fix memory leak if WideCharToMultiByte() fails.
    • +
  • +
  • Random: +
      +
    • Fix reference type confusion and leak in user random engine.
    • +
  • +
  • Readline: +
      +
    • Fix memory leak when calloc() fails in php_readline_completion_cb().
    • +
  • +
  • SOAP: +
      +
    • Fix memory leaks in php_http.c when call_user_function() fails.
    • +
    • Fixed (NULL Pointer Dereference in PHP SOAP Extension via Large XML Namespace Prefix). (CVE-2025-6491)
    • +
  • +
  • Standard: +
      +
    • Fixed (Null byte termination in hostnames). (CVE-2025-1220)
    • +
  • +
  • Tidy: +
      +
    • Fix memory leak in tidy output handler on error.
    • +
    • Fix tidyOptIsReadonly deprecation, using tidyOptGetCategory.
    • +
  • +
+
+ + + +
+

Version 8.3.22

+ +
  • Core: +
      +
    • Fixed (array_splice with large values for offset/length arguments).
    • +
    • Partially fixed (nested object comparisons leading to stack overflow).
    • +
    • Fixed OSS-Fuzz #417078295.
    • +
    • Fixed OSS-Fuzz #418106144.
    • +
  • +
  • Curl: +
      +
    • Fixed (curl_easy_setopt with CURLOPT_USERPWD/CURLOPT_USERNAME/ CURLOPT_PASSWORD set the Authorization header when set to NULL).
    • +
  • +
  • Date: +
      +
    • Fixed bug (Since PHP 8, the date_sun_info() function returns inaccurate sunrise and sunset times, but other calculated times are correct) (JiriJozif).
    • +
    • Fixed bug (date_sunrise with unexpected nan value for the offset).
    • +
  • +
  • Intl: +
      +
    • Fix various reference issues.
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (ldap no longer respects TLS_CACERT from ldaprc in ldap_start_tls()).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Windows SHM reattachment fails when increasing memory_consumption or jit_buffer_size).
    • +
    • Fixed bug (Preloading with internal class alias triggers assertion failure).
    • +
    • Fix leak of accel_globals->key.
    • +
  • +
  • OpenSSL: +
      +
    • Fix missing checks against php_set_blocking() in xp_ssl.c.
    • +
  • +
  • PDO_OCI: +
      +
    • Fixed bug (PDO OCI segfault in statement GC).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Integer overflow with large numbers in LimitIterator).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Potential deadlock when putenv fails).
    • +
    • Fixed bug (Dynamic calls to assert() ignore zend.assertions).
    • +
  • +
  • Windows: +
      +
    • Fix leak+crash with sapi_windows_set_ctrl_handler().
    • +
  • +
  • Zip: +
      +
    • Fixed bug (Registering ZIP progress callback twice doesn't work).
    • +
    • Fixed bug (Handling of empty data and errors in ZipArchive::addPattern).
    • +
  • +
+
+ + + +
+

Version 8.3.21

+ +
  • Core: +
      +
    • Fixed bug (Changing the properties of a DateInterval through dynamic properties triggers a SegFault).
    • +
    • Fix some leaks in php_scandir.
    • +
  • +
  • Filter: +
      +
    • Fixed bug (ipv6 filter integer overflow).
    • +
  • +
  • GD: +
      +
    • Fixed imagecrop() overflow with rect argument with x/width y/heigh usage in gdImageCrop().
    • +
    • Fixed imagettftext() overflow/underflow on font size value.
    • +
  • +
  • Intl: +
      +
    • Fix reference support for intltz_get_offset().
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (LDAP_OPT_X_TLS_* options can't be overridden).
    • +
    • Fix NULL deref on high modification key.
    • +
  • +
  • libxml: +
      +
    • Fixed custom external entity loader returning an invalid resource leading to a confusing TypeError message.
    • +
  • +
  • OpenSSL: +
      +
    • Fix memory leak in openssl_sign() when passing invalid algorithm.
    • +
    • Fix potential leaks when writing to BIO fails.
    • +
  • +
  • PDO Firebird: +
      +
    • Fixed - persistent connection - "zend_mm_heap corrupted" with setAttribute() (SakiTakamachi).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (SplObjectStorage debug handler mismanages memory).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (php8ts crashes in php_clear_stat_cache()).
    • +
    • Fixed bug (Use-after-free in extract() with EXTR_REFS).
    • +
    • Fixed bug (fseek with SEEK_CUR whence value and negative offset leads to negative stream position).
    • +
    • Fix resource leak in iptcembed() on error.
    • +
  • +
  • Zip: +
      +
    • Fix uouv when handling empty options in ZipArchive::addGlob().
    • +
    • Fix memory leak when handling a too long path in ZipArchive::addGlob().
    • +
  • +
+
+ + + +
+

Version 8.3.20

+ +
  • Core: +
      +
    • Fixed bug (use-after-free during dl()'ed module class destruction).
    • +
    • Fixed bug (dl() of module with aliased class crashes in shutdown).
    • +
    • Fixed bug again (Significant performance degradation in 'foreach').
    • +
  • +
  • DOM: +
      +
    • Fix weird unpack behaviour in DOM.
    • +
    • Fix xinclude destruction of live attributes.
    • +
  • +
  • Embed: +
      +
    • Fixed bug (Unable to link dynamic libphp on Mac).
    • +
  • +
  • Fuzzer: +
      +
    • Fixed bug (Memory leaks in error paths of fuzzer SAPI).
    • +
  • +
  • GD: +
      +
    • Fixed bug (calls with arguments as array with references).
    • +
  • +
  • Intl: +
      +
    • Fix locale_compose and locale_lookup to work with their array argument with values as references.
    • +
    • Fix dateformat_format when the time is an array of references.
    • +
    • Fix UConverter::transcode with substitutes as references.
    • +
  • +
  • Mbstring: +
      +
    • Fixed bug (mb_output_handler crash with unset http_output_conv_mimetypes).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (NULL access with preloading and INI option).
    • +
    • Fixed bug (Opcache CFG jmp optimization with try-finally breaks the exception table).
    • +
  • +
  • PDO: +
      +
    • Fix memory leak when destroying PDORow.
    • +
  • +
  • SOAP: +
      +
    • (Typemap can break parsing in parse_packet_soap leading to a segfault) .
    • +
  • +
  • SPL: +
      +
    • Fixed bug (RC1 data returned from offsetGet causes UAF in ArrayObject).
    • +
  • +
  • Treewide: +
      +
    • Fixed bug (Assertion failure zend_reference_destroy()).
    • +
  • +
  • Windows: +
      +
    • Fixed bug (zend_vm_gen.php shouldn't break on Windows line endings).
    • +
  • +
+
+ + + +
+

Version 8.3.19

+ +
  • BCMath: +
      +
    • Fixed bug (bcmul memory leak).
    • +
  • +
  • Core: +
      +
    • Fixed bug (Broken stack overflow detection for variable compilation).
    • +
    • Fixed bug (UnhandledMatchError does not take zend.exception_ignore_args=1 into account).
    • +
    • Fix fallback paths in fast_long_{add,sub}_function.
    • +
    • Fixed bug (Calling static methods on an interface that has `__callStatic` is allowed).
    • +
    • Fixed bug (zend_test_compile_string crash on invalid script path).
    • +
    • Fixed (Reference counting in php_request_shutdown causes Use-After-Free). (CVE-2024-11235)
    • +
  • +
  • DOM: +
      +
    • Fixed bug (xinclude destroys live node).
    • +
  • +
  • FFI: +
      +
    • Fix FFI Parsing of Pointer Declaration Lists.
    • +
  • +
  • FPM: +
      +
    • Fixed bug (FPM with httpd ProxyPass encoded PATH_INFO env).
    • +
  • +
  • GD: +
      +
    • Fixed bug (imagepalettetotruecolor crash with memory_limit=2M).
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (ldap_search fails when $attributes contains a non-packed array with numerical keys).
    • +
  • +
  • LibXML: +
      +
    • Fixed (Reocurrence of #72714).
    • +
    • Fixed (libxml streams use wrong `content-type` header when requesting a redirected resource). (CVE-2025-1219)
    • +
  • +
  • MBString: +
      +
    • Fixed bug (Undefined float conversion in mb_convert_variables).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Multiple classes using same trait causes function JIT crash).
    • +
    • Fixed bug (JIT packed type guard crash).
    • +
    • Fixed bug (zend_test_compile_string with invalid path when opcache is enabled).
    • +
    • Fixed bug (Cannot allocate memory with tracing JIT).
    • +
  • +
  • PDO_SQLite: +
      +
    • Fixed ()::getColumnMeta() on unexecuted statement segfaults).
    • +
    • Fix cycle leak in sqlite3 setAuthorizer().
    • +
  • +
  • Phar: +
      +
    • Fixed bug : PharFileInfo refcount bug.
    • +
  • +
  • PHPDBG: +
      +
    • Partially fixed bug (Trivial crash in phpdbg lexer).
    • +
    • Fix memory leak in phpdbg calling registered function.
    • +
  • +
  • Reflection: +
      +
    • Fixed bug (Core dumped in ext/reflection/php_reflection.c).
    • +
  • +
  • Standard: +
      +
    • (stat cache clearing inconsistent between file:// paths and plain paths).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (realloc with size 0 in user_filters.c).
    • +
    • Fix memory leak on overflow in _php_stream_scandir().
    • +
    • Fixed (Stream HTTP wrapper header check might omit basic auth header). (CVE-2025-1736)
    • +
    • Fixed (Stream HTTP wrapper truncate redirect location to 1024 bytes). (CVE-2025-1861)
    • +
    • Fixed (Streams HTTP wrapper does not fail for headers without colon). (CVE-2025-1734)
    • +
    • Fixed (Header parser of `http` stream wrapper does not handle folded headers). (CVE-2025-1217)
    • +
  • +
  • Windows: +
      +
    • Fixed phpize for Windows 11 (24H2).
    • +
    • Fixed (CURL_STATICLIB flag set even if linked with shared lib).
    • +
  • +
  • Zlib: +
      +
    • Fixed bug (zlib extension incorrectly handles object arguments).
    • +
    • Fix memory leak when encoding check fails.
    • +
    • Fix zlib support for large files.
    • +
  • +
+
+ + + +
+

Version 8.3.17

+ +
  • Core: +
      +
    • Fixed bug (ini_parse_quantity() fails to parse inputs starting with 0x0b).
    • +
    • Fixed bug (ini_parse_quantity() fails to emit warning for 0x+0).
    • +
    • Fixed bug (Relax final+private warning for trait methods with inherited final).
    • +
    • Fixed NULL arithmetic during system program execution on Windows.
    • +
    • Fixed potential OOB when checking for trailing spaces on Windows.
    • +
    • Fixed bug (Assertion failure Zend/zend_exceptions.c).
    • +
    • Fix may_have_extra_named_args flag for ZEND_AST_UNPACK.
    • +
    • Fix NULL arithmetic in System V shared memory emulation for Windows.
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Segfault with requesting nodeName on nameless doctype).
    • +
  • +
  • Enchant: +
      +
    • Fix crashes in enchant when passing null bytes.
    • +
  • +
  • FTP: +
      +
    • Fixed bug (ftp functions can abort with EINTR).
    • +
  • +
  • GD: +
      +
    • Fixed bug (Tiled truecolor filling looses single color transparency).
    • +
    • Fixed bug (imagefttext() ignores clipping rect for palette images).
    • +
    • Ported fix for libgd 223 (gdImageRotateGeneric() does not properly interpolate).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (intl causing segfault in docker images).
    • +
    • Fixed bug (UConverter::transcode always emit E_WARNING on invalid encoding).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Internal closure causes JIT failure).
    • +
    • Fixed bug (Potential UB when reading from / writing to struct padding).
    • +
  • +
  • PDO: +
      +
    • Fixed a memory leak when the GC is used to free a PDOStatment.
    • +
    • Fixed a crash in the PDO Firebird Statement destructor.
    • +
    • Fixed UAFs when changing default fetch class ctor args.
    • +
  • +
  • Phar: +
      +
    • Fixed bug (offset overflow phar extractTo()).
    • +
  • +
  • PHPDBG: +
      +
    • Fix crashes in function registration + test.
    • +
  • +
  • Session: +
      +
    • Fix type confusion with session SID constant.
    • +
    • Fixed bug (ext/session NULL pointer dereferencement during ID reset).
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (Assertion failure Zend/zend_hash.c:1730).
    • +
  • +
  • SNMP: +
      +
    • Fixed bug (SNMP::setSecurity segfault on closed session).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (crash on SplTempFileObject::ftruncate with negative value).
    • +
  • +
  • Zip: +
      +
    • Fixed bug (Fix zip_entry_name() crash on invalid entry).
    • +
  • +
+
+ + + +
+

Version 8.3.16

+ +
  • Core: +
      +
    • Fixed bug (ZEND_MATCH_ERROR misoptimization).
    • +
    • Fixed bug (zend_array_try_init() with dtor can cause engine UAF).
    • +
    • Fixed bug (AST->string does not reproduce constructor property promotion correctly).
    • +
    • Fixed bug (observer segfault on function loaded with dl()).
    • +
    • Fixed bug (Trampoline crash on error).
    • +
  • +
  • Date: +
      +
    • Fixed bug DatePeriod::__construct() overflow on recurrences.
    • +
  • +
  • DBA: +
      +
    • Skip test if inifile is disabled.
    • +
  • +
  • DOM: +
      +
    • Fixed bug (UAF in importNode).
    • +
  • +
  • Embed: +
      +
    • Make build command for program using embed portable.
    • +
  • +
  • FFI: +
      +
    • (FFI header parser chokes on comments).
    • +
    • Fix memory leak on ZEND_FFI_TYPE_CHAR conversion failure.
    • +
    • Fixed bug and bug #80857 (Big endian issues).
    • +
  • +
  • Filter: +
      +
    • Fixed bug (Fix filtering special IPv4 and IPv6 ranges, by using information from RFC 6890).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (FPM: ERROR: scoreboard: failed to lock (already locked)).
    • +
    • Fixed bug (Macro redefinitions).
    • +
    • Fixed bug (bug64539-status-json-encoding.phpt fail on 32-bits).
    • +
  • +
  • GD: +
      +
    • Fixed bug (Unexpected nan value in ext/gd/libgd/gd_filter.c).
    • +
    • Ported fix for libgd bug 276 (Sometimes pixels are missing when storing images as BMPs).
    • +
  • +
  • Gettext: +
      +
    • Fixed bug (Segmentation fault ext/gettext/gettext.c bindtextdomain()).
    • +
  • +
  • Iconv: +
      +
    • Fixed bug (UAF on iconv filter failure).
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (ldap_search() fails when $attributes array has holes).
    • +
  • +
  • LibXML: +
      +
    • Fixed bug (Memory leak in libxml encoding handling).
    • +
  • +
  • MBString: +
      +
    • Fixed bug (Macro redefinitions).
    • +
  • +
  • Opcache: +
      +
    • opcache_get_configuration() properly reports jit_prof_threshold.
    • +
    • Fixed bug (GC during SCCP causes segfault).
    • +
  • +
  • PCNTL: +
      +
    • Fix memory leak in cleanup code of pcntl_exec() when a non stringable value is encountered past the first entry.
    • +
  • +
  • PgSql: +
      +
    • Fixed bug (pg_fetch_result Shows Incorrect ArgumentCountError Message when Called With 1 Argument).
    • +
    • Fixed further ArgumentCountError for calls with flexible number of arguments.
    • +
  • +
  • Phar: +
      +
    • Fixed bug (Segmentation fault ext/phar/phar.c).
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (SimpleXML's unset can break DOM objects).
    • +
    • Fixed bug (SimpleXML crash when using autovivification on document).
    • +
  • +
  • Sockets: +
      +
    • Fixed bug (socket_strerror overflow handling with INT_MIN).
    • +
    • Fixed overflow on SO_LINGER values setting, strengthening values check on SO_SNDTIMEO/SO_RCVTIMEO for socket_set_option().
    • +
  • +
  • SPL: +
      +
    • Fixed bug (NULL deref in spl_directory.c).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (UAF in user filter when adding existing filter name due to incorrect error handling).
    • +
    • Fixed bug (overflow on fopen HTTP wrapper timeout value).
    • +
    • Fixed bug (glob:// wrapper doesn't cater to CWD for ZTS builds).
    • +
  • +
  • Windows: +
      +
    • Hardened proc_open() against cmd.exe hijacking.
    • +
  • +
  • XML: +
      +
    • Fixed bug (unreachable program point in zend_hash).
    • +
  • +
+
+ + + +
+

Version 8.3.15

+ +
  • Calendar: +
      +
    • Fixed jdtogregorian overflow.
    • +
    • Fixed cal_to_jd julian_days argument overflow.
    • +
  • +
  • COM: +
      +
    • Fixed bug (Getting typeinfo of non DISPATCH variant segfaults).
    • +
  • +
  • Core: +
      +
    • Fail early in *nix configuration build script.
    • +
    • Fixed bug (Opcache bad signal 139 crash in ZTS bookworm (frankenphp)).
    • +
    • Fixed bug (Assertion failure at Zend/zend_vm_execute.h:7469).
    • +
    • Fixed bug (UAF in lexer with encoding translation and heredocs).
    • +
    • Fix is_zend_ptr() huge block comparison.
    • +
    • Fixed potential OOB read in zend_dirname() on Windows.
    • +
  • +
  • Curl: +
      +
    • Fixed bug (open_basedir bypass using curl extension).
    • +
    • Fix various memory leaks in curl mime handling.
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Calling the constructor again on a DOM object after it is in a document causes UAF).
    • +
    • Fixed bug (Reloading document can cause UAF in iterator).
    • +
  • +
  • FPM: +
      +
    • Fixed (PHP-FPM 8.2 SIGSEGV in fpm_get_status).
    • +
  • +
  • GD: +
      +
    • Fixed (imagecreatefromstring overflow).
    • +
  • +
  • GMP: +
      +
    • Fixed bug (array_sum() with GMP can loose precision (LLP64)).
    • +
  • +
  • Hash: +
      +
    • Fixed : Segfault in mhash().
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Tracing JIT type mismatch when returning UNDEF).
    • +
    • Fixed bug (JIT_G(enabled) not set correctly on other threads).
    • +
    • Fixed bug (Set of opcache tests fail zts+aarch64).
    • +
  • +
  • OpenSSL: +
      +
    • Prevent unexpected array entry conversion when reading key.
    • +
    • Fix various memory leaks related to openssl exports.
    • +
    • Fix memory leak in php_openssl_pkey_from_zval().
    • +
  • +
  • PDO: +
      +
    • Fixed memory leak of `setFetchMode()`.
    • +
  • +
  • Phar: +
      +
    • Fixed bug (phar:// tar parser and zero-length file header blocks).
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (Segfault with breakpoint map and phpdbg_clear()).
    • +
  • +
  • SAPI: +
      +
    • Fixed bug (UBSAN warning in rfc1867).
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (Segmentation fault in RecursiveIteratorIterator ->current() with a xml element input).
    • +
  • +
  • SOAP: +
      +
    • Fix make check being invoked in ext/soap.
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Internal iterator functions can't handle UNDEF properties).
    • +
    • Fixed bug (Assertion failure in array_shift with self-referencing array).
    • +
  • +
  • Streams: +
      +
    • Fixed network connect poll interuption handling.
    • +
  • +
  • Windows: +
      +
    • Fixed bug (Error dialog causes process to hang).
    • +
  • +
+
+ + + +
+

Version 8.3.14

+ +
  • CLI: +
      +
    • Fixed bug (Shebang is not skipped for router script in cli-server started through shebang).
    • +
    • Fixed bug (Heap-Use-After-Free in sapi_read_post_data Processing in CLI SAPI Interface).
    • +
  • +
  • COM: +
      +
    • Fixed out of bound writes to SafeArray data.
    • +
  • +
  • Core: +
      +
    • Fixed bug (php 8.1 and earlier crash immediately when compiled with Xcode 16 clang on macOS 15).
    • +
    • Fixed bug (Assertion failure in Zend/zend_weakrefs.c:646).
    • +
    • Fixed bug (Incorrect propagation of ZEND_ACC_RETURN_REFERENCE for call trampoline).
    • +
    • Fixed bug (Incorrect line number in function redeclaration error).
    • +
    • Fixed bug (Incorrect line number in inheritance errors of delayed early bound classes).
    • +
    • Fixed bug (Use-after-free during array sorting).
    • +
  • +
  • Curl: +
      +
    • Fixed bug (CurlMultiHandle holds a reference to CurlHandle if curl_multi_add_handle fails).
    • +
  • +
  • Date: +
      +
    • Fixed bug (Unhandled INF in date_sunset() with tiny $utcOffset).
    • +
    • Fixed bug (date_sun_info() fails for non-finite values).
    • +
  • +
  • DBA: +
      +
    • Fixed bug (dba_open() can segfault for "pathless" streams).
    • +
  • +
  • DOM: +
      +
    • Fixed bug (DOMXPath breaks when not initialized properly).
    • +
    • Add missing hierarchy checks to replaceChild.
    • +
    • Fixed bug (Attribute intern document mismanagement).
    • +
    • Fixed bug (Null-dereference in ext/dom/node.c).
    • +
    • Fixed bug (dom_import_simplexml stub is wrong).
    • +
    • Fixed bug (Segfault when adding attribute to parent that is not an element).
    • +
    • Fixed bug (UAF when using document as a child).
    • +
    • Fixed bug (Assertion failure in DOM->replaceChild).
    • +
    • Fixed bug (Another UAF in DOM -> cloneNode).
    • +
  • +
  • EXIF: +
      +
    • Fixed bug (Segfault in exif_thumbnail when not dealing with a real file).
    • +
  • +
  • FFI: +
      +
    • Fixed bug (Segmentation fault when comparing FFI object).
    • +
  • +
  • Filter: +
      +
    • Fixed bug (FILTER_FLAG_HOSTNAME accepts ending hyphen).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (FPM logs are getting corrupted with this log statement).
    • +
  • +
  • GD: +
      +
    • Fixed bug (imageaffine overflow on matrix elements).
    • +
    • Fixed bug (Unchecked libavif return values).
    • +
    • Fixed bug (UBSan abort in ext/gd/libgd/gd_interpolation.c:1007).
    • +
  • +
  • GMP: +
      +
    • Fixed floating point exception bug with gmp_pow when using large exposant values. (David Carlier).
    • +
    • Fixed bug (gmp_export() can cause overflow).
    • +
    • Fixed bug (gmp_random_bits() can cause overflow).
    • +
    • Fixed gmp_pow() overflow bug with large base/exponents.
    • +
    • Fixed segfaults and other issues related to operator overloading with GMP objects.
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (OOB access in ldap_escape). (CVE-2024-8932)
    • +
  • +
  • MBstring: +
      +
    • Fixed bug (mb_substr overflow on start/length arguments).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (Leak partial content of the heap through heap buffer over-read). (CVE-2024-8929)
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Array to string conversion warning emitted in optimizer).
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (openssl may modify member types of certificate arrays).
    • +
    • Fixed bug (Large values for openssl_csr_sign() $days overflow).
    • +
    • Fix various memory leaks on error conditions in openssl_x509_parse().
    • +
  • +
  • PDO DBLIB: +
      +
    • Fixed bug (Integer overflow in the dblib quoter causing OOB writes). (CVE-2024-11236)
    • +
  • +
  • PDO Firebird: +
      +
    • Fixed bug (Integer overflow in the firebird quoter causing OOB writes). (CVE-2024-11236)
    • +
  • +
  • PDO ODBC: +
      +
    • Fixed bug (PDO_ODBC can inject garbage into field values).
    • +
  • +
  • Phar: +
      +
    • Fixed bug (Assertion failure in ext/phar/phar.c:2808).
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (Empty string is an invalid expression for ev).
    • +
  • +
  • Reflection: +
      +
    • Fixed bug (Memory leak in Reflection constructors).
    • +
  • +
  • Session: +
      +
    • Fixed bug (Unexpected null returned by session_set_cookie_params).
    • +
    • Fixed bug (overflow on cookie_lifetime ini value).
    • +
  • +
  • SOAP: +
      +
    • Fixed bug (Recursive array segfaults soap encoding).
    • +
    • Fixed bug (Segmentation fault access null pointer in SoapClient).
    • +
  • +
  • Sockets: +
      +
    • Fixed bug with overflow socket_recvfrom $length argument.
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Use-after-free in SplHeap).
    • +
    • Fixed bug (Use-after-free in SplDoublyLinkedList::offsetSet()).
    • +
    • Fixed bug (Use-after-free in SplObjectStorage::setInfo()).
    • +
    • Fixed bug (Use-after-free in SplFixedArray::unset()).
    • +
    • Fixed bug (UAF in Observer->serialize).
    • +
    • Fix (Segmentation fault when calling __debugInfo() after failed SplFileObject::__constructor).
    • +
    • Fixed bug (UAF in SplDoublyLinked->serialize()).
    • +
    • Fixed bug (segfault on SplObjectIterator instance).
    • +
    • Fixed bug (Memory leaks in SPL constructors).
    • +
    • Fixed bug (UAF in ArrayObject::unset() and ArrayObject::exchangeArray()).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Failed assertion when throwing in assert() callback with bail enabled).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (Configuring a proxy in a stream context might allow for CRLF injection in URIs). (CVE-2024-11234)
    • +
    • Fixed bug (Single byte overread with convert.quoted-printable-decode filter). (CVE-2024-11233)
    • +
  • +
  • SysVMsg: +
      +
    • Fixed bug (msg_send() crashes when a type does not properly serialized).
    • +
  • +
  • SysVShm: +
      +
    • Fixed bug (Assertion error in shm_put_var).
    • +
  • +
  • XMLReader: +
      +
    • Fixed bug (Segmentation fault in ext/xmlreader/php_xmlreader.c).
    • +
  • +
  • Zlib: +
      +
    • Fixed bug (Memory management is broken for bad dictionaries.) (cmb)
    • +
  • +
+
+ + + +
+

Version 8.3.13

+ +
  • Calendar: +
      +
    • Fixed : jdtounix overflow on argument value.
    • +
    • Fixed : easter_days/easter_date overflow on year argument.
    • +
    • Fixed : jddayofweek overflow.
    • +
    • Fixed : jewishtojd overflow.
    • +
  • +
  • CLI: +
      +
    • Fixed bug : duplicate http headers when set several times by the client.
    • +
  • +
  • Core: +
      +
    • Fixed bug (Segmentation fault when resizing hash table iterator list while adding).
    • +
    • Fixed bug (Assertion failure for TRACK_VARS_SERVER).
    • +
    • Fixed bug (Failed assertion when promoting Serialize deprecation to exception).
    • +
    • Fixed bug (Segfault when printing backtrace during cleanup of nested generator frame).
    • +
    • Fixed bug (Core dumped in Zend/zend_generators.c).
    • +
    • Fixed bug (Assertion failure in Zend/zend_exceptions.c).
    • +
    • Fixed bug (Observer segfault when calling user function in internal function via trampoline).
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Segmentation fault (access null pointer) in ext/dom/parentnode/tree.c).
    • +
    • Fixed bug (Null pointer dereference in DOMElement->getAttributeNames()).
    • +
    • Fixed bug (Assertion failure in ext/dom/parentnode/tree.c).
    • +
    • Fixed bug (Use after free in php_dom.c).
    • +
    • Fixed bug (Memory leak in DOMProcessingInstruction/DOMDocument).
    • +
  • +
  • JSON: +
      +
    • Fixed bug (stack overflow in json_encode()).
    • +
  • +
  • GD: +
      +
    • Fixed bug (bitshift overflow on wbmp file content reading / fix backport from upstream).
    • +
    • Fixed bug (overflow/underflow on imagerotate degrees value) (David Carlier)
    • +
    • Fixed bug (imagescale underflow on RBG channels / fix backport from upstream).
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (Various NULL pointer dereferencements in ldap_modify_batch()).
    • +
    • Fixed bug (Segfault in ldap_list(), ldap_read(), and ldap_search() when LDAPs array is not a list).
    • +
    • Fix (php_ldap_do_modify() attempts to free pointer not allocated by ZMM.).
    • +
    • Fix (Memory leak in php_ldap_do_modify() when entry is not a proper dictionary).
    • +
  • +
  • MBString: +
      +
    • Fixed bug (Reference invariant broken in mb_convert_variables()).
    • +
  • +
  • OpenSSL: +
      +
    • Fixed stub for openssl_csr_new.
    • +
  • +
  • PCRE: +
      +
    • Fixed bug (underflow on offset argument).
    • +
    • Fixed bug (UBSan address overflowed in ext/pcre/php_pcre.c).
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (phpdbg: Assertion failure on i funcs).
    • +
    • Fixed bug (phpdbg: exit in exception handler reports fatal error).
    • +
  • +
  • Reflection: +
      +
    • Fixed bug (Assertion failure in ext/reflection/php_reflection.c).
    • +
  • +
  • SAPI: +
      +
    • Fixed bug (php-fpm: zend_mm_heap corrupted with cgi-fcgi request).
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (Segmentation fault in ext/simplexml/simplexml.c).
    • +
  • +
  • Sockets: +
      +
    • Fixed bug (socket_strerror overflow on errno argument).
    • +
  • +
  • SOAP: +
      +
    • (PHP SOAPClient does not support stream context HTTP headers in array form).
    • +
    • (Wrong namespace on xsd import error message).
    • +
    • Fixed bug (SoapClient can't convert BackedEnum to scalar value).
    • +
    • Fixed bug (Segmentation fault when cloning SoapServer).
    • +
    • Fix Soap leaking http_msg on error.
    • +
    • Fixed bug (Assertion failure in ext/soap/php_encoding.c:460).
    • +
    • Fixed bug (Soap segfault when classmap instantiation fails).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Assertion failure in ext/spl/spl_fixedarray.c).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Assertion failure in Zend/zend_hash.c).
    • +
    • Fixed bug (stack overflow when var serialization in ext/standard/var).
    • +
  • +
  • Streams: +
      +
    • Fixed bugs and (leak / assertion failure in streams.c).
    • +
    • Fixed bug (Signed integer overflow in main/streams/streams.c).
    • +
  • +
  • TSRM: +
      +
    • Prevent closing of unrelated handles.
    • +
  • +
  • Windows: +
      +
    • Fixed minimal Windows version.
    • +
  • +
+
+ + + +
+

Version 8.3.12

+ +
  • CGI: +
      +
    • Fixed bug (Bypass of CVE-2024-4577, Parameter Injection Vulnerability). (CVE-2024-8926)
    • +
    • Fixed bug (cgi.force_redirect configuration is bypassable due to the environment variable collision). (CVE-2024-8927)
    • +
  • +
  • Core: +
      +
    • Fixed bug (MSan false-positve on zend_max_execution_timer).
    • +
    • Fixed bug (Configure error grep illegal option q).
    • +
    • Fixed bug (Configure error: genif.sh: syntax error).
    • +
    • Fixed bug (--disable-ipv6 during compilation produces error EAI_SYSTEM not found).
    • +
    • Fixed bug (CRC32 API build error on arm 32-bit).
    • +
    • Fixed bug (Do not scan generator frames more than once).
    • +
    • Fixed uninitialized lineno in constant AST of internal enums.
    • +
  • +
  • Curl: +
      +
    • FIxed bug (curl_multi_select overflow on timeout argument).
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Segmentation fault (access null pointer) in ext/dom/xml_common.h).
    • +
    • Fixed bug (Signed integer overflow in ext/dom/nodelist.c).
    • +
  • +
  • Fileinfo: +
      +
    • Fixed bug (Incorrect error message for finfo_file with an empty filename argument).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (Logs from childrens may be altered). (CVE-2024-9026)
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (Heap corruption when querying a vector).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Access null pointer in Zend/Optimizer/zend_inference.c).
    • +
    • Fixed bug (Segmentation fault in Zend/zend_vm_execute.h).
    • +
  • +
  • SAPI: +
      +
    • Fixed bug (Erroneous parsing of multipart form data). (CVE-2024-8925)
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Signed integer overflow in ext/standard/scanf.c).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (php_stream_memory_get_buffer() not zero-terminated).
    • +
  • +
+
+ + + +
+

Version 8.3.11

+ +
  • Core: +
      +
    • Fixed bug (Memory leak in Zend/Optimizer/escape_analysis.c).
    • +
    • Fixed bug (Memory leak in Zend/zend_ini.c).
    • +
    • Fixed bug (Append -Wno-implicit-fallthrough flag conditionally).
    • +
    • Fix uninitialized memory in network.c.
    • +
    • Fixed bug (Segfault when destroying generator during shutdown).
    • +
    • Fixed bug (Crash during GC of suspended generator delegate).
    • +
  • +
  • Curl: +
      +
    • Fixed case when curl_error returns an empty string.
    • +
  • +
  • DOM: +
      +
    • Fix UAF when removing doctype and using foreach iteration.
    • +
  • +
  • FFI: +
      +
    • Fixed bug (ffi enum type (when enum has no name) make memory leak).
    • +
  • +
  • Hash: +
      +
    • Fix crash when converting array data for array in shm in xxh3.
    • +
  • +
  • Intl: +
      +
    • Fixed bug (IntlChar::foldCase()'s $option is not optional).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Segmentation fault for enabled observers after pass 4).
    • +
    • Fixed bug (Memory leak possibly related to opcache SHM placement).
    • +
  • +
  • Output: +
      +
    • Fixed bug (Segmentation fault (null pointer dereference) in ext/standard/url_scanner_ex.re).
    • +
  • +
  • PDO_Firebird: +
      +
    • Fix bogus fallthrough path in firebird_handle_get_attribute().
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (EOF emits redundant prompt in phpdbg local console mode with libedit/readline).
    • +
    • Fixed bug (heap buffer overflow in phpdbg (zend_hash_num_elements() Zend/zend_hash.h)).
    • +
    • Fixed bug use-after-free on watchpoint allocations.
    • +
  • +
  • Soap: +
      +
    • (Digest autentication dont work).
    • +
    • Fix SoapFault property destruction.
    • +
    • Fixed bug (SOAP XML broken since PHP 8.3.9 when using classmap constructor option).
    • +
  • +
  • Standard: +
      +
    • Fix passing non-finite timeout values in stream functions.
    • +
    • Fixed p(f)sockopen timeout overflow.
    • +
  • +
  • Streams: +
      +
    • Fixed bug (Memory leak in ext/phar/stream.c).
    • +
    • Fixed bug (Integer overflow on stream_notification_callback byte_max parameter with files bigger than 2GB).
    • +
    • Reverted fix for (Custom stream wrapper dir_readdir output truncated to 255 characters).
    • +
  • +
  • Tidy: +
      +
    • Fix memory leaks in ext/tidy basedir restriction code.
    • +
  • +
+
+ + + +
+

Version 8.3.10

+ +
  • Core: +
      +
    • Fixed bug (Fixed support for systems with sysconf(_SC_GETPW_R_SIZE_MAX) == -1).
    • +
    • Fixed bug (Fix is_zend_ptr() for huge blocks).
    • +
    • Fixed bug (Memory leak in FPM test gh13563-conf-bool-env.phpt.
    • +
    • Fixed OSS-Fuzz #69765.
    • +
    • Fixed bug (Segmentation fault in Zend/zend_types.h).
    • +
    • Fixed bug (Use-after-free in property coercion with __toString()).
    • +
  • +
  • Dom: +
      +
    • Fixed bug (DOMDocument::xinclude() crash).
    • +
  • +
  • Fileinfo: +
      +
    • Fixed bug (README.REDIST.BINS refers to non-existing LICENSE).
    • +
  • +
  • Gd: +
      +
    • ext/gd/tests/gh10614.phpt: skip if no PNG support.
    • +
    • restored warning instead of fata error.
    • +
  • +
  • LibXML: +
      +
    • Fixed bug (Build failure with libxml2 v2.13.0).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (No warning message when Zend DTrace is enabled that opcache.jit is implictly disabled).
    • +
  • +
  • Output: +
      +
    • Fixed bug (Unexpected null pointer in Zend/zend_string.h with empty output buffer).
    • +
  • +
  • PDO: +
      +
    • Fixed bug (Crash with PDORow access to null property).
    • +
  • +
  • Phar: +
      +
    • Fixed bug (null string from zip entry).
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (crashes with ASAN and ZEND_RC_DEBUG=1).
    • +
    • Fixed bug (echo output trimmed at NULL byte).
    • +
  • +
  • Shmop: +
      +
    • Fixed bug (shmop Windows 11 crashes the process).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Member access within null pointer in ext/spl/spl_observer.c).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (range function overflow with negative step argument).
    • +
    • Fix 32-bit wordwrap test failures.
    • +
    • Fixed bug (time_sleep_until overflow).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (Custom stream wrapper dir_readdir output truncated to 255 characters in PHP 8.3).
    • +
  • +
  • Tidy: +
      +
    • Fix memory leak in tidy_repair_file().
    • +
  • +
  • Treewide: +
      +
    • Fix compatibility with libxml2 2.13.2.
    • +
  • +
  • XML: +
      +
    • Move away from to-be-deprecated libxml fields.
    • +
    • Fixed bug (Error installing PHP when --with-pear is used).
    • +
  • +
+
+ + + +
+

Version 8.3.9

+ +
  • Core: +
      +
    • Fixed bug (Incompatible pointer type warnings).
    • +
    • Fixed bug (max_execution_time reached too early on MacOS 14 when running on Apple Silicon).
    • +
    • Fixed bug (Crash when stack walking in destructor of yielded from values during Generator->throw()).
    • +
    • Fixed bug (Attempting to initialize class with private constructor calls destructor).
    • +
    • Fixed bug (memleak due to missing pthread_attr_destroy()-call).
    • +
    • Fixed bug (Incompatible function pointer type for fclose).
    • +
  • +
  • BCMatch: +
      +
    • Fixed bug (bcpowmod() with mod = -1 returns 1 when it must be 0).
    • +
  • +
  • Curl: +
      +
    • Fixed bug (Test curl_basic_024 fails with curl 8.8.0).
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Memory leak in xml and dom).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (PHP-FPM ping.path and ping.response config vars are ignored in status pool).
    • +
  • +
  • GD: +
      +
    • Fix parameter numbers for imagecolorset().
    • +
  • +
  • Intl: +
      +
    • Fix reference handling in SpoofChecker.
    • +
  • +
  • MySQLnd: +
      +
    • Partially fix bug (Apache crash on Windows when using a self-referencing anonymous function inside a class with an active mysqli connection).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (opcache.jit=off does not allow enabling JIT at runtime).
    • +
    • Fixed TLS access in JIT on FreeBSD/amd64.
    • +
    • Fixed bug (Error when building TSRM in ARM64).
    • +
  • +
  • PDO ODBC: +
      +
    • Fixed bug (incompatible SDWORD type with iODBC).
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (segfault on watchpoint addition failure).
    • +
  • +
  • Soap: +
      +
    • (PHPClient can't decompress response).
    • +
    • Fix missing error restore code.
    • +
    • Fix memory leak if calling SoapServer::setObject() twice.
    • +
    • Fix memory leak if calling SoapServer::setClass() twice.
    • +
    • Fix reading zlib ini settings in ext-soap.
    • +
    • Fix memory leaks with string function name lookups.
    • +
    • (SoapClient classmap doesn't support fully qualified class name).
    • +
    • (SoapClient Cookie Header Semicolon).
    • +
    • Fixed memory leaks when calling SoapFault::__construct() twice.
    • +
  • +
  • Sodium: +
      +
    • Fix memory leaks in ext/sodium on failure of some functions.
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Member access within null pointer in extension spl).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Fixed off-by-one error in checking length of abstract namespace Unix sockets).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (PHP Fatal error triggers pointer being freed was not allocated and malloc: double free for ptr errors).
    • +
  • +
+
+ + + +
+

Version 8.3.8

+ +
  • CGI: +
      +
    • Fixed buffer limit on Windows, replacing read call usage by _read.
    • +
    • Fixed bug GHSA-3qgc-jrrr-25jv (Bypass of CVE-2012-1823, Argument Injection in PHP-CGI). (CVE-2024-4577)
    • +
  • +
  • CLI: +
      +
    • Fixed bug (PHP Interactive shell input state incorrectly handles quoted heredoc literals.).
    • +
  • +
  • Core: +
      +
    • Fixed bug (Incorrect validation of #[Attribute] flags type for non-compile-time expressions).
    • +
  • +
  • DOM: +
      +
    • Fix crashes when entity declaration is removed while still having entity references.
    • +
    • Fix references not handled correctly in C14N.
    • +
    • Fix crash when calling childNodes next() when iterator is exhausted.
    • +
    • Fix crash in ParentNode::append() when dealing with a fragment containing text nodes.
    • +
  • +
  • Filter: +
      +
    • Fixed bug GHSA-w8qr-v226-r27w (Filter bypass in filter_var FILTER_VALIDATE_URL). (CVE-2024-5458)
    • +
  • +
  • FPM: +
      +
    • Fix bug (Show decimal number instead of scientific notation in systemd status).
    • +
  • +
  • Hash: +
      +
    • ext/hash: Swap the checking order of `__has_builtin` and `__GNUC__` (Saki Takamachi)
    • +
  • +
  • Intl: +
      +
    • Fixed build regression on systems without C++17 compilers.
    • +
  • +
  • MySQLnd: +
      +
    • Fix bug (mysqli_fetch_assoc reports error from nested query).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Fix accidental persisting of internal class constant in shm).
    • +
  • +
  • OpenSSL: +
      +
    • The openssl_private_decrypt function in PHP, when using PKCS1 padding (OPENSSL_PKCS1_PADDING, which is the default), is vulnerable to the Marvin Attack unless it is used with an OpenSSL version that includes the changes from this pull request: https://github.com/openssl/openssl/pull/13817 (rsa_pkcs1_implicit_rejection). These changes are part of OpenSSL 3.2 and have also been backported to stable versions of various Linux distributions, as well as to the PHP builds provided for Windows since the previous release. All distributors and builders should ensure that this version is used to prevent PHP from being vulnerable.
    • +
  • +
  • Standard: +
      +
    • Fixed bug GHSA-9fcc-425m-g385 (Bypass of CVE-2024-1874). (CVE-2024-5585)
    • +
  • +
  • XML: +
      +
    • Fixed bug (Segmentation fault with XML extension under certain memory limit).
    • +
  • +
  • XMLReader: +
      +
    • Fixed bug (XMLReader::open() can't be overridden).
    • +
  • +
+
+ + + +
+

Version 8.3.7

+ +
  • Core: +
      +
    • Fixed zend_call_stack build with Linux/uclibc-ng without thread support.
    • +
    • Fixed bug (Invalid execute_data->opline pointers in observer fcall handlers when JIT is enabled).
    • +
    • Fixed bug (Applying zero offset to null pointer in Zend/zend_opcode.c).
    • +
    • Fixed bug (Align the behavior of zend-max-execution-timers with other timeout implementations).
    • +
    • Fixed bug (Broken cleanup of unfinished calls with callable convert parameters).
    • +
    • Fixed bug (Erroneous dnl appended in configure).
    • +
    • Fixed bug (If autoloading occurs during constant resolution filename and lineno are identified incorrectly).
    • +
    • Fixed bug (Missing void keyword).
    • +
  • +
  • Fibers: +
      +
    • Fixed bug (ASAN false positive underflow when executing copy()).
    • +
  • +
  • Fileinfo: +
      +
    • Fixed bug (Test failing in ext/fileinfo/tests/bug78987.phpt on big-endian PPC).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (Setting bool values via env in FPM config fails).
    • +
  • +
  • Intl: +
      +
    • Fixed build for icu 74 and onwards.
    • +
  • +
  • MySQLnd: +
      +
    • Fix shift out of bounds on 32-bit non-fast-path platforms.
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Segmentation Fault in zend_class_init_statics when using opcache.preload).
    • +
    • Fixed incorrect assumptions across compilation units for static calls.
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (feof on OpenSSL stream hangs indefinitely).
    • +
  • +
  • PDO SQLite: +
      +
    • Fix (Buffer size is now checked before memcmp).
    • +
    • Fix (Manage refcount of agg_context->val correctly).
    • +
  • +
  • Phar: +
      +
    • Fixed bug (Renaming a file in a Phar to an already existing filename causes a NULL pointer dereference).
    • +
    • Fixed bug (Applying zero offset to null pointer in zend_hash.c).
    • +
    • Fix potential NULL pointer dereference before calling EVP_SignInit.
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (Null pointer access of type 'zval' in phpdbg_frame).
    • +
  • +
  • Posix: +
      +
    • Fix usage of reentrant functions in ext/posix.
    • +
  • +
  • Session: +
      +
    • Fixed bug (Member access within null pointer of type 'ps_files' in ext/session/mod_files.c).
    • +
    • Fixed bug (memleak and segfault when using ini_set with session.trans_sid_hosts).
    • +
    • Fixed buffer _read/_write size limit on windows for the file mode.
    • +
  • +
  • Streams: +
      +
    • Fixed file_get_contents() on Windows fails with "errno=22 Invalid argument".
    • +
    • Fixed bug (Part 1 - Memory leak on stream filter failure).
    • +
    • Fixed bug (Incorrect PHP_STREAM_OPTION_CHECK_LIVENESS case in ext/openssl/xp_ssl.c - causing use of dead socket).
    • +
    • Fixed bug (Build fails on musl 1.2.4 - lfs64).
    • +
  • +
  • Treewide: +
      +
    • Fix gcc-14 Wcalloc-transposed-args warnings.
    • +
  • +
+
+ + + +
+

Version 8.3.6

+ +
  • Core: +
      +
    • Fixed (GC buffer unnecessarily grows up to GC_MAX_BUF_SIZE when scanning WeakMaps).
    • +
    • Fixed bug (Corrupted memory in destructor with weak references).
    • +
    • Fixed bug (Restore exception handler after it finishes).
    • +
    • Fixed bug (AX_GCC_FUNC_ATTRIBUTE failure).
    • +
    • Fixed bug (GC does not scale well with a lot of objects created in destructor).
    • +
  • +
  • DOM: +
      +
    • Add some missing ZPP checks.
    • +
    • Fix potential memory leak in XPath evaluation results.
    • +
  • +
  • FPM: +
      +
    • Fixed (FPM: config test runs twice in daemonised mode).
    • +
    • Fix incorrect check in fpm_shm_free().
    • +
  • +
  • GD: +
      +
    • Fixed bug (add GDLIB_CFLAGS in feature tests).
    • +
  • +
  • Gettext: +
      +
    • Fixed sigabrt raised with dcgettext/dcngettext calls with gettext 0.22.5 with category set to LC_ALL.
    • +
  • +
  • MySQLnd: +
      +
    • Fix (Fixed handshake response [mysqlnd]).
    • +
    • Fix incorrect charset length in check_mb_eucjpms().
    • +
  • +
  • Opcache: +
      +
    • Fixed (JITed QM_ASSIGN may be optimized out when op1 is null).
    • +
    • Fixed (Segmentation fault for enabled observers when calling trait method of internal trait when opcache is loaded).
    • +
  • +
  • Random: +
      +
    • Fixed bug (Pre-PHP 8.2 compatibility for mt_srand with unknown modes).
    • +
    • Fixed bug (Global Mt19937 is not properly reset in-between requests when MT_RAND_PHP is used).
    • +
  • +
  • Session: +
      +
    • Fixed bug (Segfault with session_decode and compilation error).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Unexpected null pointer in zend_string.h).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Live filesystem modified by tests).
    • +
    • Fixed (Added validation of `\n` in $additional_headers of mail()).
    • +
    • Fixed bug (file_put_contents fail on strings over 4GB on Windows).
    • +
    • Fixed bug GHSA-pc52-254m-w9w7 (Command injection via array-ish $command parameter of proc_open). (CVE-2024-1874)
    • +
    • Fixed bug GHSA-wpj3-hf5j-x4v4 (__Host-/__Secure- cookie bypass due to partial CVE-2022-31629 fix). (CVE-2024-2756)
    • +
    • Fixed bug GHSA-h746-cjrr-wfmr (password_verify can erroneously return true, opening ATO risk). (CVE-2024-3096)
    • +
    • Fixed bug GHSA-fjp9-9hwx-59fq (mb_encode_mimeheader runs endlessly for some inputs). (CVE-2024-2757)
    • +
    • Fix bug (Attempt to fix mbstring on windows build) (msvc).
    • +
  • +
+
+ + + +
+

Version 8.3.4

+ +
  • Core: +
      +
    • Fix ZTS persistent resource crashes on shutdown.
    • +
  • +
  • Curl: +
      +
    • Fix failing tests due to string changes in libcurl 8.6.0.
    • +
  • +
  • DOM: +
      +
    • Fix unlikely memory leak in case of namespace removal with extremely deep trees.
    • +
    • Fix reference access in dimensions for DOMNodeList and DOMNodeMap.
    • +
  • +
  • Fileinfo: +
      +
    • Fixed bug (finfo::buffer(): Failed identify data 0:(null), backport).
    • +
  • +
  • FPM: +
      +
    • (getenv in php-fpm should not read $_ENV, $_SERVER).
    • +
  • +
  • GD: +
      +
    • Fixed bug (detection of image formats in system gd library).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug ([mysqlnd] Fixed not to set CR_MALFORMED_PACKET to error if CR_SERVER_GONE_ERROR is already set).
    • +
  • +
  • PDO: +
      +
    • Fix various PDORow bugs.
    • +
  • +
  • PGSQL: +
      +
    • Fixed bug (pg_execute/pg_send_query_params/pg_send_execute with null value passed by reference).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Unable to resize SplfixedArray after being unserialized in PHP 8.2.15).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Instable array during in-place modification in uksort).
    • +
    • Fixed array key as hash to string (case insensitive) comparison typo for the second operand buffer size (albeit unused for now).
    • +
  • +
  • XML: +
      +
    • Fixed bug (Multiple test failures when building with --with-expat).
    • +
  • +
+
+ + + +
+

Version 8.3.3

+ +
  • Core: +
      +
    • Fixed timer leak in zend-max-execution-timers builds.
    • +
    • Fixed bug (linking failure on ARM with mold).
    • +
    • Fixed bug (Anonymous class reference in trigger_error / thrown Exception).
    • +
    • Fixed bug (PHP 8.3.2: final private constructor not allowed when used in trait).
    • +
    • Fixed bug (GCC 14 build failure).
    • +
  • +
  • Curl: +
      +
    • Fix missing error check in curl_multi_init().
    • +
  • +
  • FPM: +
      +
    • Fixed bug (Incorrect SCRIPT_NAME with Apache ProxyPassMatch when plus in path).
    • +
  • +
  • GD: +
      +
    • Fixed bug (imagettfbbox(): Could not find/open font UNC path).
    • +
    • Fixed bug (imagerotate will turn the picture all black, when rotated 90).
    • +
  • +
  • LibXML: +
      +
    • Fix crashes with entity references and predefined entities.
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (When running a stored procedure (that returns a result set) twice, PHP crashes).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (strtok() is not comptime).
    • +
    • Fixed type inference of range().
    • +
    • Fixed bug (Segmentation fault will be reported when JIT is off but JIT_debug is still on).
    • +
  • +
  • OpenSSL: +
      +
    • Fixed LibreSSL undefined reference when OPENSSL_NO_ENGINE not set. (David Carlier).
    • +
  • +
  • PDO_Firebird: +
      +
    • Fix (Changed to convert float and double values ​​into strings using `H` format).
    • +
  • +
  • Phar: +
      +
    • (PHAR doesn't know about litespeed).
    • +
    • Fixed bug (PharData incorrectly extracts zip file).
    • +
  • +
  • Random: +
      +
    • Fixed bug (Randomizer::pickArrayKeys() does not detect broken engines).
    • +
  • +
  • Session: +
      +
    • Fixed bug (Corrupted session written when there's a fatal error in autoloader).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (range(9.9, '0') causes segmentation fault).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (Copying large files using mmap-able source streams may exhaust available memory and fail).
    • +
  • +
+
+ + + +
+

Version 8.3.2

+ +
  • Core: +
      +
    • Fixed bug (false positive SSA integrity verification failed when loading composer classmaps with more than 11k elements).
    • +
    • Fixed bug (zend_strnlen build when strnlen is unsupported).
    • +
    • Fixed bug (missing cross-compiling 3rd argument so Autoconf doesn't emit warnings).
    • +
    • Fixed bug (8.3 - as final trait-used method does not correctly report visibility in Reflection).
    • +
  • +
  • Cli: +
      +
    • Fix incorrect timeout in built-in web server when using router script and max_input_time.
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Creating an xmlns attribute results in a DOMException).
    • +
    • Fix crash when toggleAttribute() is used without a document.
    • +
    • Fix crash in adoptNode with attribute references.
    • +
    • Fixed bug (DOMNode::isEqualNode() is incorrect when attribute order is different).
    • +
  • +
  • FFI: +
      +
    • Fixed bug (stream_wrapper_register crashes with FFI\CData).
    • +
    • Fixed bug (FFI::new interacts badly with observers).
    • +
  • +
  • Intl: +
      +
    • Fixed (IntlDateFormatter::__construct accepts 'C' as valid locale).
    • +
  • +
  • Hash: +
      +
    • Fixed bug (hash() function hangs endlessly if using sha512 on strings >= 4GiB).
    • +
  • +
  • ODBC: +
      +
    • Fix crash on Apache shutdown with persistent connections.
    • +
  • +
  • Opcache: +
      +
    • Fixed oss-fuzz #64727 (JIT undefined array key warning may overwrite DIM with NULL when DIM is the same var as result).
    • +
    • Added workaround for SELinux mprotect execheap issue. See https://bugzilla.kernel.org/show_bug.cgi?id=218258.
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (openssl_csr_sign might leak new cert on error).
    • +
  • +
  • PDO: +
      +
    • Fix (Fixed PDO::getAttribute() to get PDO::ATTR_STRINGIFY_FETCHES).
    • +
  • +
  • PDO_ODBC: +
      +
    • Fixed bug (Unable to turn on autocommit mode with setAttribute()).
    • +
  • +
  • PGSQL: +
      +
    • Fixed auto_reset_persistent handling and allow_persistent type.
    • +
    • Fixed bug (Apache crashes on shutdown when using pg_pconnect()).
    • +
  • +
  • Phar: +
      +
    • (Segmentation fault on including phar file).
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (Double free of init_file in phpdbg_prompt.c).
    • +
  • +
  • SimpleXML: +
      +
    • Fix getting the address of an uninitialized property of a SimpleXMLElement resulting in a crash.
    • +
    • Fixed bug (SimpleXMLElement with stream_wrapper_register can segfault).
    • +
  • +
  • Tidy: +
      +
    • Fixed bug (tidynode.props.attribute is missing "Boolean Attributes" and empty attributes).
    • +
  • +
+
+ + + +
+

Version 8.3.1

+ +
  • Core: +
      +
    • Fixed bug / (Invalid opline in OOM handlers within ZEND_FUNC_GET_ARGS and ZEND_BIND_STATIC).
    • +
    • Fix various missing NULL checks.
    • +
    • Fixed bug (Leak of call->extra_named_params on internal __call).
    • +
    • Fixed bug (Weird pointers issue in nested loops).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (Segmentation fault in fpm_status_export_to_zval).
    • +
  • +
  • FTP: +
      +
    • Fixed bug (FTP & SSL session reuse).
    • +
  • +
  • LibXML: +
      +
    • Fixed test failures for libxml2 2.12.0.
    • +
  • +
  • MySQLnd: +
      +
    • Avoid using uninitialised struct.
    • +
    • Fixed bug (Possible dereference of NULL in MySQLnd debug code).
    • +
  • +
  • Opcache: +
      +
    • Fixed JIT bug (Function JIT emits "Uninitialized string offset" warning at the same time as invalid offset Error).
    • +
    • Fixed JIT bug (JIT emits "Attempt to assign property of non-object" warning at the same time as Error is being thrown).
    • +
  • +
  • PDO PGSQL: +
      +
    • Fixed the default value of $fetchMode in PDO::pgsqlGetNotify() (kocsismate)
    • +
  • +
  • SOAP: +
      +
    • Fixed bug ([SOAP] Temporary WSDL cache files not being deleted).
    • +
  • +
  • Standard: +
      +
    • Fixed (http_build_query() default null argument for $arg_separator is implicitly coerced to string).
    • +
  • +
+
+ + + +
+

Version 8.3.0

+ +
  • Bcmath: +
      +
    • Fixed (removing trailing zeros from numbers) (jorgsowa)
    • +
  • +
  • CLI: +
      +
    • Added pdeathsig to builtin server to terminate workers when the master process is killed.
    • +
    • Fixed bug (STDIN/STDOUT/STDERR is not available for CLI without a script).
    • +
    • Implement (support linting multiple files at once using php -l).
    • +
  • +
  • Core: +
      +
    • Fix (Allow "final" modifier when importing a method from a trait).
    • +
    • Fixed bug (segfault with unpacking and magic method closure).
    • +
    • Fixed bug (Improve unset property and __get type incompatibility error message).
    • +
    • SA_ONSTACK is now set for signal handlers to be friendlier to other in-process code such as Go's cgo.
    • +
    • SA_ONSTACK is now set when signals are disabled.
    • +
    • Fix : Signal handlers now do a no-op instead of crashing when executed on threads not managed by TSRM.
    • +
    • Added shadow stack support for fibers.
    • +
    • Fix bug (Fix accidental caching of default arguments with side effects).
    • +
    • Implement (Use strlen() for determining the class_name length).
    • +
    • Fix bug (Improve line numbers for errors in constant expressions).
    • +
    • Fix bug (Allow comments between & and parameter).
    • +
    • Zend Max Execution Timers is now enabled by default for ZTS builds on Linux.
    • +
    • Fix bug (Disallow .. in open_basedir paths set at runtime).
    • +
    • Fix bug , (Various segfaults with destructors and VM return values).
    • +
    • Fix bug (Use of trait doesn't redeclare static property if class has inherited it from its parent).
    • +
    • Fix bug (Negative indices on empty array don't affect next chosen index).
    • +
    • Fix bug (Implement delayed early binding for classes without parents).
    • +
    • Fix bug #79836 (Segfault in concat_function).
    • +
    • Fix bug #81705 (type confusion/UAF on set_error_handler with concat operation).
    • +
    • Fix (Closure created from magic method does not accept named arguments).
    • +
    • Fix (Allow "final" modifier when importing a method from a trait).
    • +
    • Fixed bug (segfault with unpacking and magic method closure).
    • +
    • Fixed bug (String concatenation performance regression in 8.3).
    • +
    • Fixed (Missing "Optional parameter before required" deprecation on union null type).
    • +
    • Implement the #[\Override] attribute RFC.
    • +
    • Fixed bug (Incorrect handling of unwind and graceful exit exceptions).
    • +
    • Added zend_call_stack_get implementation for OpenBSD.
    • +
    • Add stack limit check in zend_eval_const_expr().
    • +
    • Expose time spent collecting cycles in gc_status().
    • +
    • Remove WeakMap entries whose key is only reachable through the entry value.
    • +
    • Resolve open_basedir paths on INI update.
    • +
    • Fixed oss-fuzz #60741 (Leak in open_basedir).
    • +
    • Fixed segfault during freeing of some incompletely initialized objects due to OOM error (PDO, SPL, XSL).
    • +
    • Introduced Zend guard recursion protection to fix __debugInfo issue.
    • +
    • Fixed oss-fuzz #61712 (assertion failure with error handler during binary op).
    • +
    • Fixed (DTrace enabled build is broken).
    • +
    • Fixed OSS Fuzz #61865 (Undef variable in ++/-- for declared property that is unset in error handler).
    • +
    • Fixed warning emitted when checking if a user stream is castable.
    • +
    • Fixed bug (Compile error on MacOS with C++ extension when using ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX).
    • +
    • Fixed bug (#[Override] attribute in trait does not check for parent class implementations).
    • +
    • Fixed OSS Fuzz #62294 (Unsetting variable after ++/-- on string variable warning).
    • +
    • Fixed buffer underflow when compiling memoized expression.
    • +
    • Fixed oss-fuzz #63802 (OP1 leak in error path of post inc/dec).
    • +
  • +
  • Curl: +
      +
    • Added Curl options and constants up to (including) version 7.87.
    • +
  • +
  • Date: +
      +
    • Implement More Appropriate Date/Time Exceptions RFC.
    • +
  • +
  • DOM: +
      +
    • Fix bug (DOMAttr unescapes character reference).
    • +
    • Fix bug (getElementsByTagName() is O(N^2)).
    • +
    • Fix #79700 (wrong use of libxml oldNs leads to performance problem).
    • +
    • Fix #77894 (DOMNode::C14N() very slow on generated DOMDocuments even after normalisation).
    • +
    • Revert changes to DOMAttr::$value and DOMAttr::$nodeValue expansion.
    • +
    • Fixed bug (Namespace reuse in createElementNS() generates wrong output).
    • +
    • Implemented DOMDocument::adoptNode(). Previously this always threw a "not yet implemented" exception.
    • +
    • Fixed bug (Implicitly removing nodes from \DOMDocument breaks existing references).
    • +
    • Added DOMNode::contains() and DOMNameSpaceNode::contains().
    • +
    • Added DOMElement::getAttributeNames().
    • +
    • Added DOMNode::getRootNode().
    • +
    • Added DOMElement::className and DOMElement::id.
    • +
    • Added DOMParentNode::replaceChildren().
    • +
    • Added DOMNode::isConnected and DOMNameSpaceNode::isConnected.
    • +
    • Added DOMNode::parentElement and DOMNameSpaceNode::parentElement.
    • +
    • Added DOMNode::isEqualNode().
    • +
    • Added DOMElement::insertAdjacentElement() and DOMElement::insertAdjacentText().
    • +
    • Added DOMElement::toggleAttribute().
    • +
    • Fixed bug (LIBXML_NOXMLDECL is not implemented or broken).
    • +
    • adoptNode now respects the strict error checking property.
    • +
    • Align DOMChildNode parent checks with spec.
    • +
    • (Removing documentElement after creating attribute node: possible use-after-free).
    • +
    • Fix various namespace prefix conflict resolution bugs.
    • +
    • Fix calling createAttributeNS() without prefix causing the default namespace of the element to change.
    • +
    • Fixed (Confusing warning when blocking entity loading via libxml_set_external_entity_loader).
    • +
    • Fix broken cache invalidation with deallocated and reallocated document node.
    • +
    • Fix compile error when php_libxml.h header is included in C++.
    • +
    • (No way of removing redundant xmlns: declarations).
    • +
  • +
  • Exif: +
      +
    • Removed unneeded codepaths in exif_process_TIFF_in_JPEG().
    • +
  • +
  • FFI: +
      +
    • Implement (Allow to pass CData into struct and/or union fields).
    • +
  • +
  • Fileinfo: +
      +
    • Upgrade bundled libmagic to 5.43.
    • +
    • Fix (Unable to build PHP 8.3.0 alpha 1 / fileinfo extension).
    • +
  • +
  • FPM: +
      +
    • The status.listen shared pool now uses the same php_values (including expose_php) and php_admin_value as the pool it is shared with.
    • +
    • Added warning to log when fpm socket was not registered on the expected path.
    • +
    • (system() function call leaks php-fpm listening sockets).
    • +
    • Fixed (PHP 8.3.0RC1 borked socket-close-on-exec.phpt).
    • +
  • +
  • GD: +
      +
    • Removed imagerotate "ignore_transparent" argument since it has no effect.
    • +
  • +
  • Intl: +
      +
    • Added pattern format error infos for numfmt_set_pattern.
    • +
    • Added MIXED_NUMBERS and HIDDEN_OVERLAY constants for the Spoofchecker's class.
    • +
    • Updated datefmt_set_timezone/IntlDateformatter::setTimezone returns type. (David Carlier).
    • +
    • Updated IntlBreakInterator::setText return type.
    • +
    • Updated IntlChar::enumCharNames return type.
    • +
    • Removed the BC break on IntlDateFormatter::construct which threw an exception with an invalid locale.
    • +
  • +
  • JSON: +
      +
    • Added json_validate().
    • +
  • +
  • LDAP: +
      +
    • Deprecate calling ldap_connect() with separate hostname and port.
    • +
  • +
  • LibXML: +
      +
    • Fix compile error with -Werror=incompatible-function-pointer-types and old libxml2.
    • +
  • +
  • MBString: +
      +
    • mb_detect_encoding is better able to identify the correct encoding for Turkish text.
    • +
    • mb_detect_encoding's "non-strict" mode now behaves as described in the documentation. Previously, it would return false if the same byte (for example, the first byte) of the input string was invalid in all candidate encodings. More generally, it would eliminate candidate encodings from consideration when an invalid byte was seen, and if the same input byte eliminated all remaining encodings still under consideration, it would return false. On the other hand, if all candidate encodings but one were eliminated from consideration, it would return the last remaining one without regard for how many encoding errors might be encountered later in the string. This is different from the behavior described in the documentation, which says: "If strict is set to false, the closest matching encoding will be returned." (Alex Dowad)
    • +
    • mb_strtolower, mb_strtotitle, and mb_convert_case implement conditional casing rules for the Greek letter sigma. For mb_convert_case, conditional casing only applies to MB_CASE_LOWER and MB_CASE_TITLE modes, not to MB_CASE_LOWER_SIMPLE and MB_CASE_TITLE_SIMPLE.
    • +
    • mb_detect_encoding is better able to identify UTF-8 and UTF-16 strings with a byte-order mark.
    • +
    • mb_decode_mimeheader interprets underscores in QPrint-encoded MIME encoded words as required by RFC 2047; they are converted to spaces. Underscores must be encoded as "=5F" in such MIME encoded words.
    • +
    • mb_encode_mimeheader no longer drops NUL (zero) bytes when QPrint-encoding the input string. This previously caused strings in certain text encodings, especially UTF-16 and UTF-32, to be corrupted by mb_encode_mimeheader.
    • +
    • Implement mb_str_pad() RFC.
    • +
    • Fixed bug (PHP 8.3 build fails with --enable-mbstring enabled).
    • +
    • Fix use-after-free of mb_list_encodings() return value.
    • +
    • Fixed bug (utf_encodings.phpt fails on Windows 32-bit).
    • +
  • +
  • mysqli: +
      +
    • mysqli_fetch_object raises a ValueError instead of an Exception.
    • +
  • +
  • Opcache: +
      +
    • Added start, restart and force restart time to opcache's phpinfo section.
    • +
    • Fix : Allow FFI in opcache.preload when opcache.preload_user=root.
    • +
    • Made opcache.preload_user always optional in the cli and phpdbg SAPIs.
    • +
    • Allows W/X bits on page creation on FreeBSD despite system settings.
    • +
    • Added memfd api usage, on Linux, for zend_shared_alloc_create_lock() to create an abstract anonymous file for the opcache's lock.
    • +
    • Avoid resetting JIT counter handlers from multiple processes/threads.
    • +
    • Fixed COPY_TMP type inference for references.
    • +
  • +
  • OpenSSL: +
      +
    • Added OPENSSL_CMS_OLDMIMETYPE and PKCS7_NOOLDMIMETYPE contants to switch between mime content types.
    • +
    • Fixed : Reset OpenSSL errors when using a PEM public key.
    • +
    • Added support for additional EC parameters in openssl_pkey_new.
    • +
  • +
  • PCNTL: +
      +
    • SA_ONSTACK is now set for pcntl_signal.
    • +
    • Added SIGINFO constant.
    • +
  • +
  • PCRE: +
      +
    • Update bundled libpcre2 to 10.42.
    • +
  • +
  • PGSQL: +
      +
    • pg_fetch_object raises a ValueError instead of an Exception.
    • +
    • pg_cancel use thread safe PQcancel api instead.
    • +
    • pg_trace new PGSQL_TRACE_SUPPRESS_TIMESTAMPS/PGSQL_TRACE_REGRESS_MODE contants support.
    • +
    • pg_set_error_verbosity adding PGSQL_ERRORS_STATE constant.
    • +
    • pg_convert/pg_insert E_WARNING on type errors had been converted to ValueError/TypeError exceptions.
    • +
    • Added pg_set_error_context_visibility to set the context's visibility within the error messages.
    • +
  • +
  • Phar: +
      +
    • Fix memory leak in phar_rename_archive().
    • +
  • +
  • POSIX: +
      +
    • Added posix_sysconf.
    • +
    • Added posix_pathconf.
    • +
    • Added posix_fpathconf.
    • +
    • Fixed zend_parse_arg_long's bool pointer argument assignment.
    • +
    • Added posix_eaccess.
    • +
  • +
  • Random: +
      +
    • Added Randomizer::getBytesFromString().
    • +
    • Added Randomizer::nextFloat(), ::getFloat(), and IntervalBoundary.
    • +
    • Enable getrandom() for NetBSD (from 10.x).
    • +
    • Deprecate MT_RAND_PHP.
    • +
    • Fix Randomizer::getFloat() returning incorrect results under certain circumstances.
    • +
  • +
  • Reflection: +
      +
    • Fix (ReflectionMethod constructor should not find private parent method).
    • +
    • Fix (ReflectionClass::getStaticProperties doesn't need null return type).
    • +
  • +
  • SAPI: +
      +
    • Fixed (Could not open input file: should be sent to stderr).
    • +
  • +
  • Session: +
      +
    • Fixed bug (Crash after dealing with an Apache request).
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (SimpleXML infinite loop when getName() is called within foreach).
    • +
    • Fixed bug (SimpleXML infinite loop when a cast is used inside a foreach).
    • +
    • (SimpleXML iteration produces infinite loop).
    • +
  • +
  • Sockets: +
      +
    • Added SO_ATTACH_REUSEPORT_CBPF socket option, to give tighter control over socket binding for a cpu core.
    • +
    • Added SKF_AD_QUEUE for cbpf filters.
    • +
    • Added socket_atmark if send/recv needs using MSG_OOB.
    • +
    • Added TCP_QUICKACK constant, to give tigher control over ACK delays.
    • +
    • Added DONTFRAGMENT support for path MTU discovery purpose.
    • +
    • Added AF_DIVERT for raw socket for divert ports.
    • +
    • Added SOL_UPDLITE, UDPLITE_RECV_CSCOV and UDPLITE_SEND_CSCOV for updlite protocol support.
    • +
    • Added SO_RERROR, SO_ZEROIZE and SO_SPLICE netbsd and openbsd constants.
    • +
    • Added TCP_REPAIR for quietly close a connection.
    • +
    • Added SO_REUSEPORT_LB freebsd constant.
    • +
    • Added IP_BIND_ADDRESS_NO_PORT.
    • +
  • +
  • SPL: +
      +
    • Fixed (RecursiveDirectoryIterator::hasChildren is slow).
    • +
  • +
  • Standard: +
      +
    • E_NOTICEs emitted by unserialize() have been promoted to E_WARNING.
    • +
    • unserialize() now emits a new E_WARNING if the input contains unconsumed bytes.
    • +
    • Make array_pad's $length warning less confusing.
    • +
    • E_WARNING emitted by strtok in the caase both arguments are not provided when starting tokenisation.
    • +
    • password_hash() will now chain the original RandomException to the ValueError on salt generation failure.
    • +
    • Fix (proc_close after proc_get_status always returns -1).
    • +
    • Improve the warning message for unpack() in case not enough values were provided.
    • +
    • Fix (parse_ini_string() now preserves formatting of unquoted strings starting with numbers when the INI_SCANNER_TYPED flag is specified).
    • +
    • Fix (http_response_code emits no error when headers were already sent).
    • +
    • Added support for rounding negative places in number_format().
    • +
    • Prevent precision loss on formatting decimal integers in number_format().
    • +
    • Added usage of posix_spawn for proc_open when supported by OS.
    • +
    • Added $before_needle argument to strrchr().
    • +
    • Fixed (str_getcsv returns null byte for unterminated enclosure).
    • +
    • Fixed str_decrement() on "1".
    • +
  • +
  • Streams: +
      +
    • : blocking fread() will block even if data is available.
    • +
    • Added storing of the original path used to open xport stream.
    • +
    • Implement (STREAM_NOTIFY_COMPLETED over HTTP never emitted).
    • +
    • Fix bug (fgets on a redis socket connection fails on PHP 8.3).
    • +
    • Implemented (_php_stream_copy_to_mem: Allow specifying a maximum length without allocating a buffer of that size).
    • +
    • (fseek() on memory stream behavior different than file).
    • +
    • (Can read "non-existant" files).
    • +
  • +
  • XSLTProcessor: +
      +
    • (DomNode::getNodePath() returns invalid path).
    • +
  • +
  • ZIP: +
      +
    • zip extension version 1.22.0 for libzip 1.10.0.
    • +
    • add new error macros (ER_DATA_LENGTH and ER_NOT_ALLOWED).
    • +
    • add new archive global flags (ER_AFL_*).
    • +
    • add ZipArchive::setArchiveFlag and ZipArchive::getArchiveFlag methods.
    • +
  • +
+
+ + + + + +
+

Version 8.2.30

+ +
  • Curl: +
      +
    • Fix curl build and test failures with version 8.16.
    • +
  • +
  • Opcache: +
      +
    • Reset global pointers to prevent use-after-free in zend_jit_status().
    • +
  • +
  • PDO: +
      +
    • Fixed (PDO quoting result null deref). (CVE-2025-14180)
    • +
  • +
  • Standard: +
      +
    • Fixed (Null byte termination in dns_get_record()).
    • +
    • Fixed (Heap buffer overflow in array_merge()). (CVE-2025-14178)
    • +
    • Fixed (Information Leak of Memory in getimagesize). (CVE-2025-14177)
    • +
  • +
+
+ + + +
+

Version 8.2.29

+ +
  • PGSQL: +
      +
    • Fixed (pgsql extension does not check for errors during escaping). (CVE-2025-1735)
    • +
  • +
  • SOAP: +
      +
    • Fixed (NULL Pointer Dereference in PHP SOAP Extension via Large XML Namespace Prefix). (CVE-2025-6491)
    • +
  • +
  • Standard: +
      +
    • Fixed (Null byte termination in hostnames). (CVE-2025-1220)
    • +
  • +
+
+ + + +
+

Version 8.2.28

+ +
  • Core: +
      +
    • Fixed bug (observer segfault on function loaded with dl()).
    • +
  • +
  • LibXML: +
      +
    • Fixed (Reocurrence of #72714).
    • +
    • Fixed (libxml streams use wrong `content-type` header when requesting a redirected resource). (CVE-2025-1219)
    • +
  • +
  • Streams: +
      +
    • Fixed (Stream HTTP wrapper header check might omit basic auth header). (CVE-2025-1736)
    • +
    • Fixed (Stream HTTP wrapper truncate redirect location to 1024 bytes). (CVE-2025-1861)
    • +
    • Fixed (Streams HTTP wrapper does not fail for headers without colon). (CVE-2025-1734)
    • +
    • Fixed (Header parser of `http` stream wrapper does not handle folded headers). (CVE-2025-1217)
    • +
  • +
  • Windows: +
      +
    • Fixed phpize for Windows 11 (24H2).
    • +
  • +
+
+ + + +
+

Version 8.2.27

+ +
  • Calendar: +
      +
    • Fixed jdtogregorian overflow.
    • +
    • Fixed cal_to_jd julian_days argument overflow.
    • +
  • +
  • COM: +
      +
    • Fixed bug (Getting typeinfo of non DISPATCH variant segfaults).
    • +
  • +
  • Core: +
      +
    • Fail early in *nix configuration build script.
    • +
    • Fixed bug (Opcache bad signal 139 crash in ZTS bookworm (frankenphp)).
    • +
    • Fixed bug (Assertion failure at Zend/zend_vm_execute.h:7469).
    • +
    • Fixed bug (UAF in lexer with encoding translation and heredocs).
    • +
    • Fix is_zend_ptr() huge block comparison.
    • +
    • Fixed potential OOB read in zend_dirname() on Windows.
    • +
  • +
  • Curl: +
      +
    • Fix various memory leaks in curl mime handling.
    • +
  • +
  • FPM: +
      +
    • Fixed (PHP-FPM 8.2 SIGSEGV in fpm_get_status).
    • +
  • +
  • GD: +
      +
    • Fixed (imagecreatefromstring overflow).
    • +
  • +
  • GMP: +
      +
    • Revert gmp_pow() overly restrictive overflow checks.
    • +
  • +
  • Hash: +
      +
    • Fixed : Segfault in mhash().
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Tracing JIT type mismatch when returning UNDEF).
    • +
    • Fixed bug (JIT_G(enabled) not set correctly on other threads).
    • +
    • Fixed bug (Set of opcache tests fail zts+aarch64).
    • +
  • +
  • OpenSSL: +
      +
    • Prevent unexpected array entry conversion when reading key.
    • +
    • Fix various memory leaks related to openssl exports.
    • +
    • Fix memory leak in php_openssl_pkey_from_zval().
    • +
  • +
  • PDO: +
      +
    • Fixed memory leak of `setFetchMode()`.
    • +
  • +
  • Phar: +
      +
    • Fixed bug (phar:// tar parser and zero-length file header blocks).
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (Segfault with breakpoint map and phpdbg_clear()).
    • +
  • +
  • SAPI: +
      +
    • Fixed bug (UBSAN warning in rfc1867).
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (Segmentation fault in RecursiveIteratorIterator ->current() with a xml element input).
    • +
  • +
  • SNMP: +
      +
    • Fixed bug (snmget modifies the object_id array).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Internal iterator functions can't handle UNDEF properties).
    • +
  • +
  • Streams: +
      +
    • Fixed network connect poll interuption handling.
    • +
  • +
  • Windows: +
      +
    • Fixed bug (Error dialog causes process to hang).
    • +
  • +
+
+ + + +
+

Version 8.2.26

+ +
  • CLI: +
      +
    • Fixed bug (Shebang is not skipped for router script in cli-server started through shebang).
    • +
    • Fixed bug (Heap-Use-After-Free in sapi_read_post_data Processing in CLI SAPI Interface).
    • +
  • +
  • COM: +
      +
    • Fixed out of bound writes to SafeArray data.
    • +
  • +
  • Core: +
      +
    • Fixed bug (php 8.1 and earlier crash immediately when compiled with Xcode 16 clang on macOS 15).
    • +
    • Fixed bug (Assertion failure in Zend/zend_weakrefs.c:646).
    • +
    • Fixed bug (Incorrect propagation of ZEND_ACC_RETURN_REFERENCE for call trampoline).
    • +
    • Fixed bug (Incorrect line number in function redeclaration error).
    • +
    • Fixed bug (Incorrect line number in inheritance errors of delayed early bound classes).
    • +
    • Fixed bug (Use-after-free during array sorting).
    • +
  • +
  • Curl: +
      +
    • Fixed bug (CurlMultiHandle holds a reference to CurlHandle if curl_multi_add_handle fails).
    • +
  • +
  • Date: +
      +
    • Fixed bug (Unhandled INF in date_sunset() with tiny $utcOffset).
    • +
    • Fixed bug (Assertion failure in ext/date/php_date.c).
    • +
    • Fixed bug (date_sun_info() fails for non-finite values).
    • +
  • +
  • DBA: +
      +
    • Fixed bug (dba_open() can segfault for "pathless" streams).
    • +
  • +
  • DOM: +
      +
    • Fixed bug (DOMXPath breaks when not initialized properly).
    • +
    • Fixed bug (dom_import_simplexml stub is wrong).
    • +
    • Fixed bug (Segfault when adding attribute to parent that is not an element).
    • +
    • Fixed bug (UAF when using document as a child).
    • +
    • Fixed bug (Assertion failure in DOM->replaceChild).
    • +
    • Fixed bug (Another UAF in DOM -> cloneNode).
    • +
  • +
  • EXIF: +
      +
    • Fixed bug (Segfault in exif_thumbnail when not dealing with a real file).
    • +
  • +
  • FFI: +
      +
    • Fixed bug (Segmentation fault when comparing FFI object).
    • +
  • +
  • Filter: +
      +
    • Fixed bug (FILTER_FLAG_HOSTNAME accepts ending hyphen).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (FPM logs are getting corrupted with this log statement).
    • +
  • +
  • GD: +
      +
    • Fixed bug (imageaffine overflow on matrix elements).
    • +
    • Fixed bug (Unchecked libavif return values).
    • +
    • Fixed bug (UBSan abort in ext/gd/libgd/gd_interpolation.c:1007).
    • +
  • +
  • GMP: +
      +
    • Fixed floating point exception bug with gmp_pow when using large exposant values. (David Carlier).
    • +
    • Fixed bug (gmp_export() can cause overflow).
    • +
    • Fixed bug (gmp_random_bits() can cause overflow).
    • +
    • Fixed gmp_pow() overflow bug with large base/exponents.
    • +
    • Fixed segfaults and other issues related to operator overloading with GMP objects.
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (OOB access in ldap_escape). (CVE-2024-8932)
    • +
  • +
  • MBstring: +
      +
    • Fixed bug (mb_substr overflow on start/length arguments).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (Leak partial content of the heap through heap buffer over-read). (CVE-2024-8929)
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (openssl may modify member types of certificate arrays).
    • +
    • Fixed bug (Large values for openssl_csr_sign() $days overflow).
    • +
    • Fix various memory leaks on error conditions in openssl_x509_parse().
    • +
  • +
  • PDO DBLIB: +
      +
    • Fixed bug (Integer overflow in the dblib quoter causing OOB writes). (CVE-2024-11236)
    • +
  • +
  • PDO Firebird: +
      +
    • Fixed bug (Integer overflow in the firebird quoter causing OOB writes). (CVE-2024-11236)
    • +
  • +
  • PDO ODBC: +
      +
    • Fixed bug (PDO_ODBC can inject garbage into field values).
    • +
  • +
  • Phar: +
      +
    • Fixed bug (Assertion failure in ext/phar/phar.c:2808).
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (Empty string is an invalid expression for ev).
    • +
  • +
  • Reflection: +
      +
    • Fixed bug (Memory leak in Reflection constructors).
    • +
  • +
  • Session: +
      +
    • Fixed bug (Unexpected null returned by session_set_cookie_params).
    • +
    • Fixed bug (overflow on cookie_lifetime ini value).
    • +
  • +
  • SOAP: +
      +
    • Fixed bug (Segmentation fault access null pointer in SoapClient).
    • +
  • +
  • Sockets: +
      +
    • Fixed bug with overflow socket_recvfrom $length argument.
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Use-after-free in SplHeap).
    • +
    • Fixed bug (Use-after-free in SplDoublyLinkedList::offsetSet()).
    • +
    • Fixed bug (Use-after-free in SplObjectStorage::setInfo()).
    • +
    • Fixed bug (Use-after-free in SplFixedArray::unset()).
    • +
    • Fixed bug (UAF in Observer->serialize).
    • +
    • Fix (Segmentation fault when calling __debugInfo() after failed SplFileObject::__constructor).
    • +
    • Fixed bug (UAF in SplDoublyLinked->serialize()).
    • +
    • Fixed bug (segfault on SplObjectIterator instance).
    • +
    • Fixed bug (Memory leaks in SPL constructors).
    • +
    • Fixed bug (UAF in ArrayObject::unset() and ArrayObject::exchangeArray()).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Failed assertion when throwing in assert() callback with bail enabled).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (Configuring a proxy in a stream context might allow for CRLF injection in URIs). (CVE-2024-11234)
    • +
    • Fixed bug (Single byte overread with convert.quoted-printable-decode filter). (CVE-2024-11233)
    • +
  • +
  • SysVMsg: +
      +
    • Fixed bug (msg_send() crashes when a type does not properly serialized).
    • +
  • +
  • SysVShm: +
      +
    • Fixed bug (Assertion error in shm_put_var).
    • +
  • +
  • XMLReader: +
      +
    • Fixed bug (Segmentation fault in ext/xmlreader/php_xmlreader.c).
    • +
  • +
  • Zlib: +
      +
    • Fixed bug (Memory management is broken for bad dictionaries.) (cmb)
    • +
  • +
+
+ + + +
+

Version 8.2.25

+ +
  • Calendar: +
      +
    • Fixed : jdtounix overflow on argument value.
    • +
    • Fixed : easter_days/easter_date overflow on year argument.
    • +
    • Fixed : jddayofweek overflow.
    • +
    • Fixed : jewishtojd overflow.
    • +
  • +
  • CLI: +
      +
    • Fixed bug : duplicate http headers when set several times by the client.
    • +
  • +
  • Core: +
      +
    • Fixed bug : zend_strtod overflow with precision INI set on large value.
    • +
    • Fixed bug (Assertion failure for TRACK_VARS_SERVER).
    • +
    • Fixed bug (Failed assertion when promoting Serialize deprecation to exception).
    • +
    • Fixed bug (Segfault when printing backtrace during cleanup of nested generator frame).
    • +
    • Fixed bug (Core dumped in Zend/zend_generators.c).
    • +
    • Fixed bug (Assertion failure in Zend/zend_exceptions.c).
    • +
    • Fixed bug (Observer segfault when calling user function in internal function via trampoline).
    • +
  • +
  • Date: +
      +
    • Fixed bug : Crash when not calling parent constructor of DateTimeZone.
    • +
    • Fixed regression where signs after the first one were ignored while parsing a signed integer, with the DateTimeInterface::modify() function.
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Segmentation fault (access null pointer) in ext/dom/parentnode/tree.c).
    • +
    • Fixed bug (Assertion failure in ext/dom/parentnode/tree.c).
    • +
  • +
  • GD: +
      +
    • Fixed bug (bitshift overflow on wbmp file content reading / fix backport from upstream).
    • +
    • Fixed bug (overflow/underflow on imagerotate degrees value) (David Carlier)
    • +
    • Fixed bug (imagescale underflow on RBG channels / fix backport from upstream).
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (Various NULL pointer dereferencements in ldap_modify_batch()).
    • +
    • Fixed bug (Segfault in ldap_list(), ldap_read(), and ldap_search() when LDAPs array is not a list).
    • +
    • Fix (php_ldap_do_modify() attempts to free pointer not allocated by ZMM.).
    • +
    • Fix (Memory leak in php_ldap_do_modify() when entry is not a proper dictionary).
    • +
  • +
  • MBString: +
      +
    • Fixed bug (Reference invariant broken in mb_convert_variables()).
    • +
  • +
  • OpenSSL: +
      +
    • Fixed stub for openssl_csr_new.
    • +
  • +
  • PCRE: +
      +
    • Fixed bug (underflow on offset argument).
    • +
    • Fixed bug (UBSan address overflowed in ext/pcre/php_pcre.c).
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (phpdbg: Assertion failure on i funcs).
    • +
    • Fixed bug (phpdbg: exit in exception handler reports fatal error).
    • +
  • +
  • Reflection: +
      +
    • Fixed bug (Assertion failure in ext/reflection/php_reflection.c).
    • +
  • +
  • SAPI: +
      +
    • Fixed bug (php-fpm: zend_mm_heap corrupted with cgi-fcgi request).
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (Segmentation fault in ext/simplexml/simplexml.c).
    • +
  • +
  • Sockets: +
      +
    • Fixed bug (socket_strerror overflow on errno argument).
    • +
  • +
  • SOAP: +
      +
    • (Wrong namespace on xsd import error message).
    • +
    • Fixed bug (Segmentation fault when cloning SoapServer).
    • +
    • Fix Soap leaking http_msg on error.
    • +
    • Fixed bug (Assertion failure in ext/soap/php_encoding.c:460).
    • +
    • Fixed bug (Soap segfault when classmap instantiation fails).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (overflow on unpack call hex string repeater).
    • +
    • Fixed bug (overflow on stream timeout option value).
    • +
    • Fixed bug (Assertion failure in Zend/zend_hash.c).
    • +
  • +
  • Streams: +
      +
    • Fixed bugs and (leak / assertion failure in streams.c).
    • +
    • Fixed bug (Signed integer overflow in main/streams/streams.c).
    • +
  • +
  • TSRM: +
      +
    • Prevent closing of unrelated handles.
    • +
  • +
  • XML: +
      +
    • Fixed bug (Assertion failure in xml_parse_into_struct after exception).
    • +
  • +
+
+ + + +
+

Version 8.2.24

+ +
  • CGI: +
      +
    • Fixed bug GHSA-p99j-rfp4-xqvq (Bypass of CVE-2024-4577, Parameter Injection Vulnerability). (CVE-2024-8926)
    • +
    • Fixed bug GHSA-94p6-54jq-9mwp (cgi.force_redirect configuration is bypassable due to the environment variable collision). (CVE-2024-8927)
    • +
  • +
  • Core: +
      +
    • Fixed bug (MSan false-positve on zend_max_execution_timer).
    • +
    • Fixed bug (Configure error grep illegal option q).
    • +
    • Fixed bug (Configure error: genif.sh: syntax error).
    • +
    • Fixed bug (--disable-ipv6 during compilation produces error EAI_SYSTEM not found).
    • +
    • Fixed bug (CRC32 API build error on arm 32-bit).
    • +
    • Fixed bug (Do not scan generator frames more than once).
    • +
    • Fixed uninitialized lineno in constant AST of internal enums.
    • +
  • +
  • Curl: +
      +
    • FIxed bug (curl_multi_select overflow on timeout argument).
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Segmentation fault (access null pointer) in ext/dom/xml_common.h).
    • +
  • +
  • Fileinfo: +
      +
    • Fixed bug (Incorrect error message for finfo_file with an empty filename argument).
    • +
  • +
  • FPM: +
      +
    • Fixed bug GHSA-865w-9rf3-2wh5 (Logs from childrens may be altered). (CVE-2024-9026)
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (Heap corruption when querying a vector).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Access null pointer in Zend/Optimizer/zend_inference.c).
    • +
    • Fixed bug (Segmentation fault in Zend/zend_vm_execute.h).
    • +
  • +
  • SAPI: +
      +
    • Fixed bug GHSA-9pqp-7h25-4f32 (Erroneous parsing of multipart form data). (CVE-2024-8925)
    • +
  • +
  • SOAP: +
      +
    • (PHP SOAPClient does not support stream context HTTP headers in array form).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Signed integer overflow in ext/standard/scanf.c).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (php_stream_memory_get_buffer() not zero-terminated).
    • +
  • +
+
+ + + +
+

Version 8.2.23

+ +
  • Core: +
      +
    • Fixed bug (Memory leak in Zend/Optimizer/escape_analysis.c).
    • +
    • Fixed bug (Memory leak in Zend/zend_ini.c).
    • +
    • Fixed bug (Append -Wno-implicit-fallthrough flag conditionally).
    • +
    • Fix uninitialized memory in network.c.
    • +
    • Fixed bug (Segfault when destroying generator during shutdown).
    • +
    • Fixed bug (Crash during GC of suspended generator delegate).
    • +
  • +
  • Curl: +
      +
    • Fixed case when curl_error returns an empty string.
    • +
  • +
  • DOM: +
      +
    • Fix UAF when removing doctype and using foreach iteration.
    • +
  • +
  • FFI: +
      +
    • Fixed bug (ffi enum type (when enum has no name) make memory leak).
    • +
  • +
  • Hash: +
      +
    • Fix crash when converting array data for array in shm in xxh3.
    • +
  • +
  • Intl: +
      +
    • Fixed bug (IntlChar::foldCase()'s $option is not optional).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Segmentation fault for enabled observers after pass 4).
    • +
    • Fixed bug (Memory leak possibly related to opcache SHM placement).
    • +
  • +
  • Output: +
      +
    • Fixed bug (Segmentation fault (null pointer dereference) in ext/standard/url_scanner_ex.re).
    • +
  • +
  • PDO_Firebird: +
      +
    • Fix bogus fallthrough path in firebird_handle_get_attribute().
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (EOF emits redundant prompt in phpdbg local console mode with libedit/readline).
    • +
    • Fixed bug (heap buffer overflow in phpdbg (zend_hash_num_elements() Zend/zend_hash.h)).
    • +
    • Fixed bug use-after-free on watchpoint allocations.
    • +
  • +
  • Soap: +
      +
    • (Digest autentication dont work).
    • +
    • Fix SoapFault property destruction.
    • +
    • Fixed bug (SOAP XML broken since PHP 8.3.9 when using classmap constructor option).
    • +
  • +
  • Standard: +
      +
    • Fix passing non-finite timeout values in stream functions.
    • +
    • Fixed p(f)sockopen timeout overflow.
    • +
  • +
  • Streams: +
      +
    • Fixed bug (Memory leak in ext/phar/stream.c).
    • +
    • Fixed bug (Integer overflow on stream_notification_callback byte_max parameter with files bigger than 2GB).
    • +
  • +
  • Tidy: +
      +
    • Fix memory leaks in ext/tidy basedir restriction code.
    • +
  • +
+
+ + + +
+

Version 8.2.22

+ +
  • Core: +
      +
    • Fixed bug (Fixed support for systems with sysconf(_SC_GETPW_R_SIZE_MAX) == -1).
    • +
    • Fixed bug (Fix is_zend_ptr() for huge blocks).
    • +
    • Fixed bug (Memory leak in FPM test gh13563-conf-bool-env.phpt.
    • +
    • Fixed OSS-Fuzz #69765.
    • +
    • Fixed bug (Segmentation fault in Zend/zend_types.h).
    • +
    • Fixed bug (Use-after-free in property coercion with __toString()).
    • +
  • +
  • Dom: +
      +
    • Fixed bug (DOMDocument::xinclude() crash).
    • +
  • +
  • Gd: +
      +
    • ext/gd/tests/gh10614.phpt: skip if no PNG support.
    • +
    • restored warning instead of fata error.
    • +
  • +
  • LibXML: +
      +
    • Fixed bug (Build failure with libxml2 v2.13.0).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (No warning message when Zend DTrace is enabled that opcache.jit is implictly disabled).
    • +
  • +
  • Output: +
      +
    • Fixed bug (Unexpected null pointer in Zend/zend_string.h with empty output buffer).
    • +
  • +
  • PDO: +
      +
    • Fixed bug (Crash with PDORow access to null property).
    • +
  • +
  • Phar: +
      +
    • Fixed bug (null string from zip entry).
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (crashes with ASAN and ZEND_RC_DEBUG=1).
    • +
    • Fixed bug (echo output trimmed at NULL byte).
    • +
  • +
  • Shmop: +
      +
    • Fixed bug (shmop Windows 11 crashes the process).
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (null dereference after XML parsing failure).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Member access within null pointer in ext/spl/spl_observer.c).
    • +
  • +
  • Standard: +
      +
    • Fix 32-bit wordwrap test failures.
    • +
    • Fixed bug (time_sleep_until overflow).
    • +
  • +
  • Tidy: +
      +
    • Fix memory leak in tidy_repair_file().
    • +
  • +
  • Treewide: +
      +
    • Fix compatibility with libxml2 2.13.2.
    • +
  • +
  • XML: +
      +
    • Move away from to-be-deprecated libxml fields.
    • +
    • Fixed bug (Error installing PHP when --with-pear is used).
    • +
  • +
+
+ + + +
+

Version 8.2.21

+ +
  • Core: +
      +
    • Fixed bug (Incompatible pointer type warnings).
    • +
    • Fixed bug (max_execution_time reached too early on MacOS 14 when running on Apple Silicon).
    • +
    • Fixed bug (Crash when stack walking in destructor of yielded from values during Generator->throw()).
    • +
    • Fixed bug (Attempting to initialize class with private constructor calls destructor).
    • +
    • Fixed bug (Incompatible function pointer type for fclose).
    • +
  • +
  • BCMatch: +
      +
    • Fixed bug (bcpowmod() with mod = -1 returns 1 when it must be 0).
    • +
  • +
  • Curl: +
      +
    • Fixed bug (Test curl_basic_024 fails with curl 8.8.0).
    • +
  • +
  • DOM: +
      +
    • Fixed bug (Memory leak in xml and dom).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (PHP-FPM ping.path and ping.response config vars are ignored in status pool).
    • +
  • +
  • GD: +
      +
    • Fix parameter numbers for imagecolorset().
    • +
  • +
  • Intl: +
      +
    • Fix reference handling in SpoofChecker.
    • +
  • +
  • MySQLnd: +
      +
    • Partially fix bug (Apache crash on Windows when using a self-referencing anonymous function inside a class with an active mysqli connection).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (opcache.jit=off does not allow enabling JIT at runtime).
    • +
    • Fixed TLS access in JIT on FreeBSD/amd64.
    • +
    • Fixed bug (Error when building TSRM in ARM64).
    • +
  • +
  • PDO ODBC: +
      +
    • Fixed bug (incompatible SDWORD type with iODBC).
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (segfault on watchpoint addition failure).
    • +
  • +
  • Soap: +
      +
    • (PHPClient can't decompress response).
    • +
    • Fix missing error restore code.
    • +
    • Fix memory leak if calling SoapServer::setObject() twice.
    • +
    • Fix memory leak if calling SoapServer::setClass() twice.
    • +
    • Fix reading zlib ini settings in ext-soap.
    • +
    • Fix memory leaks with string function name lookups.
    • +
    • (SoapClient classmap doesn't support fully qualified class name).
    • +
    • (SoapClient Cookie Header Semicolon).
    • +
    • Fixed memory leaks when calling SoapFault::__construct() twice.
    • +
  • +
  • Sodium: +
      +
    • Fix memory leaks in ext/sodium on failure of some functions.
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Member access within null pointer in extension spl).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Fixed off-by-one error in checking length of abstract namespace Unix sockets).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (PHP Fatal error triggers pointer being freed was not allocated and malloc: double free for ptr errors).
    • +
  • +
+
+ + + +
+

Version 8.2.20

+ +
  • CGI: +
      +
    • Fixed buffer limit on Windows, replacing read call usage by _read.
    • +
    • Fixed bug GHSA-3qgc-jrrr-25jv (Bypass of CVE-2012-1823, Argument Injection in PHP-CGI). (CVE-2024-4577)
    • +
  • +
  • CLI: +
      +
    • Fixed bug (PHP Interactive shell input state incorrectly handles quoted heredoc literals.).
    • +
  • +
  • Core: +
      +
    • Fixed bug (Incorrect validation of #[Attribute] flags type for non-compile-time expressions).
    • +
    • Fixed bug (Floating point bug in range operation on Apple Silicon hardware).
    • +
  • +
  • DOM: +
      +
    • Fix crashes when entity declaration is removed while still having entity references.
    • +
    • Fix references not handled correctly in C14N.
    • +
    • Fix crash when calling childNodes next() when iterator is exhausted.
    • +
    • Fix crash in ParentNode::append() when dealing with a fragment containing text nodes.
    • +
  • +
  • FFI: +
      +
    • Fixed bug (Cannot use FFI::load on CRLF header file with apache2handler).
    • +
  • +
  • Filter: +
      +
    • Fixed bug GHSA-w8qr-v226-r27w (Filter bypass in filter_var FILTER_VALIDATE_URL). (CVE-2024-5458)
    • +
  • +
  • FPM: +
      +
    • Fix bug (Show decimal number instead of scientific notation in systemd status).
    • +
  • +
  • Hash: +
      +
    • ext/hash: Swap the checking order of `__has_builtin` and `__GNUC__` (Saki Takamachi)
    • +
  • +
  • Intl: +
      +
    • Fixed build regression on systems without C++17 compilers.
    • +
  • +
  • Ini: +
      +
    • Fixed bug (Corrected spelling mistake in php.ini files).
    • +
  • +
  • MySQLnd: +
      +
    • Fix bug (mysqli_fetch_assoc reports error from nested query).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Fix accidental persisting of internal class constant in shm).
    • +
  • +
  • OpenSSL: +
      +
    • The openssl_private_decrypt function in PHP, when using PKCS1 padding (OPENSSL_PKCS1_PADDING, which is the default), is vulnerable to the Marvin Attack unless it is used with an OpenSSL version that includes the changes from this pull request: https://github.com/openssl/openssl/pull/13817 (rsa_pkcs1_implicit_rejection). These changes are part of OpenSSL 3.2 and have also been backported to stable versions of various Linux distributions, as well as to the PHP builds provided for Windows since the previous release. All distributors and builders should ensure that this version is used to prevent PHP from being vulnerable.
    • +
  • +
  • Standard: +
      +
    • Fixed bug GHSA-9fcc-425m-g385 (Bypass of CVE-2024-1874). (CVE-2024-5585)
    • +
  • +
  • XML: +
      +
    • Fixed bug (Segmentation fault with XML extension under certain memory limit).
    • +
  • +
  • XMLReader: +
      +
    • Fixed bug (XMLReader::open() can't be overridden).
    • +
  • +
+
+ + + +
+

Version 8.2.19

+ +
  • Core: +
      +
    • Fixed bug (Invalid execute_data->opline pointers in observer fcall handlers when JIT is enabled).
    • +
    • Fixed bug (Applying zero offset to null pointer in Zend/zend_opcode.c).
    • +
    • Fixed bug (Align the behavior of zend-max-execution-timers with other timeout implementations).
    • +
    • Fixed bug (Broken cleanup of unfinished calls with callable convert parameters).
    • +
    • Fixed bug (Erroneous dnl appended in configure).
    • +
    • Fixed bug (If autoloading occurs during constant resolution filename and lineno are identified incorrectly).
    • +
    • Fixed bug (Missing void keyword).
    • +
  • +
  • Fibers: +
      +
    • Fixed bug (ASAN false positive underflow when executing copy()).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (Setting bool values via env in FPM config fails).
    • +
  • +
  • Intl: +
      +
    • Fixed build for icu 74 and onwards.
    • +
  • +
  • MySQLnd: +
      +
    • Fix shift out of bounds on 32-bit non-fast-path platforms.
    • +
  • +
  • Opcache: +
      +
    • Fixed incorrect assumptions across compilation units for static calls.
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (feof on OpenSSL stream hangs indefinitely).
    • +
  • +
  • PDO SQLite: +
      +
    • Fix (Buffer size is now checked before memcmp).
    • +
    • Fix (Manage refcount of agg_context->val correctly).
    • +
  • +
  • Phar: +
      +
    • Fixed bug (Renaming a file in a Phar to an already existing filename causes a NULL pointer dereference).
    • +
    • Fixed bug (Applying zero offset to null pointer in zend_hash.c).
    • +
    • Fix potential NULL pointer dereference before calling EVP_SignInit.
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (Null pointer access of type 'zval' in phpdbg_frame).
    • +
  • +
  • Posix: +
      +
    • Fix usage of reentrant functions in ext/posix.
    • +
  • +
  • Session: +
      +
    • Fixed bug (Member access within null pointer of type 'ps_files' in ext/session/mod_files.c).
    • +
    • Fixed bug (memleak and segfault when using ini_set with session.trans_sid_hosts).
    • +
    • Fixed buffer _read/_write size limit on windows for the file mode.
    • +
  • +
  • Streams: +
      +
    • Fixed file_get_contents() on Windows fails with "errno=22 Invalid argument".
    • +
    • Fixed bug (Part 1 - Memory leak on stream filter failure).
    • +
    • Fixed bug (Incorrect PHP_STREAM_OPTION_CHECK_LIVENESS case in ext/openssl/xp_ssl.c - causing use of dead socket).
    • +
    • Fixed bug (Build fails on musl 1.2.4 - lfs64).
    • +
  • +
  • Treewide: +
      +
    • Fix gcc-14 Wcalloc-transposed-args warnings.
    • +
  • +
+
+ + + +
+

Version 8.2.18

+ +
  • Core: +
      +
    • Fixed bug (Corrupted memory in destructor with weak references).
    • +
    • Fixed bug (AX_GCC_FUNC_ATTRIBUTE failure).
    • +
    • Fixed bug (GC does not scale well with a lot of objects created in destructor).
    • +
  • +
  • DOM: +
      +
    • Add some missing ZPP checks.
    • +
    • Fix potential memory leak in XPath evaluation results.
    • +
    • Fix phpdoc for DOMDocument load methods.
    • +
  • +
  • FPM: +
      +
    • Fix incorrect check in fpm_shm_free().
    • +
  • +
  • GD: +
      +
    • Fixed bug (add GDLIB_CFLAGS in feature tests).
    • +
  • +
  • Gettext: +
      +
    • Fixed sigabrt raised with dcgettext/dcngettext calls with gettext 0.22.5 with category set to LC_ALL.
    • +
  • +
  • MySQLnd: +
      +
    • Fix (Fixed handshake response [mysqlnd]).
    • +
    • Fix incorrect charset length in check_mb_eucjpms().
    • +
  • +
  • Opcache: +
      +
    • Fixed (JITed QM_ASSIGN may be optimized out when op1 is null).
    • +
    • Fixed (Segmentation fault for enabled observers when calling trait method of internal trait when opcache is loaded).
    • +
  • +
  • PDO: +
      +
    • Fix various PDORow bugs.
    • +
  • +
  • Random: +
      +
    • Fixed bug (Pre-PHP 8.2 compatibility for mt_srand with unknown modes).
    • +
    • Fixed bug (Global Mt19937 is not properly reset in-between requests when MT_RAND_PHP is used).
    • +
  • +
  • Session: +
      +
    • Fixed bug (Segfault with session_decode and compilation error).
    • +
  • +
  • Sockets: +
      +
    • Fixed bug (socket_getsockname returns random characters in the end of the socket name).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Unable to resize SplfixedArray after being unserialized in PHP 8.2.15).
    • +
    • Fixed bug (Unexpected null pointer in zend_string.h).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Live filesystem modified by tests).
    • +
    • Fixed (Added validation of `\n` in $additional_headers of mail()).
    • +
    • Fixed bug (file_put_contents fail on strings over 4GB on Windows).
    • +
    • Fixed bug GHSA-pc52-254m-w9w7 (Command injection via array-ish $command parameter of proc_open). (CVE-2024-1874)
    • +
    • Fixed bug GHSA-wpj3-hf5j-x4v4 (__Host-/__Secure- cookie bypass due to partial CVE-2022-31629 fix). (CVE-2024-2756)
    • +
    • Fixed bug GHSA-h746-cjrr-wfmr (password_verify can erroneously return true, opening ATO risk). (CVE-2024-3096)
    • +
  • +
  • XML: +
      +
    • Fixed bug (Multiple test failures when building with --with-expat).
    • +
  • +
+
+ + + +
+

Version 8.2.17

+ +
  • Core: +
      +
    • Fix ZTS persistent resource crashes on shutdown.
    • +
  • +
  • Curl: +
      +
    • Fix failing tests due to string changes in libcurl 8.6.0.
    • +
  • +
  • DOM: +
      +
    • Fix reference access in dimensions for DOMNodeList and DOMNodeMap.
    • +
  • +
  • Fileinfo: +
      +
    • Fixed bug (finfo::buffer(): Failed identify data 0:(null), backport).
    • +
  • +
  • FPM: +
      +
    • (getenv in php-fpm should not read $_ENV, $_SERVER).
    • +
  • +
  • GD: +
      +
    • Fixed bug (detection of image formats in system gd library).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug ([mysqlnd] Fixed not to set CR_MALFORMED_PACKET to error if CR_SERVER_GONE_ERROR is already set).
    • +
  • +
  • PGSQL: +
      +
    • Fixed bug (pg_execute/pg_send_query_params/pg_send_execute with null value passed by reference).
    • +
  • +
  • Standard: +
      +
    • Fixed array key as hash to string (case insensitive) comparison typo for the second operand buffer size (albeit unused for now).
    • +
  • +
+
+ + + +
+

Version 8.2.16

+ +
  • Core: +
      +
    • Fixed timer leak in zend-max-execution-timers builds.
    • +
    • Fixed bug (linking failure on ARM with mold).
    • +
    • Fixed bug (Anonymous class reference in trigger_error / thrown Exception).
    • +
    • Fixed bug (GCC 14 build failure).
    • +
  • +
  • Curl: +
      +
    • Fix missing error check in curl_multi_init().
    • +
  • +
  • FPM: +
      +
    • Fixed bug (Incorrect SCRIPT_NAME with Apache ProxyPassMatch when plus in path).
    • +
  • +
  • GD: +
      +
    • Fixed bug (imagettfbbox(): Could not find/open font UNC path).
    • +
    • Fixed bug (imagerotate will turn the picture all black, when rotated 90).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (When running a stored procedure (that returns a result set) twice, PHP crashes).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Segmentation fault will be reported when JIT is off but JIT_debug is still on).
    • +
  • +
  • OpenSSL: +
      +
    • Fixed LibreSSL undefined reference when OPENSSL_NO_ENGINE not set. (David Carlier).
    • +
  • +
  • PDO_Firebird: +
      +
    • Fix (Changed to convert float and double values ​​into strings using `H` format).
    • +
  • +
  • Phar: +
      +
    • (PHAR doesn't know about litespeed).
    • +
    • Fixed bug (PharData incorrectly extracts zip file).
    • +
  • +
  • Random: +
      +
    • Fixed bug (Randomizer::pickArrayKeys() does not detect broken engines).
    • +
  • +
  • Session: +
      +
    • Fixed bug (Corrupted session written when there's a fatal error in autoloader).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (Copying large files using mmap-able source streams may exhaust available memory and fail).
    • +
  • +
+
+ + + +
+

Version 8.2.15

+ +
  • Core: +
      +
    • Fixed bug (false positive SSA integrity verification failed when loading composer classmaps with more than 11k elements).
    • +
    • Fixed bug (missing cross-compiling 3rd argument so Autoconf doesn't emit warnings).
    • +
  • +
  • Cli: +
      +
    • Fix incorrect timeout in built-in web server when using router script and max_input_time.
    • +
  • +
  • FFI: +
      +
    • Fixed bug (stream_wrapper_register crashes with FFI\CData).
    • +
    • Fixed bug (FFI::new interacts badly with observers).
    • +
  • +
  • Intl: +
      +
    • Fixed (IntlDateFormatter::__construct accepts 'C' as valid locale).
    • +
  • +
  • Hash: +
      +
    • Fixed bug (hash() function hangs endlessly if using sha512 on strings >= 4GiB).
    • +
  • +
  • ODBC: +
      +
    • Fix crash on Apache shutdown with persistent connections.
    • +
  • +
  • Opcache: +
      +
    • Fixed oss-fuzz #64727 (JIT undefined array key warning may overwrite DIM with NULL when DIM is the same var as result).
    • +
    • Added workaround for SELinux mprotect execheap issue. See https://bugzilla.kernel.org/show_bug.cgi?id=218258.
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (openssl_csr_sign might leak new cert on error).
    • +
  • +
  • PDO: +
      +
    • Fix (Fixed PDO::getAttribute() to get PDO::ATTR_STRINGIFY_FETCHES).
    • +
  • +
  • PDO_ODBC: +
      +
    • Fixed bug (Unable to turn on autocommit mode with setAttribute()).
    • +
  • +
  • PGSQL: +
      +
    • Fixed auto_reset_persistent handling and allow_persistent type.
    • +
    • Fixed bug (Apache crashes on shutdown when using pg_pconnect()).
    • +
  • +
  • Phar: +
      +
    • (Segmentation fault on including phar file).
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (Double free of init_file in phpdbg_prompt.c).
    • +
  • +
  • SimpleXML: +
      +
    • Fix getting the address of an uninitialized property of a SimpleXMLElement resulting in a crash.
    • +
  • +
  • Tidy: +
      +
    • Fixed bug (tidynode.props.attribute is missing "Boolean Attributes" and empty attributes).
    • +
  • +
+
+ + + +
+

Version 8.2.14

+ +
  • Core: +
      +
    • Fixed oss-fuzz #54325 (Use-after-free of name in var-var with malicious error handler).
    • +
    • Fixed oss-fuzz #64209 (In-place modification of filename in php_message_handler_for_zend).
    • +
    • Fixed bug / (Invalid opline in OOM handlers within ZEND_FUNC_GET_ARGS and ZEND_BIND_STATIC).
    • +
    • Fix various missing NULL checks.
    • +
    • Fixed bug (Leak of call->extra_named_params on internal __call).
    • +
  • +
  • Date: +
      +
    • Fixed improbably integer overflow while parsing really large (or small) Unix timestamps.
    • +
  • +
  • DOM: +
      +
    • Fixed bug (DOM: Removing XMLNS namespace node results in invalid default: prefix).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (Segmentation fault in fpm_status_export_to_zval).
    • +
  • +
  • FTP: +
      +
    • Fixed bug (FTP & SSL session reuse).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (Test bug69398.phpt fails with ICU 74.1).
    • +
  • +
  • LibXML: +
      +
    • Fixed bug (libxml2 2.12.0 issue building from src).
    • +
    • Fixed test failures for libxml2 2.12.0.
    • +
  • +
  • MySQLnd: +
      +
    • Avoid using uninitialised struct.
    • +
    • Fixed bug (Possible dereference of NULL in MySQLnd debug code).
    • +
  • +
  • Opcache: +
      +
    • Fixed JIT bug (Function JIT emits "Uninitialized string offset" warning at the same time as invalid offset Error).
    • +
    • Fixed JIT bug (JIT emits "Attempt to assign property of non-object" warning at the same time as Error is being thrown).
    • +
  • +
  • OpenSSL: +
      +
    • (openssl_pkcs7_verify() may ignore untrusted CAs).
    • +
  • +
  • PCRE: +
      +
    • Fixed bug (The gh11374 test fails on Alpinelinux).
    • +
  • +
  • PDO PGSQL: +
      +
    • Fixed the default value of $fetchMode in PDO::pgsqlGetNotify() (kocsismate)
    • +
  • +
  • PGSQL: +
      +
    • Fixed bug wrong argument type for pg_untrace.
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (MEMORY_LEAK in phpdbg_prompt.c).
    • +
  • +
  • SOAP: +
      +
    • Fixed bug ([SOAP] Temporary WSDL cache files not being deleted).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (SplFileInfo::getFilename() segfault in combination with GlobIterator and no directory separator).
    • +
  • +
  • SQLite3: +
      +
    • Fixed bug (sqlite3_defensive.phpt fails with sqlite 3.44.0).
    • +
  • +
  • Standard: +
      +
    • Fix memory leak in syslog device handling.
    • +
    • Fixed bug (browscap segmentation fault when configured in the vhost).
    • +
    • Fixed bug (proc_open() does not take into account references in the descriptor array).
    • +
  • +
  • Streams: +
      +
    • (Stream wrappers in imagecreatefrompng causes segfault).
    • +
  • +
  • Zip: +
      +
    • Fixed bug (Inconsistency in ZipArchive::addGlob remove_path Option Behavior).
    • +
  • +
+
+ + + +
+

Version 8.2.13

+ +
  • Core: +
      +
    • Fixed double-free of non-interned enum case name.
    • +
    • Fixed bug (Incorrect result of stripos with single character needle).
    • +
    • Fixed bug (Double-free of doc_comment when overriding static property via trait).
    • +
    • Fixed segfault caused by weak references to FFI objects.
    • +
    • Fixed max_execution_time: don't delete an unitialized timer.
    • +
    • Fixed bug (Arginfo soft-breaks with namespaced class return type if the class name starts with N).
    • +
  • +
  • DOM: +
      +
    • Fix registerNodeClass with abstract class crashing.
    • +
    • Add missing NULL pointer error check.
    • +
    • Fix validation logic of php:function() callbacks.
    • +
  • +
  • Fiber: +
      +
    • Fixed bug (ReflectionFiber segfault).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (Loading ext in FPM config does not register module handlers).
    • +
    • Fixed bug (FPM: segfault dynamically loading extension without opcache).
    • +
    • (FastCGI terminates conn after FCGI_GET_VALUES).
    • +
  • +
  • Intl: +
      +
    • Removed the BC break on IntlDateFormatter::construct which threw an exception with an invalid locale.
    • +
  • +
  • Opcache: +
      +
    • Added warning when JIT cannot be enabled.
    • +
    • Fixed bug (Crashes in zend_accel_inheritance_cache_find since upgrading to 8.1.3 due to corrupt on-disk file cache).
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (Missing sigbio creation checking in openssl_cms_verify).
    • +
  • +
  • PCRE: +
      +
    • Fixed bug (Backport upstream fix, Different preg_match result with -d pcre.jit=0).
    • +
  • +
  • SOAP: +
      +
    • Fixed bug (Segmentation fault on SoapClient::__getTypes).
    • +
    • (SOAP WSDL cache race condition causes Segmentation Fault).
    • +
    • (SOAP leaves incomplete cache file on ENOSPC).
    • +
    • Fix incorrect uri check in SOAP caching.
    • +
    • Fix segfault and assertion failure with refcounted props and arrays.
    • +
    • Fix potential crash with an edge case of persistent encoders.
    • +
    • (Memleak in SoapClient).
    • +
  • +
  • Streams: +
      +
    • (getimagesize with "&$imageinfo" fails on StreamWrappers).
    • +
  • +
  • XMLReader: +
      +
    • Add missing NULL pointer error check.
    • +
  • +
  • XMLWriter: +
      +
    • Add missing NULL pointer error check.
    • +
  • +
  • XSL: +
      +
    • Add missing module dependency.
    • +
    • Fix validation logic of php:function() callbacks.
    • +
  • +
+
+ + + +
+

Version 8.2.12

+ +
  • Core: +
      +
    • Fixed bug (memory leak when class using trait with doc block).
    • +
    • Fixed bug (Module entry being overwritten causes type errors in ext/dom).
    • +
    • Fixed bug (__builtin_cpu_init check).
    • +
    • (ZTS + preload = segfault on shutdown).
    • +
  • +
  • CLI: +
      +
    • Ensure a single Date header is present.
    • +
  • +
  • CType: +
      +
    • Fixed bug (ctype_alnum 5 times slower in PHP 8.1 or greater).
    • +
  • +
  • DOM: +
      +
    • Restore old namespace reconciliation behaviour.
    • +
    • Fixed bug (DOMNode serialization on PHP ^8.1).
    • +
  • +
  • Fileinfo: +
      +
    • Fixed bug (fileinfo returns text/xml for some svg files).
    • +
  • +
  • Filter: +
      +
    • Fix explicit FILTER_REQUIRE_SCALAR with FILTER_CALLBACK (ilutov)
    • +
  • +
  • Hash: +
      +
    • Fixed bug (segfault copying/cloning a finalized HashContext).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (segfault on IntlDateFormatter::construct).
    • +
    • Fixed bug (IntlDateFormatter::construct should throw an exception on an invalid locale).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (PHP Startup: Invalid library (maybe not a PHP library) 'mysqlnd.so' in Unknown on line).
    • +
  • +
  • Opcache: +
      +
    • Fixed opcache_invalidate() on deleted file.
    • +
    • Fixed bug (JIT+private array property access inside closure accesses private property in child class).
    • +
  • +
  • PCRE: +
      +
    • Fixed bug (Backport upstream fix, PCRE regular expressions with JIT enabled gives different result).
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (Can't use xpath with comments in SimpleXML).
    • +
    • Fixed bug (Entity reference produces infinite loop in var_dump/print_r).
    • +
    • Fixed bug (Unable to get processing instruction contents in SimpleXML).
    • +
    • Fixed bug (Unable to get comment contents in SimpleXML).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (binding ipv4 address with both address and port at 0).
    • +
  • +
  • XML: +
      +
    • Fix return type of stub of xml_parse_into_struct().
    • +
    • Fix memory leak when calling xml_parse_into_struct() twice.
    • +
  • +
  • XSL: +
      +
    • Fix type error on XSLTProcessor::transformToDoc return value with SimpleXML.
    • +
  • +
+
+ + + +
+

Version 8.2.11

+ +
  • Core: +
      +
    • Fixed bug (Constant ASTs containing objects).
    • +
    • Fixed bug (On riscv64 require libatomic if actually needed).
    • +
    • Fixed bug : ini_parse_quantity() accepts invalid quantities.
    • +
    • Fixed bug (Segfault when freeing incompletely initialized closures).
    • +
    • Fixed bug (Internal iterator rewind handler is called twice).
    • +
    • Fixed bug (Incorrect compile error when using array access on TMP value in function call).
    • +
  • +
  • DOM: +
      +
    • Fix memory leak when setting an invalid DOMDocument encoding.
    • +
  • +
  • Iconv: +
      +
    • Fixed build for NetBSD which still uses the old iconv signature.
    • +
  • +
  • Intl: +
      +
    • Fixed bug (intl_get_error_message() broken after MessageFormatter::formatMessage() fails).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (Invalid error message when connection via SSL fails: "trying to connect via (null)").
    • +
  • +
  • ODBC: +
      +
    • Fixed memory leak with failed SQLPrepare.
    • +
    • Fixed persistent procedural ODBC connections not getting closed.
    • +
  • +
  • SimpleXML: +
      +
    • (XPath processing-instruction() function is not supported).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (RecursiveCallbackFilterIterator regression in 8.1.18).
    • +
  • +
  • SQLite3: +
      +
    • Fixed bug (SQLite3 callback functions cause a memory leak with a callable array).
    • +
  • +
+
+ + + +
+

Version 8.2.10

+ +
  • CLI: +
      +
    • Fixed bug (cli server crashes on SIGINT when compiled with ZEND_RC_DEBUG=1).
    • +
    • Fixed bug (Improve man page about the built-in server).
    • +
  • +
  • Date: +
      +
    • Fixed bug (Crash with DatePeriod when uninitialised objects are passed in).
    • +
  • +
  • Core: +
      +
    • Fixed strerror_r detection at configuration time.
    • +
    • Fixed trait typed properties using a DNF type not being correctly bound.
    • +
    • Fixed trait property types not being arena allocated if copied from an internal trait.
    • +
    • Fixed deep copy of property DNF type during lazy class load.
    • +
    • Fixed memory freeing of DNF types for non arena allocated types.
    • +
  • +
  • DOM: +
      +
    • Fix DOMEntity field getter bugs.
    • +
    • Fix incorrect attribute existence check in DOMElement::setAttributeNodeNS.
    • +
    • Fix DOMCharacterData::replaceWith() with itself.
    • +
    • Fix empty argument cases for DOMParentNode methods.
    • +
    • Fixed bug (Wrong default value of DOMDocument::xmlStandalone).
    • +
    • Fix json_encode result on DOMDocument.
    • +
    • Fix manually calling __construct() on DOM classes.
    • +
    • Fixed bug (ParentNode methods should perform their checks upfront).
    • +
    • Fix viable next sibling search for replaceWith.
    • +
    • Fix segfault when DOMParentNode::prepend() is called when the child disappears.
    • +
  • +
  • FFI: +
      +
    • Fix leaking definitions when using FFI::cdef()->new(...).
    • +
  • +
  • Hash: +
      +
    • Fix use-of-uninitialized-value in hash_pbkdf2(), fix missing $options parameter in signature.
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (authentication to a sha256_password account fails over SSL).
    • +
    • Fixed bug (mysqlnd fails to authenticate with sha256_password accounts using passwords longer than 19 characters).
    • +
    • Fixed bug (MySQL Statement has a empty query result when the response field has changed, also Segmentation fault).
    • +
    • Fixed invalid error message "Malformed packet" when connection is dropped.
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (opcache.interned_strings_buffer either has no effect or opcache_get_status() / phpinfo() is wrong).
    • +
    • Avoid adding an unnecessary read-lock when loading script from shm if restart is in progress.
    • +
  • +
  • PCNTL: +
      +
    • Revert behaviour of receiving SIGCHLD signals back to the behaviour before 8.1.22.
    • +
  • +
  • SPL: +
      +
    • (SplFixedArray::setSize() causes use-after-free).
    • +
  • +
  • Standard: +
      +
    • Prevent int overflow on $decimals in number_format.
    • +
    • Fixed bug (Fix off-by-one bug when truncating tempnam prefix) (athos-ribeiro)
    • +
  • +
+
+ + + +
+

Version 8.2.9

+ +
  • Build: +
      +
    • Fixed bug (PHP version check fails with '-' separator).
    • +
  • +
  • CLI: +
      +
    • Fix interrupted CLI output causing the process to exit.
    • +
  • +
  • Core: +
      +
    • Fixed oss-fuzz #60011 (Mis-compilation of by-reference nullsafe operator).
    • +
    • Fixed line number of JMP instruction over else block.
    • +
    • Fixed use-of-uninitialized-value with ??= on assert.
    • +
    • Fixed oss-fuzz #60411 (Fix double-compilation of arrow-functions).
    • +
    • Fixed build for FreeBSD before the 11.0 releases.
    • +
  • +
  • Curl: +
      +
    • Fix crash when an invalid callback function is passed to CURLMOPT_PUSHFUNCTION.
    • +
  • +
  • Date: +
      +
    • Fixed bug (Date modify returns invalid datetime).
    • +
    • Fixed bug (Can't parse time strings which include (narrow) non-breaking space characters).
    • +
    • Fixed bug (DateTime:createFromFormat stopped parsing datetime with extra space).
    • +
  • +
  • DOM: +
      +
    • Fixed bug (DOMElement::replaceWith() doesn't replace node with DOMDocumentFragment but just deletes node or causes wrapping <></> depending on libxml2 version).
    • +
  • +
  • Fileinfo: +
      +
    • Fixed bug (finfo returns wrong mime type for xz files).
    • +
  • +
  • FTP: +
      +
    • Fix context option check for "overwrite".
    • +
    • Fixed bug (Memory leak and invalid state with consecutive ftp_nb_fget).
    • +
  • +
  • GD: +
      +
    • Fix most of the external libgd test failures.
    • +
  • +
  • Intl: +
      +
    • Fix memory leak in MessageFormatter::format() on failure.
    • +
  • +
  • Libxml: +
      +
    • Fixed bug GHSA-3qrf-m4j2-pcrr (Security issue with external entity loading in XML without enabling it). (CVE-2023-3823)
    • +
  • +
  • MBString: +
      +
    • Fix (license issue: restricted unicode license headers).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (OPCache with Enum and Callback functions results in segmentation fault).
    • +
    • Prevent potential deadlock if accelerated globals cannot be allocated.
    • +
  • +
  • PCNTL: +
      +
    • Fixed bug (SIGCHLD is not always returned from proc_open).
    • +
  • +
  • PDO: +
      +
    • Fix (After php8.1, when PDO::ATTR_EMULATE_PREPARES is true and PDO::ATTR_STRINGIFY_FETCHES is true, decimal zeros are no longer filled).
    • +
  • +
  • PDO SQLite: +
      +
    • Fix (Make test failure: ext/pdo_sqlite/tests/bug_42589.phpt).
    • +
  • +
  • Phar: +
      +
    • Add missing check on EVP_VerifyUpdate() in phar util.
    • +
    • Fixed bug GHSA-jqcx-ccgc-xwhv (Buffer mismanagement in phar_dir_read()). (CVE-2023-3824)
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (phpdbg -h options doesn't list the -z option).
    • +
  • +
  • Session: +
      +
    • Removed broken url support for transferring session ID.
    • +
  • +
  • Standard: +
      +
    • Fix serialization of RC1 objects appearing in object graph twice.
    • +
  • +
  • Streams: +
      +
    • Fixed bug (Use-after-free when unregistering user stream wrapper from itself).
    • +
  • +
  • SQLite3: +
      +
    • Fix replaced error handling in SQLite3Stmt::__construct.
    • +
  • +
  • XMLReader: +
      +
    • Fix (Argument corruption when calling XMLReader::open or XMLReader::XML non-statically with observer active).
    • +
  • +
+
+ + + +
+

Version 8.2.8

+ +
  • CLI: +
      +
    • Fixed bug (cli/get_set_process_title fails on MacOS).
    • +
  • +
  • Core: +
      +
    • Fixed build for the riscv64 architecture/GCC 12.
    • +
  • +
  • Curl: +
      +
    • Fixed bug (Unable to set CURLOPT_ACCEPT_ENCODING to NULL).
    • +
  • +
  • Date: +
      +
    • Fixed bug (Segmentation fault with custom object date properties).
    • +
  • +
  • DOM: +
      +
    • Fixed bugs and and and (DOMExceptions and segfaults with replaceWith).
    • +
    • Fixed bug (Setting DOMAttr::textContent results in an empty attribute value).
    • +
    • Fix return value in stub file for DOMNodeList::item.
    • +
    • Fix spec compliance error with '*' namespace for DOMDocument::getElementsByTagNameNS.
    • +
    • Fix DOMElement::append() and DOMElement::prepend() hierarchy checks.
    • +
    • Fixed bug (Memory leak when calling a static method inside an xpath query).
    • +
    • (append_node of a DOMDocumentFragment does not reconcile namespaces).
    • +
    • (DOMChildNode::replaceWith() bug when replacing a node with itself).
    • +
    • (Removed elements are still returned by getElementById).
    • +
    • (print_r() on DOMAttr causes Segfault in php_libxml_node_free_list()).
    • +
    • (Crash in DOMNameSpace debug info handlers).
    • +
    • Fix lifetime issue with getAttributeNodeNS().
    • +
    • Fix "invalid state error" with cloned namespace declarations.
    • +
    • and #47530 and #47847 (various namespace reconciliation issues).
    • +
    • (Completely broken array access functionality with DOMNamedNodeMap).
    • +
  • +
  • Opcache: +
      +
    • Fix allocation loop in zend_shared_alloc_startup().
    • +
    • Access violation on smm_shared_globals with ALLOC_FALLBACK.
    • +
    • Fixed bug (php still tries to unlock the shared memory ZendSem with opcache.file_cache_only=1 but it was never locked).
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug Incomplete validation of IPv6 Address fields in subjectAltNames (James Lucas, Jakub Zelenka).
    • +
  • +
  • PCRE: +
      +
    • Fix preg_replace_callback_array() pattern validation.
    • +
  • +
  • PGSQL: +
      +
    • Fixed intermittent segfault with pg_trace.
    • +
  • +
  • Phar: +
      +
    • Fix cross-compilation check in phar generation for FreeBSD.
    • +
  • +
  • SPL: +
      +
    • Fixed bug (SplFileInfo empty getBasename with more than one slash).
    • +
  • +
  • Standard: +
      +
    • Fix access on NULL pointer in array_merge_recursive().
    • +
    • Fix exception handling in array_multisort().
    • +
  • +
  • SQLite3: +
      +
    • Fixed bug (Invalid associative array containing duplicate keys).
    • +
  • +
+
+ + + +
+

Version 8.2.7

+ +
  • Core: +
      +
    • Fixed bug (Unable to alias namespaces containing reserved class names).
    • +
    • Fixed bug (Conditional jump or move depends on uninitialised value(s)).
    • +
    • Fixed bug (Exceeding memory limit in zend_hash_do_resize leaves the array in an invalid state).
    • +
    • Fixed bug (Compilation error on old GCC versions).
    • +
    • Fixed bug (foreach by-ref may jump over keys during a rehash).
    • +
  • +
  • Date: +
      +
    • Fixed bug (DateTimeZone::getName() does not include seconds in offset).
    • +
  • +
  • Exif: +
      +
    • Fixed bug (exif_read_data() cannot read smaller stream wrapper chunk sizes).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (PHP-FPM segfault due to after free usage of child->ev_std(out|err)).
    • +
    • (FPM status page: query_string not properly JSON encoded).
    • +
    • Fixed memory leak for invalid primary script file handle.
    • +
  • +
  • Hash: +
      +
    • Fixed bug (hash_file() appears to be restricted to 3 arguments).
    • +
  • +
  • LibXML: +
      +
    • Fixed bug (Few tests failed building with new libxml 2.11.0).
    • +
  • +
  • MBString: +
      +
    • Fix bug (Segfault in mb_strrpos / mb_strripos when using negative offset and ASCII encoding).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Incorrect match default branch optimization).
    • +
    • Fixed too wide OR and AND range inference.
    • +
    • Fixed missing class redeclaration error with OPcache enabled.
    • +
    • Fixed bug (In some specific cases SWITCH with one default statement will cause segfault).
    • +
  • +
  • PCNTL: +
      +
    • Fixed maximum argument count of pcntl_forkx().
    • +
  • +
  • PGSQL: +
      +
    • Fixed parameter parsing of pg_lo_export().
    • +
  • +
  • Phar: +
      +
    • Fixed bug (Generating phar.php during cross-compile can't be done).
    • +
  • +
  • Soap: +
      +
    • Fixed bug GHSA-76gg-c692-v2mw (Missing error check and insufficient random bytes in HTTP Digest authentication for SOAP). (CVE-2023-3247)
    • +
    • Fixed bug (make test fail while soap extension build).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Segmentation fault in spl_array_it_get_current_data (PHP 8.1.18)).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (move_uploaded_file() emits open_basedir warning for source file).
    • +
    • Fixed bug (POST/PATCH request switches to GET after a HTTP 308 redirect).
    • +
  • +
  • Streams: +
      +
    • Fixed bug ([Stream] STREAM_NOTIFY_PROGRESS over HTTP emitted irregularly for last chunk of data).
    • +
    • Fixed bug (Stream Socket Timeout).
    • +
    • Fixed bug (ASAN UndefinedBehaviorSanitizer when timeout = -1 passed to stream_socket_accept/stream_socket_client).
    • +
  • +
+
+ + + +
+

Version 8.2.6

+ +
  • Core: +
      +
    • Fix inconsistent float negation in constant expressions.
    • +
    • Fixed bug (php-cli core dump calling a badly formed function).
    • +
    • Fixed bug (PHP 8.1.16 segfaults on line 597 of sapi/apache2handler/sapi_apache2.c).
    • +
    • Fixed bug (Heap Buffer Overflow in zval_undefined_cv.).
    • +
    • Fixed bug (Incorrect CG(memoize_mode) state after bailout in ??=).
    • +
  • +
  • Date: +
      +
    • Fixed bug where the diff() method would not return the right result around DST changeover for date/times associated with a timezone identifier.
    • +
    • Fixed out-of-range bug when converting to/from around the LONG_MIN unix timestamp.
    • +
  • +
  • DOM: +
      +
    • (Segfault when using DOMChildNode::before()).
    • +
    • Fixed incorrect error handling in dom_zvals_to_fragment().
    • +
  • +
  • Exif: +
      +
    • Fixed bug (exif read : warnings and errors : Potentially invalid endianess, Illegal IFD size and Undefined index).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (TZData version not displayed anymore).
    • +
  • +
  • PCRE: +
      +
    • Fixed bug (Segfault in preg_replace_callback_array()).
    • +
  • +
  • Reflection: +
      +
    • Fixed bug (State-dependant segfault in ReflectionObject::getProperties).
    • +
  • +
  • SPL: +
      +
    • Handle indirect zvals and use up-to-date properties in SplFixedArray::__serialize.
    • +
  • +
  • Standard: +
      +
    • Fixed bug (mail() throws TypeError after iterating over $additional_headers array by reference).
    • +
    • Fixed bug (Duplicates returned by array_unique when using enums).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (feof() behavior change for UNIX based socket resources).
    • +
  • +
+
+ + + +
+

Version 8.2.5

+ +
  • Core: +
      +
    • Added optional support for max_execution_time in ZTS/Linux builds (Kévin Dunglas)
    • +
    • Fixed use-after-free in recursive AST evaluation.
    • +
    • Fixed bug (Memory leak PHP FPM 8.1).
    • +
    • Re-add some CTE functions that were removed from being CTE by a mistake.
    • +
    • Remove CTE flag from array_diff_ukey(), which was added by mistake.
    • +
    • Fixed bug (Named arguments in CTE functions cause a segfault).
    • +
    • Fixed bug (PHP 8.0.20 (ZTS) zend_signal_handler_defer crashes on apache).
    • +
    • Fixed bug (zend_signal_handler_defer crashes on apache shutdown).
    • +
    • Fixed bug (Fix NUL byte terminating Exception::__toString()).
    • +
    • Fix potential memory corruption when mixing __callStatic() and FFI.
    • +
  • +
  • Date: +
      +
    • Fixed bug (Private and protected properties in serialized Date* objects throw).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (fpm_env_init_main leaks environ).
    • +
    • Destroy file_handle in fpm_main.
    • +
    • (Incorrect SCRIPT_NAME with apache ProxyPassMatch when spaces are in path).
    • +
  • +
  • FTP: +
      +
    • Propagate success status of ftp_close().
    • +
    • Fixed bug (ftp_get/ftp_nb_get resumepos offset is maximum 10GB).
    • +
  • +
  • IMAP: +
      +
    • Fix build failure with Clang 16.
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (Possible Memory Leak with SSL-enabled MySQL connections).
    • +
  • +
  • Opcache: +
      +
    • Fixed build for macOS to cater with pkg-config settings.
    • +
    • Fixed bug (opcache.consistency_checks > 0 causes segfaults in PHP >= 8.1.5 in fpm context).
    • +
  • +
  • OpenSSL: +
      +
    • Add missing error checks on file writing functions.
    • +
  • +
  • PDO Firebird: +
      +
    • Fixed bug (Bus error with PDO Firebird on RPI with 64 bit kernel and 32 bit userland).
    • +
  • +
  • Phar: +
      +
    • Fixed bug (PharData archive created with Phar::Zip format does not keep files metadata (datetime)).
    • +
    • Add missing error checks on EVP_MD_CTX_create() and EVP_VerifyInit().
    • +
  • +
  • PDO ODBC: +
      +
    • Fixed missing and inconsistent error checks on SQLAllocHandle.
    • +
  • +
  • PGSQL: +
      +
    • Fixed typo in the array returned from pg_meta_data (extended mode).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Array Data Address Reference Issue).
    • +
    • Fixed bug (Unable to serialize processed SplFixedArrays in PHP 8.2.4).
    • +
    • Fixed bug (ArrayIterator allows modification of readonly props).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (stream_socket_server context leaks).
    • +
    • Fixed bug (Browscap crashes PHP 8.1.12 on request shutdown (apache2)).
    • +
    • Fixed oss-fuzz #57392 (Buffer-overflow in php_fgetcsv() with \0 delimiter and enclosure).
    • +
    • Fixed undefined behaviour in unpack().
    • +
  • +
+
+ + + +
+

Version 8.2.4

+ +
  • Core: +
      +
    • Fixed incorrect check condition in ZEND_YIELD.
    • +
    • Fixed incorrect check condition in type inference.
    • +
    • Fix incorrect check in zend_internal_call_should_throw().
    • +
    • Fixed overflow check in OnUpdateMemoryConsumption.
    • +
    • Fixed bug (Entering shutdown sequence with a fiber suspended in a Generator emits an unavoidable fatal error or crashes).
    • +
    • Fixed bug (Segfault/assertion when using fibers in shutdown function after bailout).
    • +
    • Fixed SSA object type update for compound assignment opcodes.
    • +
    • Fixed language scanner generation build.
    • +
    • Fixed zend_update_static_property() calling zend_update_static_property_ex() misleadingly with the wrong return type.
    • +
    • Fix bug (Fixed unknown string hash on property fetch with integer constant name).
    • +
    • Fixed php_fopen_primary_script() call resulted on zend_destroy_file_handle() freeing dangling pointers on the handle as it was uninitialized.
    • +
  • +
  • Curl: +
      +
    • Fixed deprecation warning at compile time.
    • +
    • Fixed bug (Unable to return CURL_READFUNC_PAUSE in readfunc callback).
    • +
  • +
  • Date: +
      +
    • Fix ('p' format specifier does not yield 'Z' for 00:00).
    • +
    • Fix (Custom properties of Date's child classes are not serialised).
    • +
    • Fixed bug (Private and protected properties in serialized Date* objects throw).
    • +
  • +
  • FFI: +
      +
    • Fixed incorrect bitshifting and masking in ffi bitfield.
    • +
  • +
  • Fiber: +
      +
    • Fixed assembly on alpine x86.
    • +
    • Fixed bug (segfault when garbage collector is invoked inside of fiber).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (FPM unknown child alert not valid).
    • +
    • Fixed bug (FPM successful config test early exit).
    • +
  • +
  • GMP: +
      +
    • Properly implement GMP::__construct().
    • +
  • +
  • Intl: +
      +
    • Fixed bug (Spoolchecker isSuspicious/areConfusable methods error code's argument always returning NULL0.
    • +
  • +
  • JSON: +
      +
    • Fixed JSON scanner and parser generation build.
    • +
  • +
  • MBString: +
      +
    • ext/mbstring: fix new_value length check.
    • +
    • Fix bug (mb_convert_encoding crashes PHP on Windows).
    • +
  • +
  • Opcache: +
      +
    • Fix incorrect page_size check.
    • +
  • +
  • OpenSSL: +
      +
    • Fixed php_openssl_set_server_dh_param() DH params errors handling.
    • +
  • +
  • PDO OCI: +
      +
    • (Reading a multibyte CLOB caps at 8192 chars).
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (heap buffer overflow on --run option misuse).
    • +
  • +
  • PGSQL: +
      +
    • Fix (pg_lo_open segfaults in the strict_types mode).
    • +
  • +
  • Phar: +
      +
    • Fix incorrect check in phar tar parsing.
    • +
  • +
  • Random: +
      +
    • Fix (Do not trust arc4random_buf() on glibc).
    • +
    • Fix (Made the default value of the first param of srand() and mt_srand() unknown).
    • +
  • +
  • Reflection: +
      +
    • Fixed bug (Reflection::getClosureUsedVariables opcode fix with variadic arguments).
    • +
    • Fix Segfault when using ReflectionFiber suspended by an internal function.
    • +
  • +
  • Session: +
      +
    • Fixed ps_files_cleanup_dir() on failure code paths with -1 instead of 0 as the latter was considered success by callers. (nielsdos).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Introduce mail.mixed_lf_and_crlf INI).
    • +
    • Fixed bug (Made the default value of the first param of srand() and mt_srand() unknown).
    • +
    • Fix incorrect check in cs_8559_5 in map_from_unicode().
    • +
    • Fix bug for reset/end/next/prev() attempting to move pointer of properties table for certain internal classes such as FFI classes
    • +
    • Fix incorrect error check in browsecap for pcre2_match().
    • +
  • +
  • Streams: +
      +
    • Fixed bug (File corruption in _php_stream_copy_to_stream_ex when using copy_file_range).
    • +
    • Fixed bug (copy() fails on cifs mounts because of incorrect copy_file_range() len).
    • +
  • +
  • Tidy: +
      +
    • Fix memory leaks when attempting to open a non-existing file or a file over 4GB.
    • +
    • Add missing error check on tidyLoadConfig.
    • +
  • +
  • Zlib: +
      +
    • Fixed output_handler directive value's length which counted the string terminator.
    • +
  • +
+
+ + + +
+

Version 8.2.3

+ +
  • Core: +
      +
    • (Password_verify() always return true with some hash). (CVE-2023-0567)
    • +
    • (1-byte array overrun in common path resolve code). (CVE-2023-0568)
    • +
  • +
  • SAPI: +
      +
    • Fixed bug GHSA-54hq-v5wp-fqgv (DOS vulnerability when parsing multipart request body). (CVE-2023-0662)
    • +
  • +
+
+ + + +
+

Version 8.2.2

+ +
  • Core: +
      +
    • Fixed bug (zif_get_object_vars: Assertion `!(((__ht)->u.flags & (1<<2)) != 0)' failed).
    • +
    • Fix (Assertion `(flag & (1<<3)) == 0' failed).
    • +
    • Fix (Assertion failure when adding more than 2**30 elements to an unpacked array).
    • +
    • Fix (Fiber stack variables do not participate in cycle collector).
    • +
    • Fix (Broken run_time_cache init for internal enum methods).
    • +
  • +
  • FPM: +
      +
    • (Missing separator in FPM FastCGI errors).
    • +
    • Fixed bug (FPM does not reset fastcgi.error_header).
    • +
    • (Configuration test does not perform UID lookups).
    • +
    • Fixed memory leak when running FPM config test.
    • +
    • (Wrong owner:group for listening unix socket).
    • +
  • +
  • Hash: +
      +
    • Handle exceptions from __toString in XXH3's initialization (nielsdos)
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (LDAP\Connection::__construct() refers to ldap_create()).
    • +
  • +
  • Opcache: +
      +
    • Fix inverted bailout value in zend_runtime_jit() (Max Kellermann).
    • +
    • Fix access to uninitialized variable in accel_preload().
    • +
    • Fix zend_jit_find_trace() crashes.
    • +
    • Added missing lock for EXIT_INVALIDATE in zend_jit_trace_exit.
    • +
  • +
  • Phar: +
      +
    • Fix wrong flags check for compression method in phar_object.c (nielsdos)
    • +
  • +
  • PHPDBG: +
      +
    • Fix undefined behaviour in phpdbg_load_module_or_extension().
    • +
    • Fix NULL pointer dereference in phpdbg_create_conditional_breal().
    • +
    • Fix : phpdbg memory leaks by option "-h" (nielsdos)
    • +
    • Fix phpdbg segmentation fault in case of malformed input (nielsdos)
    • +
  • +
  • Posix: +
      +
    • Fix memory leak in posix_ttyname() (girgias)
    • +
  • +
  • Random: +
      +
    • Fixed bug (Theoretical file descriptor leak for /dev/urandom).
    • +
  • +
  • Standard: +
      +
    • Fix (Segfault in stripslashes() with arm64).
    • +
    • Fixed bug (Incomplete validation of object syntax during unserialize()).
    • +
    • Fix substr_replace with slots in repl_ht being UNDEF.
    • +
  • +
  • XMLWriter: +
      +
    • Fix missing check for xmlTextWriterEndElement (nielsdos)
    • +
  • +
+
+ + + +
+

Version 8.2.1

+ +
  • Core: +
      +
    • Fixed bug (constant() behaves inconsistent when class is undefined).
    • +
    • Fixed bug (License information for xxHash is not included in README.REDIST.BINS file).
    • +
    • Fixed bug (OpenSSL legacy providers not available on Windows).
    • +
    • Fixed bug (Can't initialize heap: [0x000001e7]).
    • +
    • Fixed potentially undefined behavior in Windows ftok(3) emulation.
    • +
    • Fixed (Misleading error message for unpacking of objects).
    • +
  • +
  • Apache: +
      +
    • Fixed bug (Partial content on incomplete POST request).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (Solaris port event mechanism is still broken after bug #66694).
    • +
    • (Setting fastcgi.error_header can result in a WARNING).
    • +
    • (FPM numeric user fails to set groups).
    • +
    • Fixed bug (Random crash of FPM master process in fpm_stdio_child_said).
    • +
  • +
  • Imap: +
      +
    • Fixed bug (IMAP: there's no way to check if a IMAP\Connection is still open).
    • +
  • +
  • MBString: +
      +
    • Fixed bug (The behavior of mb_strcut in mbstring has been changed in PHP8.1).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Segmentation Fault during OPCache Preload).
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (OpenSSL engine clean up segfault).
    • +
    • Fixed bug (PHP fails to build if openssl was built with --no-ec).
    • +
    • Fixed bug (OpenSSL test failures when OpenSSL compiled with no-dsa).
    • +
  • +
  • Pcntl: +
      +
    • Fixed bug (Signal handler called after rshutdown leads to crash).
    • +
  • +
  • PDO_Firebird: +
      +
    • Fixed bug (Incorrect NUMERIC value returned from PDO_Firebird).
    • +
  • +
  • PDO/SQLite: +
      +
    • (PDO::quote() may return unquoted string). (CVE-2022-31631)
    • +
  • +
  • Session: +
      +
    • Fixed (session name silently fails with . and [).
    • +
  • +
  • SPL: +
      +
    • Fixed (SplFileObject::__toString() reads next line).
    • +
    • Fixed (Trampoline autoloader will get reregistered and cannot be unregistered).
    • +
  • +
  • SQLite3: +
      +
    • (open_basedir bypass in SQLite3 by using file URI).
    • +
  • +
  • TSRM: +
      +
    • Fixed Windows shmget() wrt. IPC_PRIVATE.
    • +
  • +
+
+ + + +
+

Version 8.2.0

+ +
  • CLI: +
      +
    • (Server logs incorrect request method).
    • +
    • Updated the mime-type table for the builtin-server.
    • +
    • Fixed potential overflow for the builtin server via the PHP_CLI_SERVER_WORKERS environment variable.
    • +
    • Fixed by changing STDOUT, STDERR and STDIN to not close on resource destruction.
    • +
    • Implement built-in web server responding without body to HEAD request on a static resource.
    • +
    • Implement built-in web server responding with HTTP status 405 to DELETE/PUT/PATCH request on a static resource.
    • +
    • Fixed bug (Null pointer dereference with -w/-s options).
    • +
  • +
  • COM: +
      +
    • Fixed bug (Can not create VT_ERROR variant type).
    • +
  • +
  • Core: +
      +
    • (Observer may not be initialized properly).
    • +
    • Fixed bug (Fix filename/lineno of constant expressions).
    • +
    • Fixed bug (Improve class type in error messages).
    • +
    • Support huge pages on MacOS.
    • +
    • Fixed bug (Casting an object to array does not unwrap refcount=1 references).
    • +
    • Fixed bug (Nullsafe in coalesce triggers undefined variable warning).
    • +
    • Fixed bug and (Allow arbitrary const expressions in backed enums).
    • +
    • Fixed bug (Incorrect lineno in backtrace of multi-line function calls).
    • +
    • Optimised code path for newly created file with the stream plain wrapper.
    • +
    • Uses safe_perealloc instead of perealloc for the ZEND_PTR_STACK_RESIZE_IF_NEEDED to avoid possible overflows.
    • +
    • Reduced the memory footprint of strings returned by var_export(), json_encode(), serialize(), iconv_*(), mb_ereg*(), session_create_id(), http_build_query(), strstr(), Reflection*::__toString().
    • +
    • Fixed bug (WeakMap object reference offset causing TypeError).
    • +
    • Added error_log_mode ini setting.
    • +
    • Updated request startup messages.
    • +
    • Fixed bug (Arrow function with never return type compile-time errors).
    • +
    • Fixed incorrect double to long casting in latest clang.
    • +
    • Added support for defining constants in traits.
    • +
    • Stop incorrectly emitting false positive deprecation notice alongside unsupported syntax fatal error for `"{$g{'h'}}"`.
    • +
    • Fix unexpected deprecated dynamic property warning, which occurred when exit() in finally block after an exception was thrown without catching.
    • +
    • Fixed bug (Crash in ZEND_RETURN/GC/zend_call_function) (Tim Starling)
    • +
    • Fixed bug (Trailing dots and spaces in filenames are ignored).
    • +
    • Fixed bug (Traits cannot be used in readonly classes).
    • +
    • Fixed bug (@strict-properties can be bypassed using unserialization).
    • +
    • Fixed bug (Using dnf type with parentheses after readonly keyword results in a parse error).
    • +
    • Fixed bug ((A&B)|D as a param should allow AB or D. Not just A).
    • +
    • Fixed observer class notify with Opcache file_cache_only=1.
    • +
    • Fixes segfault with Fiber on FreeBSD i386 architecture.
    • +
    • Fixed bug (Pure intersection types cannot be implicitly nullable) (Girgias)
    • +
    • Fixed bug (dl() segfaults when module is already loaded).
    • +
    • Fixed bug (Generator crashes when interrupted during argument evaluation with extra named params).
    • +
    • Fixed bug (Generator crashes when memory limit is exceeded during initialization).
    • +
    • Fixed a bug with preloaded enums possibly segfaulting.
    • +
    • Fixed bug (Don’t reset func in zend_closure_internal_handler).
    • +
    • Fixed potential NULL pointer dereference Windows shm*() functions.
    • +
    • Fix target validation for internal attributes with constructor property promotion.
    • +
    • Fixed bug (Generator memory leak when interrupted during argument evaluation.
    • +
    • Move observer_declared_function_notify until after pass_two().
    • +
    • Do not report MINIT stage internal class aliases in extensions.
    • +
  • +
  • Curl: +
      +
    • Added support for CURLOPT_XFERINFOFUNCTION.
    • +
    • Added support for CURLOPT_MAXFILESIZE_LARGE.
    • +
    • Added new constants from cURL 7.62 to 7.80.
    • +
    • New function curl_upkeep().
    • +
  • +
  • Date: +
      +
    • Fixed (DateInterval::createFromDateString does not throw if non-relative items are present).
    • +
    • (Allow including end date in DatePeriod iterations) (Daniel Egeberg, Derick)
    • +
    • idate() now accepts format specifiers "N" (ISO Day-of-Week) and "o" (ISO Year).
    • +
    • Fixed bug (DateTime::diff miscalculation is same time zone of different type).
    • +
    • Fixed bug (DateTime object comparison after applying delta less than 1 second).
    • +
    • Fixed bug (DateInterval 1.5s added to DateTimeInterface is rounded down since PHP 8.1.0).
    • +
    • (Datetime fails to unserialize "extreme" dates).
    • +
    • (DateTime Object with 5-digit year can't unserialized).
    • +
    • (Wrong result from DateTimeImmutable::diff).
    • +
    • Fixed bug (DateTime::getLastErrors() not returning false when no errors/warnings).
    • +
    • Fixed bug with parsing large negative numbers with the @ notation.
    • +
  • +
  • DBA: +
      +
    • Fixed LMDB driver hanging when attempting to delete a non-existing key (Girgias)
    • +
    • Fixed LMDB driver memory leak on DB creation failure (Girgias)
    • +
    • Fixed (dba: lmdb: allow to override the MDB_NOSUBDIR flag).
    • +
  • +
  • FFI: +
      +
    • Fixed bug (Support assigning function pointers in FFI).
    • +
  • +
  • Fileinfo: +
      +
    • Fixed bug (finfo returns wrong mime type for woff/woff2 files).
    • +
  • +
  • Filter: +
      +
    • Added FILTER_FLAG_GLOBAL_RANGE to filter Global IPs.
    • +
  • +
  • FPM: +
      +
    • Emit error for invalid port setting.
    • +
    • Added extra check for FPM proc dumpable on SELinux based systems.
    • +
    • Added support for listening queue on macOS.
    • +
    • Changed default for listen.backlog on Linux to -1.
    • +
    • Added listen.setfib pool option to set route FIB on FreeBSD.
    • +
    • Added access.suppress_path pool option to filter access log entries.
    • +
    • Fixed on fpm scoreboard occasional warning on acquisition failure.
    • +
    • Fixed bug (SaltStack (using Python subprocess) hangs when running php-fpm 8.1.11).
    • +
  • +
  • FTP: +
      +
    • Fix datetime format string to follow POSIX spec in ftp_mdtm().
    • +
  • +
  • GD: +
      +
    • : OOB read due to insufficient input validation in imageloadfont(). (CVE-2022-31630)
    • +
  • +
  • GMP: +
      +
    • Fixed bug (GMP throws the wrong error when a GMP object is passed to gmp_init()).
    • +
  • +
  • Hash: +
      +
    • : buffer overflow in hash_update() on long parameter. (CVE-2022-37454)
    • +
  • +
  • Intl: +
      +
    • Update all grandfathered language tags with preferred values
    • +
    • Fixed (Cannot unserialize IntlTimeZone objects).
    • +
    • Fixed build for ICU 69.x and onwards.
    • +
    • Declared Transliterator::$id as readonly to unlock subclassing it.
    • +
    • Fixed bug (Incorrect argument number for ValueError in NumberFormatter).
    • +
  • +
  • MBString: +
      +
    • Fixed bug (Segmentation fault in mb_strimwidth()).
    • +
  • +
  • mysqli: +
      +
    • Fixed bug (mysqli_query throws warning despite using silenced error mode).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed potential heap corruption due to alignment mismatch.
    • +
  • +
  • OCI8: +
      +
    • Added oci8.prefetch_lob_size directive to tune LOB query performance
    • +
    • Support for building against Oracle Client libraries 10.1 and 10.2 has been dropped. Oracle Client libraries 11.2 or newer are now required.
    • +
  • +
  • ODBC: +
      +
    • Fixed bug (User input not escaped when building connection string).
    • +
    • Fixed bug (Current ODBC liveness checks may be inadequate).
    • +
  • +
  • Opcache: +
      +
    • Allocate JIT buffer close to PHP .text segemnt to allow using direct IP-relative calls and jumps.
    • +
    • Added initial support for JIT performance profiling generation for macOs Instrument.
    • +
    • Fixed bug (Segfault with JIT and large match/switch statements).
    • +
    • Added JIT support improvement for macOs for segments and executable permission bit handling.
    • +
    • Added JIT buffer allocation near the .text section on FreeNSD.
    • +
    • Fixed bug (Crash with JIT on mac arm64) (jdp1024/David Carlier)
    • +
    • Fixed bug (opcache.interned_strings_buffer setting integer overflow).
    • +
    • Added indirect call reduction for jit on x86 architectures.
    • +
    • Fixed bug (Segfault in zend_accel_class_hash_copy).
    • +
    • Fix opcache preload with observers enabled.
    • +
  • +
  • OpenSSL: +
      +
    • Discard poll calls on socket when no timeout/non blocking/MSG_DONTWAIT.
    • +
    • Fixed bug (SSL local_cert and local_pk do not respect open_basedir).
    • +
    • Implement FR #76935 ("chacha20-poly1305" is an AEAD but does not work like AEAD).
    • +
    • Added openssl_cipher_key_length function.
    • +
    • Fixed bug (Compilation error openssl extension related to PR ).
    • +
    • Fixed missing clean up of OpenSSL engine list - attempt to fix .
    • +
    • Fixed bug (OpenSSL compiled with no-md2, no-md4 or no-rmd160 does not build).
    • +
  • +
  • PCNTL: +
      +
    • Fixed pcntl_(get|set)priority error handling for MacOS.
    • +
  • +
  • PCRE: +
      +
    • (Allow null character in regex patterns).
    • +
    • Updated bundled libpcre to 10.40.
    • +
  • +
  • PDO: +
      +
    • Fixed bug (Initialize run time cache in PDO methods).
    • +
  • +
  • PDO_Firebird: +
      +
    • Fixed bug (Bad interpretation of length when char is UTF-8).
    • +
  • +
  • PDO_ODBC: +
      +
    • (crash with persistent connections in PDO_ODBC).
    • +
    • Fixed bug (User input not escaped when building connection string).
    • +
    • Fixed bug (Current ODBC liveness checks may be inadequate).
    • +
    • Fixed bug (HY010 when binding overlong parameter).
    • +
  • +
  • PDO_PGSQL: +
      +
    • Fixed bug (PgSQL large object resource is incorrectly closed).
    • +
  • +
  • Random: +
      +
    • Added new random extension.
    • +
    • Fixed bug (random extension is not thread safe).
    • +
    • Fixed bug (segmentation fault if user engine throws).
    • +
    • Fixed bug (signed integer overflow).
    • +
    • Fixed bug (undefined behavior during shifting).
    • +
    • Fixed bug , (incorrect expansion of bytes when generating uniform integers within a given range).
    • +
    • Fixed bug (Fix memory leak on Randomizer::__construct() call twice).
    • +
    • Fixed bug (PcgOneseq128XslRr64::jump() should not allow negative $advance).
    • +
    • Changed Mt19937 to throw a ValueError instead of InvalidArgumentException for invalid $mode.
    • +
    • Splitted Random\Randomizer::getInt() (without arguments) to Random\Randomizer::nextInt().
    • +
    • Fixed bug (non-existant $sequence parameter in stub for PcgOneseq128XslRr64::__construct()).
    • +
    • Fixed bug , (undefined behavior for MT_RAND_PHP when handling large ranges).
    • +
    • Fixed bug (Xoshiro256StarStar does not reject the invalid all-zero state).
    • +
    • Removed redundant RuntimeExceptions from Randomizer methods. The exceptions thrown by the engines will be exposed directly.
    • +
    • Added extension specific Exceptions/Errors (RandomException, RandomError, BrokenRandomEngineError).
    • +
    • Fixed bug (Randomizer::getInt(0, 2**32 - 1) with Mt19937 always returns 1).
    • +
    • Fixed Randomizer::getInt() consistency for 32-bit engines.
    • +
    • Fixed bug (build on older macOs releases).
    • +
    • Fixed bug (Pre-PHP 8.2 output compatibility for non-mt_rand() functions for MT_RAND_PHP).
    • +
  • +
  • Reflection: +
      +
    • Added ReflectionFunction::isAnonymous().
    • +
    • Added ReflectionMethod::hasPrototype().
    • +
    • Narrow ReflectionEnum::getBackingType() return type to ReflectionNamedType.
    • +
    • Fixed bug (ReflectionFunction provides no way to get the called class of a Closure).
    • +
  • +
  • Session: +
      +
    • Fixed bug (Improve session write failure message for user error handlers).
    • +
    • Fixed (setcookie has an obsolete expires date format).
    • +
    • Fixed (Avoid memory corruption when not unregistering custom session handler).
    • +
    • Fixed bug (session_create_id() fails with user defined save handler that doesn't have a validateId() method).
    • +
  • +
  • SOAP: +
      +
    • Fixed bug (Null pointer dereference while serializing the response).
    • +
  • +
  • Sockets: +
      +
    • Added TCP_NOTSENT_LOWAT socket option.
    • +
    • Added SO_MEMINFO socket option.
    • +
    • Added SO_RTABLE socket option (OpenBSD), equivalent of SO_MARK (Linux).
    • +
    • Added TCP_KEEPALIVE, TCP_KEEPIDLE, TCP_KEEPINTVL, TCP_KEEPCNT socket options.
    • +
    • Added ancillary data support for FreeBSD.
    • +
    • Added ancillary data support for NetBSD.
    • +
    • Added SO_BPF_EXTENSIONS socket option.
    • +
    • Added SO_SETFIB socket option.
    • +
    • Added TCP_CONGESTION socket option.
    • +
    • Added SO_ZEROCOPY/MSG_ZEROCOPY options.
    • +
    • Added SOL_FILTER socket option for Solaris.
    • +
    • Fixed socket constants regression as of PHP 8.2.0beta3.
    • +
  • +
  • Sodium: +
      +
    • Added sodium_crypto_stream_xchacha20_xor_ic().
    • +
  • +
  • SPL: +
      +
    • Uses safe_erealloc instead of erealloc to handle heap growth for the SplHeap::insert method to avoid possible overflows.
    • +
    • Widen iterator_to_array() and iterator_count()'s $iterator parameter to iterable.
    • +
    • (READ_CSV|DROP_NEW_LINE drops newlines within fields).
    • +
    • (GlobIterator incorrect handling of open_basedir check).
    • +
  • +
  • SQLite3: +
      +
    • Changed sqlite3.defensive from PHP_INI_SYSTEM to PHP_INI_USER.
    • +
  • +
  • Standard: +
      +
    • net_get_interfaces() also reports wireless network interfaces on Windows.
    • +
    • Finished AVIF support in getimagesize().
    • +
    • Fixed bug (stripos with large haystack has bad performance).
    • +
    • New function memory_reset_peak_usage().
    • +
    • Fixed parse_url(): can not recognize port without scheme.
    • +
    • Deprecated utf8_encode() and utf8_decode().
    • +
    • Fixed the crypt_sha256/512 api build with clang > 12.
    • +
    • Uses safe_erealloc instead of erealloc to handle options in getopt to avoid possible overflows.
    • +
    • Implemented FR (str_split should return empty array for empty string).
    • +
    • Added ini_parse_quantity function to convert ini quantities shorthand notation to int.
    • +
    • Enable arc4random_buf for Linux glibc 2.36 and onwards for the random_bytes.
    • +
    • Uses CCRandomGenerateBytes instead of arc4random_buf on macOs. (David Carlier).
    • +
    • (glob() basedir check is inconsistent).
    • +
    • Fixed (setcookie has an obsolete expires date format).
    • +
    • Fixed (Segfault with array_multisort + array_shift).
    • +
    • Fixed bug (`ksort` behaves incorrectly on arrays with mixed keys).
    • +
    • Marked crypt()'s $string parameter as #[\SensitiveParameter].
    • +
    • Fixed bug (build on older macOs releases).
    • +
    • Fixed bug (Disabling IPv6 support disables unrelated constants).
    • +
    • Revert "Fixed parse_url(): can not recognize port without scheme." (andypost)
    • +
    • Fix crash reading module_entry after DL_UNLOAD() when module already loaded.
    • +
  • +
  • Streams: +
      +
    • Set IP_BIND_ADDRESS_NO_PORT if available when connecting to remote host.
    • +
    • Fixed bug (stream_wrapper_unregister() leaks memory).
    • +
    • Discard poll calls on socket when no timeout/non blocking/MSG_DONTWAIT.
    • +
    • Fixed bug ($http_response_header is wrong for long status line).
    • +
    • Fixed bug (stream_select does not abort upon exception or empty valid fd set).
    • +
    • Fixed bug (file copy between different filesystems).
    • +
    • Fixed bug (stream_copy_to_stream fails if dest in append mode).
    • +
  • +
  • Windows: +
      +
    • Added preliminary support for (cross-)building for ARM64.
    • +
  • +
  • XML: +
      +
    • Added libxml_get_external_entity_loader() function.
    • +
  • +
  • Zip: +
      +
    • add ZipArchive::clearError() method
    • +
    • add ZipArchive::getStreamName() method
    • +
    • add ZipArchive::getStreamIndex() method
    • +
    • On Windows, the Zip extension is now built as shared library (DLL) by default.
    • +
    • Implement fseek for zip stream when possible with libzip 1.9.1.
    • +
  • +
+
+ + + + + +
+

Version 8.1.34

+ +
  • Curl: +
      +
    • Fix curl build and test failures with version 8.16.
    • +
  • +
  • Opcache: +
      +
    • Reset global pointers to prevent use-after-free in zend_jit_status().
    • +
  • +
  • PDO: +
      +
    • Fixed (PDO quoting result null deref). (CVE-2025-14180)
    • +
  • +
  • Standard: +
      +
    • Fixed (Null byte termination in dns_get_record()).
    • +
    • Fixed (Heap buffer overflow in array_merge()). (CVE-2025-14178)
    • +
    • Fixed (Information Leak of Memory in getimagesize). (CVE-2025-14177)
    • +
  • +
+
+ + + +
+

Version 8.1.33

+ +
  • PGSQL: +
      +
    • Fixed (pgsql extension does not check for errors during escaping). (CVE-2025-1735)
    • +
  • +
  • SOAP: +
      +
    • Fixed (NULL Pointer Dereference in PHP SOAP Extension via Large XML Namespace Prefix). (CVE-2025-6491)
    • +
  • +
  • Standard: +
      +
    • Fixed (Null byte termination in hostnames). (CVE-2025-1220)
    • +
  • +
+
+ + + +
+

Version 8.1.32

+ +
  • LibXML: +
      +
    • Fixed (Reocurrence of #72714).
    • +
    • Fixed (libxml streams use wrong `content-type` header when requesting a redirected resource). (CVE-2025-1219)
    • +
  • +
  • Streams: +
      +
    • Fixed (Stream HTTP wrapper header check might omit basic auth header). (CVE-2025-1736)
    • +
    • Fixed (Stream HTTP wrapper truncate redirect location to 1024 bytes). (CVE-2025-1861)
    • +
    • Fixed (Streams HTTP wrapper does not fail for headers without colon). (CVE-2025-1734)
    • +
    • Fixed (Header parser of `http` stream wrapper does not handle folded headers). (CVE-2025-1217)
    • +
  • +
  • Windows: +
      +
    • Fixed phpize for Windows 11 (24H2).
    • +
  • +
+
+ + + +
+

Version 8.1.31

+ +
  • CLI: +
      +
    • Fixed bug (Heap-Use-After-Free in sapi_read_post_data Processing in CLI SAPI Interface).
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (OOB access in ldap_escape). (CVE-2024-8932)
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (Leak partial content of the heap through heap buffer over-read). (CVE-2024-8929)
    • +
  • +
  • PDO DBLIB: +
      +
    • Fixed bug (Integer overflow in the dblib quoter causing OOB writes). (CVE-2024-11236)
    • +
  • +
  • PDO Firebird: +
      +
    • Fixed bug (Integer overflow in the firebird quoter causing OOB writes). (CVE-2024-11236)
    • +
  • +
  • Streams: +
      +
    • Fixed bug (Configuring a proxy in a stream context might allow for CRLF injection in URIs). (CVE-2024-11234)
    • +
    • Fixed bug (Single byte overread with convert.quoted-printable-decode filter). (CVE-2024-11233)
    • +
  • +
+
+ + + +
+

Version 8.1.30

+ +
  • CGI: +
      +
    • Fixed bug GHSA-p99j-rfp4-xqvq (Bypass of CVE-2024-4577, Parameter Injection Vulnerability). (CVE-2024-8926)
    • +
    • Fixed bug GHSA-94p6-54jq-9mwp (cgi.force_redirect configuration is bypassable due to the environment variable collision). (CVE-2024-8927)
    • +
  • +
  • FPM: +
      +
    • Fixed bug GHSA-865w-9rf3-2wh5 (Logs from childrens may be altered). (CVE-2024-9026)
    • +
  • +
  • SAPI: +
      +
    • Fixed bug GHSA-9pqp-7h25-4f32 (Erroneous parsing of multipart form data). (CVE-2024-8925)
    • +
  • +
+
+ + + +
+

Version 8.1.29

+ +
  • CGI: +
      +
    • Fixed bug GHSA-3qgc-jrrr-25jv (Bypass of CVE-2012-1823, Argument Injection in PHP-CGI). (CVE-2024-4577)
    • +
  • +
  • Filter: +
      +
    • Fixed bug GHSA-w8qr-v226-r27w (Filter bypass in filter_var FILTER_VALIDATE_URL). (CVE-2024-5458)
    • +
  • +
  • OpenSSL: +
      +
    • The openssl_private_decrypt function in PHP, when using PKCS1 padding (OPENSSL_PKCS1_PADDING, which is the default), is vulnerable to the Marvin Attack unless it is used with an OpenSSL version that includes the changes from this pull request: https://github.com/openssl/openssl/pull/13817 (rsa_pkcs1_implicit_rejection). These changes are part of OpenSSL 3.2 and have also been backported to stable versions of various Linux distributions, as well as to the PHP builds provided for Windows since the previous release. All distributors and builders should ensure that this version is used to prevent PHP from being vulnerable.
    • +
  • +
  • Standard: +
      +
    • Fixed bug GHSA-9fcc-425m-g385 (Bypass of CVE-2024-1874). (CVE-2024-5585)
    • +
  • +
+
+ + + +
+

Version 8.1.28

+ +
  • Standard: +
      +
    • Fixed bug GHSA-pc52-254m-w9w7 (Command injection via array-ish $command parameter of proc_open). (CVE-2024-1874)
    • +
    • Fixed bug GHSA-wpj3-hf5j-x4v4 (__Host-/__Secure- cookie bypass due to partial CVE-2022-31629 fix). (CVE-2024-2756)
    • +
    • Fixed bug GHSA-h746-cjrr-wfmr (password_verify can erroneously return true, opening ATO risk). (CVE-2024-3096)
    • +
  • +
+
+ + + +
+

Version 8.1.27

+ +
  • Core: +
      +
    • Fixed oss-fuzz #54325 (Use-after-free of name in var-var with malicious error handler).
    • +
    • Fixed oss-fuzz #64209 (In-place modification of filename in php_message_handler_for_zend).
    • +
    • Fixed bug / (Invalid opline in OOM handlers within ZEND_FUNC_GET_ARGS and ZEND_BIND_STATIC).
    • +
  • +
  • DOM: +
      +
    • Fixed bug (DOM: Removing XMLNS namespace node results in invalid default: prefix).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (Segmentation fault in fpm_status_export_to_zval).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (Test bug69398.phpt fails with ICU 74.1).
    • +
  • +
  • LibXML: +
      +
    • Fixed bug (libxml2 2.12.0 issue building from src).
    • +
  • +
  • MySQLnd: +
      +
    • Avoid using uninitialised struct.
    • +
  • +
  • OpenSSL: +
      +
    • (openssl_pkcs7_verify() may ignore untrusted CAs).
    • +
  • +
  • PCRE: +
      +
    • Fixed bug (The gh11374 test fails on Alpinelinux).
    • +
  • +
  • PGSQL: +
      +
    • Fixed bug wrong argument type for pg_untrace.
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (MEMORY_LEAK in phpdbg_prompt.c).
    • +
  • +
  • SQLite3: +
      +
    • Fixed bug (sqlite3_defensive.phpt fails with sqlite 3.44.0).
    • +
  • +
  • Standard: +
      +
    • Fix memory leak in syslog device handling.
    • +
    • Fixed bug (browscap segmentation fault when configured in the vhost).
    • +
    • Fixed bug (proc_open() does not take into account references in the descriptor array).
    • +
  • +
  • Streams: +
      +
    • (Stream wrappers in imagecreatefrompng causes segfault).
    • +
  • +
  • Zip: +
      +
    • Fixed bug (Inconsistency in ZipArchive::addGlob remove_path Option Behavior).
    • +
  • +
+
+ + + +
+

Version 8.1.26

+ +
  • Core: +
      +
    • Fixed bug (Double-free of doc_comment when overriding static property via trait).
    • +
    • Fixed segfault caused by weak references to FFI objects.
    • +
    • Fixed max_execution_time: don't delete an unitialized timer.
    • +
  • +
  • DOM: +
      +
    • Fix registerNodeClass with abstract class crashing.
    • +
    • Add missing NULL pointer error check.
    • +
    • Fix validation logic of php:function() callbacks.
    • +
  • +
  • Fiber: +
      +
    • Fixed bug (ReflectionFiber segfault).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (Loading ext in FPM config does not register module handlers).
    • +
    • Fixed bug (FPM: segfault dynamically loading extension without opcache).
    • +
  • +
  • Intl: +
      +
    • Removed the BC break on IntlDateFormatter::construct which threw an exception with an invalid locale.
    • +
  • +
  • Opcache: +
      +
    • Added warning when JIT cannot be enabled.
    • +
    • Fixed bug (Crashes in zend_accel_inheritance_cache_find since upgrading to 8.1.3 due to corrupt on-disk file cache).
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (Missing sigbio creation checking in openssl_cms_verify).
    • +
  • +
  • PCRE: +
      +
    • Fixed bug (Backport upstream fix, Different preg_match result with -d pcre.jit=0).
    • +
  • +
  • SOAP: +
      +
    • Fixed bug (Segmentation fault on SoapClient::__getTypes).
    • +
    • (SOAP WSDL cache race condition causes Segmentation Fault).
    • +
    • (SOAP leaves incomplete cache file on ENOSPC).
    • +
    • Fix incorrect uri check in SOAP caching.
    • +
    • Fix segfault and assertion failure with refcounted props and arrays.
    • +
    • Fix potential crash with an edge case of persistent encoders.
    • +
    • (Memleak in SoapClient).
    • +
  • +
  • Streams: +
      +
    • (getimagesize with "&$imageinfo" fails on StreamWrappers).
    • +
  • +
  • XMLReader: +
      +
    • Add missing NULL pointer error check.
    • +
  • +
  • XMLWriter: +
      +
    • Add missing NULL pointer error check.
    • +
  • +
  • XSL: +
      +
    • Add missing module dependency.
    • +
    • Fix validation logic of php:function() callbacks.
    • +
  • +
+
+ + + +
+

Version 8.1.25

+ +
  • Core: +
      +
    • Fixed bug (memory leak when class using trait with doc block).
    • +
    • Fixed bug (Module entry being overwritten causes type errors in ext/dom).
    • +
    • Fixed bug (__builtin_cpu_init check).
    • +
    • (ZTS + preload = segfault on shutdown).
    • +
  • +
  • CLI: +
      +
    • Ensure a single Date header is present.
    • +
  • +
  • CType: +
      +
    • Fixed bug (ctype_alnum 5 times slower in PHP 8.1 or greater).
    • +
  • +
  • DOM: +
      +
    • Restore old namespace reconciliation behaviour.
    • +
    • Fixed bug (DOMNode serialization on PHP ^8.1).
    • +
  • +
  • Fileinfo: +
      +
    • Fixed bug (fileinfo returns text/xml for some svg files).
    • +
  • +
  • Filter: +
      +
    • Fix explicit FILTER_REQUIRE_SCALAR with FILTER_CALLBACK (ilutov)
    • +
  • +
  • Hash: +
      +
    • Fixed bug (segfault copying/cloning a finalized HashContext).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (segfault on IntlDateFormatter::construct).
    • +
    • Fixed bug (IntlDateFormatter::construct should throw an exception on an invalid locale).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (PHP Startup: Invalid library (maybe not a PHP library) 'mysqlnd.so' in Unknown on line).
    • +
  • +
  • Opcache: +
      +
    • Fixed opcache_invalidate() on deleted file.
    • +
    • Fixed bug (JIT+private array property access inside closure accesses private property in child class).
    • +
  • +
  • PCRE: +
      +
    • Fixed bug (Backport upstream fix, PCRE regular expressions with JIT enabled gives different result).
    • +
  • +
  • SimpleXML: +
      +
    • Fixed bug (Can't use xpath with comments in SimpleXML).
    • +
    • Fixed bug (Entity reference produces infinite loop in var_dump/print_r).
    • +
    • Fixed bug (Unable to get processing instruction contents in SimpleXML).
    • +
    • Fixed bug (Unable to get comment contents in SimpleXML).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (binding ipv4 address with both address and port at 0).
    • +
  • +
  • XML: +
      +
    • Fix return type of stub of xml_parse_into_struct().
    • +
    • Fix memory leak when calling xml_parse_into_struct() twice.
    • +
  • +
  • XSL: +
      +
    • Fix type error on XSLTProcessor::transformToDoc return value with SimpleXML.
    • +
  • +
  • Sockets: +
      +
    • Fix socket_export_stream() with wrong protocol (twosee)
    • +
  • +
+
+ + + +
+

Version 8.1.24

+ +
  • Core: +
      +
    • Fixed bug (Constant ASTs containing objects).
    • +
    • Fixed bug (On riscv64 require libatomic if actually needed).
    • +
    • Fixed bug (Segfault when freeing incompletely initialized closures).
    • +
    • Fixed bug (Internal iterator rewind handler is called twice).
    • +
    • Fixed bug (Incorrect compile error when using array access on TMP value in function call).
    • +
  • +
  • DOM: +
      +
    • Fix memory leak when setting an invalid DOMDocument encoding.
    • +
  • +
  • Iconv: +
      +
    • Fixed build for NetBSD which still uses the old iconv signature.
    • +
  • +
  • Intl: +
      +
    • Fixed bug (intl_get_error_message() broken after MessageFormatter::formatMessage() fails).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (Invalid error message when connection via SSL fails: "trying to connect via (null)").
    • +
  • +
  • ODBC: +
      +
    • Fixed memory leak with failed SQLPrepare.
    • +
    • Fixed persistent procedural ODBC connections not getting closed.
    • +
  • +
  • SimpleXML: +
      +
    • (XPath processing-instruction() function is not supported).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (RecursiveCallbackFilterIterator regression in 8.1.18).
    • +
  • +
  • SQLite3: +
      +
    • Fixed bug (SQLite3 callback functions cause a memory leak with a callable array).
    • +
  • +
+
+ + + +
+

Version 8.1.23

+ +
  • CLI: +
      +
    • Fixed bug (cli server crashes on SIGINT when compiled with ZEND_RC_DEBUG=1).
    • +
    • Fixed bug (Improve man page about the built-in server).
    • +
  • +
  • Core: +
      +
    • Fixed strerror_r detection at configuration time.
    • +
  • +
  • Date: +
      +
    • Fixed bug : Crash with DatePeriod when uninitialised objects are passed in.
    • +
  • +
  • DOM: +
      +
    • Fix DOMEntity field getter bugs.
    • +
    • Fix incorrect attribute existence check in DOMElement::setAttributeNodeNS.
    • +
    • Fix DOMCharacterData::replaceWith() with itself.
    • +
    • Fix empty argument cases for DOMParentNode methods.
    • +
    • Fixed bug (Wrong default value of DOMDocument::xmlStandalone).
    • +
    • Fix json_encode result on DOMDocument.
    • +
    • Fix manually calling __construct() on DOM classes.
    • +
    • Fixed bug (ParentNode methods should perform their checks upfront).
    • +
    • Fix segfault when DOMParentNode::prepend() is called when the child disappears.
    • +
  • +
  • FFI: +
      +
    • Fix leaking definitions when using FFI::cdef()->new(...).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (authentication to a sha256_password account fails over SSL).
    • +
    • Fixed bug (mysqlnd fails to authenticate with sha256_password accounts using passwords longer than 19 characters).
    • +
    • Fixed bug (MySQL Statement has a empty query result when the response field has changed, also Segmentation fault).
    • +
    • Fixed invalid error message "Malformed packet" when connection is dropped.
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (opcache.interned_strings_buffer either has no effect or opcache_get_status() / phpinfo() is wrong).
    • +
    • Avoid adding an unnecessary read-lock when loading script from shm if restart is in progress.
    • +
  • +
  • PCNTL: +
      +
    • Revert behaviour of receiving SIGCHLD signals back to the behaviour before 8.1.22.
    • +
  • +
  • SPL: +
      +
    • (SplFixedArray::setSize() causes use-after-free).
    • +
  • +
  • Standard: +
      +
    • Prevent int overflow on $decimals in number_format.
    • +
    • Fixed bug (Fix off-by-one bug when truncating tempnam prefix) (athos-ribeiro)
    • +
  • +
+
+ + + +
+

Version 8.1.22

+ +
  • Build: +
      +
    • Fixed bug (PHP version check fails with '-' separator).
    • +
  • +
  • CLI: +
      +
    • Fix interrupted CLI output causing the process to exit.
    • +
  • +
  • Core: +
      +
    • Fixed oss-fuzz #60011 (Mis-compilation of by-reference nullsafe operator).
    • +
    • Fixed use-of-uninitialized-value with ??= on assert.
    • +
    • Fixed build for FreeBSD before the 11.0 releases.
    • +
  • +
  • Curl: +
      +
    • Fix crash when an invalid callback function is passed to CURLMOPT_PUSHFUNCTION.
    • +
  • +
  • Date: +
      +
    • Fixed bug (Date modify returns invalid datetime).
    • +
  • +
  • DOM: +
      +
    • Fixed bug (DOMElement::replaceWith() doesn't replace node with DOMDocumentFragment but just deletes node or causes wrapping <></> depending on libxml2 version).
    • +
  • +
  • Fileinfo: +
      +
    • Fixed bug (finfo returns wrong mime type for xz files).
    • +
  • +
  • FTP: +
      +
    • Fix context option check for "overwrite".
    • +
    • Fixed bug (Memory leak and invalid state with consecutive ftp_nb_fget).
    • +
  • +
  • GD: +
      +
    • Fix most of the external libgd test failures.
    • +
  • +
  • Hash: +
      +
    • Fix use-of-uninitialized-value in hash_pbkdf2(), fix missing $options parameter in signature.
    • +
  • +
  • Intl: +
      +
    • Fix memory leak in MessageFormatter::format() on failure.
    • +
  • +
  • Libxml: +
      +
    • Fixed bug GHSA-3qrf-m4j2-pcrr (Security issue with external entity loading in XML without enabling it). (CVE-2023-3823)
    • +
  • +
  • MBString: +
      +
    • Fix (license issue: restricted unicode license headers).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (OPCache with Enum and Callback functions results in segmentation fault).
    • +
    • Prevent potential deadlock if accelerated globals cannot be allocated.
    • +
  • +
  • PCNTL: +
      +
    • Fixed bug (SIGCHLD is not always returned from proc_open).
    • +
  • +
  • PCRE: +
      +
    • Mangle PCRE regex cache key with JIT option.
    • +
  • +
  • PDO: +
      +
    • Fix (After php8.1, when PDO::ATTR_EMULATE_PREPARES is true and PDO::ATTR_STRINGIFY_FETCHES is true, decimal zeros are no longer filled).
    • +
  • +
  • PDO SQLite: +
      +
    • Fix (Make test failure: ext/pdo_sqlite/tests/bug_42589.phpt).
    • +
  • +
  • Phar: +
      +
    • Add missing check on EVP_VerifyUpdate() in phar util.
    • +
    • Fixed bug GHSA-jqcx-ccgc-xwhv (Buffer mismanagement in phar_dir_read()). (CVE-2023-3824)
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (phpdbg -h options doesn't list the -z option).
    • +
  • +
  • Session: +
      +
    • Removed broken url support for transferring session ID.
    • +
  • +
  • Standard: +
      +
    • Fix serialization of RC1 objects appearing in object graph twice.
    • +
  • +
  • SQLite3: +
      +
    • Fix replaced error handling in SQLite3Stmt::__construct.
    • +
  • +
+
+ + + +
+

Version 8.1.21

+ +
  • CLI: +
      +
    • Fixed bug (cli/get_set_process_title fails on MacOS).
    • +
  • +
  • Core: +
      +
    • Fixed build for the riscv64 architecture/GCC 12.
    • +
  • +
  • Curl: +
      +
    • Fixed bug (Unable to set CURLOPT_ACCEPT_ENCODING to NULL).
    • +
  • +
  • DOM: +
      +
    • Fixed bugs and and and (DOMExceptions and segfaults with replaceWith).
    • +
    • Fixed bug (Setting DOMAttr::textContent results in an empty attribute value).
    • +
    • Fix return value in stub file for DOMNodeList::item.
    • +
    • Fix spec compliance error with '*' namespace for DOMDocument::getElementsByTagNameNS.
    • +
    • Fix DOMElement::append() and DOMElement::prepend() hierarchy checks.
    • +
    • Fixed bug (Memory leak when calling a static method inside an xpath query).
    • +
    • (append_node of a DOMDocumentFragment does not reconcile namespaces).
    • +
    • (DOMChildNode::replaceWith() bug when replacing a node with itself).
    • +
    • (Removed elements are still returned by getElementById).
    • +
    • (print_r() on DOMAttr causes Segfault in php_libxml_node_free_list()).
    • +
    • (Crash in DOMNameSpace debug info handlers).
    • +
    • Fix lifetime issue with getAttributeNodeNS().
    • +
    • Fix "invalid state error" with cloned namespace declarations.
    • +
    • and #47530 and #47847 (various namespace reconciliation issues).
    • +
    • (Completely broken array access functionality with DOMNamedNodeMap).
    • +
  • +
  • Opcache: +
      +
    • Fix allocation loop in zend_shared_alloc_startup().
    • +
    • Access violation on smm_shared_globals with ALLOC_FALLBACK.
    • +
    • Fixed bug (php still tries to unlock the shared memory ZendSem with opcache.file_cache_only=1 but it was never locked).
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug Incomplete validation of IPv6 Address fields in subjectAltNames (James Lucas, Jakub Zelenka).
    • +
  • +
  • PGSQL: +
      +
    • Fixed intermittent segfault with pg_trace.
    • +
  • +
  • Phar: +
      +
    • Fix cross-compilation check in phar generation for FreeBSD.
    • +
  • +
  • SPL: +
      +
    • Fixed bug (SplFileInfo empty getBasename with more than one slash).
    • +
  • +
  • Standard: +
      +
    • Fix access on NULL pointer in array_merge_recursive().
    • +
    • Fix exception handling in array_multisort().
    • +
  • +
+
+ + + +
+

Version 8.1.20

+ +
  • Core: +
      +
    • Fixed bug (Conditional jump or move depends on uninitialised value(s)).
    • +
    • Fixed bug (Exceeding memory limit in zend_hash_do_resize leaves the array in an invalid state).
    • +
    • Fixed bug (foreach by-ref may jump over keys during a rehash).
    • +
  • +
  • Date: +
      +
    • Fixed bug (DateTimeZone::getName() does not include seconds in offset).
    • +
  • +
  • Exif: +
      +
    • Fixed bug (exif_read_data() cannot read smaller stream wrapper chunk sizes).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (PHP-FPM segfault due to after free usage of child->ev_std(out|err)).
    • +
    • (FPM status page: query_string not properly JSON encoded).
    • +
    • Fixed memory leak for invalid primary script file handle.
    • +
  • +
  • Hash: +
      +
    • Fixed bug (hash_file() appears to be restricted to 3 arguments).
    • +
  • +
  • LibXML: +
      +
    • Fixed bug (Few tests failed building with new libxml 2.11.0).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Incorrect match default branch optimization).
    • +
    • Fixed too wide OR and AND range inference.
    • +
    • Fixed bug (In some specific cases SWITCH with one default statement will cause segfault).
    • +
  • +
  • PGSQL: +
      +
    • Fixed parameter parsing of pg_lo_export().
    • +
  • +
  • Phar: +
      +
    • Fixed bug (Generating phar.php during cross-compile can't be done).
    • +
  • +
  • Soap: +
      +
    • Fixed bug GHSA-76gg-c692-v2mw (Missing error check and insufficient random bytes in HTTP Digest authentication for SOAP). (CVE-2023-3247)
    • +
    • Fixed bug (make test fail while soap extension build).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Segmentation fault in spl_array_it_get_current_data (PHP 8.1.18)).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (move_uploaded_file() emits open_basedir warning for source file).
    • +
    • Fixed bug (POST/PATCH request switches to GET after a HTTP 308 redirect).
    • +
  • +
  • Streams: +
      +
    • Fixed bug ([Stream] STREAM_NOTIFY_PROGRESS over HTTP emitted irregularly for last chunk of data).
    • +
    • Fixed bug (Stream Socket Timeout).
    • +
    • Fixed bug (ASAN UndefinedBehaviorSanitizer when timeout = -1 passed to stream_socket_accept/stream_socket_client).
    • +
  • +
+
+ + + +
+

Version 8.1.19

+ +
  • Core: +
      +
    • Fix inconsistent float negation in constant expressions.
    • +
    • Fixed bug (php-cli core dump calling a badly formed function).
    • +
    • Fixed bug (PHP 8.1.16 segfaults on line 597 of sapi/apache2handler/sapi_apache2.c).
    • +
    • Fixed bug (Heap Buffer Overflow in zval_undefined_cv.).
    • +
    • Fixed bug (Incorrect CG(memoize_mode) state after bailout in ??=).
    • +
  • +
  • DOM: +
      +
    • (Segfault when using DOMChildNode::before()).
    • +
    • Fixed incorrect error handling in dom_zvals_to_fragment().
    • +
  • +
  • Exif: +
      +
    • Fixed bug (exif read : warnings and errors : Potentially invalid endianess, Illegal IFD size and Undefined index).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (TZData version not displayed anymore).
    • +
  • +
  • PCRE: +
      +
    • Fixed bug (Segfault in preg_replace_callback_array()).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (mail() throws TypeError after iterating over $additional_headers array by reference).
    • +
    • Fixed bug (Duplicates returned by array_unique when using enums).
    • +
  • +
+
+ + + +
+

Version 8.1.18

+ +
  • Core: +
      +
    • Added optional support for max_execution_time in ZTS/Linux builds.
    • +
    • Fixed use-after-free in recursive AST evaluation.
    • +
    • Fixed bug (Memory leak PHP FPM 8.1).
    • +
    • Fixed bug (Named arguments in CTE functions cause a segfault).
    • +
    • Fixed bug (PHP 8.0.20 (ZTS) zend_signal_handler_defer crashes on apache).
    • +
    • Fixed bug (zend_signal_handler_defer crashes on apache shutdown).
    • +
    • Fixed bug (Fix NUL byte terminating Exception::__toString()).
    • +
    • Fix potential memory corruption when mixing __callStatic() and FFI.
    • +
  • +
  • Date: +
      +
    • Fixed bug (DateTime modify with tz pattern should not update linked timezone).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (fpm_env_init_main leaks environ).
    • +
    • Destroy file_handle in fpm_main.
    • +
    • (Incorrect SCRIPT_NAME with apache ProxyPassMatch when spaces are in path).
    • +
  • +
  • FTP: +
      +
    • Propagate success status of ftp_close().
    • +
    • Fixed bug (ftp_get/ftp_nb_get resumepos offset is maximum 10GB).
    • +
  • +
  • IMAP: +
      +
    • Fix build failure with Clang 16.
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (Possible Memory Leak with SSL-enabled MySQL connections).
    • +
  • +
  • Opcache: +
      +
    • Fixed build for macOS to cater with pkg-config settings.
    • +
    • Fixed bug (opcache.consistency_checks > 0 causes segfaults in PHP >= 8.1.5 in fpm context).
    • +
  • +
  • OpenSSL: +
      +
    • Add missing error checks on file writing functions.
    • +
  • +
  • PDO Firebird: +
      +
    • Fixed bug (Bus error with PDO Firebird on RPI with 64 bit kernel and 32 bit userland).
    • +
  • +
  • PDO ODBC: +
      +
    • Fixed missing and inconsistent error checks on SQLAllocHandle.
    • +
  • +
  • Phar: +
      +
    • Fixed bug (PharData archive created with Phar::Zip format does not keep files metadata (datetime)).
    • +
    • Add missing error checks on EVP_MD_CTX_create() and EVP_VerifyInit().
    • +
  • +
  • PGSQL: +
      +
    • Fixed typo in the array returned from pg_meta_data (extended mode).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (Array Data Address Reference Issue).
    • +
    • Fixed bug (ArrayIterator allows modification of readonly props).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (stream_socket_server context leaks).
    • +
    • Fixed bug (Browscap crashes PHP 8.1.12 on request shutdown (apache2)).
    • +
    • Fixed oss-fuzz #57392 (Buffer-overflow in php_fgetcsv() with \0 delimiter and enclosure).
    • +
    • Fixed undefined behaviour in unpack().
    • +
  • +
+
+ + + +
+

Version 8.1.17

+ +
  • Core: +
      +
    • Fixed incorrect check condition in ZEND_YIELD.
    • +
    • Fixed incorrect check condition in type inference.
    • +
    • Fixed overflow check in OnUpdateMemoryConsumption.
    • +
    • Fixed bug (Entering shutdown sequence with a fiber suspended in a Generator emits an unavoidable fatal error or crashes).
    • +
    • Fixed bug (Segfault/assertion when using fibers in shutdown function after bailout).
    • +
    • Fixed SSA object type update for compound assignment opcodes.
    • +
    • Fixed language scanner generation build.
    • +
    • Fixed zend_update_static_property() calling zend_update_static_property_ex() misleadingly with the wrong return type.
    • +
    • Fix bug (Fixed unknown string hash on property fetch with integer constant name).
    • +
    • Fixed php_fopen_primary_script() call resulted on zend_destroy_file_handle() freeing dangling pointers on the handle as it was uninitialized.
    • +
  • +
  • Curl: +
      +
    • Fixed deprecation warning at compile time.
    • +
    • Fixed bug (Unable to return CURL_READFUNC_PAUSE in readfunc callback).
    • +
  • +
  • Date: +
      +
    • Fix ('p' format specifier does not yield 'Z' for 00:00).
    • +
  • +
  • FFI: +
      +
    • Fixed incorrect bitshifting and masking in ffi bitfield.
    • +
  • +
  • Fiber: +
      +
    • Fixed assembly on alpine x86.
    • +
    • Fixed bug (segfault when garbage collector is invoked inside of fiber).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (FPM unknown child alert not valid).
    • +
    • Fixed bug (FPM successful config test early exit).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (Spoolchecker isSuspicious/areConfusable methods error code's argument always returning NULL0.
    • +
  • +
  • JSON: +
      +
    • Fixed JSON scanner and parser generation build.
    • +
  • +
  • MBString: +
      +
    • ext/mbstring: fix new_value length check.
    • +
    • Fix bug (mb_convert_encoding crashes PHP on Windows).
    • +
  • +
  • Opcache: +
      +
    • Fix incorrect page_size check.
    • +
  • +
  • OpenSSL: +
      +
    • Fixed php_openssl_set_server_dh_param() DH params errors handling.
    • +
  • +
  • PDO OCI: +
      +
    • (Reading a multibyte CLOB caps at 8192 chars).
    • +
  • +
  • PHPDBG: +
      +
    • Fixed bug (heap buffer overflow on --run option misuse).
    • +
  • +
  • PGSQL: +
      +
    • Fix (pg_lo_open segfaults in the strict_types mode).
    • +
  • +
  • Phar: +
      +
    • Fix incorrect check in phar tar parsing.
    • +
  • +
  • Reflection: +
      +
    • Fixed bug (Reflection::getClosureUsedVariables opcode fix with variadic arguments).
    • +
    • Fix Segfault when using ReflectionFiber suspended by an internal function.
    • +
  • +
  • Session: +
      +
    • Fixed ps_files_cleanup_dir() on failure code paths with -1 instead of 0 as the latter was considered success by callers. (nielsdos).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Made the default value of the first param of srand() and mt_srand() unknown).
    • +
    • Fix incorrect check in cs_8559_5 in map_from_unicode().
    • +
    • Fix bug for reset/end/next/prev() attempting to move pointer of properties table for certain internal classes such as FFI classes
    • +
    • Fix incorrect error check in browsecap for pcre2_match().
    • +
  • +
  • Tidy: +
      +
    • Fix memory leaks when attempting to open a non-existing file or a file over 4GB.
    • +
    • Add missing error check on tidyLoadConfig.
    • +
  • +
  • Zlib: +
      +
    • Fixed output_handler directive value's length which counted the string terminator.
    • +
  • +
+
+ + + +
+

Version 8.1.16

+ +
  • Core: +
      +
    • (Password_verify() always return true with some hash).
    • +
    • (1-byte array overrun in common path resolve code).
    • +
  • +
  • SAPI: +
      +
    • Fixed bug GHSA-54hq-v5wp-fqgv (DOS vulnerability when parsing multipart request body). (CVE-2023-0662)
    • +
  • +
+
+ + + +
+

Version 8.1.15

+ +
  • Apache: +
      +
    • Fixed bug (Partial content on incomplete POST request).
    • +
  • +
  • Core: +
      +
    • Fixed bug (PHP crashes when execute_ex is overridden and a __call trampoline is used from internal code).
    • +
    • Fix (Assertion `(flag & (1<<3)) == 0' failed).
    • +
    • Fix wrong comparison in block optimisation pass after opcode update.
    • +
  • +
  • Date: +
      +
    • Fixed bug (DateTime modify with unixtimestamp (@) must work like setTimestamp).
    • +
    • Fixed bug (DateTimeZone fails to parse time zones that contain the "+" character).
    • +
  • +
  • Fiber: +
      +
    • Fix assertion on stack allocation size.
    • +
  • +
  • FPM: +
      +
    • Fixed bug (FPM does not reset fastcgi.error_header).
    • +
    • (Wrong owner:group for listening unix socket).
    • +
  • +
  • Hash: +
      +
    • Handle exceptions from __toString in XXH3's initialization (nielsdos)
    • +
  • +
  • LDAP: +
      +
    • Fixed bug (LDAP\Connection::__construct() refers to ldap_create()).
    • +
  • +
  • MBString: +
      +
    • Fixed: mb_strlen (and a couple of other mbstring functions) would wrongly treat 0x80, 0xFD, 0xFE, 0xFF, and certain other byte values as the first byte of a 2-byte SJIS character.
    • +
  • +
  • Opcache: +
      +
    • Fix inverted bailout value in zend_runtime_jit() (Max Kellermann).
    • +
    • Fix access to uninitialized variable in accel_preload().
    • +
    • Fix zend_jit_find_trace() crashes.
    • +
    • Added missing lock for EXIT_INVALIDATE in zend_jit_trace_exit.
    • +
  • +
  • Phar: +
      +
    • Fix wrong flags check for compression method in phar_object.c (nielsdos)
    • +
  • +
  • PHPDBG: +
      +
    • Fix undefined behaviour in phpdbg_load_module_or_extension().
    • +
    • Fix NULL pointer dereference in phpdbg_create_conditional_breal().
    • +
    • Fix : phpdbg memory leaks by option "-h" (nielsdos)
    • +
    • Fix phpdbg segmentation fault in case of malformed input (nielsdos)
    • +
  • +
  • Posix: +
      +
    • Fix memory leak in posix_ttyname() (girgias)
    • +
  • +
  • Standard: +
      +
    • Fix (Segfault in stripslashes() with arm64).
    • +
    • Fix substr_replace with slots in repl_ht being UNDEF.
    • +
  • +
  • TSRM: +
      +
    • Fixed Windows shmget() wrt. IPC_PRIVATE.
    • +
  • +
  • XMLWriter: +
      +
    • Fix missing check for xmlTextWriterEndElement (nielsdos)
    • +
  • +
+
+ + + +
+

Version 8.1.14

+ +
  • Core: +
      +
    • Fixed bug (constant() behaves inconsistent when class is undefined).
    • +
    • Fixed bug (License information for xxHash is not included in README.REDIST.BINS file).
    • +
    • Fixed bug (Can't initialize heap: [0x000001e7]).
    • +
    • Fixed potentially undefined behavior in Windows ftok(3) emulation.
    • +
  • +
  • Date: +
      +
    • Fixed bug (DateTimeImmutable::diff differences in 8.1.10 onwards - timezone related).
    • +
    • Fixed bug (DateTime::createFromFormat: Parsing TZID string is too greedy).
    • +
    • Fixed bug (Time zone bug with \DateTimeInterface::diff()).
    • +
    • Fixed bug (DateTime diff returns wrong sign on day count when using a timezone).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (Solaris port event mechanism is still broken after bug #66694).
    • +
    • (Setting fastcgi.error_header can result in a WARNING).
    • +
    • Fixed bug (Random crash of FPM master process in fpm_stdio_child_said).
    • +
  • +
  • MBString: +
      +
    • Fixed bug (The behavior of mb_strcut in mbstring has been changed in PHP8.1).
    • +
  • +
  • Opcache: +
      +
    • Fixed bug (Segmentation Fault during OPCache Preload).
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (PHP fails to build if openssl was built with --no-ec).
    • +
    • Fixed bug (OpenSSL test failures when OpenSSL compiled with no-dsa).
    • +
  • +
  • Pcntl: +
      +
    • Fixed bug (Signal handler called after rshutdown leads to crash).
    • +
  • +
  • PDO_Firebird: +
      +
    • Fixed bug (Incorrect NUMERIC value returned from PDO_Firebird).
    • +
  • +
  • PDO/SQLite: +
      +
    • (PDO::quote() may return unquoted string). (CVE-2022-31631)
    • +
  • +
  • Session: +
      +
    • Fixed (session name silently fails with . and [).
    • +
  • +
  • SPL: +
      +
    • Fixed (SplFileObject::__toString() reads next line).
    • +
    • Fixed (Trampoline autoloader will get reregistered and cannot be unregistered).
    • +
  • +
  • SQLite3: +
      +
    • (open_basedir bypass in SQLite3 by using file URI).
    • +
  • +
+
+ + + +
+

Version 8.1.13

+ +
  • CLI: +
      +
    • Fixed bug (Null pointer dereference with -w/-s options).
    • +
  • +
  • Core: +
      +
    • Fixed bug (Generator crashes when interrupted during argument evaluation with extra named params).
    • +
    • Fixed bug (Generator crashes when memory limit is exceeded during initialization).
    • +
    • Fixed potential NULL pointer dereference Windows shm*() functions.
    • +
    • Fixed bug (Generator memory leak when interrupted during argument evaluation.
    • +
  • +
  • Date: +
      +
    • Fixed bug (DateTimeZone ctr mishandles input and adds null byte if the argument is an offset larger than 100*60 minutes).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (SaltStack (using Python subprocess) hangs when running php-fpm 8.1.11).
    • +
  • +
  • mysqli: +
      +
    • Fixed bug (mysqli_query throws warning despite using silenced error mode).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed potential heap corruption due to alignment mismatch.
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (OpenSSL compiled with no-md2, no-md4 or no-rmd160 does not build).
    • +
  • +
  • SOAP: +
      +
    • Fixed (Null pointer dereference while serializing the response).
    • +
  • +
+
+ + + +
+

Version 8.1.12

+ +
  • Core: +
      +
    • Fixes segfault with Fiber on FreeBSD i386 architecture.
    • +
  • +
  • Fileinfo: +
      +
    • Fixed bug (finfo returns wrong mime type for woff/woff2 files).
    • +
  • +
  • GD: +
      +
    • : OOB read due to insufficient input validation in imageloadfont(). (CVE-2022-31630)
    • +
  • +
  • Hash: +
      +
    • : buffer overflow in hash_update() on long parameter. (CVE-2022-37454)
    • +
  • +
  • MBString: +
      +
    • Fixed bug (Problem when ISO-2022-JP-MS is specified in mb_ encode_mimeheader).
    • +
  • +
  • Opcache: +
      +
    • Added indirect call reduction for jit on x86 architectures.
    • +
  • +
  • Session: +
      +
    • Fixed bug (session_create_id() fails with user defined save handler that doesn't have a validateId() method).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (stream_select does not abort upon exception or empty valid fd set).
    • +
  • +
+
+ + + +
+

Version 8.1.11

+ +
  • Core: +
      +
    • : phar wrapper: DOS when using quine gzip file. (CVE-2022-31628)
    • +
    • : Don't mangle HTTP variable names that clash with ones that have a specific semantic meaning. (CVE-2022-31629)
    • +
    • Fixed bug (Crash in ZEND_RETURN/GC/zend_call_function) (Tim Starling)
    • +
    • Fixed bug (Segmentation fault on script exit #9379).
    • +
    • Fixed bug (Invalid class FQN emitted by AST dump for new and class constants in constant expressions).
    • +
  • +
  • DOM: +
      +
    • (DOMDocument->replaceChild on doctype causes double free).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (FPM access.log with stderr begins to write logs to error_log after daemon reload).
    • +
    • ("Headers already sent..." when previous connection was aborted).
    • +
  • +
  • GMP: +
      +
    • Fixed bug (GMP throws the wrong error when a GMP object is passed to gmp_init()).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (Incorrect argument number for ValueError in NumberFormatter).
    • +
  • +
  • PCRE: +
      +
    • Fixed pcre.jit on Apple Silicon.
    • +
  • +
  • PDO_PGSQL: +
      +
    • Fixed bug (PgSQL large object resource is incorrectly closed).
    • +
  • +
  • Reflection: +
      +
    • Fixed bug (ReflectionFunction provides no way to get the called class of a Closure).
    • +
  • +
  • Streams: +
      +
    • Fixed bug ($http_response_header is wrong for long status line).
    • +
  • +
+
+ + + +
+

Version 8.1.10

+ +
  • Core: +
      +
    • Fixed --CGI-- support of run-tests.php.
    • +
    • Fixed incorrect double to long casting in latest clang.
    • +
    • Fixed bug (GC root buffer keeps growing when dtors are present).
    • +
  • +
  • Date: +
      +
    • Fixed bug (DateTime::diff miscalculation is same time zone of different type).
    • +
    • Fixed bug (DateTime object comparison after applying delta less than 1 second).
    • +
    • Fixed bug : (DateInterval 1.5s added to DateTimeInterface is rounded down since PHP 8.1.0).
    • +
    • (Wrong result from DateTimeImmutable::diff).
    • +
  • +
  • DBA: +
      +
    • Fixed LMDB driver memory leak on DB creation failure.
    • +
    • Fixed bug (dba_open("non-existing", "c-", "flatfile") segfaults).
    • +
  • +
  • IMAP: +
      +
    • Fixed bug (Segfault when connection is used after imap_close()).
    • +
  • +
  • Intl: +
      +
    • Fixed IntlDateFormatter::formatObject() parameter type.
    • +
  • +
  • MBString: +
      +
    • Fixed bug (mb_detect_encoding(): wrong results with null $encodings).
    • +
  • +
  • OPcache: +
      +
    • Fixed bug (Loading blacklist file can fail due to negative length).
    • +
    • Fixed bug (Segfault in zend_accel_class_hash_copy).
    • +
  • +
  • PDO_SQLite: +
      +
    • Fixed bug (SQLite3 authorizer crashes on NULL values).
    • +
  • +
  • SQLite3: +
      +
    • Fixed bug (SQLite3 authorizer crashes on NULL values).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (The resource returned by stream_socket_accept may have incorrect metadata).
    • +
    • Fixed bug (SSL handshake timeout leaves persistent connections hanging).
    • +
  • +
+
+ + + +
+

Version 8.1.9

+ +
  • CLI: +
      +
    • Fixed potential overflow for the builtin server via the PHP_CLI_SERVER_WORKERS environment variable.
    • +
    • Fixed (Intentionally closing std handles no longer possible).
    • +
  • +
  • Core: +
      +
    • Fixed bug (error_log on Windows can hold the file write lock).
    • +
    • Fixed bug (WeakMap object reference offset causing TypeError).
    • +
  • +
  • Date: +
      +
    • (DatePeriod doesn't warn with custom DateTimeImmutable).
    • +
  • +
  • FPM: +
      +
    • Fixed zlog message prepend, free on incorrect address.
    • +
    • Fixed possible double free on configuration loading failure. (Heiko Weber).
    • +
  • +
  • GD: +
      +
    • Fixed bug (imagecopyresized() error refers to the wrong argument).
    • +
  • +
  • Intl: +
      +
    • Fixed build for ICU 69.x and onwards.
    • +
  • +
  • OPcache: +
      +
    • Fixed bug (PHP hanging infinitly at 100% cpu when check php syntax of a valid file).
    • +
    • Fixed bug (Segfault with JIT and large match/switch statements).
    • +
  • +
  • Reflection: +
      +
    • Fixed bug (Fixed Reflection::getModifierNames() with readonly modifier).
    • +
  • +
  • Standard: +
      +
    • Fixed the crypt_sha256/512 api build with clang > 12.
    • +
    • Uses CCRandomGenerateBytes instead of arc4random_buf on macOs. (David Carlier).
    • +
    • Fixed bug (php_stream_sock_open_from_socket could return NULL).
    • +
  • +
+
+ + + +
+

Version 8.1.8

+ +
  • Core: +
      +
    • Fixed bug (Intel CET is disabled unintentionally).
    • +
    • Fixed leak in Enum::from/tryFrom for internal enums when using JIT
    • +
    • Fixed calling internal methods with a static return type from extension code.
    • +
    • Fixed bug (Casting an object to array does not unwrap refcount=1 references).
    • +
    • Fixed potential use after free in php_binary_init().
    • +
  • +
  • CLI: +
      +
    • Fixed (Intentionally closing std handles no longer possible).
    • +
  • +
  • COM: +
      +
    • Fixed bug (Integer arithmethic with large number variants fails).
    • +
  • +
  • Curl: +
      +
    • Fixed CURLOPT_TLSAUTH_TYPE is not treated as a string option.
    • +
  • +
  • Date: +
      +
    • (Null-byte injection in CreateFromFormat and related functions).
    • +
    • (DST timezone abbreviation has incorrect offset).
    • +
    • (Weekdays are calculated incorrectly for negative years).
    • +
    • (timezone_open accepts invalid timezone string argument).
    • +
  • +
  • Fileinfo: +
      +
    • (Heap buffer overflow in finfo_buffer). (CVE-2022-31627)
    • +
  • +
  • FPM: +
      +
    • (fpm: syslog.ident don't work).
    • +
  • +
  • GD: +
      +
    • Fixed imagecreatefromavif() memory leak.
    • +
  • +
  • MBString: +
      +
    • mb_detect_encoding recognizes all letters in Czech alphabet
    • +
    • mb_detect_encoding recognizes all letters in Hungarian alphabet
    • +
    • Fixed bug (pcre not ready at mbstring startup).
    • +
    • Backwards-compatible mappings for 0x5C/0x7E in Shift-JIS are restored, after they had been changed in 8.1.0.
    • +
  • +
  • ODBC: +
      +
    • Fixed handling of single-key connection strings.
    • +
  • +
  • OPcache: +
      +
    • Fixed bug (tracing JIT crash after private instance method change).
    • +
  • +
  • OpenSSL: +
      +
    • (Several openssl functions ignore the VCWD).
    • +
    • (NULL byte injection in several OpenSSL functions working with certificates).
    • +
  • +
  • PDO_ODBC: +
      +
    • Fixed handling of single-key connection strings.
    • +
  • +
  • Zip: +
      +
    • Fixed bug (ZipArchive::close deletes zip file without updating stat cache).
    • +
  • +
+
+ + + +
+

Version 8.1.7

+ +
  • CLI: +
      +
    • Fixed bug (CLI closes standard streams too early).
    • +
  • +
  • Date: +
      +
    • (strtotime plurals / incorrect time).
    • +
    • (Datetime fails to parse an ISO 8601 ordinal date (extended format)).
    • +
    • (DateTime object does not support short ISO 8601 time format - YYYY-MM-DDTHH)
    • +
    • (Timezones and offsets are not properly used when working with dates)
    • +
    • (date parsing fails when provided with timezones including seconds).
    • +
    • Fixed bug (Problems with negative timestamps and fractions).
    • +
  • +
  • FPM: +
      +
    • Fixed ACL build check on MacOS.
    • +
    • : php-fpm writes empty fcgi record causing nginx 502.
    • +
  • +
  • mysqlnd: +
      +
    • : mysqlnd/pdo password buffer overflow. (CVE-2022-31626)
    • +
  • +
  • OPcache: +
      +
    • Fixed bug (tracing JIT crash after function/method change).
    • +
  • +
  • OpenSSL: +
      +
    • (error:14095126:SSL routines:ssl3_read_n:unexpected eof while reading).
    • +
  • +
  • Pcntl: +
      +
    • Fixed Haiku build.
    • +
  • +
  • pgsql: +
      +
    • : Uninitialized array in pg_query_params(). (CVE-2022-31625)
    • +
  • +
  • Soap: +
      +
    • Fixed bug (Error on wrong parameter on SoapHeader constructor).
    • +
    • Fixed bug (SoapClient may strip parts of nmtokens).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (iterator_count() may run indefinitely).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Crash during unloading of extension after dl() in ZTS).
    • +
  • +
  • Zip: +
      +
    • Fixed type for index in ZipArchive::replaceFile.
    • +
  • +
+
+ + + +
+

Version 8.1.6

+ +
  • Core: +
      +
    • Fixed bug (Registry settings are no longer recognized).
    • +
    • Fixed potential race condition during resource ID allocation.
    • +
    • Fixed bug (Preloading of constants containing arrays with enums segfaults).
    • +
    • Fixed Haiku ZTS builds.
    • +
  • +
  • Date: +
      +
    • Fixed bug (DateTimeZone::getTransitions() returns insufficient data).
    • +
    • Fixed bug (Timezone doesn't work as intended).
    • +
    • (DateTimeZone::getTransitions() returns invalid data).
    • +
    • Fixed bug (Exceptions thrown within a yielded from iterator are not rethrown into the generator).
    • +
  • +
  • FFI: +
      +
    • Fixed bug (Assigning function pointers to structs in FFI leaks).
    • +
  • +
  • FPM: +
      +
    • (FPM /status reports wrong number of active processe).
    • +
    • (FPM cannot shutdown processes).
    • +
    • Fixed comment in kqueue remove callback log message.
    • +
  • +
  • Hash: +
      +
    • (segfault when serializing finalized HashContext).
    • +
  • +
  • Iconv: +
      +
    • Fixed bug (ob_end_clean does not reset Content-Encoding header).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (msgfmt_format $values may not support references).
    • +
  • +
  • MBString: +
      +
    • Number of error markers emitted for invalid UTF-8 text matches WHATWG specification. This is a return to the behavior of PHP 8.0 and earlier.
    • +
  • +
  • MySQLi: +
      +
    • Fixed bug (MySQLi uses unsupported format specifier on Windows).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (ArrayIterator may leak when calling __construct()).
    • +
    • Fixed bug (SplFileObject: key() returns wrong value).
    • +
  • +
  • Streams: +
      +
    • Fixed php://temp does not preserve file-position when switched to temporary file.
    • +
  • +
  • zlib: +
      +
    • Fixed bug (ob_end_clean does not reset Content-Encoding header).
    • +
  • +
+
+ + + +
+

Version 8.1.5

+ +
  • Core: +
      +
    • Fixed bug (Enum values in property initializers leak).
    • +
    • Fixed freeing of internal attribute arguments.
    • +
    • Fixed bug (memory leak of internal function attribute hash).
    • +
    • Fixed bug (ZTS support on Alpine is broken).
    • +
  • +
  • Filter: +
      +
    • Fixed signedness confusion in php_filter_validate_domain().
    • +
  • +
  • Intl: +
      +
    • Fixed bug (Can't catch arg type deprecation when instantiating Intl classes).
    • +
    • Fixed bug (Compilation error on cygwin).
    • +
    • Fixed bug (Fix IntlPartsIterator key off-by-one error and first key).
    • +
  • +
  • MBString: +
      +
    • Fixed bug (mb_encode_mimeheader: $indent functionality broken).
    • +
  • +
  • MySQLi: +
      +
    • Fixed bug (mysqli_fetch_object creates inaccessible properties).
    • +
  • +
  • Pcntl: +
      +
    • Fixed bug (Compilation error on cygwin).
    • +
  • +
  • PgSQL: +
      +
    • Fixed result_type related stack corruption on LLP64 architectures.
    • +
    • Fixed bug (pg_insert() fails for references).
    • +
  • +
  • Sockets: +
      +
    • Fixed Solaris builds.
    • +
  • +
  • SPL: +
      +
    • Fixed bug (SplFileObject - seek and key with csv file inconsistent).
    • +
    • Fixed bug (Cannot override DirectoryIterator::current() without return typehint in 8.1).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Force macOS to use statfs).
    • +
  • +
+
+ + + +
+

Version 8.1.4

+ +
  • Core: +
      +
    • Fixed Haiku ZTS build.
    • +
    • Fixed bug arginfo not regenerated for extension.
    • +
    • Fixed bug Segfault when dumping uncalled fake closure with static variables.
    • +
    • Fixed bug (Nested CallbackFilterIterator is leaking memory).
    • +
    • Fixed bug (Wrong type inference of range() result).
    • +
    • Fixed bug (Wrong first class callable by name optimization).
    • +
    • Fixed bug (op_arrays with temporary run_time_cache leak memory when observed).
    • +
  • +
  • GD: +
      +
    • Fixed libpng warning when loading interlaced images.
    • +
  • +
  • FPM: +
      +
    • (Unsafe access to fpm scoreboard).
    • +
  • +
  • Iconv: +
      +
    • Fixed bug (ob_clean() only does not set Content-Encoding).
    • +
    • Fixed bug (Unexpected result for iconv_mime_decode).
    • +
  • +
  • MBString: +
      +
    • Fixed bug (mb_check_encoding wrong result for 7bit).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (NULL pointer dereference in mysqlnd package).
    • +
  • +
  • Reflection: +
      +
    • Fixed bug (ReflectionClass::getConstants() depends on def. order).
    • +
  • +
  • Zlib: +
      +
    • Fixed bug (ob_clean() only does not set Content-Encoding).
    • +
  • +
+
+ + + +
+

Version 8.1.3

+ +
  • Core: +
      +
    • (Attribute instantiation leaves dangling pointer).
    • +
    • Fixed bug (Environment vars may be mangled on Windows).
    • +
    • Fixed bug (Segfault when INI file is not readable).
    • +
  • +
  • FFI: +
      +
    • Fixed bug (FFI::cast() from pointer to array is broken).
    • +
  • +
  • Filter: +
      +
    • Fix #81708: UAF due to php_filter_float() failing for ints. (CVE-2021-21708)
    • +
  • +
  • FPM: +
      +
    • Fixed memory leak on invalid port.
    • +
    • Fixed bug (Invalid OpenMetrics response format returned by FPM status page.
    • +
  • +
  • MBString: +
      +
    • Fixed bug (mb_send_mail may delimit headers with LF only).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (MariaDB version prefix 5.5.5- is not stripped).
    • +
  • +
  • pcntl: +
      +
    • Fixed pcntl_rfork build for DragonFlyBSD.
    • +
  • +
  • Sockets: +
      +
    • Fixed bug (sockets extension compilation errors).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Regression in unpack for negative int value).
    • +
    • Fixed bug (mails are sent even if failure to log throws exception).
    • +
  • +
+
+ + + +
+

Version 8.1.2

+ +
  • Core: +
      +
    • (Nullsafe operator leaks dynamic property name).
    • +
    • (Using null coalesce assignment with $GLOBALS["x"] produces opcode error).
    • +
    • (GCC-11 silently ignores -R).
    • +
    • (Misleading "access type ... must be public" error message on final or abstract interface methods).
    • +
    • (cached_chunks are not counted to real_size on shutdown).
    • +
    • Fixed bug (Multi-inherited final constant causes fatal error).
    • +
    • Fixed zend_fibers.c build with ZEND_FIBER_UCONTEXT.
    • +
    • Added riscv64 support for fibers.
    • +
  • +
  • Filter: +
      +
    • Fixed FILTER_FLAG_NO_RES_RANGE flag.
    • +
  • +
  • Hash: +
      +
    • Fixed bug (Incorrect return types for hash() and hash_hmac()).
    • +
    • Fixed bug (Inconsistent argument name in hash_hmac_file and hash_file).
    • +
  • +
  • MBString: +
      +
    • (mb_check_encoding(7bit) segfaults).
    • +
  • +
  • MySQLi: +
      +
    • (MYSQL_OPT_LOAD_DATA_LOCAL_DIR not available in MariaDB).
    • +
    • Introduced MYSQLI_IS_MARIADB.
    • +
    • Fixed bug (mysqli_sql_exception->getSqlState()).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug where large bigints may be truncated.
    • +
  • +
  • OCI8: +
      +
    • Fixed bug (php_oci_cleanup_global_handles segfaults at second call).
    • +
  • +
  • OPcache: +
      +
    • (Tracing JIT crashes on reattaching).
    • +
  • +
  • Readline: +
      +
    • (Cannot input unicode characters in PHP 8 interactive shell).
    • +
  • +
  • Reflection: +
      +
    • (ReflectionEnum throwing exceptions).
    • +
  • +
  • PDO_PGSQL: +
      +
    • Fixed error message allocation of PDO PgSQL.
    • +
  • +
  • Sockets: +
      +
    • Avoid void* arithmetic in sockets/multicast.c on NetBSD.
    • +
    • Fixed ext/sockets build on Haiku.
    • +
  • +
  • Spl: +
      +
    • (SplFileObject::seek broken with CSV flags).
    • +
    • Fixed bug (Cloning a faked SplFileInfo object may segfault).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (gethostbyaddr outputs binary string).
    • +
    • Fixed bug (php_uname doesn't recognise latest Windows versions).
    • +
  • +
+
+ + + +
+

Version 8.1.1

+ +
  • IMAP: +
      +
    • (imap_(un)delete accept sequences, not single numbers).
    • +
  • +
  • PCRE: +
      +
    • Update bundled PCRE2 to 10.39.
    • +
    • (Out of bounds in php_pcre_replace_impl).
    • +
  • +
  • Standard: +
      +
    • (stream_get_contents() may unnecessarily overallocate).
    • +
  • +
+
+ + + +
+

Version 8.1.0

+ +
  • Core: +
      +
    • Fixed inclusion order for phpize builds on Windows.
    • +
    • Added missing hashtable insertion APIs for arr/obj/ref.
    • +
    • (Relative file path is removed from uploaded file).
    • +
    • (CE_CACHE allocation with concurrent access).
    • +
    • (Fiber does not compile on AIX).
    • +
    • (SEGFAULT in zend_do_perform_implementation_check).
    • +
    • (Header injection via default_mimetype / default_charset).
    • +
    • (Fix compile failure on Solaris with clang).
    • +
    • (Observer may not be initialized properly).
    • +
    • (Using Enum as key in WeakMap triggers GC + SegFault).
    • +
    • (TEST_PHP_CGI_EXECUTABLE badly set in run-tests.php).
    • +
    • (unset() of $GLOBALS sub-key yields warning).
    • +
    • (New ampersand token parsing depends on new line after it).
    • +
    • (Unicode characters in cli.prompt causes segfault).
    • +
    • ("Declaration should be compatible with" gives incorrect line number with traits).
    • +
    • (CLI server: insufficient cleanup if request startup fails).
    • +
    • (match error message improvements).
    • +
    • (Fiber support missing for Solaris Sparc).
    • +
    • (Comparison of fake closures doesn't work).
    • +
    • (powerpc64 build fails on fibers).
    • +
    • (Cyclic unserialize in TMPVAR operand may leak).
    • +
    • (__sleep allowed to return non-array).
    • +
    • (function scope static variables are not bound to a unique function).
    • +
    • (__callStatic fired in base class through a parent call if the method is private).
    • +
    • (incorrect debug info on Closures with implicit binds).
    • +
  • +
  • CLI: +
      +
    • (Server logs incorrect request method).
    • +
  • +
  • COM: +
      +
    • Dispatch using LANG_NEUTRAL instead of LOCALE_SYSTEM_DEFAULT.
    • +
  • +
  • Curl: +
      +
    • (Support CURLOPT_SSLCERT_BLOB for cert strings).
    • +
  • +
  • Date: +
      +
    • (Regression Incorrect difference after timezone change).
    • +
    • (Interval serialization regression since 7.3.14 / 7.4.2).
    • +
    • (Incorrect timezone transition details for POSIX data).
    • +
    • (Missing second with inverted interval).
    • +
    • Speed up finding timezone offset information.
    • +
    • (date_create_from_format misses leap year).
    • +
    • (DateTimeZone::getTransitions() truncated).
    • +
    • (Wrong diff between 2 dates in different timezones).
    • +
    • (Missing second with inverted interval).
    • +
    • (DateTimeZone silently falls back to UTC when providing an offset with seconds).
    • +
    • (Regression in 8.1: add() now truncate ->f).
    • +
    • (Date interval calculation not correct).
    • +
    • (Incorrect difference using DateInterval).
    • +
    • (date_diff() function returns false result).
    • +
    • (dst not handled past 2038).
    • +
    • (Wrong date diff).
    • +
    • (DateTime. diff returns negative values).
    • +
    • (date_diff on two dates with timezone set localised returns wrong results).
    • +
    • (Incorrect date from timestamp).
    • +
    • (Extra day on diff between begin and end of march 2016).
    • +
    • (DateTime::diff confuse on timezone 'Asia/Tokyo').
    • +
    • (Datetime add not realising it already applied DST change).
    • +
    • (DateTimeImmutable::getTimestamp() triggers DST switch in incorrect time).
    • +
    • (Handling DST transitions correctly).
    • +
    • (Date diff is bad calculated, in same time zone).
    • +
    • (DateTime::add does only care about backward DST transition, not forward).
    • +
    • (DateTime->diff having issues with leap days for timezones ahead of UTC).
    • +
    • (Date difference varies according day time).
    • +
    • (DateTime's diff DateInterval incorrect in timezones from UTC+01:00 to UTC+12:00).
    • +
    • (diff makes wrong in hour for Asia/Tehran).
    • +
    • (DateTime::diff() generates months differently between time zones).
    • +
    • (timelib mishandles future timestamps (triggered by 'zic -b slim')).
    • +
    • (Invalid date time created (with day "00")).
    • +
    • (DateTime calculate wrong with DateInterval).
    • +
    • (DateTime objects behave incorrectly around DST transition).
    • +
    • (DateTime(Immutable)::sub around DST yield incorrect time).
    • +
  • +
  • DBA: +
      +
    • (TokyoCabinet driver leaks memory).
    • +
  • +
  • DOM: +
      +
    • (DOMElement::setIdAttribute() called twice may remove ID).
    • +
  • +
  • FFI: +
      +
    • ("TYPE *" shows unhelpful message when type is not defined).
    • +
  • +
  • Filter: +
      +
    • (FILTER_FLAG_IPV6/FILTER_FLAG_NO_PRIV|RES_RANGE failing).
    • +
  • +
  • FPM: +
      +
    • (Future possibility for heap overflow in FPM zlog).
    • +
    • (PHP-FPM oob R/W in root process leading to privilege escalation) (CVE-2021-21703).
    • +
    • Added openmetrics status format.
    • +
    • Enable process renaming on macOS.
    • +
    • Added pm.max_spawn_rate option to configure max spawn child processes rate.
    • +
    • (Events port mechanism).
    • +
  • +
  • FTP: +
      +
    • Convert resource<ftp> to object \FTP\Connection.
    • +
  • +
  • GD: +
      +
    • (libpng warning from imagecreatefromstring).
    • +
    • Convert resource<gd font> to object \GdFont.
    • +
    • Added support for Avif images
    • +
  • +
  • hash: +
      +
    • (Add MurmurHash V3).
    • +
    • (Add xxHash support).
    • +
  • +
  • JSON: +
      +
    • (Change of $depth behaviour in json_encode() on PHP 8.1).
    • +
  • +
  • LDAP: +
      +
    • Convert resource<ldap link> to object \LDAP\Connection.
    • +
    • Convert resource<ldap result> to object \LDAP\Result.
    • +
    • Convert resource<ldap result entry> to object \LDAP\ResultEntry.
    • +
  • +
  • MBString: +
      +
    • (mbstring may use pointer from some previous request).
    • +
    • (mb_detect_encoding() regression).
    • +
    • (mb_detect_encoding misdetcts ASCII in some cases).
    • +
    • (mb_detect_encoding() segfaults when 7bit encoding is specified).
    • +
  • +
  • MySQLi: +
      +
    • (Emulate mysqli_fetch_all() for libmysqlclient).
    • +
    • (Replace language in APIs and source code/docs).
    • +
    • (Add option to specify LOAD DATA LOCAL white list folder (including libmysql)).
    • +
  • +
  • MySQLnd: +
      +
    • (Crash (Bus Error) in mysqlnd due to wrong alignment).
    • +
    • (PDO uses too much memory).
    • +
  • +
  • Opcache: +
      +
    • (Incorrect JIT code for ADD with a reference to array).
    • +
    • (Memory leak in PHPUnit with functional JIT).
    • +
    • (infinite loop in building cfg during JIT compilation).
    • +
    • (Wrong result with pow operator with JIT enabled).
    • +
    • (Intermittent property assignment failure with JIT enabled).
    • +
    • (Assertion `zv != ((void *)0)' failed for "preload" with JIT).
    • +
    • (building opcache with phpize fails).
    • +
    • (opcache header not installed).
    • +
    • Added inheritance cache.
    • +
  • +
  • OpenSSL: +
      +
    • ($tag argument of openssl_decrypt() should accept null/empty string).
    • +
    • Bump minimal OpenSSL version to 1.0.2.
    • +
  • +
  • PCRE: +
      +
    • (PCRE2 10.35 JIT performance regression).
    • +
    • Bundled PCRE2 is 10.37.
    • +
  • +
  • PDO: +
      +
    • (PDO_MYSQL: PDO::PARAM_LOB does not bind to a stream for fetching a BLOB).
    • +
  • +
  • PDO MySQL: +
      +
    • (PDO::lastInsertId() return wrong).
    • +
    • (PDO discards error message text from prepared statement).
    • +
  • +
  • PDO OCI: +
      +
    • (Support 'success with info' at connection).
    • +
  • +
  • PDO ODBC: +
      +
    • Implement PDO_ATTR_SERVER_VERSION and PDO_ATTR_SERVER_INFO for PDO::getAttribute().
    • +
  • +
  • PDO PgSQL: +
      +
    • (pdo_pgsql: Inconsitent boolean conversion after calling closeCursor()).
    • +
  • +
  • PDO SQLite: +
      +
    • (Proper data-type support for PDO_SQLITE).
    • +
  • +
  • PgSQL: +
      +
    • (pg_end_copy still expects a resource).
    • +
    • Convert resource<pgsql link> to object \PgSql\Connection.
    • +
    • Convert resource<pgsql result> to object \PgSql\Result.
    • +
    • Convert resource<pgsql large object> to object \PgSql\Lob.
    • +
  • +
  • Phar: +
      +
    • Use SHA256 by default for signature.
    • +
    • Add support for OpenSSL_SHA256 and OpenSSL_SHA512 signature.
    • +
  • +
  • phpdbg: +
      +
    • (unknown help topic causes assertion failure).
    • +
  • +
  • PSpell: +
      +
    • Convert resource<pspell> to object \PSpell\Dictionary.
    • +
    • Convert resource<pspell config> to object \PSpell\Config.
    • +
  • +
  • readline: +
      +
    • (invalid read in readline completion).
    • +
  • +
  • Reflection: +
      +
    • (ArgumentCountError when getting default value from ReflectionParameter with new).
    • +
    • (PHP 8.1: ReflectionClass->getTraitAliases() crashes with Internal error).
    • +
    • (Enum: ReflectionMethod->getDeclaringClass() return a ReflectionClass).
    • +
    • (Make ReflectionEnum and related class non-final).
    • +
    • (ReflectionProperty::getDefaultValue() returns current value for statics).
    • +
    • (ReflectionProperty::__toString() renders current value, not default value).
    • +
    • (ReflectionAttribute is not a Reflector).
    • +
    • (no way to determine if Closure is static).
    • +
    • Implement ReflectionFunctionAbstract::getClosureUsedVariables.
    • +
  • +
  • Shmop: +
      +
    • (shmop_open won't attach and causes php to crash).
    • +
  • +
  • SimpleXML: +
      +
    • (Segfault in zif_simplexml_import_dom).
    • +
  • +
  • SNMP: +
      +
    • Implement SHA256 and SHA512 for security protocol.
    • +
  • +
  • Sodium: +
      +
    • Added the XChaCha20 stream cipher functions.
    • +
    • Added the Ristretto255 functions, which are available in libsodium 1.0.18.
    • +
  • +
  • SPL: +
      +
    • (SplFileObject::fgetcsv incorrectly returns a row on premature EOF).
    • +
    • (Recursive SplFixedArray::setSize() may cause double-free).
    • +
    • (LimitIterator + SplFileObject regression in 8.0.1).
    • +
    • (Special json_encode behavior for SplFixedArray).
    • +
    • ("Notice: Undefined index" on unset() ArrayObject non-existing key).
    • +
    • (FilesystemIterator::FOLLOW_SYMLINKS remove KEY_AS_FILE from bitmask).
    • +
  • +
  • Standard: +
      +
    • (gethostbyaddr('::1') returns ip instead of name after calling some other method).
    • +
    • (Incorrectly using libsodium for argon2 hashing).
    • +
    • (PHP 7.3+ memory leak when unserialize() is used on an associative array).
    • +
    • (Serialization is unexpectedly allowed on anonymous classes with __serialize()).
    • +
    • (hrtime breaks build on OSX before Sierra).
    • +
    • (method_exists on Closure::__invoke inconsistency).
    • +
  • +
  • Streams: +
      +
    • (stream_isatty emits warning with attached stream wrapper).
    • +
  • +
  • XML: +
      +
    • (special character is breaking the path in xml function) (CVE-2021-21707).
    • +
    • (XML_OPTION_SKIP_WHITE strips embedded whitespace).
    • +
  • +
  • Zip: +
      +
    • (ZipArchive::extractTo() may leak memory).
    • +
    • (Dirname ending in colon unzips to wrong dir).
    • +
    • (ZipArchive::extractTo extracts outside of destination) (CVE-2021-21706).
    • +
    • (ZipArchive::getStream doesn't use setPassword).
    • +
  • +
+
+ + + +
+

Version 8.0.30

+ +
  • Libxml: +
      +
    • Fixed bug GHSA-3qrf-m4j2-pcrr (Security issue with external entity loading in XML without enabling it). (CVE-2023-3823)
    • +
  • +
  • Phar: +
      +
    • Fixed bug GHSA-jqcx-ccgc-xwhv (Buffer mismanagement in phar_dir_read()). (CVE-2023-3824)
    • +
  • +
+
+ + + +
+

Version 8.0.29

+ +
  • Soap: +
      +
    • Fixed bug GHSA-76gg-c692-v2mw (Missing error check and insufficient random bytes in HTTP Digest authentication for SOAP). (CVE-2023-3247)
    • +
  • +
+
+ + + +
+

Version 8.0.28

+ +
  • Core: +
      +
    • (Password_verify() always return true with some hash).
    • +
    • (1-byte array overrun in common path resolve code).
    • +
  • +
  • SAPI: +
      +
    • Fixed bug GHSA-54hq-v5wp-fqgv (DOS vulnerability when parsing multipart request body). (CVE-2023-0662)
    • +
  • +
+
+ + + +
+

Version 8.0.27

+ +
  • PDO/SQLite: +
      +
    • (PDO::quote() may return unquoted string). (CVE-2022-31631)
    • +
  • +
+
+ + + +
+

Version 8.0.26

+ +
  • CLI: +
      +
    • Fixed bug (Null pointer dereference with -w/-s options).
    • +
  • +
  • Core: +
      +
    • Fixed bug (Generator crashes when interrupted during argument evaluation with extra named params).
    • +
    • Fixed bug (Generator crashes when memory limit is exceeded during initialization).
    • +
    • Fixed potential NULL pointer dereference in Windows shm*() functions.
    • +
    • Fixed bug (Generator memory leak when interrupted during argument evaluation.
    • +
  • +
  • Date: +
      +
    • Fixed bug (DateTimeZone ctr mishandles input and adds null byte if the argument is an offset larger than 100*60 minutes).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (SaltStack (using Python subprocess) hangs when running php-fpm 8.1.11).
    • +
  • +
  • mysqli: +
      +
    • Fixed bug (mysqli_query throws warning despite using silenced error mode).
    • +
  • +
  • OpenSSL: +
      +
    • Fixed bug (OpenSSL compiled with no-md2, no-md4 or no-rmd160 does not build).
    • +
  • +
  • SOAP: +
      +
    • Fixed (Null pointer dereference while serializing the response).
    • +
  • +
+
+ + + +
+

Version 8.0.25

+ +
  • GD: +
      +
    • : OOB read due to insufficient input validation in imageloadfont(). (CVE-2022-31630)
    • +
  • +
  • Hash: +
      +
    • : buffer overflow in hash_update() on long parameter. (CVE-2022-37454)
    • +
  • +
  • Session: +
      +
    • Fixed bug (session_create_id() fails with user defined save handler that doesn't have a validateId() method).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (stream_select does not abort upon exception or empty valid fd set).
    • +
  • +
+
+ + + +
+

Version 8.0.24

+ +
  • Core: +
      +
    • Fixed bug (Crash in ZEND_RETURN/GC/zend_call_function) (Tim Starling)
    • +
    • Fixed bug (Segmentation fault on script exit #9379).
    • +
    • Fixed bug (LSP error in eval'd code refers to wrong class for static type).
    • +
    • : Don't mangle HTTP variable names that clash with ones that have a specific semantic meaning. (CVE-2022-31629)
    • +
  • +
  • DOM: +
      +
    • (DOMDocument->replaceChild on doctype causes double free).
    • +
  • +
  • FPM: +
      +
    • Fixed bug (FPM access.log with stderr begins to write logs to error_log after daemon reload).
    • +
    • ("Headers already sent..." when previous connection was aborted).
    • +
  • +
  • GMP: +
      +
    • Fixed bug (GMP throws the wrong error when a GMP object is passed to gmp_init()).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (Incorrect argument number for ValueError in NumberFormatter).
    • +
  • +
  • Phar: +
      +
    • : phar wrapper: DOS when using quine gzip file. (CVE-2022-31628)
    • +
  • +
  • PDO_PGSQL: +
      +
    • Fixed bug (PgSQL large object resource is incorrectly closed).
    • +
  • +
  • Reflection: +
      +
    • Fixed bug (ReflectionFunction provides no way to get the called class of a Closure).
    • +
    • Fixed bug (Private method is incorrectly dumped as "overwrites").
    • +
  • +
  • Streams: +
      +
    • Fixed bug ($http_response_header is wrong for long status line).
    • +
  • +
+
+ + + +
+

Version 8.0.23

+ +
  • Core: +
      +
    • Fixed incorrect double to long casting in latest clang.
    • +
  • +
  • DBA: +
      +
    • Fixed LMDB driver memory leak on DB creation failure.
    • +
    • Fixed bug (dba_open("non-existing", "c-", "flatfile") segfaults).
    • +
  • +
  • Intl: +
      +
    • Fixed IntlDateFormatter::formatObject() parameter type.
    • +
  • +
  • OPcache: +
      +
    • Fixed bug (Loading blacklist file can fail due to negative length).
    • +
  • +
  • PDO_SQLite: +
      +
    • Fixed bug (SQLite3 authorizer crashes on NULL values).
    • +
  • +
  • SQLite3: +
      +
    • Fixed bug (SQLite3 authorizer crashes on NULL values).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (php_stream_sock_open_from_socket could return NULL).
    • +
  • +
  • Streams: +
      +
    • Fixed bug (The resource returned by stream_socket_accept may have incorrect metadata).
    • +
    • Fixed bug (SSL handshake timeout leaves persistent connections hanging).
    • +
  • +
+
+ + + +
+

Version 8.0.22

+ +
  • CLI: +
      +
    • Fixed potential overflow for the builtin server via the PHP_CLI_SERVER_WORKERS environment variable.
    • +
  • +
  • Core: +
      +
    • Fixed bug (error_log on Windows can hold the file write lock).
    • +
    • Fixed bug (WeakMap object reference offset causing TypeError).
    • +
  • +
  • Date: +
      +
    • (DatePeriod doesn't warn with custom DateTimeImmutable).
    • +
  • +
  • DBA: +
      +
    • Fixed LMDB driver hanging when attempting to delete a non-existing key.
    • +
  • +
  • FPM: +
      +
    • Fixed zlog message prepend, free on incorrect address.
    • +
    • Fixed possible double free on configuration loading failure.
    • +
  • +
  • GD: +
      +
    • Fixed bug (imagecopyresized() error refers to the wrong argument).
    • +
  • +
  • Intl: +
      +
    • Fixed build for ICU 69.x and onwards.
    • +
  • +
  • OPcache: +
      +
    • Fixed bug (PHP hanging infinitly at 100% cpu when check php syntaxe of a valid file).
    • +
  • +
  • Standard: +
      +
    • Fixed the crypt_sha256/512 api build with clang > 12.
    • +
    • Uses CCRandomGenerateBytes instead of arc4random_buf on macOs.
    • +
  • +
+
+ + + +
+

Version 8.0.21

+ +
  • Core: +
      +
    • Fixed potential use after free in php_binary_init().
    • +
  • +
  • CLI: +
      +
    • Fixed (Intentionally closing std handles no longer possible).
    • +
  • +
  • COM: +
      +
    • Fixed bug (Integer arithmethic with large number variants fails).
    • +
  • +
  • Curl: +
      +
    • Fixed CURLOPT_TLSAUTH_TYPE is not treated as a string option.
    • +
  • +
  • Date: +
      +
    • (DST timezone abbreviation has incorrect offset).
    • +
    • (Weekdays are calculated incorrectly for negative years).
    • +
    • (timezone_open accepts invalid timezone string argument).
    • +
  • +
  • FPM: +
      +
    • (fpm: syslog.ident don't work).
    • +
  • +
  • MBString: +
      +
    • Fixed bug (pcre not ready at mbstring startup).
    • +
  • +
  • ODBC: +
      +
    • Fixed handling of single-key connection strings.
    • +
  • +
  • OpenSSL: +
      +
    • (Several openssl functions ignore the VCWD).
    • +
    • (NULL byte injection in several OpenSSL functions working with certificates).
    • +
  • +
  • PDO_ODBC: +
      +
    • Fixed errorInfo() result on successful PDOStatement->execute().
    • +
    • Fixed handling of single-key connection strings.
    • +
  • +
  • Zip: +
      +
    • Fixed bug (ZipArchive::close deletes zip file without updating stat cache).
    • +
  • +
+
+ + + +
+

Version 8.0.20

+ +
  • CLI: +
      +
    • Fixed bug (CLI closes standard streams too early).
    • +
  • +
  • Core: +
      +
    • Fixed Haiku ZTS builds.
    • +
  • +
  • Date: +
      +
    • Fixed bug (Segmentation fault when converting immutable and mutable DateTime instances created using reflection).
    • +
  • +
  • FPM: +
      +
    • Fixed ACL build check on MacOS.
    • +
    • : php-fpm writes empty fcgi record causing nginx 502.
    • +
  • +
  • Mysqlnd: +
      +
    • : mysqlnd/pdo password buffer overflow. (CVE-2022-31626)
    • +
  • +
  • OPcache: +
      +
    • Fixed bug (ini_get() is optimized out when the option does not exist).
    • +
  • +
  • Pcntl: +
      +
    • Fixed Haiku build.
    • +
  • +
  • Pgsql: +
      +
    • : Uninitialized array in pg_query_params(). (CVE-2022-31625)
    • +
  • +
  • Soap: +
      +
    • Fixed bug (Error on wrong parameter on SoapHeader constructor).
    • +
    • Fixed bug (SoapClient may strip parts of nmtokens).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (iterator_count() may run indefinitely).
    • +
  • +
  • Zip: +
      +
    • Fixed type for index in ZipArchive::replaceFile.
    • +
  • +
+
+ + + +
+

Version 8.0.19

+ +
  • Core: +
      +
    • Fixed bug (Exceptions thrown within a yielded from iterator are not rethrown into the generator).
    • +
  • +
  • Date: +
      +
    • Fixed bug (DatePeriod iterator advances when checking if valid).
    • +
  • +
  • FFI: +
      +
    • Fixed bug (Assigning function pointers to structs in FFI leaks).
    • +
  • +
  • FPM: +
      +
    • (FPM /status reports wrong number of active processe).
    • +
    • (FPM cannot shutdown processes).
    • +
    • Fixed comment in kqueue remove callback log message.
    • +
  • +
  • Iconv: +
      +
    • Fixed bug (ob_end_clean does not reset Content-Encoding header).
    • +
  • +
  • Intl: +
      +
    • Fixed bug (msgfmt_format $values may not support references).
    • +
  • +
  • MySQLi: +
      +
    • Fixed bug (MySQLi uses unsupported format specifier on Windows).
    • +
  • +
  • SPL: +
      +
    • Fixed bug (ArrayIterator may leak when calling __construct()).
    • +
    • Fixed bug (SplFileObject: key() returns wrong value).
    • +
  • +
  • Streams: +
      +
    • Fixed php://temp does not preserve file-position when switched to temporary file.
    • +
  • +
  • zlib: +
      +
    • Fixed bug (ob_end_clean does not reset Content-Encoding header).
    • +
  • +
+
+ + + +
+

Version 8.0.18

+ +
  • Core: +
      +
    • Fixed freeing of internal attribute arguments.
    • +
    • Fixed bug (memory leak of internal function attribute hash).
    • +
    • Fixed bug (ZTS support on Alpine is broken).
    • +
  • +
  • Filter: +
      +
    • Fixed signedness confusion in php_filter_validate_domain().
    • +
  • +
  • Intl: +
      +
    • Fixed bug (Compilation error on cygwin).
    • +
  • +
  • MBString: +
      +
    • Fixed bug (mb_encode_mimeheader: $indent functionality broken).
    • +
  • +
  • MySQLi: +
      +
    • Fixed bug (mysqli_fetch_object creates inaccessible properties).
    • +
  • +
  • Pcntl: +
      +
    • Fixed bug (Compilation error on cygwin).
    • +
  • +
  • PgSQL: +
      +
    • Fixed result_type related stack corruption on LLP64 architectures.
    • +
    • Fixed bug (pg_insert() fails for references).
    • +
  • +
  • Sockets: +
      +
    • Fixed Solaris builds.
    • +
  • +
  • SPL: +
      +
    • Fixed bug (SplFileObject - seek and key with csv file inconsistent).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (Force macOS to use statfs).
    • +
  • +
+
+ + + +
+

Version 8.0.17

+ +
  • Core: +
      +
    • Fixed Haiku ZTS build.
    • +
  • +
  • GD: +
      +
    • Fixed libpng warning when loading interlaced images.
    • +
  • +
  • FPM: +
      +
    • (Unsafe access to fpm scoreboard).
    • +
  • +
  • Iconv: +
      +
    • Fixed bug (ob_clean() only does not set Content-Encoding).
    • +
    • Fixed bug (Unexpected result for iconv_mime_decode).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (NULL pointer dereference in mysqlnd package).
    • +
  • +
  • OPcache: +
      +
    • Fixed bug (Wrong type inference of range() result).
    • +
  • +
  • Reflection: +
      +
    • Fixed bug (ReflectionClass::getConstants() depends on def. order).
    • +
  • +
  • Zlib: +
      +
    • Fixed bug (ob_clean() only does not set Content-Encoding).
    • +
  • +
+
+ + + +
+

Version 8.0.16

+ +
  • Core: +
      +
    • (Attribute instantiation leaves dangling pointer).
    • +
    • Fixed bug (Environment vars may be mangled on Windows).
    • +
  • +
  • FFI: +
      +
    • Fixed bug (FFI::cast() from pointer to array is broken).
    • +
  • +
  • Filter: +
      +
    • Fix #81708: UAF due to php_filter_float() failing for ints.
    • +
  • +
  • FPM: +
      +
    • Fixed memory leak on invalid port.
    • +
  • +
  • MBString: +
      +
    • Fixed bug (mb_send_mail may delimit headers with LF only).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug (MariaDB version prefix 5.5.5- is not stripped).
    • +
  • +
  • Sockets: +
      +
    • Fixed ext/sockets build on Haiku.
    • +
    • Fixed bug (sockets extension compilation errors).
    • +
  • +
  • Standard: +
      +
    • Fixed bug (mails are sent even if failure to log throws exception).
    • +
  • +
+
+ + + +
+

Version 8.0.15

+ +
  • Core: +
      +
    • (GCC-11 silently ignores -R).
    • +
    • (cached_chunks are not counted to real_size on shutdown).
    • +
  • +
  • Filter: +
      +
    • Fixed FILTER_FLAG_NO_RES_RANGE flag.
    • +
  • +
  • Hash: +
      +
    • Fixed bug (Incorrect return types for hash() and hash_hmac()).
    • +
    • Fixed bug (Inconsistent argument name in hash_hmac_file and hash_file).
    • +
  • +
  • MySQLnd: +
      +
    • Fixed bug where large bigints may be truncated.
    • +
  • +
  • OCI8: +
      +
    • Fixed bug (php_oci_cleanup_global_handles segfaults at second call).
    • +
  • +
  • OPcache: +
      +
    • (Tracing JIT crashes on reattaching).
    • +
  • +
  • PDO_PGSQL: +
      +
    • Fixed error message allocation of PDO PgSQL.
    • +
  • +
  • Sockets: +
      +
    • Avoid void* arithmetic in sockets/multicast.c on NetBSD.
    • +
  • +
  • Spl: +
      +
    • (SplFileObject::seek broken with CSV flags).
    • +
  • +
+
+ + + +
+

Version 8.0.14

+ +
  • Core: +
      +
    • (Stringable not implicitly declared if __toString() came from a trait).
    • +
    • (Fatal Error not properly logged in particular cases).
    • +
    • (Error on use static:: in __сallStatic() wrapped to Closure::fromCallable()).
    • +
    • (::class with dynamic class name may yield wrong line number).
    • +
  • +
  • FPM: +
      +
    • (Future possibility for heap overflow in FPM zlog).
    • +
  • +
  • GD: +
      +
    • (libpng warning from imagecreatefromstring).
    • +
  • +
  • IMAP: +
      +
    • (imap_(un)delete accept sequences, not single numbers).
    • +
  • +
  • OpenSSL: +
      +
    • (./configure: detecting RAND_egd).
    • +
  • +
  • PCRE: +
      +
    • (Out of bounds in php_pcre_replace_impl).
    • +
  • +
  • SPL: +
      +
    • (MultipleIterator Segmentation fault w/ SimpleXMLElement attached).
    • +
  • +
  • Standard: +
      +
    • (dns_get_record fails on FreeBSD for missing type).
    • +
    • (stream_get_contents() may unnecessarily overallocate).
    • +
  • +
+
+ + + +
+

Version 8.0.13

+ +
  • Core: +
      +
    • (Header injection via default_mimetype / default_charset).
    • +
  • +
  • Date: +
      +
    • (Interval serialization regression since 7.3.14 / 7.4.2).
    • +
  • +
  • DBA: +
      +
    • (TokyoCabinet driver leaks memory).
    • +
  • +
  • MBString: +
      +
    • (mbstring may use pointer from some previous request).
    • +
  • +
  • Opcache: +
      +
    • (Unexpected behavior with arrays and JIT).
    • +
  • +
  • PCRE: +
      +
    • (PCRE2 10.35 JIT performance regression).
    • +
  • +
  • XML: +
      +
    • (special character is breaking the path in xml function). (CVE-2021-21707)
    • +
  • +
  • XMLReader: +
      +
    • (XMLReader::getParserProperty may throw with a valid property).
    • +
  • +
+
+ + + +
+

Version 8.0.12

+ +
  • CLI: +
      +
    • (Server logs incorrect request method).
    • +
  • +
  • Core: +
      +
    • (Observer current_observed_frame may point to an old (overwritten) frame).
    • +
    • (Observer may not be initialized properly).
    • +
  • +
  • DOM: +
      +
    • (DOMElement::setIdAttribute() called twice may remove ID).
    • +
  • +
  • FFI: +
      +
    • ("TYPE *" shows unhelpful message when type is not defined).
    • +
  • +
  • FPM: +
      +
    • (PHP-FPM oob R/W in root process leading to privilege escalation) (CVE-2021-21703).
    • +
  • +
  • Fileinfo: +
      +
    • (High memory usage during encoding detection).
    • +
  • +
  • Filter: +
      +
    • (FILTER_FLAG_IPV6/FILTER_FLAG_NO_PRIV|RES_RANGE failing).
    • +
  • +
  • Opcache: +
      +
    • (Cannot support large linux major/minor device number when read /proc/self/maps).
    • +
  • +
  • Reflection: +
      +
    • ReflectionAttribute is no longer final.
    • +
  • +
  • SPL: +
      +
    • (Recursive SplFixedArray::setSize() may cause double-free).
    • +
    • (LimitIterator + SplFileObject regression in 8.0.1).
    • +
  • +
  • Standard: +
      +
    • (Change Error message of sprintf/printf for missing/typo position specifier).
    • +
  • +
  • Streams: +
      +
    • (stream_isatty emits warning with attached stream wrapper).
    • +
  • +
  • XML: +
      +
    • (XML_OPTION_SKIP_WHITE strips embedded whitespace).
    • +
  • +
  • Zip: +
      +
    • (ZipArchive::extractTo() may leak memory).
    • +
    • (Dirname ending in colon unzips to wrong dir).
    • +
  • +
+
+ + + +
+

Version 8.0.11

+ +
  • Core: +
      +
    • (Stream position after stream filter removed).
    • +
    • (Non-seekable streams don't update position after write).
    • +
    • (Integer Overflow when concatenating strings).
    • +
  • +
  • GD: +
      +
    • (During resize gdImageCopyResampled cause colors change).
    • +
  • +
  • Opcache: +
      +
    • (segfault with preloading and statically bound closure).
    • +
  • +
  • Shmop: +
      +
    • (shmop_open won't attach and causes php to crash).
    • +
  • +
  • Standard: +
      +
    • (disk_total_space does not work with relative paths).
    • +
    • (Unterminated string in dns_get_record() results).
    • +
  • +
  • SysVMsg: +
      +
    • (Heap Overflow in msg_send).
    • +
  • +
  • XML: +
      +
    • (xml_parse may fail, but has no error code).
    • +
  • +
  • Zip: +
      +
    • (ZipArchive::getStream doesn't use setPassword).
    • +
    • (ZipArchive::extractTo extracts outside of destination).
    • +
  • +
+
+ + +

Version 8.0.10

@@ -60,7 +10608,7 @@
  • Phar:
      -
    • : Symlinks are followed when creating PHAR archive (cmb)
    • +
    • : Symlinks are followed when creating PHAR archive
  • Shmop:
      @@ -407,7 +10955,7 @@
  • Phar:
      -
    • (Unclear error message wrt. __halt_compiler() w/o semicolon) (cmb)
    • +
    • (Unclear error message wrt. __halt_compiler() w/o semicolon)
    • (Phar does not mark UTF-8 filenames in ZIP archives).
    • (Phar cannot compress large archives).
  • diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..2d6e571924 --- /dev/null +++ b/Makefile @@ -0,0 +1,41 @@ +.EXPORT_ALL_VARIABLES: + +HTTP_HOST:=localhost:8080 +CORES?=$(shell (nproc || sysctl -n hw.ncpu) 2> /dev/null) + +.PHONY: it +it: coding-standards tests ## Runs all the targets + +.PHONY: code-coverage +code-coverage: vendor ## Collects code coverage from running unit tests with phpunit/phpunit + vendor/bin/phpunit --configuration=tests/phpunit.xml --coverage-text --testsuite=unit + +.PHONY: coding-standards +coding-standards: vendor ## Fixes code style issues with friendsofphp/php-cs-fixer + vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php --diff --show-progress=dots --verbose + +.PHONY: help +help: ## Displays this list of targets with descriptions + @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[32m%-30s\033[0m %s\n", $$1, $$2}' + +.PHONY: tests +tests: vendor ## Runs unit and end-to-end tests with phpunit/phpunit + vendor/bin/phpunit --configuration=tests/phpunit.xml --testsuite=unit + rm -rf tests/server.log + tests/server start; + vendor/bin/phpunit --configuration=tests/phpunit.xml --testsuite=end-to-end; + tests/server stop + +tests_visual: + tests/server start; + npx playwright test --workers=$(CORES) + tests/server stop + +tests_update_snapshots: + tests/server start; + npx playwright test --update-snapshots + tests/server stop + +vendor: composer.json composer.lock + composer validate --strict + composer install --no-interaction --no-progress diff --git a/README.md b/README.md index 7e82264575..39b7c4c47b 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,28 @@ +[![Integrate](https://github.com/php/web-php/actions/workflows/integrate.yaml/badge.svg)](https://github.com/php/web-php/actions/workflows/integrate.yaml) + ## Local development -This is the git repo for the official www.php.net website. +This is the git repository for the official www.php.net website. + +To setup a local mirror of the website, clone the repository: + +``` +git clone https://github.com/php/web-php.git +``` -To setup a local mirror of the website: +Change into `web-php`: - $ git clone https://github.com/php/web-php.git - $ cd web-php - $ php -S localhost:8080 .router.php +``` +cd web-php +``` +Start the built-in web server: -This repo includes most (generated) files that are required for normal +``` +php -S localhost:8080 .router.php +``` + +This repository includes most (generated) files that are required for normal operation of this website, such as - News & events data @@ -22,5 +35,9 @@ https://wiki.php.net/web/mirror ## Code requirements -Code must function on a vanilla PHP 7.2 installation. +Code must function on a vanilla PHP 8.2 installation. Please keep this in mind before filing a pull request. + +## Contributing + +Please have a look at [`CONTRIBUTING.md`](.github/CONTRIBUTING.md). diff --git a/archive/1998.php b/archive/1998.php index 8f1febfdcc..0a8587cb2a 100644 --- a/archive/1998.php +++ b/archive/1998.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'archive/1998.php'; include_once __DIR__ . '/../include/prepend.inc'; news_archive_sidebar(); -site_header("News Archive - 1998", array("cache" => true)); +site_header("News Archive - 1998", ["cache" => true]); ?>

    News Archive - 1998

    @@ -91,4 +91,4 @@ Report or check on bugs in the PHP 3 Bug Database.

    - true, 'sidebar' => $SIDEBAR_DATA)); + true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/1999.php b/archive/1999.php index 0a8ff6e8f6..dd2e53baf1 100644 --- a/archive/1999.php +++ b/archive/1999.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'archive/1999.php'; include_once __DIR__ . '/../include/prepend.inc'; news_archive_sidebar(); -site_header("News Archive - 1999", array("cache" => true)); +site_header("News Archive - 1999", ["cache" => true]); ?>

    News Archive - 1999

    @@ -117,4 +117,4 @@ information!

    - true, 'sidebar' => $SIDEBAR_DATA)); + true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2000.php b/archive/2000.php index 77eccbea79..90aac82375 100644 --- a/archive/2000.php +++ b/archive/2000.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'archive/2000.php'; include_once __DIR__ . '/../include/prepend.inc'; news_archive_sidebar(); -site_header("News Archive - 2000", array("cache" => true)); +site_header("News Archive - 2000", ["cache" => true]); ?>

    News Archive - 2000

    @@ -165,4 +165,4 @@ functions for gd make this release a must for every user of PHP. The ChangeLog provides a complete list of changes.

    - true, 'sidebar' => $SIDEBAR_DATA)); + true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2001.php b/archive/2001.php index 69cbf2237a..c0654a2169 100644 --- a/archive/2001.php +++ b/archive/2001.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'archive/2001.php'; include_once __DIR__ . '/../include/prepend.inc'; news_archive_sidebar(); -site_header("News Archive - 2001", array("cache" => true)); +site_header("News Archive - 2001", ["cache" => true]); ?>

    News Archive - 2001

    @@ -314,4 +314,4 @@ were discovered in PHP 4.0.4.

    - true, 'sidebar' => $SIDEBAR_DATA)); + true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2002.php b/archive/2002.php index 66830d32f9..25b7c01bee 100644 --- a/archive/2002.php +++ b/archive/2002.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'archive/2002.php'; include_once __DIR__ . '/../include/prepend.inc'; news_archive_sidebar(); -site_header("News Archive - 2002", array("cache" => true)); +site_header("News Archive - 2002", ["cache" => true]); ?>

    News Archive - 2002

    @@ -157,7 +157,7 @@ browser specific magic you can now use our Search Bar from the major browsers. Please help us to test this new service, and provide feedback via - the bug system (categorize your bug + the bug system (categorize your bug as a PHP.net website bug please).

    @@ -456,7 +456,7 @@ various sites that make up the PHP.net family of sites. Did you know you can browse a hyperlinked version of the PHP source code at lxr.php.net? View the archives of all of the - mailing lists at news.php.net? See what else + mailing lists at news-web.php.net? See what else you've been missing.

    @@ -601,4 +601,4 @@
  • Conference photos
  • - true, 'sidebar' => $SIDEBAR_DATA)); + true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2003.php b/archive/2003.php index 8a086ab9b0..fdc9091454 100644 --- a/archive/2003.php +++ b/archive/2003.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'archive/2003.php'; include_once __DIR__ . '/../include/prepend.inc'; news_archive_sidebar(); -site_header("News Archive - 2003", array("cache" => true)); +site_header("News Archive - 2003", ["cache" => true]); ?>

    News Archive - 2003

    @@ -166,7 +166,7 @@ You can autocomplete the name with the space key and navigate in the dropdown with the up and down cursor keys. We welcome feedback on this feature at the webmasters email address, but - please submit any bugs you find in the + please submit any bugs you find in the bug system classifying them as a "PHP.net website problem" and providing as much information as possible (OS, Browser version, Javascript errors, etc..).

    @@ -551,7 +551,7 @@ Note: This is a beta version. It should not be used in production or even semi-production web sites. There are known bugs in it, and in addition, some of the features may change (based on feedback). We - encourage you to download and play with it (and report + encourage you to download and play with it (and report bugs if you find any!), but please do not replace your production installations of PHP 4 at this time.

    @@ -795,4 +795,4 @@ of beta-quality.

    - true, 'sidebar' => $SIDEBAR_DATA)); + true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2004.php b/archive/2004.php index ba7a7bb5bb..9d65257ec6 100644 --- a/archive/2004.php +++ b/archive/2004.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'archive/2004.php'; include_once __DIR__ . '/../include/prepend.inc'; news_archive_sidebar(); -site_header("News Archive - 2004", array("cache" => true)); +site_header("News Archive - 2004", ["cache" => true]); ?>

    News Archive - 2004

    @@ -349,7 +349,6 @@ functions starting with the letters you typed in. You can browse the list
    -

    International PHP Conference 2004

    [18-Jun-2004] @@ -580,7 +579,7 @@ functions starting with the letters you typed in. You can browse the list The Spanish PHP mailing list was relocated to our list server. If you would like to subscribe to the list, you can do it via our mailing lists page. To read - the archives, please see our + the archives, please see our news server.

    @@ -654,4 +653,4 @@ functions starting with the letters you typed in. You can browse the list one of a kind conference!

    - true, 'sidebar' => $SIDEBAR_DATA)); + true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2005.php b/archive/2005.php index 3fc7b875ea..74d2736f5f 100644 --- a/archive/2005.php +++ b/archive/2005.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'archive/2005.php'; include_once __DIR__ . '/../include/prepend.inc'; news_archive_sidebar(); -site_header("News Archive - 2005", array("cache" => true)); +site_header("News Archive - 2005", ["cache" => true]); ?>

    News Archive - 2005

    @@ -536,4 +536,4 @@ Congratulations to us all!

    - true, 'sidebar' => $SIDEBAR_DATA)); + true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2006.php b/archive/2006.php index e32887df5a..61c43adb63 100644 --- a/archive/2006.php +++ b/archive/2006.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'archive/2006.php'; include_once __DIR__ . '/../include/prepend.inc'; news_archive_sidebar(); -site_header("News Archive - 2006", array("cache" => true)); +site_header("News Archive - 2006", ["cache" => true]); ?>

    News Archive - 2006

    @@ -466,4 +466,4 @@ and the full list of changes is available in the PHP 5 ChangeLog.

    - true, 'sidebar' => $SIDEBAR_DATA)); + true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2007.php b/archive/2007.php index 1b3bc06241..cfa1f4859d 100644 --- a/archive/2007.php +++ b/archive/2007.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'archive/2007.php'; include_once __DIR__ . '/../include/prepend.inc'; news_archive_sidebar(); -site_header("News Archive - 2007", array("cache" => true)); +site_header("News Archive - 2007", ["cache" => true]); ?>

    News Archive - 2007

    @@ -64,9 +64,9 @@ The PHP documentation team is pleased to announce the initial release of the new build system that generates the PHP Manual. Written in PHP, PhD ([PH]P based [D]ocBook renderer) builds are now available for -viewing at docs.php.net. Everyone is +viewing at php.net. Everyone is encouraged to test and use this system so -that bugs will be found and squashed. +that bugs will be found and squashed.

    @@ -639,7 +639,7 @@ functionality for PHP developers, including detailed error information,

  • ... and more to come!
  • -

    Please help us improve the documentation by submitting bug reports, and adding notes to undocumented functions.

    +

    Please help us improve the documentation by submitting bug reports, and adding notes to undocumented functions.

    @@ -674,4 +674,4 @@ functionality for PHP developers, including detailed error information, - true, 'sidebar' => $SIDEBAR_DATA)); + true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2007.xml b/archive/2007.xml index cadb557c99..2051f28e8b 100644 --- a/archive/2007.xml +++ b/archive/2007.xml @@ -56,9 +56,9 @@ Visit the website for m The PHP documentation team is pleased to announce the initial release of the new build system that generates the PHP Manual. Written in PHP, PhD ([PH]P based [D]ocBook renderer) builds are now available for -viewing at docs.php.net. Everyone is +viewing at php.net. Everyone is encouraged to test and use this system so -that bugs will be found and squashed. +that bugs will be found and squashed.

    Once the new build system is stable, expect additional changes to the PHP @@ -867,7 +867,7 @@ contributors.

  • updated function version information and capture system (fewer "no version information, might be only in CVS" messages)
  • ... and more to come!
  • -

    Please help us improve the documentation by submitting bug reports, and adding notes to undocumented functions.

    +

    Please help us improve the documentation by submitting bug reports, and adding notes to undocumented functions.

    diff --git a/archive/2008.php b/archive/2008.php index 7a270125b5..b00588724e 100644 --- a/archive/2008.php +++ b/archive/2008.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'archive/2008.php'; include_once __DIR__ . '/../include/prepend.inc'; news_archive_sidebar(); -site_header("News Archive - 2008", array("cache" => true)); +site_header("News Archive - 2008", ["cache" => true]); ?>

    News Archive - 2008

    @@ -138,7 +138,7 @@ of the upcoming PHP 5.3.0 minor version update of PHP. Several new features have already been documented in the official documentation, - others are listed on the wiki + others are listed on the wiki in preparation of getting documented. It is imperative that more people join the effort to complete the documentation for PHP 5.3.0. Please also review the NEWS file.

    @@ -148,14 +148,14 @@ necessary backwards compatibility breaks are noted in the documentation. Please report any findings to the QA mailinglist - or the bug tracker.

    + or the bug tracker.

    There have been a great number of other additions and improvements since the last alpha, but here is a short overview of the most important changes:

    • Namespaces (documentation has been updated to the current state)
    • - Rounding behavior + Rounding behavior
    • ext/msql has been removed, while ext/ereg will now raise E_DEPRECATED notices
    • ext/mhash has been replaced by ext/hash but full BC is maintained
    • @@ -165,7 +165,7 @@

    Several under the hood changes also require in depth testing with existing applications to ensure that any backwards compatibility breaks are minimized.

    -

    The current release plan expects +

    The current release plan expects a stable release sometime around the end of Q1 2009.

    @@ -442,33 +442,33 @@
    [01-Aug-2008]
    -

    The PHP development team is proud to announce the first alpha release of the upcoming minor version update of PHP. Windows binaries will be available starting with alpha2 (intermediate snapshots available at snaps.php.net). The new version PHP 5.3 is expected to improve stability and performance as well as add new language syntax and extensions. Several new features have already been documented in the official documentation, others are listed on the wiki in preparation of getting documented. Please also review the NEWS file.

    +

    The PHP development team is proud to announce the first alpha release of the upcoming minor version update of PHP. Windows binaries will be available starting with alpha2 (intermediate snapshots available at snaps.php.net). The new version PHP 5.3 is expected to improve stability and performance as well as add new language syntax and extensions. Several new features have already been documented in the official documentation, others are listed on the wiki in preparation of getting documented. Please also review the NEWS file.

    THIS IS A DEVELOPMENT PREVIEW - DO NOT USE IT IN PRODUCTION!

    The purpose of this alpha release is to encourage users to not only actively participate in identifying bugs, but also in ensuring that all new features or necessary backwards compatibility breaks are noted in the documentation. Please report any findings to the QA mailinglist - or the bug tracker.

    + or the bug tracker.

    There have been a great number of other additions and improvements, but here is a short overview of the most important changes:

    Several under the hood changes also require in depth testing with existing applications to ensure that any backwards compatibility breaks are minimized. This is especially important for users that require the undocumented Zend engine multibyte support.

    -

    The current release plan states that there will be alpha/beta/RC releases in 2-3 week intervals with an expected stable release of PHP 5.3 between mid September and mid October of 2008.

    +

    The current release plan states that there will be alpha/beta/RC releases in 2-3 week intervals with an expected stable release of PHP 5.3 between mid September and mid October of 2008.

    @@ -534,7 +534,7 @@

    The upcomming PHP5.3 release introduces - several major features + several major features such as namespaces, closures, late static bindings, internationalization functions, INI sections, and Phar among others. @@ -829,7 +829,7 @@

    Once again we are glad to announce that we have been accepted to be a Google Summer of Code project. See our program for this year's GSoC.

    -

    We would like to take this opportunity to say thanks to Google Inc. for this privilege to participate once again, and would like to invite everyone to look at our list of ideas: http://wiki.php.net/gsoc/2008. Students are of course more than welcome to come up with their own ideas for their proposals and we will consider each and every application that we will receive.

    +

    We would like to take this opportunity to say thanks to Google Inc. for this privilege to participate once again, and would like to invite everyone to look at our list of ideas: https://wiki.php.net/gsoc/2008. Students are of course more than welcome to come up with their own ideas for their proposals and we will consider each and every application that we will receive.

    So once again, thanks to everyone who is involved in this magnificent journey and we hope to see many of you great students and open source passionate join us in our most enjoyable Google Summer of Code projects.

    @@ -950,4 +950,4 @@ - true, 'sidebar' => $SIDEBAR_DATA)); + true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2008.xml b/archive/2008.xml index b6da5ff2ed..ff76a38703 100644 --- a/archive/2008.xml +++ b/archive/2008.xml @@ -131,7 +131,7 @@

    The PHP development team is proud to announce the third alpha release of the upcoming PHP 5.3.0 minor version update of PHP. Several new features have already been documented in the official documentation, - others are listed on the wiki + others are listed on the wiki in preparation of getting documented. It is imperative that more people join the effort to complete the documentation for PHP 5.3.0. Please also review the NEWS file.

    @@ -140,13 +140,13 @@ participate in identifying bugs, but also in ensuring that all new features or necessary backwards compatibility breaks are noted in the documentation. Please report any findings to the QA mailinglist - or the bug tracker.

    + or the bug tracker.

    There have been a great number of other additions and improvements since the last alpha, but here is a short overview of the most important changes:

    • Namespaces (documentation has been updated to the current state)
    • - Rounding behavior + Rounding behavior
    • ext/msql has been removed, while ext/ereg will now raise E_DEPRECATED notices
    • ext/mhash has been replaced by ext/hash but full BC is maintained
    • @@ -155,7 +155,7 @@

    Several under the hood changes also require in depth testing with existing applications to ensure that any backwards compatibility breaks are minimized.

    -

    The current release plan expects +

    The current release plan expects a stable release sometime around the end of Q1 2009.

    @@ -463,28 +463,28 @@
    -

    The PHP development team is proud to announce the first alpha release of the upcoming minor version update of PHP. Windows binaries will be available starting with alpha2 (intermediate snapshots available at snaps.php.net). The new version PHP 5.3 is expected to improve stability and performance as well as add new language syntax and extensions. Several new features have already been documented in the official documentation, others are listed on the wiki in preparation of getting documented. Please also review the NEWS file.

    +

    The PHP development team is proud to announce the first alpha release of the upcoming minor version update of PHP. Windows binaries will be available starting with alpha2 (intermediate snapshots available at snaps.php.net). The new version PHP 5.3 is expected to improve stability and performance as well as add new language syntax and extensions. Several new features have already been documented in the official documentation, others are listed on the wiki in preparation of getting documented. Please also review the NEWS file.

    THIS IS A DEVELOPMENT PREVIEW - DO NOT USE IT IN PRODUCTION!

    The purpose of this alpha release is to encourage users to not only actively participate in identifying bugs, but also in ensuring that all new features or necessary backwards compatibility breaks are noted in the documentation. Please report any findings to the QA mailinglist - or the bug tracker.

    + or the bug tracker.

    There have been a great number of other additions and improvements, but here is a short overview of the most important changes:

    Several under the hood changes also require in depth testing with existing applications to ensure that any backwards compatibility breaks are minimized. This is especially important for users that require the undocumented Zend engine multibyte support.

    -

    The current release plan states that there will be alpha/beta/RC releases in 2-3 week intervals with an expected stable release of PHP 5.3 between mid September and mid October of 2008.

    +

    The current release plan states that there will be alpha/beta/RC releases in 2-3 week intervals with an expected stable release of PHP 5.3 between mid September and mid October of 2008.

    @@ -544,7 +544,7 @@

    The upcomming PHP5.3 release introduces - several major features + several major features such as namespaces, closures, late static bindings, internationalization functions, INI sections, and Phar among others. @@ -921,7 +921,7 @@ and join the world of blu

    Once again we are glad to announce that we have been accepted to be a Google Summer of Code project. See our program for this year's GSoC.

    -

    We would like to take this opportunity to say thanks to Google Inc. for this privilege to participate once again, and would like to invite everyone to look at our list of ideas: http://wiki.php.net/gsoc/2008. Students are of course more than welcome to come up with their own ideas for their proposals and we will consider each and every application that we will receive.

    +

    We would like to take this opportunity to say thanks to Google Inc. for this privilege to participate once again, and would like to invite everyone to look at our list of ideas: https://wiki.php.net/gsoc/2008. Students are of course more than welcome to come up with their own ideas for their proposals and we will consider each and every application that we will receive.

    So once again, thanks to everyone who is involved in this magnificent journey and we hope to see many of you great students and open source passionate join us in our most enjoyable Google Summer of Code projects.

    diff --git a/archive/2009.php b/archive/2009.php index 58ad5be5cb..26a252594e 100644 --- a/archive/2009.php +++ b/archive/2009.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'archive/2009.php'; include_once __DIR__ . '/../include/prepend.inc'; news_archive_sidebar(); -site_header("News Archive - 2009", array("cache" => true)); +site_header("News Archive - 2009", ["cache" => true]); ?>

    News Archive - 2009

    @@ -260,7 +260,7 @@ or TestFest mugs have been picked at random from the people that contributed the 887 tests - during the 2009 PHP TestFest. + during the 2009 PHP TestFest.

    Winners of elePHPhants

      @@ -345,13 +345,13 @@ The migration from CVS to Subversion is complete. The web interface is at svn.php.net. You can read about it at php.net/svn.php, - wiki.php.net/vcs/svnfaq. The + wiki.php.net/vcs/svnfaq. The URL to feed to your svn client is http://svn.php.net/repository.

      There is also a github mirror. Please use that instead of trying to do a full git clone from the svn repository. See - the instructions at wiki.php.net/vcs/svnfaq#git + the instructions at wiki.php.net/vcs/svnfaq#git

      Many thanks to Gwynne who did the bulk of the work and also all the other folks who pitched in. @@ -371,14 +371,14 @@

      So finally we are at the end of the - 2009 PHP TestFest. + 2009 PHP TestFest. It has been an outstanding success with the coverage increasing by about 2.5% overall and 887 new tests contributed in the TestFest SVN repository of which 637 have already been added to PHP CVS.

      - User groups from all + User groups from all over the world have worked hard to make this happen and we thank each and every one of you for your contribution to PHP! @@ -565,7 +565,7 @@

      PHP 5.2.10RC2 and PHP 5.3.0RC3 Release Announcements

      [12-Jun-2009] -

      The PHP development team is proud to announce the second release candidate of PHP 5.2.10 (PHP 5.2.10RC2) and the third release candidate of PHP 5.3.0 (PHP 5.3.0RC3). These RCs focuses on bug fixes and stability improvements, and we hope only minimal changes are required for the next candidate or final stable releases.

      PHP 5.2.10 is a pure maintenance release for providing bugfixes and stability updates. PHP 5.3.0 is a newly developed version of PHP featuring long-awaited features like namespaces, late static binding, closures and much more.

      Please download and test these release candidates, and report any issues found. Downloads and further information is available at qa.php.net. See also the work in progress 5.3 upgrade guide.

      +

      The PHP development team is proud to announce the second release candidate of PHP 5.2.10 (PHP 5.2.10RC2) and the third release candidate of PHP 5.3.0 (PHP 5.3.0RC3). These RCs focuses on bug fixes and stability improvements, and we hope only minimal changes are required for the next candidate or final stable releases.

      PHP 5.2.10 is a pure maintenance release for providing bugfixes and stability updates. PHP 5.3.0 is a newly developed version of PHP featuring long-awaited features like namespaces, late static binding, closures and much more.

      Please download and test these release candidates, and report any issues found. Downloads and further information is available at qa.php.net. See also the work in progress 5.3 upgrade guide.

      @@ -696,7 +696,7 @@

      Please download and test this release candidate, and report any issues found. Downloads and further information is available at qa.php.net. - See also the work in progress 5.3 upgrade guide. + See also the work in progress 5.3 upgrade guide.

      @@ -806,7 +806,7 @@ at this years GSoC.

      - We invite everyone to look at the list of ideas for + We invite everyone to look at the list of ideas for this years GSoC, and get involved. Students are welcome to propose their own ideas, and we will consider all applications that are received before the April 3rd deadline. So, thanks to everyone involved and we look forward to seeing many students join us on this great adventure! @@ -829,7 +829,7 @@

    • Support for namespaces
    • Under the hood performance improvements
    • Late static binding
    • -
    • Lambda functions and closures
    • +
    • Lambda functions and closures
    • Syntax additions: NOWDOC, limited GOTO, @@ -965,4 +965,4 @@ - true, 'sidebar' => $SIDEBAR_DATA)); + true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2010.php b/archive/2010.php index 6df2bb8257..25c908af01 100644 --- a/archive/2010.php +++ b/archive/2010.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'archive/2010.php'; include_once __DIR__ . '/../include/prepend.inc'; news_archive_sidebar(); -site_header("News Archive - 2010", array("cache" => true)); +site_header("News Archive - 2010", ["cache" => true]); ?>

      News Archive - 2010

      @@ -520,7 +520,7 @@ public function Bar() {
      tools as well as screencasts showing those build tools in action.

      - Please visit the TestFest + Please visit the TestFest 2010 wiki page for all the details on events being organized in your area, or find out how you can organize your own event.

      @@ -765,4 +765,4 @@ public function Bar() {
      - true, 'sidebar' => $SIDEBAR_DATA)); + true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2011.php b/archive/2011.php index 7a9183d428..d3606d7bc6 100644 --- a/archive/2011.php +++ b/archive/2011.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'archive/2011.php'; include_once __DIR__ . '/../include/prepend.inc'; news_archive_sidebar(); -site_header("News Archive - 2011", array("cache" => true)); +site_header("News Archive - 2011", ["cache" => true]); ?>

      News Archive - 2011

      @@ -1013,4 +1013,4 @@ traits, best-practices and success cases related to quality, revision - true, 'sidebar' => $SIDEBAR_DATA)); + true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2012.php b/archive/2012.php index 737ff87ad5..2f72ff9670 100644 --- a/archive/2012.php +++ b/archive/2012.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'archive/2012.php'; include_once __DIR__ . '/../include/prepend.inc'; news_archive_sidebar(); -site_header("News Archive - 2012", array("cache" => true)); +site_header("News Archive - 2012", ["cache" => true]); ?>

      News Archive - 2012

      @@ -607,7 +607,7 @@ encouraged to upgrade to PHP 5.4.4 or PHP 5.3.14.

      The release fixes multiple security issues: A weakness in the DES - implementation of crypt and a + implementation of crypt and a heap overflow issue in the phar extension

      PHP 5.4.4 and PHP 5.3.14 fixes over 30 bugs. Please note that the @@ -918,7 +918,7 @@ classes in multiple threads.

      Some of the key new features include: traits, - a shortened array syntax, + a shortened array syntax, a built-in webserver for testing purposes and more. PHP 5.4.0 significantly improves performance, memory footprint and fixes over @@ -1064,4 +1064,4 @@ classes in multiple threads. - true, 'sidebar' => $SIDEBAR_DATA)); + true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2013.php b/archive/2013.php index c4423cc5bc..6a780564e1 100644 --- a/archive/2013.php +++ b/archive/2013.php @@ -2,9 +2,8 @@ $_SERVER['BASE_PAGE'] = 'archive/2013.php'; include_once __DIR__ . '/../include/prepend.inc'; -include_once __DIR__ . '/../include/pregen-news.inc'; news_archive_sidebar(); -site_header("News Archive - 2013", array("cache" => true)); +site_header("News Archive - 2013", ["cache" => true]); ?>

      News Archive - 2013

      @@ -88,7 +87,7 @@ Bootstrap for our theme base.

      To provide valuable feedback, you can use the 'Feedback' widget on the side of the page (not visible - on smartphones) and to report bugs, you can make use of the bugs.php.net + on smartphones) and to report bugs, you can make use of the bugs.php.net tracker. Despite our extensive multi-device/multi-browser testing, we may have missed something. So, if you spot any issues please do get in touch.

      @@ -1485,4 +1484,4 @@ function declaration.
    • true, 'sidebar' => $SIDEBAR_DATA)); +site_footer(['elephpants' => true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2014.php b/archive/2014.php index bca4d64657..6dc4f4f8cb 100644 --- a/archive/2014.php +++ b/archive/2014.php @@ -2,9 +2,8 @@ $_SERVER['BASE_PAGE'] = 'archive/2014.php'; include_once __DIR__ . '/../include/prepend.inc'; -include_once __DIR__ . '/../include/pregen-news.inc'; news_archive_sidebar(); -site_header("News Archive - 2014", array("cache" => true)); +site_header("News Archive - 2014", ["cache" => true]); ?>

      News Archive - 2014

      @@ -1197,7 +1196,7 @@

      For more information about the new features you can check out the work-in-progress - documentation + documentation or you can read the full list of changes in the NEWS file contained in the release archive. @@ -1396,7 +1395,7 @@ THIS IS A DEVELOPMENT PREVIEW - DO NOT USE IT IN PRODUCTION!

      For more information about the new features you can check out the work-in-progress - documentation + documentation or you can read the full list of changes in the NEWS file contained in the release archive. @@ -1446,7 +1445,7 @@

    For more information about the new features you can check out the work-in-progress - documentation + documentation or you can read the full list of changes in the NEWS file contained in the release archive. @@ -1541,7 +1540,7 @@

    For more information about the new features you can check out the work-in-progress - documentation + documentation or you can read the full list of changes in the NEWS file contained in the release archive. @@ -1732,7 +1731,7 @@

    For more information about the new features you can check out the work-in-progress - documentation + documentation or you can read the full list of changes in the NEWS file contained in the release archive. @@ -1805,7 +1804,7 @@

    For more information about the new features you can check out the work-in-progress - documentation + documentation or you can read the full list of changes in the NEWS file contained in the release archive. @@ -1953,7 +1952,7 @@

    For more information about the new features you can check out the work-in-progress - documentation + documentation or you can read the full list of changes in the NEWS file contained in the release archive. @@ -2094,4 +2093,4 @@ \(.*\)<\/a>//g */ -site_footer(array('elephpants' => true, 'sidebar' => $SIDEBAR_DATA)); +site_footer(['elephpants' => true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2015.php b/archive/2015.php index fe69c371d7..b71a865e4b 100644 --- a/archive/2015.php +++ b/archive/2015.php @@ -1,11 +1,11 @@ true)); ?>

    News Archive - 2015

    @@ -18,7 +18,7 @@ getNewsByYear(2015), ["conferences", "cfp", "frontpage", "nofrontpage"], 500); /* %s/\(.*\)<\/a>//g */ -site_footer(array('elephpants' => true, 'sidebar' => $SIDEBAR_DATA)); +site_footer(['elephpants' => true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2016.php b/archive/2016.php index 8625a30e7a..228f0ea9a2 100644 --- a/archive/2016.php +++ b/archive/2016.php @@ -1,11 +1,11 @@ true)); ?>

    News Archive - 2016

    @@ -18,7 +18,7 @@ getNewsByYear(2016), ["conferences", "cfp", "frontpage", "nofrontpage"], 500); /* %s/
    \(.*\)<\/a>//g */ -site_footer(array('elephpants' => true, 'sidebar' => $SIDEBAR_DATA)); +site_footer(['elephpants' => true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2017.php b/archive/2017.php index cba9da8e3e..26e7b5a400 100644 --- a/archive/2017.php +++ b/archive/2017.php @@ -1,11 +1,11 @@ true)); ?>

    News Archive - 2017

    @@ -18,7 +18,7 @@ getNewsByYear(2017), null, 500); /* %s/
    \(.*\)<\/a>//g */ -site_footer(array('elephpants' => true, 'sidebar' => $SIDEBAR_DATA)); +site_footer(['elephpants' => true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2018.php b/archive/2018.php index b1723c0fea..1db8020b7b 100644 --- a/archive/2018.php +++ b/archive/2018.php @@ -1,11 +1,11 @@ true)); ?>

    News Archive - 2018

    @@ -18,7 +18,7 @@ getNewsByYear(2018), null, 500); /* %s/
    \(.*\)<\/a>//g */ -site_footer(array('elephpants' => true, 'sidebar' => $SIDEBAR_DATA)); +site_footer(['elephpants' => true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2019.php b/archive/2019.php index 8c95dc8062..3538aa2daa 100644 --- a/archive/2019.php +++ b/archive/2019.php @@ -1,11 +1,11 @@ true)); ?>

    News Archive - 2019

    @@ -18,7 +18,7 @@ getNewsByYear(2019), null, 500); /* %s/
    \(.*\)<\/a>//g */ -site_footer(array('elephpants' => true, 'sidebar' => $SIDEBAR_DATA)); +site_footer(['elephpants' => true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2020.php b/archive/2020.php index e0efc35676..5a469f6cc9 100644 --- a/archive/2020.php +++ b/archive/2020.php @@ -1,11 +1,11 @@ true)); ?>

    News Archive - 2020

    @@ -18,7 +18,7 @@ getNewsByYear(2020), null, 500); /* %s/
    \(.*\)<\/a>//g */ -site_footer(array('elephpants' => true, 'sidebar' => $SIDEBAR_DATA)); +site_footer(['elephpants' => true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2021.php b/archive/2021.php index ed11b3c62c..1191c7585b 100644 --- a/archive/2021.php +++ b/archive/2021.php @@ -1,11 +1,11 @@ true)); ?>

    News Archive - 2021

    @@ -18,7 +18,7 @@ getNewsByYear(2021), null, 500); /* %s/
    \(.*\)<\/a>//g */ -site_footer(array('elephpants' => true, 'sidebar' => $SIDEBAR_DATA)); +site_footer(['elephpants' => true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2022.php b/archive/2022.php new file mode 100644 index 0000000000..abfcee9354 --- /dev/null +++ b/archive/2022.php @@ -0,0 +1,22 @@ + + +

    News Archive - 2022

    + +

    + Here are the most important news items we have published in 2022 on PHP.net. +

    + +
    + +getNewsByYear(2022), null, 500); +site_footer(['elephpants' => true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2023.php b/archive/2023.php new file mode 100644 index 0000000000..b6ef8abde9 --- /dev/null +++ b/archive/2023.php @@ -0,0 +1,22 @@ + + +

    News Archive - 2023

    + +

    + Here are the most important news items we have published in 2023 on PHP.net. +

    + +
    + +getNewsByYear(2023), null, 500); +site_footer(['elephpants' => true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2024.php b/archive/2024.php new file mode 100644 index 0000000000..9834117665 --- /dev/null +++ b/archive/2024.php @@ -0,0 +1,22 @@ + + +

    News Archive - 2024

    + +

    + Here are the most important news items we have published in 2024 on PHP.net. +

    + +
    + +getNewsByYear(2024), null, 500); +site_footer(['elephpants' => true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2025.php b/archive/2025.php new file mode 100644 index 0000000000..2787ee7d73 --- /dev/null +++ b/archive/2025.php @@ -0,0 +1,22 @@ + + +

    News Archive - 2025

    + +

    + Here are the most important news items we have published in 2025 on PHP.net. +

    + +
    + +getNewsByYear(2025), null, 500); +site_footer(['elephpants' => true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/2026.php b/archive/2026.php new file mode 100644 index 0000000000..6e91b33ddc --- /dev/null +++ b/archive/2026.php @@ -0,0 +1,22 @@ + + +

    News Archive - 2026

    + +

    + Here are the most important news items we have published in 2026 on PHP.net. +

    + +
    + +getNewsByYear(2026), null, 500); +site_footer(['elephpants' => true, 'sidebar' => $SIDEBAR_DATA]); diff --git a/archive/archive.xml b/archive/archive.xml index 15225423c9..13ed84a487 100644 --- a/archive/archive.xml +++ b/archive/archive.xml @@ -9,6 +9,300 @@ http://php.net/contact php-webmaster@lists.php.net + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archive/entries/2018-06-07-1.xml b/archive/entries/2018-06-07-1.xml index ea85250e59..8050df2415 100644 --- a/archive/entries/2018-06-07-1.xml +++ b/archive/entries/2018-06-07-1.xml @@ -18,7 +18,7 @@

    For source downloads of PHP 7.3.0 Alpha 1 please visit the download page.

    - Please carefully test this version and report any issues found in the bug reporting system. + Please carefully test this version and report any issues found in the bug reporting system.

    diff --git a/archive/entries/2018-06-21-1.xml b/archive/entries/2018-06-21-1.xml index a432feff91..af85e15ca4 100644 --- a/archive/entries/2018-06-21-1.xml +++ b/archive/entries/2018-06-21-1.xml @@ -21,7 +21,7 @@

    - Please carefully test this version and report any issues found in the bug reporting system. + Please carefully test this version and report any issues found in the bug reporting system.

    diff --git a/archive/entries/2018-07-05-1.xml b/archive/entries/2018-07-05-1.xml index 8c35687110..c835bdda2a 100644 --- a/archive/entries/2018-07-05-1.xml +++ b/archive/entries/2018-07-05-1.xml @@ -21,7 +21,7 @@

    - Please carefully test this version and report any issues found in the bug reporting system. + Please carefully test this version and report any issues found in the bug reporting system.

    diff --git a/archive/entries/2019-06-13-1.xml b/archive/entries/2019-06-13-1.xml index 698fdf4b3f..0663e2eefc 100644 --- a/archive/entries/2019-06-13-1.xml +++ b/archive/entries/2019-06-13-1.xml @@ -18,7 +18,7 @@

    For source downloads of PHP 7.4.0 Alpha 1 please visit the download page.

    - Please carefully test this version and report any issues found in the bug reporting system. + Please carefully test this version and report any issues found in the bug reporting system.

    diff --git a/archive/entries/2019-06-26-1.xml b/archive/entries/2019-06-26-1.xml index 1edfa4a810..539ec9fb7b 100644 --- a/archive/entries/2019-06-26-1.xml +++ b/archive/entries/2019-06-26-1.xml @@ -18,7 +18,7 @@

    For source downloads of PHP 7.4.0 Alpha 2 please visit the download page.

    - Please carefully test this version and report any issues found in the bug reporting system. + Please carefully test this version and report any issues found in the bug reporting system.

    diff --git a/archive/entries/2019-07-11-1.xml b/archive/entries/2019-07-11-1.xml index 13a28e6c8b..b14c798590 100644 --- a/archive/entries/2019-07-11-1.xml +++ b/archive/entries/2019-07-11-1.xml @@ -19,7 +19,7 @@

    For source downloads of PHP 7.4.0 Alpha 3 please visit the download page.

    - Please carefully test this version and report any issues found in the bug reporting system. + Please carefully test this version and report any issues found in the bug reporting system.

    diff --git a/archive/entries/2019-07-25-1.xml b/archive/entries/2019-07-25-1.xml index 7b6476df3f..477007f9ba 100644 --- a/archive/entries/2019-07-25-1.xml +++ b/archive/entries/2019-07-25-1.xml @@ -22,7 +22,7 @@

    - Please carefully test this version and report any issues found in the bug reporting system. + Please carefully test this version and report any issues found in the bug reporting system.

    diff --git a/archive/entries/2020-06-25-1.xml b/archive/entries/2020-06-25-1.xml index d31d9dd47d..2101bd0b48 100644 --- a/archive/entries/2020-06-25-1.xml +++ b/archive/entries/2020-06-25-1.xml @@ -17,7 +17,7 @@

    For source downloads of PHP 8.0.0 Alpha 1 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    diff --git a/archive/entries/2020-07-09-1.xml b/archive/entries/2020-07-09-1.xml index b14160cc35..0722c87dfc 100644 --- a/archive/entries/2020-07-09-1.xml +++ b/archive/entries/2020-07-09-1.xml @@ -17,7 +17,7 @@

    For source downloads of PHP 8.0.0 Alpha 2 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    diff --git a/archive/entries/2020-07-23-1.xml b/archive/entries/2020-07-23-1.xml index d337c5e96d..9517fb63ba 100644 --- a/archive/entries/2020-07-23-1.xml +++ b/archive/entries/2020-07-23-1.xml @@ -17,7 +17,7 @@

    For source downloads of PHP 8.0.0 Alpha 3 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    diff --git a/archive/entries/2020-08-06-3.xml b/archive/entries/2020-08-06-3.xml index 9abdf8a50e..6c200756c3 100644 --- a/archive/entries/2020-08-06-3.xml +++ b/archive/entries/2020-08-06-3.xml @@ -17,7 +17,7 @@

    For source downloads of PHP 8.0.0 Beta 1 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    diff --git a/archive/entries/2020-08-21-1.xml b/archive/entries/2020-08-21-1.xml index 91a58a8014..5773691615 100644 --- a/archive/entries/2020-08-21-1.xml +++ b/archive/entries/2020-08-21-1.xml @@ -17,7 +17,7 @@

    For source downloads of PHP 8.0.0 Beta 2 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    diff --git a/archive/entries/2020-09-03-3.xml b/archive/entries/2020-09-03-3.xml index 379de5c7e0..d9096b08a8 100644 --- a/archive/entries/2020-09-03-3.xml +++ b/archive/entries/2020-09-03-3.xml @@ -17,7 +17,7 @@

    For source downloads of PHP 8.0.0 Beta 3 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    diff --git a/archive/entries/2020-09-17-1.xml b/archive/entries/2020-09-17-1.xml index d03843687c..0c44819317 100644 --- a/archive/entries/2020-09-17-1.xml +++ b/archive/entries/2020-09-17-1.xml @@ -25,7 +25,7 @@

    For source downloads of PHP 8.0.0 Beta 4 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    diff --git a/archive/entries/2020-10-01-4.xml b/archive/entries/2020-10-01-4.xml index cee5a7e6e6..f251e43441 100644 --- a/archive/entries/2020-10-01-4.xml +++ b/archive/entries/2020-10-01-4.xml @@ -22,7 +22,7 @@

    For source downloads of PHP 8.0.0 Release Candidate 1 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    diff --git a/archive/entries/2020-10-16-1.xml b/archive/entries/2020-10-16-1.xml index f408dc8770..facd0563d6 100644 --- a/archive/entries/2020-10-16-1.xml +++ b/archive/entries/2020-10-16-1.xml @@ -22,7 +22,7 @@

    For source downloads of PHP 8.0.0 Release Candidate 2 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    diff --git a/archive/entries/2020-10-29-2.xml b/archive/entries/2020-10-29-2.xml index 5f8e6feac6..d65943e8bb 100644 --- a/archive/entries/2020-10-29-2.xml +++ b/archive/entries/2020-10-29-2.xml @@ -22,7 +22,7 @@

    For source downloads of PHP 8.0.0 Release Candidate 3 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    diff --git a/archive/entries/2020-11-12-1.xml b/archive/entries/2020-11-12-1.xml index c1d8ecf184..a60e76e3f4 100644 --- a/archive/entries/2020-11-12-1.xml +++ b/archive/entries/2020-11-12-1.xml @@ -22,7 +22,7 @@

    For source downloads of PHP 8.0.0 Release Candidate 4 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    diff --git a/archive/entries/2020-11-19-1.xml b/archive/entries/2020-11-19-1.xml index d7304923ce..0dc0a32ac4 100644 --- a/archive/entries/2020-11-19-1.xml +++ b/archive/entries/2020-11-19-1.xml @@ -22,7 +22,7 @@

    For source downloads of PHP 8.0.0 Release Candidate 5 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    diff --git a/archive/entries/2021-04-04-1.xml b/archive/entries/2021-04-04-1.xml index 166d91f0e7..04e785410c 100644 --- a/archive/entries/2021-04-04-1.xml +++ b/archive/entries/2021-04-04-1.xml @@ -9,13 +9,15 @@ 2021-06-17 dpc21-schedule.png - -

    Join us for 2 full days of Insights, Inspiration & Exclusive talks around PHP and Web Technology!

    -

    June 17 and 18, 2021 - DPC Online edition

    -

    In light of health and safety recommendations from public health authorities, and our assessment of the duration of this pandemic, we will be organising the DPC conference as an 100% online event on June 17 & 18, 2021.

    -

    Master Classes & Exclusive talks

    -

    Join our pre-conference Workshop day Thursday June 17 with master classes from the PHP & Web Tech community. These online workshops are in small groups and provide an opportunity to spend time with an expert, going in-depth on a specific topic.

    -

    Followed by the main Conference day Friday June 18 full of interesting brand new live streamed talks!

    - https://www.phpconference.nl -
    + +
    +

    Join us for 2 full days of Insights, Inspiration & Exclusive talks around PHP and Web Technology!

    +

    June 17 and 18, 2021 - DPC Online edition

    +

    In light of health and safety recommendations from public health authorities, and our assessment of the duration of this pandemic, we will be organising the DPC conference as an 100% online event on June 17 & 18, 2021.

    +

    Master Classes & Exclusive talks

    +

    Join our pre-conference Workshop day Thursday June 17 with master classes from the PHP & Web Tech community. These online workshops are in small groups and provide an opportunity to spend time with an expert, going in-depth on a specific topic.

    +

    Followed by the main Conference day Friday June 18 full of interesting brand new live streamed talks!

    + https://www.phpconference.nl +
    +
    diff --git a/archive/entries/2021-06-10-1.xml b/archive/entries/2021-06-10-1.xml index b6af7a0839..87d91a1941 100644 --- a/archive/entries/2021-06-10-1.xml +++ b/archive/entries/2021-06-10-1.xml @@ -11,7 +11,7 @@

    The PHP team is pleased to announce the first testing release of PHP 8.1.0, Alpha 1. This starts the PHP 8.1 release cycle, the rough outline of which is specified in the PHP Wiki.

    For source downloads of PHP 8.1.0 Alpha 1 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    The next release will be Alpha 2, planned for 24 Jun 2021.

    diff --git a/archive/entries/2021-06-21-1.xml b/archive/entries/2021-06-21-1.xml index 67482ff375..4a6a1177bb 100644 --- a/archive/entries/2021-06-21-1.xml +++ b/archive/entries/2021-06-21-1.xml @@ -17,7 +17,7 @@

    Basic facts:

    -

    Date: Ocotber 25 ‒ 29, 2021

    +

    Date: October 25 ‒ 29, 2021

    Location: Holiday Inn Munich City Centre, Munich or Online

    diff --git a/archive/entries/2021-06-24-1.xml b/archive/entries/2021-06-24-1.xml index 3f516531c6..74e6264d08 100644 --- a/archive/entries/2021-06-24-1.xml +++ b/archive/entries/2021-06-24-1.xml @@ -13,7 +13,7 @@

    For source downloads of PHP 8.1.0 Alpha 2 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    diff --git a/archive/entries/2021-07-08-1.xml b/archive/entries/2021-07-08-1.xml index 710bde2c71..065c134e30 100644 --- a/archive/entries/2021-07-08-1.xml +++ b/archive/entries/2021-07-08-1.xml @@ -15,7 +15,7 @@ PHP Wiki.

    For source downloads of PHP 8.1.0 Alpha 3 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    For more information on the new features and other changes, you can read the diff --git a/archive/entries/2021-07-22-1.xml b/archive/entries/2021-07-22-1.xml index 207888277e..f0c60ffd9b 100644 --- a/archive/entries/2021-07-22-1.xml +++ b/archive/entries/2021-07-22-1.xml @@ -15,7 +15,7 @@ PHP Wiki.

    For source downloads of PHP 8.1.0 Beta 1 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    For more information on the new features and other changes, you can read the diff --git a/archive/entries/2021-08-05-2.xml b/archive/entries/2021-08-05-2.xml index ba5916631e..d735967b43 100644 --- a/archive/entries/2021-08-05-2.xml +++ b/archive/entries/2021-08-05-2.xml @@ -15,7 +15,7 @@ PHP Wiki.

    For source downloads of PHP 8.1.0, Beta 2 please visit the download page.

    -

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    For more information on the new features and other changes, you can read the diff --git a/archive/entries/2021-08-19-1.xml b/archive/entries/2021-08-19-1.xml index 46699a03b0..8d7deca645 100644 --- a/archive/entries/2021-08-19-1.xml +++ b/archive/entries/2021-08-19-1.xml @@ -21,7 +21,7 @@

    Please carefully test this version and report any issues found in the - bug reporting system. + bug reporting system.

    Please DO NOT use this version in production, it is an early test version.

    diff --git a/archive/entries/2021-09-02-1.xml b/archive/entries/2021-09-02-1.xml new file mode 100644 index 0000000000..80516c591e --- /dev/null +++ b/archive/entries/2021-09-02-1.xml @@ -0,0 +1,46 @@ + + + PHP 8.1.0 RC 1 available for testing + https://www.php.net/archive/2021.php#2021-09-02-1 + 2021-09-02T15:36:40+00:00 + 2021-09-02T15:36:40+00:00 + + + + +

    +

    + The PHP team is pleased to announce the release of PHP 8.1.0, RC 1. + This is the first release candidate, continuing the PHP 8.1 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.1.0, RC 1 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be the second release candidate (RC 2), planned + for 16 September 2021. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    + + diff --git a/archive/entries/2021-09-08-1.xml b/archive/entries/2021-09-08-1.xml new file mode 100644 index 0000000000..724bbf40fc --- /dev/null +++ b/archive/entries/2021-09-08-1.xml @@ -0,0 +1,18 @@ + + + Longhorn PHP 2021 + https://www.php.net/archive/2021.php#2021-09-08-1 + 2021-09-08T19:53:40+00:00 + 2021-09-08T19:53:40+00:00 + + + 2021-10-14 + + longhornphp.png + +
    +

    Longhorn PHP is returning for its third year! The conference will be held October 14-16, 2021, in Austin, Texas.

    +

    Longhorn PHP exists to help PHP developers level up their craft and connect with the larger PHP community. Check out our full schedule now, and get your tickets by September 17th to take advantage of early bird pricing!

    +
    +
    +
    diff --git a/archive/entries/2021-09-10-1.xml b/archive/entries/2021-09-10-1.xml new file mode 100644 index 0000000000..0706ac56c3 --- /dev/null +++ b/archive/entries/2021-09-10-1.xml @@ -0,0 +1,20 @@ + + + PHP Russia 2022 + https://www.php.net/archive/2021.php#2021-09-10-1 + 2021-09-10T09:31:22+00:00 + 2022-07-05T05:00:00+00:00 + + + 2022-11-24 + + php_russia_2022.jpg + +
    +

    PHP Russia is the only Russian conference focused on PHP. It will be held in Moscow November 24-25, 2022. Main topics are PHP ecosystem (PHP itself, standards, frameworks, libraries and OpenSource) and major players experience in building complex projects using best practices and modern approaches.

    +

    We expect 600+ attendees and 20+ speakers!

    +

    Our audience consists of applications developers, API developers, CTO’s, CEO’s, fullstack developers, etc.

    +

    The program is designed by the developer community, representatives of large companies from Runet and around the world, and by tech developers and community activists. The selection of talks is multi-layered and complex — the Program Committee selects the best talks from the received applications unanimously according to several criteria.

    +
    +
    +
    diff --git a/archive/entries/2021-09-16-1.xml b/archive/entries/2021-09-16-1.xml new file mode 100644 index 0000000000..8a4c32d0c0 --- /dev/null +++ b/archive/entries/2021-09-16-1.xml @@ -0,0 +1,46 @@ + + + PHP 8.1.0 RC 2 available for testing + https://www.php.net/archive/2021.php#2021-09-16-1 + 2021-09-16T20:07:08+02:00 + 2021-09-16T20:07:08+02:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.1.0, RC 2. + This is the second release candidate, continuing the PHP 8.1 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.1.0, RC 2 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be the third release candidate (RC 3), planned + for 30 September 2021. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2021-09-23-1.xml b/archive/entries/2021-09-23-1.xml new file mode 100644 index 0000000000..f8c9ac2170 --- /dev/null +++ b/archive/entries/2021-09-23-1.xml @@ -0,0 +1,21 @@ + + + PHP 7.3.31 Released! + https://www.php.net/archive/2021.php#2021-09-23-1 + 2021-09-23T10:10:50+00:00 + 2021-09-23T10:10:50+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 7.3.31. This is a security release fixing CVE-2021-21706..

    + +

    All PHP 7.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 7.3.31 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2021-09-23-2.xml b/archive/entries/2021-09-23-2.xml new file mode 100644 index 0000000000..15043cff59 --- /dev/null +++ b/archive/entries/2021-09-23-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.11 Released! + https://www.php.net/archive/2021.php#2021-09-23-2 + 2021-09-23T14:41:58+00:00 + 2021-09-23T14:41:58+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.11. This is a security release fixing CVE-2021-21706.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.11 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2021-09-23-3.xml b/archive/entries/2021-09-23-3.xml new file mode 100644 index 0000000000..67dbe0e221 --- /dev/null +++ b/archive/entries/2021-09-23-3.xml @@ -0,0 +1,21 @@ + + + PHP 7.4.24 Released! + https://www.php.net/archive/2021.php#2021-09-23-3 + 2021-09-23T18:36:11+00:00 + 2021-09-23T18:36:11+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 7.4.24. This is a security release.

    + +

    All PHP 7.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 7.4.24 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2021-09-30-1.xml b/archive/entries/2021-09-30-1.xml new file mode 100644 index 0000000000..49e75a79c3 --- /dev/null +++ b/archive/entries/2021-09-30-1.xml @@ -0,0 +1,46 @@ + + + PHP 8.1.0 RC 3 available for testing + https://www.php.net/archive/2021.php#2021-09-30-1 + 2021-09-30T19:13:21+02:00 + 2021-09-30T19:13:21+02:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.1.0, RC 3. + This is the third release candidate, continuing the PHP 8.1 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.1.0, RC 3 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be the fourth release candidate (RC 4), planned + for 14 October 2021. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2021-10-14-1.xml b/archive/entries/2021-10-14-1.xml new file mode 100644 index 0000000000..c260c078e1 --- /dev/null +++ b/archive/entries/2021-10-14-1.xml @@ -0,0 +1,46 @@ + + + PHP 8.1.0 RC 4 available for testing + https://www.php.net/archive/2021.php#2021-10-14-1 + 2021-10-14T18:43:46+02:00 + 2021-10-14T18:43:46+02:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.1.0, RC 4. + This is the fourth release candidate, continuing the PHP 8.1 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.1.0, RC 4 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be the fifth release candidate (RC 5), planned + for 28 October 2021. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2021-10-21-1.xml b/archive/entries/2021-10-21-1.xml new file mode 100644 index 0000000000..9cb33cf602 --- /dev/null +++ b/archive/entries/2021-10-21-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.12 Released! + https://www.php.net/archive/2021.php#2021-10-21-1 + 2021-10-21T10:08:35+00:00 + 2021-10-21T10:08:35+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.12. This is a security fix release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.12 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2021-10-22-1.xml b/archive/entries/2021-10-22-1.xml new file mode 100644 index 0000000000..f8434727b3 --- /dev/null +++ b/archive/entries/2021-10-22-1.xml @@ -0,0 +1,21 @@ + + + PHP 7.4.25 Released! + https://www.php.net/archive/2021.php#2021-10-22-1 + 2021-10-22T14:43:45+00:00 + 2021-10-22T14:43:45+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 7.4.25. This is a security release.

    + +

    All PHP 7.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 7.4.25 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2021-10-26-1.xml b/archive/entries/2021-10-26-1.xml new file mode 100644 index 0000000000..0186c5782c --- /dev/null +++ b/archive/entries/2021-10-26-1.xml @@ -0,0 +1,19 @@ + + + PHP workshop for 2 days with Shopware, Sylius, PHPUnit and Codeception in Duisburg + https://www.php.net/archive/2021.php#2021-10-26-1 + 2021-10-26T14:18:02+02:00 + 2021-10-26T14:18:02+02:00 + + + 2021-11-16 + + +
    + We will do live coding workshop for 2 days with core developers in Duisburg. + Together with the wireless keyboard we will learn about Symfony entities in Shopware plugin, PHPUnit integration tests, headless API in Sylius and Codeception testing. + See the event page for more details. + +
    +
    +
    diff --git a/archive/entries/2021-10-28-1.xml b/archive/entries/2021-10-28-1.xml new file mode 100644 index 0000000000..f1e03bbed6 --- /dev/null +++ b/archive/entries/2021-10-28-1.xml @@ -0,0 +1,21 @@ + + + PHP 7.3.32 Released! + https://www.php.net/archive/2021.php#2021-10-28-1 + 2021-10-28T08:40:01+00:00 + 2021-10-28T08:40:01+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 7.3.32. This is a security release.

    + +

    All PHP 7.3 FPM users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 7.3.32 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2021-10-28-2.xml b/archive/entries/2021-10-28-2.xml new file mode 100644 index 0000000000..31c4601ca9 --- /dev/null +++ b/archive/entries/2021-10-28-2.xml @@ -0,0 +1,46 @@ + + + PHP 8.1.0 RC 5 available for testing + https://www.php.net/archive/2021.php#2021-10-28-2 + 2021-10-28T20:39:10+02:00 + 2021-10-28T20:39:10+02:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.1.0, RC 5. + This is the fifth release candidate, continuing the PHP 8.1 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.1.0, RC 5 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be the sixth and last release candidate (RC 6), planned + for 11 November 2021. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2021-11-11-1.xml b/archive/entries/2021-11-11-1.xml new file mode 100644 index 0000000000..bcdd7e4653 --- /dev/null +++ b/archive/entries/2021-11-11-1.xml @@ -0,0 +1,46 @@ + + + PHP 8.1.0 RC 6 available for testing + https://www.php.net/archive/2021.php#2021-11-11-1 + 2021-11-11T16:06:23+00:00 + 2021-11-11T16:06:23+00:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.1.0, RC 6. + This is the sixth and final release candidate, continuing the PHP 8.1 + release cycle, the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.1.0, RC 6 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be the production-ready, general availability + release, planned for 25 November 2021. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2021-11-12-1.xml b/archive/entries/2021-11-12-1.xml new file mode 100644 index 0000000000..bb1fdd4c99 --- /dev/null +++ b/archive/entries/2021-11-12-1.xml @@ -0,0 +1,39 @@ + + + International PHP Conference Berlin 2022 + http://php.net/archive/2021.php#id2021-11-12-1 + 2021-11-12T14:37:00+02:00 + 2021-11-25T14:37:00+02:00 + 2022-05-30 + + + IPC_BER_Hybrid_Logo_250.png + + +
    +

    The International PHP Conference is the world's first PHP conference and stands since more than a decade for top-notch pragmatic expertise in PHP and web technologies. At the IPC, internationally renowned experts from the PHP industry meet up with PHP users and developers from large and small companies. Here is the place where concepts emerge and ideas are born - the IPC signifies knowledge transfer at highest level.

    + +

    All delegates of the International PHP Conference have, in addition to PHP program, free access to the entire range of the webinale taking place at the same time.

    + +

    Basic facts:

    + +

    Date: May 30 ‒ June 3, 2022

    + +

    Location: Maritim ProArte Hotel, Berlin or Online

    + +

    Highlights:

    +
      +
    • 60+ best practice sessions
    • +
    • 50+ international top speakers
    • +
    • PHPower: Hands-on Power Workshops
    • +
    • Expo with exciting exhibitors on May 31 & June 1
    • +
    • Conference Combo: Visit the webinale for free
    • +
    • All inclusive: Changing buffets, snacks & refreshing drinks
    • +
    • Official certificate for attendees
    • +
    • Free Swag: Developer bag, T-Shirt, magazines etc.
    • +
    • Exclusive networking events
    • +
    +

    For further information on the International PHP Conference Berlin visit: wwww.phpconference.com/berlin-en/

    +
    +
    +
    diff --git a/archive/entries/2021-11-18-1.xml b/archive/entries/2021-11-18-1.xml new file mode 100644 index 0000000000..07645bdd81 --- /dev/null +++ b/archive/entries/2021-11-18-1.xml @@ -0,0 +1,21 @@ + + + PHP 7.4.26 Released! + https://www.php.net/archive/2021.php#2021-11-18-1 + 2021-11-18T10:19:46+00:00 + 2021-11-18T10:19:46+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 7.4.26. This is a security release.

    + +

    All PHP 7.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 7.4.26 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2021-11-18-2.xml b/archive/entries/2021-11-18-2.xml new file mode 100644 index 0000000000..f0db1f9e38 --- /dev/null +++ b/archive/entries/2021-11-18-2.xml @@ -0,0 +1,21 @@ + + + PHP 7.3.33 Released! + https://www.php.net/archive/2021.php#2021-11-18-2 + 2021-11-18T11:02:47+00:00 + 2021-11-18T11:02:47+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 7.3.33. This is a security release.

    + +

    All PHP 7.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 7.3.33 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2021-11-19-1.xml b/archive/entries/2021-11-19-1.xml new file mode 100644 index 0000000000..e35c7bd12c --- /dev/null +++ b/archive/entries/2021-11-19-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.13 Released! + https://www.php.net/archive/2021.php#2021-11-19-1 + 2021-11-19T03:00:11+00:00 + 2021-11-19T03:00:11+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.13. This is a security release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.13 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2021-11-22-1.xml b/archive/entries/2021-11-22-1.xml new file mode 100644 index 0000000000..ad864b787e --- /dev/null +++ b/archive/entries/2021-11-22-1.xml @@ -0,0 +1,24 @@ + + + PHP Foundation Announced + https://www.php.net/archive/2021.php#2021-11-22-1 + 2021-11-22T22:13:41+00:00 + 2021-11-22T22:13:41+00:00 + + + + +
    +

    + The PHP Foundation has been + announced + as an entity for funding the work of developing the PHP language. +

    +

    + For more information regarding the structure and purpose of the foundation, + please check out the blog post at: + jetbrains.com. +

    +
    +
    +
    diff --git a/archive/entries/2021-11-25-1.xml b/archive/entries/2021-11-25-1.xml new file mode 100644 index 0000000000..5fee6a9db8 --- /dev/null +++ b/archive/entries/2021-11-25-1.xml @@ -0,0 +1,43 @@ + + + PHP 8.1.0 Released! + https://www.php.net/archive/2021.php#2021-11-25-1 + 2021-11-25T17:43:08+01:00 + 2021-11-25T21:02:32+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.1.0. This release marks the latest minor release of the PHP language.

    + +

    PHP 8.1 comes with numerous improvements and new features such as:

    + + +

    Take a look at the PHP 8.1 Announcement Addendum for more information.

    + +

    For source downloads of PHP 8.1.0 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    + +

    The migration guide is available in the PHP Manual. +Please consult it for the detailed list of new features and backward incompatible changes.

    + +

    Many thanks to all the contributors and supporters!

    +
    +
    +
    diff --git a/archive/entries/2021-12-13-1.xml b/archive/entries/2021-12-13-1.xml new file mode 100644 index 0000000000..1c2f9eb941 --- /dev/null +++ b/archive/entries/2021-12-13-1.xml @@ -0,0 +1,17 @@ + + + The Online PHP Conference 2022 + https://www.php.net/archive/2021.php#2021-12-13-1 + 2021-12-13T12:00:00+00:00 + 2021-12-13T12:00:00+00:00 + + + 2022-01-21 + + +
    +

    The Online PHP Conference 2022 takes place January 17-21, 2022. This time we interpret the term "conference" literally: over the course of a week, we dedicate each morning to a topic that we will discuss together with invited experts in an interactive discussion. The topics are Remote Teams, Data Privacy and Data Security, Supply Chain Management, Cloud and Operations, and Green IT. The discussions will be held in German.

    +

    https://2022.phpconference.online/

    +
    +
    +
    diff --git a/archive/entries/2021-12-16-1.xml b/archive/entries/2021-12-16-1.xml new file mode 100644 index 0000000000..8a077a11ba --- /dev/null +++ b/archive/entries/2021-12-16-1.xml @@ -0,0 +1,21 @@ + + + PHP 7.4.27 Released! + https://www.php.net/archive/2021.php#2021-12-16-1 + 2021-12-16T15:16:26+00:00 + 2021-12-16T15:16:26+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 7.4.27. This is a bug fix release.

    + +

    All PHP 7.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 7.4.27 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2021-12-16-2.xml b/archive/entries/2021-12-16-2.xml new file mode 100644 index 0000000000..4dfd6a7e45 --- /dev/null +++ b/archive/entries/2021-12-16-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.14 Released! + https://www.php.net/archive/2021.php#2021-12-17-1 + 2021-12-16T23:33:54+00:00 + 2021-12-16T23:33:54+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.14. This is a bug fix release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.14 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2021-12-17-1.xml b/archive/entries/2021-12-17-1.xml new file mode 100644 index 0000000000..a7e24a967a --- /dev/null +++ b/archive/entries/2021-12-17-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.1 Released! + https://www.php.net/archive/2021.php#2021-12-17-1 + 2021-12-17T17:31:25+01:00 + 2021-12-17T17:31:25+01:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.1. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.1 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2021-12-21-1.xml b/archive/entries/2021-12-21-1.xml new file mode 100644 index 0000000000..c083f3290e --- /dev/null +++ b/archive/entries/2021-12-21-1.xml @@ -0,0 +1,20 @@ + + + Dutch PHP Conference 2022 - Call for Papers + https://www.php.net/archive/2021.php#2021-12-21-1 + 2021-12-21T08:18:53+00:00 + 2021-12-21T08:18:53+00:00 + + + 2022-01-30 + + DPC-logo.png + +
    +

    + We are back for the 16th edition of the Dutch PHP Conference! The 2022 in-person edition features 2 conference days on July 1 & 2, 2022 at RAI Amsterdam. + The Call for Papers of Dutch PHP Conference 2022 is now open! You can submit your papers up to and including January 30th and as many proposals as you like, so please start submitting! Check out cfp.phpconference.nl for content briefing and more info. +

    +
    +
    +
    diff --git a/archive/entries/2022-01-20-1.xml b/archive/entries/2022-01-20-1.xml new file mode 100644 index 0000000000..0192ee1a83 --- /dev/null +++ b/archive/entries/2022-01-20-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.15 Released! + https://www.php.net/archive/2022.php#2022-01-20-1 + 2022-01-20T11:38:32+00:00 + 2022-01-20T11:38:32+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.15. This is a bug fix release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.15 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-01-21-1.xml b/archive/entries/2022-01-21-1.xml new file mode 100644 index 0000000000..8d416aab64 --- /dev/null +++ b/archive/entries/2022-01-21-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.2 Released! + https://www.php.net/archive/2022.php#2022-01-21-1 + 2022-01-21T03:08:44+00:00 + 2022-01-21T03:08:44+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.2. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.2 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-01-24-1.xml b/archive/entries/2022-01-24-1.xml new file mode 100644 index 0000000000..7a26b897ea --- /dev/null +++ b/archive/entries/2022-01-24-1.xml @@ -0,0 +1,21 @@ + + + phpday 2022 + https://www.php.net/archive/2022.php#2022-01-24-1 + 2022-01-24T16:41:44+01:00 + 2022-01-24T16:41:44+01:00 + + + 2022-02-02 + + phpday2022.png + +
    +

    The Italian PHP user group GrUSP is pleased to announce the 19th edition of phpday, taking place on May 19-20th, 2022. This edition is going to be hybrid: it takes place in Verona (Italy) and will also be accessible online!

    +

    phpday is one the first historic European conferences dedicated to PHP development, technologies and management.

    +

    Our CFP will be open until Feb 2nd and the speaker line up will be announced soon after.

    +

    Don't miss the opportunity to take part to this amazing event with international speakers from all over the world

    +

    Follow us on Twitter and Facebook

    +
    +
    +
    diff --git a/archive/entries/2022-02-17-1.xml b/archive/entries/2022-02-17-1.xml new file mode 100644 index 0000000000..194b338e0a --- /dev/null +++ b/archive/entries/2022-02-17-1.xml @@ -0,0 +1,21 @@ + + + PHP 7.4.28 Released! + https://www.php.net/archive/2022.php#2022-02-17-1 + 2022-02-17T14:37:30+00:00 + 2022-02-17T14:37:30+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 7.4.28. This is a security release.

    + +

    All PHP 7.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 7.4.28 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-02-17-2.xml b/archive/entries/2022-02-17-2.xml new file mode 100644 index 0000000000..4076ee7a6c --- /dev/null +++ b/archive/entries/2022-02-17-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.16 Released! + https://www.php.net/archive/2022.php#2022-02-17-2 + 2022-02-17T23:14:20+00:00 + 2022-02-17T23:14:20+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.16. This is a security release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.16 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-02-17-3.xml b/archive/entries/2022-02-17-3.xml new file mode 100644 index 0000000000..8798e5615f --- /dev/null +++ b/archive/entries/2022-02-17-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.3 Released! + https://www.php.net/archive/2022.php#2022-02-17-3 + 2022-02-17T23:59:59+01:00 + 2022-02-17T23:59:59+01:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.3. This is a security release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.3 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-03-17-1.xml b/archive/entries/2022-03-17-1.xml new file mode 100644 index 0000000000..868aba0d3a --- /dev/null +++ b/archive/entries/2022-03-17-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.17 Released! + https://www.php.net/archive/2022.php#2022-03-17-1 + 2022-03-17T08:02:02+00:00 + 2022-03-17T08:02:02+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.17. This is a bug fix release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.17 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-03-17-2.xml b/archive/entries/2022-03-17-2.xml new file mode 100644 index 0000000000..b4e417fa28 --- /dev/null +++ b/archive/entries/2022-03-17-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.4 Released! + https://www.php.net/archive/2022.php#2022-03-17-2 + 2022-03-17T23:34:53+00:00 + 2022-03-17T23:34:53+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.4. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.4 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-04-14-1.xml b/archive/entries/2022-04-14-1.xml new file mode 100644 index 0000000000..45bce3bd7a --- /dev/null +++ b/archive/entries/2022-04-14-1.xml @@ -0,0 +1,24 @@ + + + PHP 7.4.29 Released! + https://www.php.net/archive/2022.php#2022-04-14-1 + 2022-04-14T08:22:12+00:00 + 2022-04-14T08:22:12+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 7.4.29. This is a security release for Windows users.

    + +

    This is primarily a release for Windows users due to necessarily +upgrades to the OpenSSL and zlib dependencies in which security issues +have been found. All PHP 7.4 on Windows users are encouraged to upgrade +to this version.

    + +

    For source downloads of PHP 7.4.29 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-04-14-2.xml b/archive/entries/2022-04-14-2.xml new file mode 100644 index 0000000000..5901ea887d --- /dev/null +++ b/archive/entries/2022-04-14-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.5 Released! + https://www.php.net/archive/2022.php#2022-04-14-2 + 2022-04-14T17:49:29+02:00 + 2022-04-14T17:49:29+02:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.5. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.5 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-04-15-1.xml b/archive/entries/2022-04-15-1.xml new file mode 100644 index 0000000000..108b426596 --- /dev/null +++ b/archive/entries/2022-04-15-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.18 Released! + https://www.php.net/archive/2022.php#2022-04-15-1 + 2022-04-15T01:50:44+00:00 + 2022-04-15T01:50:44+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.18. This is a bug fix release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.18 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-04-25-1.xml b/archive/entries/2022-04-25-1.xml new file mode 100644 index 0000000000..e9a79c882a --- /dev/null +++ b/archive/entries/2022-04-25-1.xml @@ -0,0 +1,25 @@ + + + Dutch PHP Conference 2022 - Schedule + https://www.php.net/archive/2022.php#2022-04-25-1 + 2022-04-25T10:11:25+00:00 + 2022-04-25T10:11:25+00:00 + + + 2022-06-24 + + DPC-logo.png + +
    +

    + We are thrilled to present the schedule of the Dutch PHP Conference 2022. This conference is a FREE Online Edition, full of high-level technical sessions. Last year we welcomed visitors from a whopping 55+ countries! We hope to host another great and globally online edition of DPC this year. +

    +

    + You can register now! +

    +

    + We look forward to virtually meeting you on June 24! Mark those calendars! +

    +
    +
    +
    diff --git a/archive/entries/2022-05-05-1.xml b/archive/entries/2022-05-05-1.xml new file mode 100644 index 0000000000..e896ec15c3 --- /dev/null +++ b/archive/entries/2022-05-05-1.xml @@ -0,0 +1,26 @@ + + + CakeFest 2022: The Official CakePHP Conference + https://www.php.net/archive/2022.php#2022-05-05-1 + 2022-05-05T13:29:17+00:00 + 2022-05-05T13:29:17+00:00 + + + 2022-09-29 + + cakefest-2017.png + +
    +

    + CakeFest 2022 - our annual conference dedicated to CakePHP will be virtual this year allowing bakers from all over the world to attend, from home! Two full days of CakePHP knowledge. Day 1 is workshops and day 2 will be a full day of talks on CakePHP related technologies. These events are an ideal way to learn as both beginners and advanced users. +

    +

    + Date: September 29 & 30
    + Time: 12:00pm UTC +

    +

    + Check out details at: CakeFest.org +

    +
    +
    +
    diff --git a/archive/entries/2022-05-12-1.xml b/archive/entries/2022-05-12-1.xml new file mode 100644 index 0000000000..ea94c8b171 --- /dev/null +++ b/archive/entries/2022-05-12-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.19 Released! + https://www.php.net/archive/2022.php#2022-05-12-1 + 2022-05-12T07:44:14+00:00 + 2022-05-12T07:44:14+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.19. This is a bug fix release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.19 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-05-12-2.xml b/archive/entries/2022-05-12-2.xml new file mode 100644 index 0000000000..6bf43c86d4 --- /dev/null +++ b/archive/entries/2022-05-12-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.6 Released! + https://www.php.net/archive/2022.php#2022-05-12-2 + 2022-05-12T21:48:12+00:00 + 2022-05-12T21:48:12+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.6. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.6 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-06-09-1.xml b/archive/entries/2022-06-09-1.xml new file mode 100644 index 0000000000..aa9ad5e8be --- /dev/null +++ b/archive/entries/2022-06-09-1.xml @@ -0,0 +1,21 @@ + + + PHP 7.4.30 Released! + https://www.php.net/archive/2022.php#2022-06-09-1 + 2022-06-09T08:27:58+00:00 + 2022-06-09T08:27:58+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 7.4.30. This is a security release.

    + +

    All PHP 7.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 7.4.30 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-06-09-2.xml b/archive/entries/2022-06-09-2.xml new file mode 100644 index 0000000000..fd6ea442b4 --- /dev/null +++ b/archive/entries/2022-06-09-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.7 Released! + https://www.php.net/archive/2022.php#2022-06-09-2 + 2022-06-09T13:24:09+00:00 + 2022-06-09T13:24:09+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.7. This is a security release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.7 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-06-09-3.xml b/archive/entries/2022-06-09-3.xml new file mode 100644 index 0000000000..8a8b57e6bf --- /dev/null +++ b/archive/entries/2022-06-09-3.xml @@ -0,0 +1,22 @@ + + + PHP 8.2.0 Alpha 1 available for testing + https://www.php.net/archive/2022.php#2022-06-09-3 + 2022-06-09T15:13:37+00:00 + 2022-06-09T15:13:37+00:00 + + + + +
    +

    The PHP team is pleased to announce the first testing release of PHP 8.2.0, Alpha 1. This starts the PHP 8.2 release cycle, the rough outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.2.0 Alpha 1 please visit the download page.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be PHP 8.2.0 Alpha 2, planned for 23 Jun 2022.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2022-06-09-4.xml b/archive/entries/2022-06-09-4.xml new file mode 100644 index 0000000000..46911474f5 --- /dev/null +++ b/archive/entries/2022-06-09-4.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.20 Released! + https://www.php.net/archive/2022.php#2022-06-09-4 + 2022-06-09T20:50:23+00:00 + 2022-06-09T20:50:23+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.20. This is a security release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.20 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-06-23-1.xml b/archive/entries/2022-06-23-1.xml new file mode 100644 index 0000000000..1f115ec530 --- /dev/null +++ b/archive/entries/2022-06-23-1.xml @@ -0,0 +1,22 @@ + + + PHP 8.2.0 Alpha 2 available for testing + https://www.php.net/archive/2022.php#2022-06-23-1 + 2022-06-23T15:03:32+00:00 + 2022-06-23T15:03:32+00:00 + + + + +
    +

    The PHP team is pleased to announce the second testing release of PHP 8.2.0, Alpha 2. This continues the PHP 8.2 release cycle, the rough outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.2.0 Alpha 2 please visit the download page.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be PHP 8.2.0 Alpha 3, planned for 7 Jul 2022.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2022-06-30-1.xml b/archive/entries/2022-06-30-1.xml new file mode 100644 index 0000000000..168c624d43 --- /dev/null +++ b/archive/entries/2022-06-30-1.xml @@ -0,0 +1,25 @@ + + + SymfonyCon Disneyland Paris 2022 + https://www.php.net/archive/2022.php#2022-06-30-1 + 2022-06-30T17:14:43+00:00 + 2022-06-30T17:14:43+00:00 + + + 2022-11-15 + + symfonycon-disneyland-paris-2022.png + +
    +

    + SymfonyCon Disneyland Paris 2022 is the global Symfony conference in English for PHP developers from all around the World. Two days of workshops (November 15-16) followed by two days (November 17-18) full of talks on PHP, Symfony and its ecosystem. +

    +

    + Each ticket includes an invitation for two people to the exclusive party (20:00 - 23:30, November 17) where conference attendees will enjoy Walt Disney Studios Park open exclusively for them. Enjoy this special moment with your family or friends. We've also negotiated a discounted rate in one of the Disney's hotels. +

    +

    + Check out all the conference details +

    +
    +
    +
    diff --git a/archive/entries/2022-07-01-1.xml b/archive/entries/2022-07-01-1.xml new file mode 100644 index 0000000000..11cb6873f3 --- /dev/null +++ b/archive/entries/2022-07-01-1.xml @@ -0,0 +1,22 @@ + + + SymfonyWorld Online 2022 Winter Edition + https://www.php.net/archive/2022.php#2022-07-01-1 + 2022-07-01T17:33:43+00:00 + 2022-07-01T17:33:43+00:00 + + + 2022-12-06 + + symfonyworld-online-winter-edition-2022.png + +
    +

    + SymfonyWorld Online 2022 Winter Edition is the global Symfony conference in English for PHP developers from all around the World. Two days of online workshops (December 6-7) followed by two days (December 8-9) full of online talks on PHP, Symfony and its ecosystem. +

    +

    + Check out all the conference details +

    +
    +
    +
    diff --git a/archive/entries/2022-07-06-1.xml b/archive/entries/2022-07-06-1.xml new file mode 100644 index 0000000000..d109f4c8aa --- /dev/null +++ b/archive/entries/2022-07-06-1.xml @@ -0,0 +1,39 @@ + + + International PHP Conference Munich 2022 + http://php.net/archive/2021.php#id2022-07-06-1 + 2022-07-06T14:37:00+02:00 + 2022-07-06T14:37:00+02:00 + 2022-10-24 + + + IPC_MUN_Hybrid_Logo_250_2022.png + + +
    +

    The International PHP Conference is the world's first PHP conference and stands since more than a decade for top-notch pragmatic expertise in PHP and web technologies. At the IPC, internationally renowned experts from the PHP industry meet up with PHP users and developers from large and small companies. Here is the place where concepts emerge and ideas are born - the IPC signifies knowledge transfer at highest level.

    + +

    All delegates of the International PHP Conference have, in addition to PHP program, free access to the entire range of the International JavaScript Conference taking place at the same time.

    + +

    Basic facts:

    + +

    Date: October 24 - 28, 2022

    + +

    Location: Holiday Inn Munich City Centre, Munich or Online

    + +

    Highlights:

    +
      +
    • 70+ best practice sessions
    • +
    • 50+ international top speakers
    • +
    • PHPower: Hands-on Power Workshops
    • +
    • Expo with exciting exhibitors on October 25 & 26
    • +
    • Conference Combo: Visit the International JavaScript Conference for free
    • +
    • All inclusive: Changing buffets, snacks & refreshing drinks
    • +
    • Official certificate for attendees
    • +
    • Free Goodies: Developer bag, T-Shirt, magazines etc.
    • +
    • Exclusive networking events
    • +
    +

    For further information on the International PHP Conference Munich visit: www.phpconference.com/munich/

    +
    +
    +
    diff --git a/archive/entries/2022-07-07-1.xml b/archive/entries/2022-07-07-1.xml new file mode 100644 index 0000000000..3210671b7d --- /dev/null +++ b/archive/entries/2022-07-07-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.21 Released! + https://www.php.net/archive/2022.php#2022-07-07-1 + 2022-07-07T09:31:10+00:00 + 2022-07-07T09:31:10+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.21. This is a bug fix release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.21 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-07-07-2.xml b/archive/entries/2022-07-07-2.xml new file mode 100644 index 0000000000..f8e2b8984b --- /dev/null +++ b/archive/entries/2022-07-07-2.xml @@ -0,0 +1,33 @@ + + + PHP 8.2.0 Alpha 3 available for testing + https://www.php.net/archive/2022.php#2022-07-07-2 + 2022-07-07T12:43:58+00:00 + 2022-07-07T12:43:58+00:00 + + + + +
    +

    + The PHP team is pleased to announce the third testing release of PHP 8.2.0, Alpha 3. + This continues the PHP 8.2 release cycle, the rough outline of which is specified in the + PHP Wiki. +

    +

    For source downloads of PHP 8.2.0 Alpha 3 please visit the download page.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please DO NOT use this version in production, it is an early test version.

    + +

    + For more information on the new features and other changes, you can read the + NEWS file, + or the UPGRADING + file for a complete list of upgrading notes. These files can also be found in the release archive. +

    +

    The next release will be Beta 1, planned for Jul 21 2022.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    + +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2022-07-07-3.xml b/archive/entries/2022-07-07-3.xml new file mode 100644 index 0000000000..668aa82114 --- /dev/null +++ b/archive/entries/2022-07-07-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.8 Released! + https://www.php.net/archive/2022.php#2022-07-07-3 + 2022-07-07T17:25:36+00:00 + 2022-07-07T17:25:36+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.8. This is a security release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.8 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-07-14-1.xml b/archive/entries/2022-07-14-1.xml new file mode 100644 index 0000000000..29a66f17ec --- /dev/null +++ b/archive/entries/2022-07-14-1.xml @@ -0,0 +1,25 @@ + + + Longhorn PHP 2022 - CFP Open + https://www.php.net/archive/2022.php#2022-07-14-1 + 2022-07-14T01:00:00+00:00 + 2021-07-14T01:00:00+00:00 + + + 2022-08-11 + + longhornphp.png + +
    +

    Howdy, y'all! 🤠

    + +

    Longhorn PHP is returning for its 4th year in Austin, TX! We are a community-run conference for PHP developers in Texas and beyond. We are excited to bring PHP developers from all backgrounds together again for 3 days of fun and education.

    + +

    We are currently accepting submissions for 50 minute talks and 3 hour tutorials. Talk ideas will be accepted until August 11, 2022.

    + +

    While the CFP is open, we also have our Blind Bird tickets available for sale. Register now!

    + +

    Follow us on Twitter, or signup for emails at longhornphp.com to get notified with important conference updates.

    +
    +
    +
    diff --git a/archive/entries/2022-07-21-1.xml b/archive/entries/2022-07-21-1.xml new file mode 100644 index 0000000000..4305b8c41f --- /dev/null +++ b/archive/entries/2022-07-21-1.xml @@ -0,0 +1,23 @@ + + + PHP 8.2.0 Beta 1 available for testing + https://www.php.net/archive/2022.php#2022-07-21-1 + 2022-07-21T14:57:05+00:00 + 2022-07-21T14:57:05+00:00 + + + + +
    +

    The PHP team is pleased to announce the first beta release of PHP 8.2.0, Beta 1. This continues the PHP 8.2 release cycle, the rough outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.2.0 Beta 1 please visit the download page.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    Because of a bug found in early testing of this release, this version is NOT usable with ZTS builds.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be PHP 8.2.0 Beta 2, planned for Aug 4 2022.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2022-08-04-1.xml b/archive/entries/2022-08-04-1.xml new file mode 100644 index 0000000000..bc6d293fcb --- /dev/null +++ b/archive/entries/2022-08-04-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.22 Released! + https://www.php.net/archive/2022.php#2022-08-04-1 + 2022-08-04T08:10:19+00:00 + 2022-08-04T08:10:19+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.22. This is a bug fix release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.22 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-08-04-2.xml b/archive/entries/2022-08-04-2.xml new file mode 100644 index 0000000000..ea93b5ce20 --- /dev/null +++ b/archive/entries/2022-08-04-2.xml @@ -0,0 +1,22 @@ + + + PHP 8.2.0 Beta 2 available for testing + https://www.php.net/archive/2022.php#2022-08-04-2 + 2022-08-04T08:30:47+00:00 + 2022-08-04T08:30:47+00:00 + + + + +
    +

    The PHP team is pleased to announce the second beta release of PHP 8.2.0, Beta 2. This continues the PHP 8.2 release cycle, the rough outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.2.0 Beta 2 please visit the download page.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be PHP 8.2.0 Beta 3, planned for Aug 18 2022.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2022-08-04-3.xml b/archive/entries/2022-08-04-3.xml new file mode 100644 index 0000000000..b1c34ea0c9 --- /dev/null +++ b/archive/entries/2022-08-04-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.9 Released! + https://www.php.net/archive/2022.php#2022-08-04-3 + 2022-08-04T14:33:51+02:00 + 2022-08-04T14:33:51+02:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.9. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.9 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-08-18-1.xml b/archive/entries/2022-08-18-1.xml new file mode 100644 index 0000000000..b67f5f4426 --- /dev/null +++ b/archive/entries/2022-08-18-1.xml @@ -0,0 +1,22 @@ + + + PHP 8.2.0 Beta 3 available for testing + https://www.php.net/archive/2022.php#2022-08-18-1 + 2022-08-18T14:54:08+00:00 + 2022-08-18T14:54:08+00:00 + + + + +
    +

    The PHP team is pleased to announce the third beta release of PHP 8.2.0, Beta 3. This continues the PHP 8.2 release cycle, the rough outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.2.0 Beta 3 please visit the download page.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be the first release candidate (RC 1), planned for Sept 1 2022.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2022-09-01-1.xml b/archive/entries/2022-09-01-1.xml new file mode 100644 index 0000000000..fc9f8cb6c4 --- /dev/null +++ b/archive/entries/2022-09-01-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.10 Released! + https://www.php.net/archive/2022.php#2022-09-01-1 + 2022-09-01T00:18:05+00:00 + 2022-09-01T00:18:05+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.10. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.10 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-09-01-2.xml b/archive/entries/2022-09-01-2.xml new file mode 100644 index 0000000000..895af27b8a --- /dev/null +++ b/archive/entries/2022-09-01-2.xml @@ -0,0 +1,17 @@ + + + Longhorn PHP 2022 + https://www.php.net/archive/2022.php#2022-09-01-2 + 2022-09-01T12:48:32+00:00 + 2022-09-01T12:48:32+00:00 + + + 2022-11-03 + + longhornphp.png + +
    + Longhorn PHP returns for the fourth year, from November 3-5 2022, in Austin Texas. The three day conference features tutorials and talks across three tracks. The full schedule is live - grab your tickets before October 3rd to get Early Bird pricing! +
    +
    +
    diff --git a/archive/entries/2022-09-01-3.xml b/archive/entries/2022-09-01-3.xml new file mode 100644 index 0000000000..e58bbface0 --- /dev/null +++ b/archive/entries/2022-09-01-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.23 Released! + https://www.php.net/archive/2022.php#2022-09-01-3 + 2022-09-01T13:20:39+00:00 + 2022-09-01T13:20:39+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.23. This is a security release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.23 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-09-01-4.xml b/archive/entries/2022-09-01-4.xml new file mode 100644 index 0000000000..34b61372ee --- /dev/null +++ b/archive/entries/2022-09-01-4.xml @@ -0,0 +1,22 @@ + + + PHP 8.2.0 RC1 available for testing + https://www.php.net/archive/2022.php#2022-09-01-4 + 2022-09-01T14:11:24+00:00 + 2022-09-01T14:11:24+00:00 + + + + +
    +

    The PHP team is pleased to announce the first release candidate of PHP 8.2.0, RC 1. This continues the PHP 8.2 release cycle, the rough outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.2.0 RC1 please visit the download page.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be the second release candidate (RC 2), planned for Sept 15th 2022.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2022-09-15-1.xml b/archive/entries/2022-09-15-1.xml new file mode 100644 index 0000000000..a12a25899d --- /dev/null +++ b/archive/entries/2022-09-15-1.xml @@ -0,0 +1,50 @@ + + + PHP 8.2.0 RC2 available for testing + https://www.php.net/archive/2022.php#2022-09-15-1 + 2022-09-15T07:15:53+00:00 + 2022-09-15T07:15:53+00:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.2.0, RC 2. + This is the second release candidate, continuing the PHP 8.2 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.2.0, RC 2 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    + Please DO NOT use this version in production, it is an early test version. +

    +

    + For more information on the new features and other changes, you can read the + NEWS + file + or the + UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be the third release candidate (RC 3), planned + for 29 September 2022. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2022-09-29-1.xml b/archive/entries/2022-09-29-1.xml new file mode 100644 index 0000000000..6fc21409da --- /dev/null +++ b/archive/entries/2022-09-29-1.xml @@ -0,0 +1,25 @@ + + + PHP 7.4.32 Released! + https://www.php.net/archive/2022.php#2022-09-29-1 + 2022-09-29T09:39:00+00:00 + 2022-09-29T09:39:00+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 7.4.32. This is a security release.

    + +

    This release addresses an infinite recursion with specially +constructed phar files, and prevents a clash with variable name mangling for +the __Host/__Secure HTTP headers.

    + +

    All PHP 7.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 7.4.32 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-09-29-2.xml b/archive/entries/2022-09-29-2.xml new file mode 100644 index 0000000000..b3ba73d08e --- /dev/null +++ b/archive/entries/2022-09-29-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.11 Released! + https://www.php.net/archive/2022.php#2022-09-29-2 + 2022-09-29T15:28:59+00:00 + 2022-09-29T15:28:59+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.11. This is a security release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.11 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-09-29-3.xml b/archive/entries/2022-09-29-3.xml new file mode 100644 index 0000000000..80cc3a2ebc --- /dev/null +++ b/archive/entries/2022-09-29-3.xml @@ -0,0 +1,22 @@ + + + PHP 8.2.0 RC3 available for testing + https://www.php.net/archive/2022.php#2022-09-29-3 + 2022-09-29T17:26:40+00:00 + 2022-09-29T17:26:40+00:00 + + + + +
    +

    The PHP team is pleased to announce the third release candidate of PHP 8.2.0, RC 3. This continues the PHP 8.2 release cycle, the rough outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.2.0 RC3 please visit the download page.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be the fourth release candidate (RC 4), planned for Oct 13th 2022.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2022-09-30-1.xml b/archive/entries/2022-09-30-1.xml new file mode 100644 index 0000000000..c53e578700 --- /dev/null +++ b/archive/entries/2022-09-30-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.24 Released! + https://www.php.net/archive/2022.php#2022-09-30-1 + 2022-09-30T03:13:42+00:00 + 2022-09-30T03:13:42+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.24. This is a security release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.24 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-10-13-1.xml b/archive/entries/2022-10-13-1.xml new file mode 100644 index 0000000000..2ca8d27a13 --- /dev/null +++ b/archive/entries/2022-10-13-1.xml @@ -0,0 +1,46 @@ + + + PHP 8.2.0 RC 4 available for testing + https://www.php.net/archive/2022.php#2022-10-13-1 + 2022-10-13T09:05:11+00:00 + 2022-10-13T09:05:11+00:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.2.0, RC 4. + This is the fourth release candidate, continuing the PHP 8.2 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.2.0, RC 4 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be the fifth release candidate (RC 5), planned + for 27 October 2022. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2022-10-19-1.xml b/archive/entries/2022-10-19-1.xml new file mode 100644 index 0000000000..fbb3b95ded --- /dev/null +++ b/archive/entries/2022-10-19-1.xml @@ -0,0 +1,42 @@ + + + php[tek] 2023 - Call for Papers + https://www.php.net/archive/2022.php#2022-10-19-1 + 2022-10-19T13:35:14-07:00 + 2022-10-19T13:35:14-07:00 + + + 2022-11-30 + + php-tek-2023.png + +
    +

    + We are excited to be bringing back php[tek] in 2023 and will be returning to the + Sheraton O’Hare Hotel which is conveniently located by Chicago O'Hare Airport. +

    + +

    + Whether you are a seasoned speaker or this will be your first time speaking at a conference, + this is the conference you want to submit your talk to. Our panel of professional speakers + will review your abstract and give pointers to help improve your chances of being selected. +

    + +

    + php[tek] 2023 combines leadership, expertise, and networking in one event. A relaxing atmosphere + for tech leaders and developers to share, learn and grow professionally while also providing you + with the knowledge to solve your everyday problems. +

    + +

    + The team at php[architect] will help you through the entire process. For this initial submission, + you don't need to have a completed talk, just provide us a brief overview of your presentation + idea and what level of developer you are targeting. +

    + +

    + Submit your talk today at https://tek.phparch.com/speakers/ . +

    +
    +
    +
    diff --git a/archive/entries/2022-10-19-2.xml b/archive/entries/2022-10-19-2.xml new file mode 100644 index 0000000000..f6b04f257d --- /dev/null +++ b/archive/entries/2022-10-19-2.xml @@ -0,0 +1,46 @@ + + + php[tek] 2023 - Chicago, IL + https://www.php.net/archive/2022.php#2022-10-19-2 + 2022-10-19T13:44:26-07:00 + 2022-10-19T13:44:26-07:00 + + + 2023-05-16 + + php-tek-2023.png + +
    +

    + Join us for the 15th Annual Web Developer Conference, php[tek] 2023, May 16-18 2023. +

    + +

    + We are so excited to be bringing back php[tek] in 2023 and will be returning to the + Sheraton O’Hare Hotel which is conveniently located by Chicago O'Hare Airport. +

    + + +

    + php[tek] 2023 combines leadership, expertise, and networking in one event. A relaxing + atmosphere for tech leaders and developers to share, learn and grow professionally while + also providing you with the knowledge to solve your everyday problems. +

    + + +

    + We are the longest-running web developer conference in the United States, focusing on the + PHP programming language. The event is broken up into multiple days. The main conference + happens over the course of 3 days (May 16-18) and includes keynotes, talks, and networking + options. It will be broken into three tracks and will cover a range of topics. +

    + + +

    + Blind Early Bird tickets are already available and offer the best value. + Head over to https://tek.phparch.com and get yours today! +

    + +
    +
    +
    diff --git a/archive/entries/2022-10-27-1.xml b/archive/entries/2022-10-27-1.xml new file mode 100644 index 0000000000..9f67193677 --- /dev/null +++ b/archive/entries/2022-10-27-1.xml @@ -0,0 +1,22 @@ + + + PHP 8.2.0 RC5 available for testing + https://www.php.net/archive/2022.php#2022-10-27-1 + 2022-10-27T17:48:08+00:00 + 2022-10-27T17:48:08+00:00 + + + + +
    +

    The PHP team is pleased to announce the fifth release candidate of PHP 8.2.0, RC 5. This continues the PHP 8.2 release cycle, the rough outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.2.0 RC5 please visit the download page.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be the sixth release candidate (RC 6), planned for Nov 10th 2022.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2022-10-28-1.xml b/archive/entries/2022-10-28-1.xml new file mode 100644 index 0000000000..ce29b038a2 --- /dev/null +++ b/archive/entries/2022-10-28-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.25 Released! + https://www.php.net/archive/2022.php#2022-10-28-1 + 2022-10-28T09:40:48+00:00 + 2022-10-28T09:40:48+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.25. This is a security fix release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.25 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-10-28-2.xml b/archive/entries/2022-10-28-2.xml new file mode 100644 index 0000000000..5029c5f108 --- /dev/null +++ b/archive/entries/2022-10-28-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.12 Released! + https://www.php.net/archive/2022.php#2022-10-28-2 + 2022-10-28T14:20:26+00:00 + 2022-10-28T14:20:26+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.12. This is a security release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.12 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-11-03-1.xml b/archive/entries/2022-11-03-1.xml new file mode 100644 index 0000000000..4490d78312 --- /dev/null +++ b/archive/entries/2022-11-03-1.xml @@ -0,0 +1,25 @@ + + + PHP 7.4.33 Released! + https://www.php.net/archive/2022.php#2022-11-03-1 + 2022-11-03T08:28:02+00:00 + 2022-11-03T08:28:02+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 7.4.33.

    + +

    This is security release that fixes an OOB read due to insufficient +input validation in imageloadfont(), and a buffer overflow in +hash_update() on long parameter.

    + +

    All PHP 7.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 7.4.33 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-11-10-1.xml b/archive/entries/2022-11-10-1.xml new file mode 100644 index 0000000000..2941b1d070 --- /dev/null +++ b/archive/entries/2022-11-10-1.xml @@ -0,0 +1,45 @@ + + + PHP 8.2.0 RC 6 available for testing + https://www.php.net/archive/2022.php#2022-11-10-1 + 2022-11-10T13:30:00+00:00 + 2022-11-10T13:30:00+00:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.2.0, RC 6. + This is the sixth release candidate, continuing the PHP 8.2 + release cycle, the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.2.0, RC 6 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be the seventh release candidate (RC 7), planned for Nov 24th 2022. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2022-11-24-1.xml b/archive/entries/2022-11-24-1.xml new file mode 100644 index 0000000000..96558a99b7 --- /dev/null +++ b/archive/entries/2022-11-24-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.13 Released! + https://www.php.net/archive/2022.php#2022-11-24-1 + 2022-11-24T14:21:02+00:00 + 2022-11-24T14:21:02+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.13. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.13 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2022-11-24-2.xml b/archive/entries/2022-11-24-2.xml new file mode 100644 index 0000000000..10c15a95b4 --- /dev/null +++ b/archive/entries/2022-11-24-2.xml @@ -0,0 +1,46 @@ + + + PHP 8.2.0 RC7 available for testing + https://www.php.net/archive/2022.php#2022-11-24-2 + 2022-11-24T15:43:33+00:00 + 2022-11-24T15:43:33+00:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.2.0, RC 7. + This is the seventh release candidate, continuing the PHP 8.2 + release cycle, the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.2.0, RC 7 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be the production-ready, general availability + release, planned for December 8th 2022. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2022-11-26-1.xml b/archive/entries/2022-11-26-1.xml new file mode 100644 index 0000000000..90fa362dfa --- /dev/null +++ b/archive/entries/2022-11-26-1.xml @@ -0,0 +1,27 @@ + + + PHP 8.0.26 Released! + https://www.php.net/archive/2022.php#2022-11-26-1 + 2022-11-26T17:48:14+00:00 + 2022-11-26T17:48:14+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.26. This is a bug fix release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.26 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    + +

    Please note, this is the last bug-fix release for the 8.0.x series. +Security fix support will continue until 26 Nov 2023. +For more information, please check our +Supported Versions page.

    +
    +
    +
    diff --git a/archive/entries/2022-12-06-1.xml b/archive/entries/2022-12-06-1.xml new file mode 100644 index 0000000000..8c99b80e16 --- /dev/null +++ b/archive/entries/2022-12-06-1.xml @@ -0,0 +1,41 @@ + + + International PHP Conference Berlin 2023 + https://www.php.net/archive/2022.php#2022-12-06-1 + 2022-12-06T16:11:55+01:00 + 2022-12-06T16:11:55+01:00 + + + 2023-05-26 + + IPC_SE23_Logo.png + +
    +

    + The International PHP Conference is the world's first PHP conference and stands since more than a decade for top-notch pragmatic expertise in PHP and web technologies. At the IPC, internationally renowned experts from the PHP industry meet up with PHP users and developers from large and small companies. Here is the place where concepts emerge and ideas are born - the IPC signifies knowledge transfer at highest level. +

    +

    + All delegates of the International PHP Conference have, in addition to PHP program, free access to the entire range of the webinale taking place at the same time. +

    +

    +Basic facts: +

    +

    Date: May 22 ‒ 26, 2023

    +

    Location: Maritim ProArte Hotel, Berlin or Online

    + +

    Highlights:

    +
      +
    • 70+ best practice sessions
    • +
    • 50+ international top speakers
    • +
    • PHPower: Hands-on Power Workshops
    • +
    • Expo with exciting exhibitors on May 23 & 24
    • +
    • Conference Combo: Visit the webinale for free
    • +
    • All inclusive: Changing buffets, snacks & refreshing drinks
    • +
    • Official certificate for attendees
    • +
    • Free Swag: Developer bag, T-Shirt, magazines etc.
    • +
    • Exclusive networking events
    • +
    +

    For further information on the International PHP Conference Berlin visit: www.phpconference.com/berlin-en/

    +
    +
    +
    diff --git a/archive/entries/2022-12-08-1.xml b/archive/entries/2022-12-08-1.xml new file mode 100644 index 0000000000..85754e0ddc --- /dev/null +++ b/archive/entries/2022-12-08-1.xml @@ -0,0 +1,36 @@ + + + PHP 8.2.0 Released! + https://www.php.net/archive/2022.php#2022-12-08-1 + 2022-12-08T06:26:27+00:00 + 2022-12-08T06:26:27+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.2.0. This release marks the latest minor release of the PHP language.

    +

    PHP 8.2 comes with numerous improvements and new features such as:

    + +

    + For source downloads of PHP 8.2.0 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +

    + The migration guide is available in the PHP Manual. + Please consult it for the detailed list of new features and backward incompatible changes. +

    +

    Kudos to all the contributors and supporters!

    +
    +
    +
    diff --git a/archive/entries/2022-12-17-1.xml b/archive/entries/2022-12-17-1.xml new file mode 100644 index 0000000000..a76c9aedf3 --- /dev/null +++ b/archive/entries/2022-12-17-1.xml @@ -0,0 +1,23 @@ + + + phpday 2023 + https://www.php.net/archive/2022.php#2022-12-17-1 + 2022-12-17T07:24:20+00:00 + 2022-12-17T07:24:20+00:00 + + + 2023-01-16 + + phpday2023.png + +
    +

    Join us for the 20th edition of phpday! On May 18-19 2023 you can attend the in-person event in Verona (Italy) or online.

    +

    Organized by GrUSP (the Italian PHP user group), phpday is one of the first historic European conferences dedicated to PHP, development tools and best practices. We are a community whose intent is to improve the web development ecosystem in Italy and to organize affordable, high-quality events and workshops for developers.

    +

    We are committed to diversity, inclusion and accessibility values: we apply a Code of Conduct and we have a Scholarship program.

    +

    Our Call For Papers will be open until January 16th and we're accepting submissions for 25 or 50 minute talks. The event is international and all sessions will be in English. We really appreciate submissions from first time speakers, and we can offer support for the entire process.

    +

    Don't miss the opportunity to take part in this amazing community event with international speakers from all over the world where everyone can share, learn and grow professionally.

    +

    Do you only want to attend? Grab your ticket at a discounted price.

    +

    Follow us on Twitter and Facebook

    +
    +
    +
    diff --git a/archive/entries/2023-01-05-1.xml b/archive/entries/2023-01-05-1.xml new file mode 100644 index 0000000000..5484f89a6c --- /dev/null +++ b/archive/entries/2023-01-05-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.14 Released! + https://www.php.net/archive/2023.php#2023-01-05-1 + 2023-01-05T17:47:14+00:00 + 2023-01-05T17:47:14+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.14. This is a security release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.14 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-01-05-2.xml b/archive/entries/2023-01-05-2.xml new file mode 100644 index 0000000000..aa7c66ae48 --- /dev/null +++ b/archive/entries/2023-01-05-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.1 Released! + https://www.php.net/archive/2023.php#2023-01-05-2 + 2023-01-05T18:34:21+00:00 + 2023-01-05T18:34:21+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.1. This is a security release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.1 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-01-05-3.xml b/archive/entries/2023-01-05-3.xml new file mode 100644 index 0000000000..28b30d4cb2 --- /dev/null +++ b/archive/entries/2023-01-05-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.27 Released! + https://www.php.net/archive/2023.php#2023-01-05-3 + 2023-01-05T19:00:22+00:00 + 2023-01-05T19:00:22+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.27. This is a security release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.27 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-02-02-1.xml b/archive/entries/2023-02-02-1.xml new file mode 100644 index 0000000000..29062653d8 --- /dev/null +++ b/archive/entries/2023-02-02-1.xml @@ -0,0 +1,23 @@ + + + PHP 8.2.2 Released! + https://www.php.net/archive/2023.php#2023-02-02-1 + 2023-02-02T14:48:02+00:00 + 2023-02-02T14:48:02+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.2.2. This is a bug fix release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.2 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +
    +
    +
    diff --git a/archive/entries/2023-02-02-2.xml b/archive/entries/2023-02-02-2.xml new file mode 100644 index 0000000000..1494ccdc18 --- /dev/null +++ b/archive/entries/2023-02-02-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.15 Released! + https://www.php.net/archive/2023.php#2023-02-02-2 + 2023-02-02T23:57:50+00:00 + 2023-02-02T23:57:50+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.15. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.15 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-02-14-1.xml b/archive/entries/2023-02-14-1.xml new file mode 100644 index 0000000000..4a25120410 --- /dev/null +++ b/archive/entries/2023-02-14-1.xml @@ -0,0 +1,24 @@ + + + PHP 8.0.28 Released! + https://www.php.net/archive/2023.php#2023-02-14-1 + 2023-02-14T14:13:12+00:00 + 2023-02-14T14:13:12+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.0.28. This is a security release +that addresses CVE-2023-0567, CVE-2023-0568, and CVE-2023-0662. +

    + +

    All PHP 8.0 users are advised to upgrade to this version.

    + +

    For source downloads of PHP 8.0.28 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-02-14-2.xml b/archive/entries/2023-02-14-2.xml new file mode 100644 index 0000000000..f4a8f05cdf --- /dev/null +++ b/archive/entries/2023-02-14-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.3 Released! + https://www.php.net/archive/2023.php#2023-02-14-2 + 2023-02-14T15:52:57+00:00 + 2023-02-14T15:52:57+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.3. This is a security release that addresses CVE-2023-0567, CVE-2023-0568, and CVE-2023-0662.

    + +

    All PHP 8.2 users are advised to upgrade to this version.

    + +

    For source downloads of PHP 8.2.3 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-02-14-3.xml b/archive/entries/2023-02-14-3.xml new file mode 100644 index 0000000000..7764e4ce9c --- /dev/null +++ b/archive/entries/2023-02-14-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.16 Released! + https://www.php.net/archive/2023.php#2023-02-14-3 + 2023-02-14T17:50:17+00:00 + 2023-02-14T17:50:17+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.16. This is a security release that addresses CVE-2023-0567, CVE-2023-0568, and CVE-2023-0662.

    + +

    All PHP 8.1 users are advised to upgrade to this version.

    + +

    For source downloads of PHP 8.1.16 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-02-15-1.xml b/archive/entries/2023-02-15-1.xml new file mode 100644 index 0000000000..231379dc87 --- /dev/null +++ b/archive/entries/2023-02-15-1.xml @@ -0,0 +1,22 @@ + + + SymfonyLive Paris 2023 + https://www.php.net/archive/2023.php#2023-02-15-1 + 2023-02-07T08:22:17+00:00 + 2023-02-07T08:22:17+00:00 + + + 2023-03-22 + + symfonylive-paris-2023.png + +
    +

    + SymfonyLive Paris 2023 is the Symfony conference for French-speaking developers. Two days of workshops (March 21-22) followed by two days (March 23-24) full of talks on PHP, Symfony and its ecosystem. +

    +

    + Check out all the conference details +

    +
    +
    +
    diff --git a/archive/entries/2023-02-15-2.xml b/archive/entries/2023-02-15-2.xml new file mode 100644 index 0000000000..9fdc0b5d6d --- /dev/null +++ b/archive/entries/2023-02-15-2.xml @@ -0,0 +1,22 @@ + + + SymfonyOnline June 2023 + https://www.php.net/archive/2023.php#2023-02-15-2 + 2023-02-07T08:27:14+00:00 + 2023-02-07T08:27:14+00:00 + + + 2023-06-14 + + symfonyonline-june-2023.png + +
    +

    + SymfonyOnline June 2023 is the online conference in English for Symfony and PHP developers from all around the World. Two days of online workshops (June 13-14) followed by two days (June 15-16) full of online talks on PHP, Symfony and its ecosystem. +

    +

    + Check out all the conference details +

    +
    +
    +
    diff --git a/archive/entries/2023-02-15-3.xml b/archive/entries/2023-02-15-3.xml new file mode 100644 index 0000000000..0c4f5f7b49 --- /dev/null +++ b/archive/entries/2023-02-15-3.xml @@ -0,0 +1,25 @@ + + + SymfonyCon Brussels 2023 + https://www.php.net/archive/2023.php#2023-02-15-3 + 2023-02-07T08:32:51+00:00 + 2023-02-07T08:32:51+00:00 + + + 2023-12-06 + + symfonycon-brussels-2023.png + +
    +

    + SymfonyCon Brussels 2023 is the global conference in English for Symfony and PHP developers. Two days of workshops (December 5-6) followed by two days (December 7-8) full of talks on PHP, Symfony and its ecosystem. +

    +

    + Join us and discover the amazing city of Brussels (Belgium) while you share fun and knowledge with developers from all around the World. +

    +

    + Check out all the conference details +

    +
    +
    +
    diff --git a/archive/entries/2023-03-16-1.xml b/archive/entries/2023-03-16-1.xml new file mode 100644 index 0000000000..8400fe9381 --- /dev/null +++ b/archive/entries/2023-03-16-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.17 Released! + https://www.php.net/archive/2023.php#2023-03-16-1 + 2023-03-16T12:01:57+00:00 + 2023-03-16T12:01:57+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.17. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.17 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-03-16-2.xml b/archive/entries/2023-03-16-2.xml new file mode 100644 index 0000000000..e8726309dd --- /dev/null +++ b/archive/entries/2023-03-16-2.xml @@ -0,0 +1,24 @@ + + + PHP 8.2.4 Released! + https://www.php.net/archive/2023.php#2023-03-16-2 + 2023-03-16T13:18:09+00:00 + 2023-03-16T13:18:09+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.2.4. This is a bug fix release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    + For source downloads of PHP 8.2.4 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +
    +
    +
    diff --git a/archive/entries/2023-03-20-1.xml b/archive/entries/2023-03-20-1.xml new file mode 100644 index 0000000000..ccfc041cf6 --- /dev/null +++ b/archive/entries/2023-03-20-1.xml @@ -0,0 +1,19 @@ + + + Web Summer Camp 2023 + https://www.php.net/archive/2023.php#2023-03-20-1 + 2023-03-20T17:53:01+01:00 + 2023-03-20T17:53:01+01:00 + + + 2023-08-31 + + websc2023.svg + +
    + Web Summer Camp is a conference with hands-on workshops for web developers, designers and decision-makers. Besides 2 tracks about UX/PM processes and web technologies there will be 3 tracks for non-beginner developers with hands-on workshops on topics related to JavaScript, PHP and Symfony. Take home practical knowhow on relevant tools and techniques useful in your every day work and join us in person this summer on the Croatian coast. + +All the information on this year's event you can find on our web site +
    +
    +
    diff --git a/archive/entries/2023-04-13-1.xml b/archive/entries/2023-04-13-1.xml new file mode 100644 index 0000000000..57f7195899 --- /dev/null +++ b/archive/entries/2023-04-13-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.5 Released! + https://www.php.net/archive/2023.php#2023-04-13-1 + 2023-04-13T15:24:07+00:00 + 2023-04-13T15:24:07+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.5. This is a bug fix release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.5 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-04-13-2.xml b/archive/entries/2023-04-13-2.xml new file mode 100644 index 0000000000..bc58e53142 --- /dev/null +++ b/archive/entries/2023-04-13-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.18 Released! + https://www.php.net/archive/2023.php#2023-04-13-2 + 2023-04-13T23:59:59+00:00 + 2023-04-13T23:59:59+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.18. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.18 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-05-11-1.xml b/archive/entries/2023-05-11-1.xml new file mode 100644 index 0000000000..1ace88e074 --- /dev/null +++ b/archive/entries/2023-05-11-1.xml @@ -0,0 +1,25 @@ + + + PHP 8.2.6 Released! + https://www.php.net/archive/2023.php#2023-05-11-1 + 2023-05-11T10:08:59+00:00 + 2023-05-11T10:08:59+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.2.6. This is a bug fix release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.6 please visit our downloads + page, + Windows source and binaries can be found on + windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +
    +
    +
    diff --git a/archive/entries/2023-05-11-2.xml b/archive/entries/2023-05-11-2.xml new file mode 100644 index 0000000000..9d29771118 --- /dev/null +++ b/archive/entries/2023-05-11-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.19 Released! + https://www.php.net/archive/2023.php#2023-05-11-2 + 2023-05-11T23:40:59+00:00 + 2023-05-11T23:40:59+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.19. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.19 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-05-23-1.xml b/archive/entries/2023-05-23-1.xml new file mode 100644 index 0000000000..fb4ba1c259 --- /dev/null +++ b/archive/entries/2023-05-23-1.xml @@ -0,0 +1,22 @@ + + + Dutch PHP Conference 2023 - Call for Papers + https://www.php.net/archive/2023.php#2023-05-23-1 + 2023-05-23T10:52:58+00:00 + 2023-05-23T10:52:58+00:00 + + + 2023-07-28 + + DPC-logo.png + +
    +

    We are back for the 17th edition of the Dutch PHP Conference! We hope you will join us on October 13, 2023 for the online conference. 🐘🎉

    +

    We’re also looking for high-quality, technical and non-technical sessions from speakers who can cover advanced topics and keep our audience inspired.

    +

    We’ve had great speakers presenting talks about the PHP ecosystem, frameworks, DevOps, architecture, JavaScript, scaling, testing, performance, security and more. And we would like to advance on these very topics for this year’s conference as well.

    +

    But we also would like to invite speakers to talk about non-technical subjects that are increasingly instrumental in maintaining success as a developer or development team. These are topics like communication, understanding, relationships, (self) management and even the business and economics part of development. In other words: the soft skills that complement the deep technical skills. And about the surrounding environment necessary to be successful as a technical developer.

    +

    This invitation is intentionally a bit broad in the hope to inspire everyone to share their ideas and insights and hard-fought experience in the broader development arena that we all thrive in.

    +

    The call for papers is open up to and including July 28th

    +
    +
    +
    diff --git a/archive/entries/2023-06-03-1.xml b/archive/entries/2023-06-03-1.xml new file mode 100644 index 0000000000..1857424399 --- /dev/null +++ b/archive/entries/2023-06-03-1.xml @@ -0,0 +1,23 @@ + + + Longhorn PHP 2023 - Call for Papers + https://www.php.net/archive/2023.php#2023-06-03-1 + 2023-06-03T19:48:01+00:00 + 2023-07-11T04:00:00+00:00 + + + 2023-07-20 + + longhornphp.png + +
    + Longhorn PHP is returning for 2023! Held in Austin, TX, the conference runs from Nov 2 - Nov 4, with a tutorial day on Thursday, followed by two main conference days. + We are a community-run conference for PHP developers in Texas and beyond. + We are excited to bring PHP developers from all backgrounds together again for three days of fun and education. + We are currently accepting talk and tutorial submissions. + While the CFP is open, we also have our Blind Bird tickets available for sale. + Register today!. + Follow us on Twitter, Mastodon, or signup for emails at longhornphp.com to get notified with important conference updates. +
    +
    +
    diff --git a/archive/entries/2023-06-08-1.xml b/archive/entries/2023-06-08-1.xml new file mode 100644 index 0000000000..d5d6e41fff --- /dev/null +++ b/archive/entries/2023-06-08-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.29 Released! + https://www.php.net/archive/2023.php#2023-06-08-1 + 2023-06-08T09:03:22+00:00 + 2023-06-08T09:03:22+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.29. This is a security release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.29 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-06-08-2.xml b/archive/entries/2023-06-08-2.xml new file mode 100644 index 0000000000..063d900f15 --- /dev/null +++ b/archive/entries/2023-06-08-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.7 Released! + https://www.php.net/archive/2023.php#2023-06-08-2 + 2023-06-08T16:50:22+00:00 + 2023-06-08T16:50:22+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.7. This is a security release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.7 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-06-08-3.xml b/archive/entries/2023-06-08-3.xml new file mode 100644 index 0000000000..78c80e5d3b --- /dev/null +++ b/archive/entries/2023-06-08-3.xml @@ -0,0 +1,22 @@ + + + PHP 8.3.0 Alpha 1 available for testing + https://www.php.net/archive/2023.php#2023-06-08-3 + 2023-06-08T18:14:14+00:00 + 2023-06-08T18:14:14+00:00 + + + + +
    +

    The PHP team is pleased to announce the first testing release of PHP 8.3.0, Alpha 1. This starts the PHP 8.3 release cycle, the rough outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.3.0 Alpha 1 please visit the download page.

    +

    Please carefully test this version and report any issues found using the bug tracking system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be Alpha 2, planned for 22 Jun 2023.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2023-06-08-4.xml b/archive/entries/2023-06-08-4.xml new file mode 100644 index 0000000000..0cd58ca63f --- /dev/null +++ b/archive/entries/2023-06-08-4.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.20 Released! + https://www.php.net/archive/2023.php#2023-06-08-4 + 2023-06-08T18:24:16+00:00 + 2023-06-08T18:24:16+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.20. This is a security release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.20 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-06-08-5.xml b/archive/entries/2023-06-08-5.xml new file mode 100644 index 0000000000..110ce95d04 --- /dev/null +++ b/archive/entries/2023-06-08-5.xml @@ -0,0 +1,38 @@ + + + International PHP Conference Munich 2023 + https://www.php.net/archive/2023.php#2023-06-08-5 + 2023-06-08T11:11:55+01:00 + 2023-06-08T11:11:55+01:00 + + + 2023-10-27 + + IPC_Fall23_Logo.png + +
    +

    + The International PHP Conference is the world's first PHP conference and stands since more than a decade for top-notch pragmatic expertise in PHP and web technologies. At the IPC, internationally renowned experts from the PHP industry meet up with PHP users and developers from large and small companies. Here is the place where concepts emerge and ideas are born - the IPC signifies knowledge transfer at highest level. +

    +

    +Basic facts: +

    +

    Date: October 23 ‒ 27, 2023

    +

    Location: Holiday Inn Munich City Centre, Munich or Online

    + +

    Highlights:

    +
      +
    • 70+ best practice sessions
    • +
    • 50+ international top speakers
    • +
    • PHPower: Hands-on Power Workshops
    • +
    • Expo with exciting exhibitors on October 24 & 25
    • +
    • All inclusive: Changing buffets, snacks & refreshing drinks
    • +
    • Official certificate for attendees
    • +
    • Free Goodies: Developer bag, T-Shirt, magazines etc.
    • +
    • Exclusive networking events
    • +
    +

    For further information on the International PHP Conference Berlin visit: www.phpconference.com/munich/

    +
    +
    +
    + diff --git a/archive/entries/2023-06-22-1.xml b/archive/entries/2023-06-22-1.xml new file mode 100644 index 0000000000..48908dd4cc --- /dev/null +++ b/archive/entries/2023-06-22-1.xml @@ -0,0 +1,22 @@ + + + PHP 8.3.0 Alpha 2 available for testing + https://www.php.net/archive/2023.php#2023-06-22-1 + 2023-06-22T11:15:33-07:00 + 2023-06-22T11:15:33-07:00 + + + + +
    +

    The PHP team is pleased to announce the second testing release of PHP 8.3.0, Alpha 2. This continues the PHP 8.3 release cycle, the rouch outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.3.0 Alpha 2 please visit download page.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be Alpha 3, planned for 6 July 2023.

    +

    The signatures for this release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better!

    +
    +
    +
    diff --git a/archive/entries/2023-07-06-1.xml b/archive/entries/2023-07-06-1.xml new file mode 100644 index 0000000000..d9369a8211 --- /dev/null +++ b/archive/entries/2023-07-06-1.xml @@ -0,0 +1,22 @@ + + + PHP 8.3.0 Alpha 3 available for testing + https://www.php.net/archive/2023.php#2023-07-06-1 + 2023-07-06T09:43:06+00:00 + 2023-07-06T09:43:06+00:00 + + + + +
    +

    The PHP team is pleased to announce the third testing release of PHP 8.3.0, Alpha 3. This continues the PHP 8.3 release cycle, the rough outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.3.0 Alpha 3 please visit the download page.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be Beta 1, planned for 20 Jul 2023.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2023-07-06-2.xml b/archive/entries/2023-07-06-2.xml new file mode 100644 index 0000000000..2277f478cd --- /dev/null +++ b/archive/entries/2023-07-06-2.xml @@ -0,0 +1,23 @@ + + + PHP 8.2.8 Released! + https://www.php.net/archive/2023.php#2023-07-06-2 + 2023-07-06T09:47:01+00:00 + 2023-07-06T09:47:01+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.2.8. This is a bug fix release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.8 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +
    +
    +
    diff --git a/archive/entries/2023-07-06-3.xml b/archive/entries/2023-07-06-3.xml new file mode 100644 index 0000000000..2b36b2ba8f --- /dev/null +++ b/archive/entries/2023-07-06-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.21 Released! + https://www.php.net/archive/2023.php#2023-07-06-3 + 2023-07-06T14:45:21+00:00 + 2023-07-06T14:45:21+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.21. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.21 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-07-14-1.xml b/archive/entries/2023-07-14-1.xml new file mode 100644 index 0000000000..aa21115ceb --- /dev/null +++ b/archive/entries/2023-07-14-1.xml @@ -0,0 +1,31 @@ + + + CakeFest 2023: The Official CakePHP Conference + https://www.php.net/archive/2023.php#2023-07-14-1 + 2023-07-14T06:50:23+00:00 + 2023-07-14T06:50:23+00:00 + + + 2023-09-28 + + cakefest-2017.png + +
    +

    + CakeFest 2023 - our annual conference dedicated to CakePHP. One full workshop day (plus one hybrid day) that is an ideal way to learn as both beginners and advanced users, followed by days of presentations, discussions and talks on CakePHP related technologies. CakeFest 2023 will be held in Los Angeles, CA - we are excited to see you there! +

    +

    + Date: September 28, 29 & 30
    + Time: 09:00am PDT +

    +

    + Check out the full schedule on CakeFest.org +

    +
    +
    +
    + + + + + diff --git a/archive/entries/2023-07-20-1.xml b/archive/entries/2023-07-20-1.xml new file mode 100644 index 0000000000..6165602108 --- /dev/null +++ b/archive/entries/2023-07-20-1.xml @@ -0,0 +1,31 @@ + + + PHP 8.3.0 Beta 1 available for testing + https://www.php.net/archive/2023.php#2023-07-20-1 + 2023-07-20T08:11:32-07:00 + 2023-07-20T08:11:32-07:00 + + + + +
    +

    + The PHP team is pleased to announce the first beta release of PHP 8.3.0, Beta 1. + This continues the PHP 8.3 release cycle, the rough outline of which is specified in the + PHP Wiki. +

    +

    For source downloads of PHP 8.3.0 Beta 1 please visit the download page.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file, + or the UPGRADING + file for a complete list of upgrading notes. These files can also be found in the release archive. +

    +

    The next release will be Beta 2, planned for Aug 3 2023.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2023-07-29-1.xml b/archive/entries/2023-07-29-1.xml new file mode 100644 index 0000000000..84c4d10e9e --- /dev/null +++ b/archive/entries/2023-07-29-1.xml @@ -0,0 +1,45 @@ + + + PHP Velho Oeste 2023 + https://www.php.net/archive/2023.php#2023-07-29-1 + 2023-06-24T11:37:40+03:00 + 2023-06-24T11:37:40+03:00 + + + 2023-07-29 + + php_velho_oeste_350x300px.png + + +
    +

    + PHP Velho Oeste + is a community that aims to move the PHP language ecosystem in the western region of Santa Catarina, + Brazil, known as Velho Oeste(Old West). +

    + +

    + Knowledge + Networking +

    + +

    + In this event, several relevant topics will be covered, from the latest language updates to best + development practices. You will have the opportunity to expand your PHP knowledge and stay up to date + with the latest market trends. +

    + +

    + Date: July 29, 2023 +

    + +

    + Location: Unochapecó Noble Hall in Chapecó, Santa Catarina, Brazil. +

    + +

    For more information about the event, visit our website: + PHP Velho Oeste +

    +
    +
    +
    diff --git a/archive/entries/2023-08-03-1.xml b/archive/entries/2023-08-03-1.xml new file mode 100644 index 0000000000..14dc28ad7c --- /dev/null +++ b/archive/entries/2023-08-03-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.22 Released! + https://www.php.net/archive/2023.php#2023-08-03-1 + 2023-08-03T15:07:49+00:00 + 2023-08-03T15:07:49+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.22. This is a security release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.22 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-08-03-2.xml b/archive/entries/2023-08-03-2.xml new file mode 100644 index 0000000000..9ab1da5e5d --- /dev/null +++ b/archive/entries/2023-08-03-2.xml @@ -0,0 +1,31 @@ + + + PHP 8.3.0 Beta 2 available for testing + https://www.php.net/archive/2023.php#2023-08-03-2 + 2023-08-03T11:50:26-07:00 + 2023-08-03T11:50:26-07:00 + + + + +
    +

    + The PHP team is pleased to announce the second beta release of PHP 8.3.0, Beta 2. + This continues the PHP 8.3 release cycle, the rough outline of which is specified in the + PHP Wiki. +

    +

    For source downloads of PHP 8.3.0 Beta 2 please visit the download page.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file, + or the UPGRADING + file for a complete list of upgrading notes. These files can also be found in the release archive. +

    +

    The next release will be Beta 3, planned for Aug 17 2023.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2023-08-04-1.xml b/archive/entries/2023-08-04-1.xml new file mode 100644 index 0000000000..6aa52ed2a8 --- /dev/null +++ b/archive/entries/2023-08-04-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.0.30 Released! + https://www.php.net/archive/2023.php#2023-08-04-1 + 2023-08-04T18:29:29+00:00 + 2023-08-04T18:29:29+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.0.30. This is a security release.

    + +

    All PHP 8.0 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.0.30 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-08-16-1.xml b/archive/entries/2023-08-16-1.xml new file mode 100644 index 0000000000..254b3b9f8d --- /dev/null +++ b/archive/entries/2023-08-16-1.xml @@ -0,0 +1,25 @@ + + + PHP 8.2.9 Released! + https://www.php.net/archive/2023.php#2023-08-16-1 + 2023-08-16T18:06:57+00:00 + 2023-08-16T18:06:57+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.2.9. This is a security release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    Windows source and binaries are not synchronized and do not contain a fix for GH-11854.

    + +

    For source downloads of PHP 8.2.9 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +
    +
    +
    diff --git a/archive/entries/2023-08-17-1.xml b/archive/entries/2023-08-17-1.xml new file mode 100644 index 0000000000..0032ac5721 --- /dev/null +++ b/archive/entries/2023-08-17-1.xml @@ -0,0 +1,31 @@ + + + PHP 8.3.0 Beta 3 available for testing + https://www.php.net/archive/2023.php#2023-08-17-1 + 2023-08-17T07:26:35-07:00 + 2023-08-17T07:26:35-07:00 + + + + +
    +

    + The PHP team is pleased to announce the third beta release of PHP 8.3.0, Beta 3. + This continues the PHP 8.3 release cycle, the rough outline of which is specified in the + PHP Wiki. +

    +

    For source downloads of PHP 8.3.0 Beta 3 please visit the download page.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file, + or the UPGRADING + file for a complete list of upgrading notes. These files can also be found in the release archive. +

    +

    The next release will be RC 1, planned for Aug 31 2023.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2023-08-20-1.xml b/archive/entries/2023-08-20-1.xml new file mode 100644 index 0000000000..1d84da3518 --- /dev/null +++ b/archive/entries/2023-08-20-1.xml @@ -0,0 +1,31 @@ + + + ConFoo Montreal 2024: Call for Papers is Now Open + https://www.php.net/archive/2023.php#2023-08-20-1 + 2023-08-20T16:59:09-04:00 + 2023-08-20T16:59:09-04:00 + + + 2023-09-23 + + confoo_2024.png + +
    +

    + ConFoo is a multi-technology conference specifically crafted for developers. With over 150 presentations, offered by local and international speakers, the conference wish to bring outstanding diversity of content to expand your knowledge, increase developer’s skills and productivity. +

    +

    + Want to share your knowledge and expertise to hundreds of experts in your field? Want to be part of our talented team of renowned speakers? The team at ConFoo is looking for speakers and conference proposals for its 2024 event in Montreal. +

    +

    + Our talks are both dynamic and educational and are set to help participants build on their career. We recommend a 45-minute format, including a 10 Q&A session at the end. +

    +

    + You have until September 23, 2023, to submit your proposal. +

    +

    + Until then, participants can enjoy a 400$ discount on their registration until September 23. +

    +
    +
    +
    diff --git a/archive/entries/2023-08-24-1.xml b/archive/entries/2023-08-24-1.xml new file mode 100644 index 0000000000..e989560984 --- /dev/null +++ b/archive/entries/2023-08-24-1.xml @@ -0,0 +1,31 @@ + + + Teknasyon PHPKonf 2023 + https://www.php.net/archive/2023.php#2023-08-24-1 + 2023-08-24T12:52:07+00:00 + 2023-08-24T12:52:07+00:00 + + + 2023-09-02 + + PHPKonf-Logo-2023.png + +
    +

    + What is PHPKonf +

    + +

    + PHPKonf, the signature event of Istanbul PHP, is a landmark for PHP enthusiasts around the world. Now stepping into its 9th year, this annual conference is renowned for its dedication to spreading knowledge and building connections within the PHP community. Join us at PHPKonf, where PHP meets Istanbul. +

    + +

    + Date: September 2, 2023 in Istanbul, Turkiye. +

    + +

    For more information about the event, visit the website: + Teknasyon PHPKonf 2023 +

    +
    +
    +
    diff --git a/archive/entries/2023-08-28-1.xml b/archive/entries/2023-08-28-1.xml new file mode 100644 index 0000000000..846f54b06e --- /dev/null +++ b/archive/entries/2023-08-28-1.xml @@ -0,0 +1,18 @@ + + + Longhorn PHP 2023 + https://www.php.net/archive/2023.php#2023-08-28-1 + 2023-08-28T05:19:38+00:00 + 2023-08-28T05:19:38+00:00 + + + 2023-11-02 + + longhornphp.png + +
    +

    Hosted in Austin, Texas, Longhorn PHP is back for its fifth year! This year's conference will be start with an optional tutorial day on Thursday, November 2, with main conference days on Friday and Saturday, November 3-4.

    +

    Longhorn PHP is a regional conference designed to help PHP developers level up their craft and connect with the larger PHP community. Our full schedule is available now, with Early Bird pricing available through the end of September.

    +
    +
    +
    diff --git a/archive/entries/2023-08-31-1.xml b/archive/entries/2023-08-31-1.xml new file mode 100644 index 0000000000..e19624eea1 --- /dev/null +++ b/archive/entries/2023-08-31-1.xml @@ -0,0 +1,46 @@ + + + PHP 8.3.0 RC 1 available for testing + https://www.php.net/archive/2023.php#2023-08-31-1 + 2023-08-31T11:23:53+00:00 + 2023-08-31T11:23:53+00:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.3.0, RC 1. + This is the first release candidate, continuing the PHP 8.3 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.3.0, RC 1 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be the second release candidate (RC 2), planned + for 14 September 2023. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2023-08-31-2.xml b/archive/entries/2023-08-31-2.xml new file mode 100644 index 0000000000..d152961969 --- /dev/null +++ b/archive/entries/2023-08-31-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.10 Released! + https://www.php.net/archive/2023.php#2023-08-31-2 + 2023-08-31T16:15:39+00:00 + 2023-08-31T16:15:39+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.10. This is a bug fix release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.10 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-08-31-3.xml b/archive/entries/2023-08-31-3.xml new file mode 100644 index 0000000000..8f6c33c6db --- /dev/null +++ b/archive/entries/2023-08-31-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.23 Released! + https://www.php.net/archive/2023.php#2023-08-31-3 + 2023-08-31T16:37:56+00:00 + 2023-08-31T16:37:56+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.23. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.23 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-09-06-1.xml b/archive/entries/2023-09-06-1.xml new file mode 100644 index 0000000000..9e25af04a0 --- /dev/null +++ b/archive/entries/2023-09-06-1.xml @@ -0,0 +1,26 @@ + + + PHP Conference Japan 2023 + https://www.php.net/archive/2023.php#2023-09-06-1 + 2023-09-06T10:20:04+02:00 + 2023-09-06T10:20:04+02:00 + + + 2023-10-08 + + +
    +

    + PHP Conference Japan 2023 is the largest PHP event in Japan and has been held once a year since 2000. + As an event for a popular language, it is attended by a wide range of web engineers, from beginners to advanced users. +

    +

    + Date: October 8, 2023
    + Location: Tokyo, Japan. +

    +

    + For more details, See the event page. +

    +
    +
    +
    diff --git a/archive/entries/2023-09-08-1.xml b/archive/entries/2023-09-08-1.xml new file mode 100644 index 0000000000..6349001448 --- /dev/null +++ b/archive/entries/2023-09-08-1.xml @@ -0,0 +1,34 @@ + + + Dutch PHP Conference 2023 - Schedule + https://www.php.net/archive/2023.php#2023-09-08-1 + 2023-09-08T11:08:55+00:00 + 2023-09-08T11:08:55+00:00 + + + 2023-10-13 + + DPC-logo.png + +
    +

    Get ready for the Dutch PHP Conference 2023 - Online Edition! 🚀 Join us on October 13 for an exciting day filled with tech talks and networking. Here's a sneak peek of what's in store:

    + + + +

    This free, online conference day is hosted by Caneco! Don't miss out – secure your virtual seat now! 🎟️

    + +

    Mark your calendars and stay tuned for more updates. Follow us on social media using #DPC23 to join the conversation. Let's make this year's DPC unforgettable! 🌟

    + +

    See you on October 13th!

    + +

    The Ibuildings DPC Team

    +
    +
    +
    diff --git a/archive/entries/2023-09-14-1.xml b/archive/entries/2023-09-14-1.xml new file mode 100644 index 0000000000..4f3c9c69e5 --- /dev/null +++ b/archive/entries/2023-09-14-1.xml @@ -0,0 +1,34 @@ + + + PHP 8.3.0 RC 2 available for testing + https://www.php.net/archive/2023.php#2023-09-14-1 + 2023-09-14T03:51:40-07:00 + 2023-09-14T03:51:40-07:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.3.0, RC 2. This is the second release candidate, continuing the PHP 8.3 release cycle, the rough outline of which is specified in the PHP Wiki. +

    +

    + For source downloads of PHP 8.3.0, RC 2 please visit the download page. +

    +

    + Please carefully test this version and report any issues found in the bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the NEWS file or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive. +

    +

    + The next release will be the third release candidate (RC 3), planned for 28 September 2023. +

    +

    + The signatures for the release can be found in the manifest or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2023-09-28-1.xml b/archive/entries/2023-09-28-1.xml new file mode 100644 index 0000000000..e9bec0931f --- /dev/null +++ b/archive/entries/2023-09-28-1.xml @@ -0,0 +1,24 @@ + + + PHP 8.2.11 Released! + https://www.php.net/archive/2023.php#2023-09-28-1 + 2023-09-28T14:31:39+00:00 + 2023-09-28T14:31:39+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.2.11. This is a bug fix release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    + For source downloads of PHP 8.2.11 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +
    +
    +
    diff --git a/archive/entries/2023-09-28-2.xml b/archive/entries/2023-09-28-2.xml new file mode 100644 index 0000000000..244529a8b6 --- /dev/null +++ b/archive/entries/2023-09-28-2.xml @@ -0,0 +1,46 @@ + + + PHP 8.3.0 RC 3 available for testing + https://www.php.net/archive/2023.php#2023-09-28-2 + 2023-09-28T15:52:06+00:00 + 2023-09-28T15:52:06+00:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.3.0, RC 3. + This is the third release candidate, continuing the PHP 8.3 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.3.0, RC 3 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be the fourth release candidate (RC 4), planned + for 12 October 2023. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2023-09-28-3.xml b/archive/entries/2023-09-28-3.xml new file mode 100644 index 0000000000..16d0f5984f --- /dev/null +++ b/archive/entries/2023-09-28-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.24 Released! + https://www.php.net/archive/2023.php#2023-09-28-3 + 2023-09-28T18:04:30+00:00 + 2023-09-28T18:04:30+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.24. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.24 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-10-06-1.xml b/archive/entries/2023-10-06-1.xml new file mode 100644 index 0000000000..0652d7353f --- /dev/null +++ b/archive/entries/2023-10-06-1.xml @@ -0,0 +1,67 @@ + + +PHPeste 2023 +https://www.php.net/archive/2023.php#2023-10-06-1 +2023-08-10T11:00:00-03:00 +2023-08-10T11:00:00-03:00 + + +2023-10-05 + +phpeste_400x120.png + +
    +

    + About the Conference +

    + +

    + Introducing PHPeste, a distinguished PHP conference, championed by the + resilient communities of Brazil's Northeast. Over the years, this event has graced cities including João Pessoa, + Salvador, São Luis, Recife, Natal, and once again returns to the coastal beauty of Fortaleza. +

    + +

    + Spanning two enriching days, attendees can anticipate: +

    + +
      +
    • + Comprehensive Learning: Dive deep into the world of PHP through hands-on sessions and + workshops. +
    • +
    • + Networking Opportunities: Engage with passionate PHP enthusiasts and professionals who embody + the spirit and vigor of the Northeast. +
    • +
    • + Expert Speakers: Gain insights from an array of top-tier industry speakers, sharing their + expertise and experiences. +
    • +
    + +

    + PHPeste is a collaborative effort by communities from various Northeastern states, including Alagoas, Bahia, + Ceará, Maranhão, Paraíba, Pernambuco, Piauí, Rio Grande do Norte, and Sergipe. This year, the + "PHP com Rapadura" community takes the helm, ensuring that the event + remains both high-quality and accessible. Thanks to the tireless efforts of our volunteer members, we are able to + provide an exceptional experience at a cost-effective price, making this conference accessible to many. +

    + +

    + Date: October 6-7, 2023 in Fortaleza, Ceará. +

    + +

    + + Location: Estácio University Center of Ceará, ESTÁCIO VIA CORPVS | R. Eliseu Uchôa Beco, 600 Guararapes, + Fortaleza, Ceara, Brazil. + +

    + +

    For more information about the event, visit the website: + PHPeste +

    +
    +
    +
    diff --git a/archive/entries/2023-10-12-1.xml b/archive/entries/2023-10-12-1.xml new file mode 100644 index 0000000000..b744af95e3 --- /dev/null +++ b/archive/entries/2023-10-12-1.xml @@ -0,0 +1,46 @@ + + + PHP 8.3.0 RC 4 available for testing + https://www.php.net/archive/2023.php#2023-10-12-1 + 2023-10-12T07:45:43-07:00 + 2023-10-12T07:45:43-07:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.3.0, RC 4. + This is the fourth release candidate, continuing the PHP 8.3 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.3.0, RC 4 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be the fifth release candidate (RC 5), planned + for 26 October 2023. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2023-10-20-1.xml b/archive/entries/2023-10-20-1.xml new file mode 100644 index 0000000000..b314f2fd14 --- /dev/null +++ b/archive/entries/2023-10-20-1.xml @@ -0,0 +1,43 @@ + + + phpday 2024 + https://www.php.net/archive/2023.php#2023-10-20-1 + 2023-10-20T11:59:20+02:00 + 2023-10-20T11:59:20+02:00 + + + 2024-01-14 + + phpday2023.png + +
    +

    20 years of phpday! On May 16-17 +2024 you can attend the in-person event in Verona (Italy) or online.

    + +

    Organized by GrUSP (the Italian PHP user +group), phpday is one of the first historic European conferences dedicated +to PHP, development tools and best practices. We are a community whose +intent is to improve the web development ecosystem and to organize +affordable, high-quality events and workshops for developers.

    + +

    We are committed to diversity, inclusion and accessibility values: we +apply a Code of Conduct and we have a +Scholarship +program.

    + +

    Our Call For Papers will be open +until January 14th 2024.
    The event is international and all sessions will +be in English. We really appreciate submissions from first time speakers, +and we can offer support for the entire process.

    + +

    Don't miss the opportunity to take part in this amazing community event +with international speakers from all over the world where everyone can +share, learn and grow professionally.

    + +

    Get your ticket here!

    + +

    Follow us on Twitter, Facebook +and Mastodon!

    +
    +
    +
    diff --git a/archive/entries/2023-10-26-1.xml b/archive/entries/2023-10-26-1.xml new file mode 100644 index 0000000000..97676bc14b --- /dev/null +++ b/archive/entries/2023-10-26-1.xml @@ -0,0 +1,46 @@ + + + PHP 8.3.0 RC 5 available for testing + https://www.php.net/archive/2023.php#2023-10-26-1 + 2023-10-26T15:00:24+00:00 + 2023-10-26T15:00:24+00:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.3.0, RC 5. + This is the fifth release candidate, continuing the PHP 8.3 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.3.0, RC 5 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be the fourth release candidate (RC 5), planned + for 26 October 2023. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2023-10-26-2.xml b/archive/entries/2023-10-26-2.xml new file mode 100644 index 0000000000..12e8bdb260 --- /dev/null +++ b/archive/entries/2023-10-26-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.12 Released! + https://www.php.net/archive/2023.php#2023-10-26-2 + 2023-10-26T16:39:13+00:00 + 2023-10-26T16:39:13+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.12. This is a bug fix release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.12 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-10-26-3.xml b/archive/entries/2023-10-26-3.xml new file mode 100644 index 0000000000..5b368ac65e --- /dev/null +++ b/archive/entries/2023-10-26-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.25 Released! + https://www.php.net/archive/2023.php#2023-10-26-3 + 2023-10-26T23:49:55+00:00 + 2023-10-26T23:49:55+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.25. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.25 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-10-30-1.xml b/archive/entries/2023-10-30-1.xml new file mode 100644 index 0000000000..b4631040c7 --- /dev/null +++ b/archive/entries/2023-10-30-1.xml @@ -0,0 +1,24 @@ + + + Dutch PHP Conference 2024 - Call for Papers + https://www.php.net/archive/2023.php#2023-10-30-1 + 2023-10-30T09:08:22+00:00 + 2023-10-30T09:08:22+00:00 + + + 2023-12-17 + + DPC-logo.png + +
    +

    We are thrilled to announce the return of the 18th edition of the Dutch PHP Conference in 2024! Join us for an exciting in-person event, set to take place from March 12 to March 15, 2024 at Pathé Noord Amsterdam. :elephant::tada:

    +

    We’re on the lookout for exceptional, technical, and non-technical sessions from speakers who can delve into advanced topics, spark creativity, and captivate our live audience.

    +

    In the past, we’ve had remarkable speakers covering a wide range of subjects within the PHP ecosystem, including frameworks, DevOps, architecture, JavaScript, scaling, testing, performance, and security. We’re eager to build on these themes for this year’s in-person conference.

    +

    But that’s not all - we also invite speakers to explore non-technical topics that play a crucial role in the success of developers and development teams. These can encompass communication, interpersonal skills, relationships, self-management, and even the business and economics aspects of development. In other words, the soft skills that complement deep technical expertise, as well as the broader environment essential for the success of technical developers.

    +

    This invitation is intentionally open-ended, aiming to inspire everyone to share their ideas, insights, and hard-earned experiences in the vast realm of development in which we all thrive.

    +

    The + Call for Papers + is now open and will remain so until December 17, 2024. We can’t wait to hear from you!

    +
    +
    +
    diff --git a/archive/entries/2023-11-09-1.xml b/archive/entries/2023-11-09-1.xml new file mode 100644 index 0000000000..2ebf0b5758 --- /dev/null +++ b/archive/entries/2023-11-09-1.xml @@ -0,0 +1,35 @@ + + + PHP 8.3.0 RC 6 available for testing + https://www.php.net/archive/2023.php#2023-11-09-1 + 2023-11-09T09:33:47-08:00 + 2023-11-09T09:33:47-08:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.3.0, RC 6. + This is the sixth and final release candidate, continuing the PHP 8.3 release cycle, the rough outline of which is specified in the PHP Wiki. +

    +

    + For source downloads of PHP 8.3.0, RC 6 please visit the download page. +

    +

    + Please carefully test this version and report any issues found in the bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the NEWS file or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive. +

    +

    + The next release will be the production-ready, general availability release, planned for 23 November 2023. +

    +

    + The signatures for the release can be found in the manifest or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2023-11-21-1.xml b/archive/entries/2023-11-21-1.xml new file mode 100644 index 0000000000..ad9c7fc92a --- /dev/null +++ b/archive/entries/2023-11-21-1.xml @@ -0,0 +1,40 @@ + + + International PHP Conference Berlin 2024 + https://www.php.net/archive/2023.php#2023-11-21-1 + 2023-11-21T11:11:55+01:00 + 2023-11-21T11:11:55+01:00 + + + 2024-05-31 + + IPC_24_Logo.png + +
    +

    + The International PHP Conference is the world's first PHP conference and stands since more than two decades for top-notch pragmatic expertise in PHP and web technologies. At the IPC, internationally renowned experts from the PHP industry meet up with PHP users and developers from large and small companies. Here is the place where concepts emerge and ideas are born - the IPC signifies knowledge transfer at highest level. + Our Call for Papers will be closing on November 27th, 2023. We are looking forward to setting up an amazing program with many new sessions, keynotes, and workshops. You can submit your proposals at (http://www.phpconference.com/call-for-papers/) We can’t wait to see your ideas for the conference. +

    +

    +Basic facts: +

    +

    Date: May 27 ‒ 31, 2024

    +

    Location: Maritim proArte Berlin, Berlin or Online

    + +

    Highlights:

    +
      +
    • 60+ best practice sessions
    • +
    • 50+ international top speakers
    • +
    • PHPower: Hands-on Power Workshops
    • +
    • Expo with exciting exhibitors on May 23 & 24
    • +
    • All inclusive: Changing buffets, snacks & refreshing drinks
    • +
    • Official certificate for attendees
    • +
    • Free Goodies:Developer bag, T-Shirt, magazines etc.
    • +
    • Exclusive networking events
    • +
    +

    For further information on the International PHP Conference Munich visit: https://phpconference.com/berlin-en/

    + +
    +
    +
    + diff --git a/archive/entries/2023-11-23-1.xml b/archive/entries/2023-11-23-1.xml new file mode 100644 index 0000000000..20d523741a --- /dev/null +++ b/archive/entries/2023-11-23-1.xml @@ -0,0 +1,23 @@ + + + PHP 8.2.13 Released! + https://www.php.net/archive/2023.php#2023-11-23-1 + 2023-11-23T12:24:42+00:00 + 2023-11-23T12:24:42+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.2.13. This is a bug fix release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.13 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +
    +
    +
    diff --git a/archive/entries/2023-11-23-2.xml b/archive/entries/2023-11-23-2.xml new file mode 100644 index 0000000000..9b42518afe --- /dev/null +++ b/archive/entries/2023-11-23-2.xml @@ -0,0 +1,36 @@ + + + PHP 8.3.0 Released! + https://www.php.net/archive/2023.php#2023-11-23-2 + 2023-11-23T15:43:03+00:00 + 2023-11-23T15:43:03+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.3.0. This release marks the latest minor release of the PHP language.

    +

    PHP 8.3 comes with numerous improvements and new features such as:

    + +

    + For source downloads of PHP 8.3.0 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +

    + The migration guide is available in the PHP Manual. + Please consult it for the detailed list of new features and backward incompatible changes. +

    +

    Kudos to all the contributors and supporters!

    +
    +
    +
    diff --git a/archive/entries/2023-11-23-3.xml b/archive/entries/2023-11-23-3.xml new file mode 100644 index 0000000000..cf79c8f8df --- /dev/null +++ b/archive/entries/2023-11-23-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.26 Released! + https://www.php.net/archive/2023.php#2023-11-23-3 + 2023-11-23T18:24:51+00:00 + 2023-11-23T18:24:51+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.26. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.26 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-12-21-1.xml b/archive/entries/2023-12-21-1.xml new file mode 100644 index 0000000000..5eb87e175e --- /dev/null +++ b/archive/entries/2023-12-21-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.1 Released! + https://www.php.net/archive/2023.php#2023-12-21-1 + 2023-12-21T07:48:56-08:00 + 2023-12-21T07:48:56-08:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.1. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.1 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-12-21-2.xml b/archive/entries/2023-12-21-2.xml new file mode 100644 index 0000000000..d222886e5f --- /dev/null +++ b/archive/entries/2023-12-21-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.27 Released! + https://www.php.net/archive/2023.php#2023-12-21-2 + 2023-12-21T16:12:41+00:00 + 2023-12-21T16:12:41+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.27. This is a bug fix release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.27 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2023-12-21-3.xml b/archive/entries/2023-12-21-3.xml new file mode 100644 index 0000000000..91043c4044 --- /dev/null +++ b/archive/entries/2023-12-21-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.14 Released! + https://www.php.net/archive/2023.php#2023-12-21-3 + 2023-12-21T14:28:29-05:00 + 2023-12-21T14:28:29-05:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.14. This is a bug fix release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.14 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-01-01-1.xml b/archive/entries/2024-01-01-1.xml new file mode 100644 index 0000000000..abbf179ea9 --- /dev/null +++ b/archive/entries/2024-01-01-1.xml @@ -0,0 +1,45 @@ + + + PHP Conference Kansai 2024 + https://www.php.net/archive/2024.php#2024-01-01-1 + 2024-01-01T05:00:32+00:00 + 2024-01-01T05:00:32+00:00 + + + 2024-02-11 + + phpConfKansaiJapan2024.png + +
    +

    + We are excited to announce the PHP Conference Kansai 2024. 🎉 +

    +

    + About the conference
    + PHP Conference Kansai is a large-scale technical conference in Japan for PHP engineers to share their technical knowledge and experiences in and around PHP. + It has been held 8 times in the past since 2011, and each time the topic is the latest information and trends in PHP at that time. + This conference is the first time in 6 years. It is being restarted to create a place where PHP engineers in Kansai can exchange information with each other and improve themselves as engineers. + On the day of the event, there will be lectures by engineers who have been invited from the general public, as well as other events to share information. +

    +

    + Who can join?
    + All people related to PHP are eligible to participate, including those who use PHP, those who have used PHP, and those who are interested in PHP. + Please come visit us to update your information! + (The conference is given in Japanese.) +

    + Basic facts
    +
      +
    • Date: February 11, 2024
    • +
    • Location: Osaka, Japan.
    • +
    • Timetable
    • +
    +

    + For more information, See the event page: PHP Conference Kansai 2024. +

    +

    + Follow us on Twitter (X). +

    + +
    +
    +
    diff --git a/archive/entries/2024-01-05-1.xml b/archive/entries/2024-01-05-1.xml new file mode 100644 index 0000000000..919efd1bc0 --- /dev/null +++ b/archive/entries/2024-01-05-1.xml @@ -0,0 +1,58 @@ + + + Drupal Mountain Camp 2024 + https://www.php.net/archive/2024.php#2024-01-05-1 + 2024-01-05T10:08:42+00:00 + 2024-01-05T10:08:42+00:00 + + + 2024-03-07 + + drupalmountaincamp-2024-banner.png + +
    +

    + We are thrilled to announce the 4th edition of Drupal Mountain Camp, taking place from March 7th to March 10th, 2024, in Davos, Switzerland. +

    + +

    + About the Conference
    + Featuring seven different tracks (three parallel), focusing not only on Drupal but also on Symfony, Laravel, PHP, modern JavaScript (React), as well as accessibility, + diversity, and inclusion, the conference will be a great opportunity to learn, connect, and share with the community. +

    + +

    + Drupal Mountain Camp brings together experts and newcomers in web development to share their knowledge in creating interactive websites using Drupal and + related web technologies. We are committed to unite a diverse crowd from different disciplines such as developers, designers, project managers as well as + agency and community leaders. +

    + +

    + Winter Wonderland in Davos
    + Embrace the beauty of the Swiss Alps during the snowy season.
    + Enjoy social activities like skiing, snowboarding, sledding, and indulging in traditional fondue high up in the mountains.
    + It's not just a conference; it's an adventure! +

    + +

    + Who should join?
    + Although the conference is predominately focused on Drupal, this years' edition we've expanded to several non-Drupal tracks, thus we invite everyone related to PHP or the modern web to participate. +

    + +

    + Davos is located high up in the Swiss alps, reachable from Zurich airport within a beautiful 2 hours train ride up the mountains.
    +

      +
    • Date: March 7 - 10, 2024
    • +
    • Location: Davos, Switzerland
    • +
    • Language: English
    • +
    +

    + +

    + Interested?
    + Submit a session, register as a participant, or become a sponsor today.
    + Keep in touch via our website at: drupalmountaincamp.ch +

    +
    +
    +
    diff --git a/archive/entries/2024-01-06-1.xml b/archive/entries/2024-01-06-1.xml new file mode 100644 index 0000000000..6b7d191eba --- /dev/null +++ b/archive/entries/2024-01-06-1.xml @@ -0,0 +1,32 @@ + + + PHP Conference Kagawa 2024 + https://www.php.net/archive/2024.php#2024-01-06-1 + 2024-01-06T11:18:21+00:00 + 2024-01-06T11:18:21+00:00 + + + 2024-05-11 + + phpconkagawa2024.png + +
    +

    + The PHP Conference Kagawa will be held for the first time in 2024. +

    +

    + The event will take place in a Japanese architectural mansion, constructed in 1917 and designated as an Important Cultural Property of Japan.
    + Enjoy talk sessions about PHP in a spacious room with tatami mats.
    + (The conference will be conducted in Japanese) +

    + Basic facts
    +
      +
    • Date: May 11, 2024 (JST)
    • +
    • Location: Takamatsu City, Kagawa Prefecture, Japan
    • +
    +

    + Further information will be available on the event page and X(Twitter). +

    +
    +
    +
    diff --git a/archive/entries/2024-01-07-1.xml b/archive/entries/2024-01-07-1.xml new file mode 100644 index 0000000000..d6ab062219 --- /dev/null +++ b/archive/entries/2024-01-07-1.xml @@ -0,0 +1,35 @@ + + + PHP Conference Fukuoka 2024 + https://www.php.net/archive/2024.php#2024-01-07-1 + 2024-01-07T07:55:54+00:00 + 2024-01-07T07:55:54+00:00 + + + 2024-06-22 + + phpconfuk2024.png + +
    +

    + We are delighted to announce the PHP Conference Fukuoka 2024. +

    +

    + We want to boost the IT industry in the Kyushu region and provide a place where PHPers in Kyushu and PHPers from all over Japan can interact.
    + This event has been held continuously since 2015 with this in mind.
    + We hope that through this event, participants will inspire each other and create new ideas and connections. (This conference will be conducted in Japanese) +

    + Basic facts
    +
      +
    • Date: June 22, 2024 (JST)
    • +
    • Location: Fukuoka, Japan
    • +
    +

    + For more information, See the event page: PHP Conference Fukuoka 2024. +

    +

    + Follow us on X(formerly Twitter). +

    +
    +
    +
    diff --git a/archive/entries/2024-01-08-1.xml b/archive/entries/2024-01-08-1.xml new file mode 100644 index 0000000000..a5c5a9d582 --- /dev/null +++ b/archive/entries/2024-01-08-1.xml @@ -0,0 +1,35 @@ + + + PHP Conference Hokkaido 2024 + https://www.php.net/archive/2024.php#2024-01-08-1 + 2024-01-08T08:42:10+00:00 + 2024-01-08T08:42:10+00:00 + + + 2024-01-12 + + phpcondo2024.png + +
    +

    + We are delighted to announce the PHP Conference Hokkaido 2024. +

    +

    + This is a technical event for participants interested in PHP and web technologies in Hokkaido, Japan in January 2024.
    + PHP Conference Hokkaido has been held irregularly since 2012, and this will be the fourth time since 2019.
    + (This conference will be conducted in Japanese) +

    + Basic facts
    +
      +
    • Date: January 12-13, 2024 (JST)
    • +
    • Location: Sapporo City, Hokkaido Prefecture, Japan
    • +
    +

    + For more information, See the event page: PHP Conference Hokkaido 2024. +

    +

    + Follow us on X(formerly Twitter). +

    +
    +
    +
    diff --git a/archive/entries/2024-01-08-3.xml b/archive/entries/2024-01-08-3.xml new file mode 100644 index 0000000000..5901f08350 --- /dev/null +++ b/archive/entries/2024-01-08-3.xml @@ -0,0 +1,23 @@ + + + Unveiling the ConFoo 2024 edition! + https://www.php.net/archive/2024.php#2024-01-08-3 + 2024-01-08T21:33:28-05:00 + 2024-01-08T21:33:28-05:00 + + + 1600-01-08 + + confoo_2024.png + +
    + With over 170 presentations, delivered by speakers from around the world, ConFoo is a conference for Full-Stack developers covering everything from the backend to the frontend: JavaScript, PHP, Java, Dotnet, Security, Artificial Intelligence, DevOps, and much more. + + ConFoo brings an outstanding diversity of content to expand your knowledge, increase your productivity, and take your development skills to the next level. + + With a selection of presentations focused on cutting-edge technologies, there's a reason why attendees returning from ConFoo say they've learned more in these 3 days than in 3 years at university! + + Register now to participate, meet renowned speakers who contribute to the Open Source projects you use every day. +
    +
    +
    diff --git a/archive/entries/2024-01-12-1.xml b/archive/entries/2024-01-12-1.xml new file mode 100644 index 0000000000..16b4be6ccf --- /dev/null +++ b/archive/entries/2024-01-12-1.xml @@ -0,0 +1,35 @@ + + + Laravel Live Denmark 2024 + https://www.php.net/archive/2024.php#2024-01-12-1 + 2024-01-12T16:23:23+00:00 + 2024-01-12T16:23:23+00:00 + + + 2024-08-23 + + laravellivedk2024.png + +
    +

    + Laravel Live is a two-day Laravel conference held in Copenhagen, Denmark the 22 - 23. August 2024. +

    +

    + This will be the first Laravel Conference in the nordic countries, where 350 Laravel and PHP enthusiasts from around the world will gather for two days of talks, learning and networking. +

    + Information:
    +
      +
    • August 22-23, 2024
    • +
    • Copenhagen, Denmark
    • +
    • 16 speakers
    • +
    • 350 Laravel and PHP enthusiasts
    • +
    +

    + For more information, see Laravel Live Denmark 2024. +

    +

    + You can also find us at Twitter. +

    +
    +
    +
    diff --git a/archive/entries/2024-01-13-1.xml b/archive/entries/2024-01-13-1.xml new file mode 100644 index 0000000000..afa9264427 --- /dev/null +++ b/archive/entries/2024-01-13-1.xml @@ -0,0 +1,22 @@ + + + Web Summer Camp 2024 + https://www.php.net/archive/2024.php#2024-01-13-1 + 2024-01-13T20:22:36+01:00 + 2024-01-13T20:22:36+01:00 + + + 2024-07-04 + + wsc2024.png + +
    +

    + Web Summer Camp is a 3-day conference with first two days consisting of hands-on workshops in several tracks, including PHP and Symfony. Third day is reserved for keynotes, speaking sessions and un-conference. +

    +

    + This year's edition will be held on July 4ht-6th 2024 in Opatija, Croatia. Call for papers is open till March 31st 2024. For more information see the web site: Web Summer Camp 2024. +

    +
    +
    +
    diff --git a/archive/entries/2024-01-15-1.xml b/archive/entries/2024-01-15-1.xml new file mode 100644 index 0000000000..aea3ff6cb2 --- /dev/null +++ b/archive/entries/2024-01-15-1.xml @@ -0,0 +1,22 @@ + + + SymfonyOnline January 2024 + https://www.php.net/archive/2024.php#2024-01-15-1 + 2024-01-15T10:08:34+00:00 + 2024-01-15T10:08:34+00:00 + + + 2024-01-18 + + symfonyonline-january-2024.png + +
    +

    + SymfonyOnline June 2024 is the online conference in English for Symfony and PHP developers from all around the World. Two days of online workshops (January 16-17) followed by two days (June 18-19) full of online talks on PHP, Symfony and its ecosystem. +

    +

    + Check out all the conference details +

    +
    +
    +
    diff --git a/archive/entries/2024-01-15-2.xml b/archive/entries/2024-01-15-2.xml new file mode 100644 index 0000000000..b7f828e881 --- /dev/null +++ b/archive/entries/2024-01-15-2.xml @@ -0,0 +1,22 @@ + + + SymfonyLive Paris 2024 + https://www.php.net/archive/2024.php#2024-01-15-2 + 2024-01-15T10:09:34+00:00 + 2024-01-15T10:09:34+00:00 + + + 2024-03-28 + + symfonylive-paris-2024.png + +
    +

    + SymfonyLive Paris 2024 is the Symfony conference for French-speaking developers. Two days of workshops (March 26-27) followed by two days (March 28-29) full of talks on PHP, Symfony and its ecosystem. +

    +

    + Check out all the conference details +

    +
    +
    +
    diff --git a/archive/entries/2024-01-15-3.xml b/archive/entries/2024-01-15-3.xml new file mode 100644 index 0000000000..2602301947 --- /dev/null +++ b/archive/entries/2024-01-15-3.xml @@ -0,0 +1,25 @@ + + + SymfonyCon Vienna 2024 + https://www.php.net/archive/2024.php#2024-02-15-3 + 2024-01-15T10:10:34+00:00 + 2024-01-15T10:10:34+00:00 + + + 2024-12-06 + + symfonycon-vienna-2024.png + +
    +

    + SymfonyCon Vienna 2024 is the global conference in English for Symfony and PHP developers. Two days of workshops (December 3-4) followed by two days (December 5-6) full of talks on PHP, Symfony and its ecosystem. +

    +

    + Join us and discover the amazing city of Vienna (Austria) while you share fun and knowledge with developers from all around the World. +

    +

    + Check out all the conference details +

    +
    +
    +
    diff --git a/archive/entries/2024-01-18-1.xml b/archive/entries/2024-01-18-1.xml new file mode 100644 index 0000000000..4d5e39e4df --- /dev/null +++ b/archive/entries/2024-01-18-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.2 Released! + https://www.php.net/archive/2024.php#2024-01-18-1 + 2024-01-18T14:47:41+00:00 + 2024-01-18T14:47:41+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.2. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.2 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-01-18-2.xml b/archive/entries/2024-01-18-2.xml new file mode 100644 index 0000000000..495d174053 --- /dev/null +++ b/archive/entries/2024-01-18-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.15 Released! + https://www.php.net/archive/2024.php#2024-01-18-2 + 2024-01-18T15:35:45+00:00 + 2024-01-18T15:35:45+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.15. This is a bug fix release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.15 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-01-20-1.xml b/archive/entries/2024-01-20-1.xml new file mode 100644 index 0000000000..c03c4d10b4 --- /dev/null +++ b/archive/entries/2024-01-20-1.xml @@ -0,0 +1,36 @@ + + + PHP Conference Odawara 2024 + https://www.php.net/archive/2024.php#2024-01-20-1 + 2024-01-20T12:37:21+00:00 + 2024-01-20T12:37:21+00:00 + + + 2024-04-13 + + phpcon_odawara2024.png + +
    +

    + PHP Conference Odawara will be held for the first time in 2024. +

    +

    + Inspired by the enthusiasm of PHP conferences held in Japan, we have decided to host an event in "Odawara" with the aim of creating the same enthusiasm.
    + Our aim is to liven up the PHP community even more, with the help of Odawara's appeals.
    + This conference would get you hyped to "learn" even more!🏯🥷🍥♨️
    + (This conference will be conducted in Japanese) +

    + Basic information
    +
      +
    • Date: April 13, 2024(JST)
    • +
    • Location: Odawara Civic Exchange Center "UMECO", Kanagawa Prefecture, Japan
    • +
    +

    + For more information, see the event page: PHP Conference Odawara 2024. +

    +

    + Follow us on 𝕏. +

    +
    +
    +
    diff --git a/archive/entries/2024-01-24-1.xml b/archive/entries/2024-01-24-1.xml new file mode 100644 index 0000000000..bb888ff92f --- /dev/null +++ b/archive/entries/2024-01-24-1.xml @@ -0,0 +1,30 @@ + + + PHP UK Conference 2024 + https://www.php.net/archive/2024.php#2024-01-24-1 + 2024-01-24T09:38:48+00:00 + 2024-01-24T09:38:48+00:00 + + + 2024-02-15 + + phpukconf2024.jpg + +
    +

    + Our aim is for PHP UK to offer attendees a forum for learning and networking with the most up-to-date topics in PHP development and related tools, tailored specifically to the needs of developers and CTOs. +

    + Event Details
    +
      +
    • Date: 15th & 16th February 2024 (GMT)
    • +
    • Location: The Brewery, 52 Chiswell St, London, EC1Y 4SA
    • +
    +

    + For more information, see: PHP UK Conference 2024. +

    +

    + Follow us on 𝕏. +

    +
    +
    +
    diff --git a/archive/entries/2024-01-30-1.xml b/archive/entries/2024-01-30-1.xml new file mode 100644 index 0000000000..14b3c7f509 --- /dev/null +++ b/archive/entries/2024-01-30-1.xml @@ -0,0 +1,44 @@ + + + php[tek] 2024 - Sheraton Suites O'Hare, Rosemont, IL + https://www.php.net/archive/2024.php#2024-01-30-1 + 2024-01-30T13:44:26-07:00 + 2024-01-30T13:44:26-07:00 + + + 2024-01-30 + + phptek2024.png + +
    +

    + Join us for the 16th Annual Web Developer Conference, php[tek] 2024, April 23-25 2024. +

    + +

    + php[tek] 2024 combines leadership, expertise, and networking in one event. A relaxing + atmosphere for tech leaders and developers to share, learn and grow professionally while + also providing you with the knowledge to solve your everyday problems. +

    + + +

    + We are the longest-running web developer conference in the United States, focusing on the + PHP programming language. The event is broken up into multiple days. The main conference + happens over the course of 3 days (April 23-25) and includes keynotes, talks, and networking + options. It will be broken into four tracks this year and will cover a range of topics. +

    + + +

    + Head over to + https://tek.phparch.com + and get yours today! +

    + +
    +
    +
    diff --git a/archive/entries/2024-02-13-1.xml b/archive/entries/2024-02-13-1.xml new file mode 100644 index 0000000000..9217bb3c02 --- /dev/null +++ b/archive/entries/2024-02-13-1.xml @@ -0,0 +1,30 @@ + + + Dutch PHP Conference 2024 + https://www.php.net/archive/2024.php#2024-02-13-1 + 2024-02-13T05:23:52+00:00 + 2024-02-13T05:23:52+00:00 + + + 2024-03-12 + + DPC-logo.png + +
    +

    Get ready for 4 days of the Dutch PHP Conference 2024 - In Person Edition 🔥 ! Two training days, a tutorial day and a conference day.

    +

    Training day 1 & 2

    +

    We are offering 2 in-depth workshop days this year, to dive into a particular topic together with an experienced coach & speaker:

    + +

    The location of DPC this year is Pathe Amsterdam Noord, so you can also go for the Movie Passe-partout and catch a movie in case you have some free time left. 🎥

    +

    Tutorial day & conference day

    +

    In addition to the training days, we will offer a tutorial day and conference day. The full schedule can be found here. We also hope to see you at our after party in the hollywood cafe after the conference on Friday!

    +

    We look forward to meeting you all in Amsterdam from 12 to 15 March! Mark those calendars!

    +

    Follow us on 𝕏 & M

    +
    +
    +
    diff --git a/archive/entries/2024-02-15-1.xml b/archive/entries/2024-02-15-1.xml new file mode 100644 index 0000000000..2e4b266661 --- /dev/null +++ b/archive/entries/2024-02-15-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.3 Released! + https://www.php.net/archive/2024.php#2024-02-15-1 + 2024-02-15T15:48:46+00:00 + 2024-02-15T15:48:46+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.3. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.3 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-02-15-2.xml b/archive/entries/2024-02-15-2.xml new file mode 100644 index 0000000000..081ff72ce4 --- /dev/null +++ b/archive/entries/2024-02-15-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.16 Released! + https://www.php.net/archive/2024.php#2024-02-15-2 + 2024-02-15T13:36:20-05:00 + 2024-02-15T13:36:20-05:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.16. This is a bug fix release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.16 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-02-23-1.xml b/archive/entries/2024-02-23-1.xml new file mode 100644 index 0000000000..2658592038 --- /dev/null +++ b/archive/entries/2024-02-23-1.xml @@ -0,0 +1,24 @@ + + + PHPerKaigi 2024 + https://www.php.net/archive/2024.php#2024-02-23-1 + 2024-02-23T12:49:47+00:00 + 2024-02-23T12:49:47+00:00 + + + 2024-03-07 + + phperkaigi-2024.png + +
    +

    PHPerKaigi 2024, Nakano, Tokyo, Japan

    +

    Date: Mar 07 - 09, 2024

    +

    PHPerKaigi is an event for PHPers, that is, those who are currently using PHP, those who have used PHP in the past, those who want to use PHP in the future, and those who love PHP, to share technical know-how and "#love" for PHP.

    +

    The conference consists of talk sessions by public speakers. In addition to we have unconference, social gathering and so on for all of developers from all from Japan. Let's talk about PHP!

    +

    Follow us on X (Formerly Twitter) @phperkaigi, #phperkaigi.

    +

    https://phperkaigi.jp/2024/

    +

    Note:

    +

    *Kaigi* means meeting in Japanese.

    +
    +
    +
    diff --git a/archive/entries/2024-03-14-1.xml b/archive/entries/2024-03-14-1.xml new file mode 100644 index 0000000000..187acd4135 --- /dev/null +++ b/archive/entries/2024-03-14-1.xml @@ -0,0 +1,22 @@ + + + PHP 8.2.17 Released! + https://www.php.net/archive/2024.php#2024-03-14-1 + 2024-03-14T15:21:29+00:00 + 2024-03-14T15:21:29+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.2.17. This is a bug fix release.

    +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.17 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +
    +
    +
    diff --git a/archive/entries/2024-03-14-2.xml b/archive/entries/2024-03-14-2.xml new file mode 100644 index 0000000000..7b50b31126 --- /dev/null +++ b/archive/entries/2024-03-14-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.4 Released! + https://www.php.net/archive/2024.php#2024-03-14-2 + 2024-03-14T21:02:45+00:00 + 2024-03-14T21:02:45+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.4. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.4 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-03-22-1.xml b/archive/entries/2024-03-22-1.xml new file mode 100644 index 0000000000..df5f69ac57 --- /dev/null +++ b/archive/entries/2024-03-22-1.xml @@ -0,0 +1,26 @@ + + + CakeFest 2024: The Official CakePHP Conference + https://www.php.net/archive/2024.php#2024-03-22-1 + 2024-03-22T10:39:32+00:00 + 2024-03-22T10:39:32+00:00 + + + 2024-07-24 + + cakefest-2017.png + +
    +

    + CakeFest 2024 - our annual conference dedicated to CakePHP. One full workshop day (plus one hybrid day) that is an ideal way to learn as both beginners and advanced users, followed by a full day of presentations, discussions and talks on CakePHP related technologies. CakeFest 2024 will be held in Luxembourg at Technoport - we are excited to see you there! +

    +

    + Date: July 24, 25 & 26
    + Time: 09:00am CET +

    +

    + Check out more details at CakeFest.org +

    +
    +
    +
    diff --git a/archive/entries/2024-04-11-1.xml b/archive/entries/2024-04-11-1.xml new file mode 100644 index 0000000000..c39d7ee19e --- /dev/null +++ b/archive/entries/2024-04-11-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.18 Released! + https://www.php.net/archive/2024.php#2024-04-11-1 + 2024-04-11T13:37:51+00:00 + 2024-04-11T13:37:51+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.18. This is a security release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.18 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-04-11-2.xml b/archive/entries/2024-04-11-2.xml new file mode 100644 index 0000000000..59e15e78ab --- /dev/null +++ b/archive/entries/2024-04-11-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.6 Released! + https://www.php.net/archive/2024.php#2024-04-11-2 + 2024-04-11T14:34:04+00:00 + 2024-04-11T14:34:04+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.6. This is a security release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.6 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-04-11-3.xml b/archive/entries/2024-04-11-3.xml new file mode 100644 index 0000000000..50d1824781 --- /dev/null +++ b/archive/entries/2024-04-11-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.28 Released! + https://www.php.net/archive/2024.php#2024-04-11-3 + 2024-04-11T23:59:59+00:00 + 2024-04-12T15:42:40+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.28. This is a security release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.28 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-04-24-1.xml b/archive/entries/2024-04-24-1.xml new file mode 100644 index 0000000000..78e5c85603 --- /dev/null +++ b/archive/entries/2024-04-24-1.xml @@ -0,0 +1,84 @@ + + + Statement on glibc/iconv Vulnerability + https://www.php.net/archive/2024.php#2024-04-24-1 + 2024-04-24T18:40:29+00:00 + 2024-04-24T18:40:29+00:00 + + + + +
    +

    EDIT 2024-04-25: Clarified when a PHP application is vulnerable to this bug.

    +

    Recently, a bug in glibc version 2.39 and older (CVE-2024-2961) was uncovered + where a buffer overflow in character set conversions to + the ISO-2022-CN-EXT character set can result in remote code execution. +

    + +

    + This specific buffer overflow in glibc is exploitable through PHP, + which exposes the iconv functionality of glibc to do character set + conversions via the iconv extension. + Although the bug is exploitable in the context of the PHP + Engine, the bug is not in PHP. It is also not directly exploitable + remotely. +

    + +

    + The bug is exploitable, if and only if, + the PHP application calls iconv functions + or filters + with user-supplied character sets. +

    + +

    + Applications are not vulnerable if: +

    + +
      +
    • Glibc security updates from the distribution have been installed.
    • +
    • Or the iconv extension is not loaded.
    • +
    • Or the vulnerable character set has been removed from gconv-modules-extra.conf.
    • +
    • Or the application passes only specifically allowed character sets to iconv.
    • +
    + +

    + Moreover, when using a user-supplied character set, + it is good practice for applications to accept only + specific charsets that have been explicitly allowed by the application. + One example of how this can be done is by using an allow-list and the + array_search() function + to check the encoding before passing it to iconv. + For example: array_search($charset, $allowed_list, true) +

    + +

    There are numerous reports online with titles like "Mitigating the + iconv Vulnerability for PHP (CVE-2024-2961)" or "PHP Under Attack". These + titles are misleading as this is not a bug in PHP itself.

    + +

    + If your PHP application is vulnerable, we first recommend to check if your Linux distribution + has already published patched variants of glibc. + Debian, + CentOS, and others, have already done so, and please upgrade as soon as possible. +

    + +

    Once an update is available in glibc, updating that package on your + Linux machine will be enough to alleviate the issue. You do not need to + update PHP, as glibc is a dynamically linked library.

    + +

    + If your Linux distribution has not published a patched version of glibc, + there is no fix for this issue. However, there exists a workaround described in + GLIBC + Vulnerability on Servers Serving PHP which explains a way on how to remove + the problematic character set from glibc. Perform this procedure for every + gconv-modules-extra.conf file that is available on your system.

    + +

    PHP users on Windows are not affected.

    + +

    Therefore, a new version of PHP will not be released for this vulnerability.

    +
    +
    +
    diff --git a/archive/entries/2024-05-09-1.xml b/archive/entries/2024-05-09-1.xml new file mode 100644 index 0000000000..c568615866 --- /dev/null +++ b/archive/entries/2024-05-09-1.xml @@ -0,0 +1,23 @@ + + + PHP 8.2.19 Released! + https://www.php.net/archive/2024.php#2024-05-09-1 + 2024-05-09T13:48:33+00:00 + 2024-05-09T13:48:33+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.2.19. This is a bug fix release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.19 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +
    +
    +
    diff --git a/archive/entries/2024-05-09-2.xml b/archive/entries/2024-05-09-2.xml new file mode 100644 index 0000000000..da42f5f632 --- /dev/null +++ b/archive/entries/2024-05-09-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.7 Released! + https://www.php.net/archive/2024.php#2024-05-09-2 + 2024-05-09T14:40:06+00:00 + 2024-05-09T14:40:06+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.7. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.7 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-05-17-1.xml b/archive/entries/2024-05-17-1.xml new file mode 100644 index 0000000000..3847630b83 --- /dev/null +++ b/archive/entries/2024-05-17-1.xml @@ -0,0 +1,44 @@ + + + PHP Velho Oeste 2024 + https://www.php.net/archive/2024.php#2024-05-17-1 + 2024-05-17T18:00:00+03:00 + 2024-05-17T18:00:00+03:00 + + + 2024-05-17 + + php_velho_oeste_350x300px.png + +
    +

    + PHP Velho Oeste + is a community that aims to move the PHP language ecosystem in the western region of Santa Catarina, + Brazil, known as Velho Oeste(Old West). +

    + +

    + Knowledge + Networking +

    + +

    + In this event, several relevant topics will be covered, from the latest language updates to best + development practices. You will have the opportunity to expand your PHP knowledge and stay up to date + with the latest market trends. +

    + +

    + Date: May 17-18, 2024 +

    + +

    + Location: Unochapecó Noble Hall in Chapecó, Santa Catarina, Brazil. +

    + +

    For more information about the event, visit our website: + PHP Velho Oeste +

    +
    +
    +
    diff --git a/archive/entries/2024-06-06-1.xml b/archive/entries/2024-06-06-1.xml new file mode 100644 index 0000000000..fafd20583d --- /dev/null +++ b/archive/entries/2024-06-06-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.29 Released! + https://www.php.net/archive/2024.php#2024-06-06-1 + 2024-06-06T14:12:51+00:00 + 2024-06-06T14:12:51+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.29. This is a security release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.29 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-06-06-2.xml b/archive/entries/2024-06-06-2.xml new file mode 100644 index 0000000000..13e7af10b8 --- /dev/null +++ b/archive/entries/2024-06-06-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.8 Released! + https://www.php.net/archive/2024.php#2024-06-06-2 + 2024-06-06T14:42:14+00:00 + 2024-06-06T14:42:14+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.8. This is a security release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.8 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-06-06-3.xml b/archive/entries/2024-06-06-3.xml new file mode 100644 index 0000000000..d30bb006d2 --- /dev/null +++ b/archive/entries/2024-06-06-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.20 Released! + https://www.php.net/archive/2024.php#2024-06-06-3 + 2024-06-06T14:56:47+00:00 + 2024-06-06T14:56:47+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.20. This is a security release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.20 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-06-10-1.xml b/archive/entries/2024-06-10-1.xml new file mode 100644 index 0000000000..ffb03c18ce --- /dev/null +++ b/archive/entries/2024-06-10-1.xml @@ -0,0 +1,25 @@ + + + Forum PHP 2024 - Paris (France) + https://www.php.net/archive/2024.php#2024-06-10-1 + 2024-06-07T21:13:21+00:00 + 2024-06-07T21:13:21+00:00 + + + 2024-10-12 + + forumphp-2024.png + +
    +

    + Join the biggest PHP event organized by the French PHP user group, organized for the third time in Disneyland Paris, at the Hotel New York - The Art of Marvel ! During two days, on October 10th and 11th, enjoy the company of our friendly audience, share your knowledge with +700 attendees, meet the companies who use PHP every day, in a environment that will bring even more magic to the language. +

    +

    + Date: October 10 & 11 +

    +

    + Check out more details at Afup.org +

    +
    +
    +
    diff --git a/archive/entries/2024-06-11-1.xml b/archive/entries/2024-06-11-1.xml new file mode 100644 index 0000000000..4e9a8e41a4 --- /dev/null +++ b/archive/entries/2024-06-11-1.xml @@ -0,0 +1,42 @@ + + + International PHP Conference Munich 2024 + https://www.php.net/archive/2024.php#2024-06-11-1 + 2024-06-11T11:11:55+01:00 + 2024-06-11T11:11:55+01:00 + + + 2024-11-15 + + IPC_24_Logo.png + +
    +

    + The International PHP Conference is the world's first PHP conference and stands since more than a decade for top-notch pragmatic expertise in PHP and web technologies. At the IPC, internationally renowned experts from the PHP industry meet up with PHP users and developers from large and small companies. Here is the place where concepts emerge and ideas are born - the IPC signifies knowledge transfer at highest level. +

    +

    + Basic facts: +

    +

    + Date: November 11 ‒ 15, 2024 +

    +

    + Location: Munich Marriott Hotel City West, Munich or Online +

    +

    Highlights:

    +
      +
    • 60+ best practice sessions
    • +
    • 50+ international top speakers
    • +
    • PHPower: Hands-on Power Workshops
    • +
    • Expo with exciting exhibitors on November 12 & 13
    • +
    • All inclusive: Changing buffets, snacks & refreshing drinks
    • +
    • Official certificate for attendees
    • +
    • Free Goodies:Developer bag, T-Shirt, magazines etc.
    • +
    • Exclusive networking events
    • +
    +

    + For further information on the International PHP Conference Munich visit: https://phpconference.com/munich/ +

    +
    +
    +
    diff --git a/archive/entries/2024-06-12-1.xml b/archive/entries/2024-06-12-1.xml new file mode 100644 index 0000000000..dc72aa8594 --- /dev/null +++ b/archive/entries/2024-06-12-1.xml @@ -0,0 +1,25 @@ + + + PHPCon Poland 2024 + https://www.php.net/archive/2024.php#2024-06-12-1 + 2024-06-12T23:00:20+02:00 + 2024-06-12T23:00:20+02:00 + + + 2024-07-31 + + phpconpl2024.png + +
    +

    PHPCon Poland is the oldest and most unique conference in Poland, aimed at PHP developers and enthusiasts. We have been on the Polish market since 2010 and have contributed to educating a new generation of PHP developers!

    +

    This is an event where you will make new contacts and exchange experiences and ideas for the near future. But not only that! It's a conference you'll love coming back to, both for the atmosphere and the new contacts and also for your development - as a listener, speaker, or maybe as a recruiter looking for new talent. Who knows?

    +

    For the first time this year, PHPCon Poland will occur in Wisła, a town often called "the pearl of the Beskid Mountains.”

    +

    The Stok ("The Slope") hotel is a uniquely picturesque mountain resort near the Czech Republic and Slovakia. It is surrounded by mountain ranges, with the highest massif being Barania Gora (1220 m.a.s.l). Three mountain streams combine to create the Wisła, the Queen of Polish rivers. The town of Wisła is the hometown of Adam Małysz, the world champion of ski jumps.

    +

    Your talk will appear on YouTube with us and obtain an extra intro. Watch the examples.

    +

    For further information on the PHPCon Poland 2024 Conference visit: 2024.phpcon.pl.

    +

    Direct link to Call for Papers is: cfp.phpcon.pl.

    +

    Conference days are: October 25-26.

    +

    Call for Papers ends at: July 31.

    +
    +
    +
    diff --git a/archive/entries/2024-06-21-1.xml b/archive/entries/2024-06-21-1.xml new file mode 100644 index 0000000000..1cbbef44e4 --- /dev/null +++ b/archive/entries/2024-06-21-1.xml @@ -0,0 +1,18 @@ + + + CascadiaPHP 2024 - Call For Papers + https://www.php.net/archive/2024.php#2024-06-21-1 + 2024-06-21T18:36:21+00:00 + 2024-06-21T18:36:21+00:00 + + + 2024-06-27 + + cascadiaphp-2018.jpg + +
    +

    Join us in Portland, Oregon fon Thursday-Saturday, October 24-26 in Portland, Oregon for the third (and first since 2019) edition of CascadiaPHP! We're excited to bring back a PHP conference run by and for the community to the Pacific Northwest. As with previous years, Portland State University's campus will be our venue.

    +

    Our CFP has been extended to Thursday, June 27th, and we'd love to see your talk and tutorial abstracts for PHP and PHP-adjacent topics. Submit to the CFP today!

    +
    +
    +
    diff --git a/archive/entries/2024-07-04-1.xml b/archive/entries/2024-07-04-1.xml new file mode 100644 index 0000000000..f114f72af3 --- /dev/null +++ b/archive/entries/2024-07-04-1.xml @@ -0,0 +1,24 @@ + + + PHP 8.2.21 Released! + https://www.php.net/archive/2024.php#2024-07-04-1 + 2024-07-04T14:43:24+00:00 + 2024-07-04T14:43:24+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.2.21. This is a bug fix release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    + For source downloads of PHP 8.2.21 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +
    +
    +
    diff --git a/archive/entries/2024-07-04-2.xml b/archive/entries/2024-07-04-2.xml new file mode 100644 index 0000000000..7057c0e140 --- /dev/null +++ b/archive/entries/2024-07-04-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.9 Released! + https://www.php.net/archive/2024.php#2024-07-04-2 + 2024-07-04T22:59:58+00:00 + 2024-07-04T22:59:58+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.9. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.9 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-07-05-1.xml b/archive/entries/2024-07-05-1.xml new file mode 100644 index 0000000000..3da6536e3f --- /dev/null +++ b/archive/entries/2024-07-05-1.xml @@ -0,0 +1,22 @@ + + + PHP 8.4.0 Alpha 1 available for testing + https://www.php.net/archive/2024.php#2024-07-05-1 + 2024-07-05T13:22:12+00:00 + 2024-07-05T13:22:12+00:00 + + + + +
    +

    The PHP team is pleased to announce the first testing release of PHP 8.4.0, Alpha 1. This starts the PHP 8.4 release cycle, the rough outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.4.0 Alpha 1 please visit the download page.

    +

    Please carefully test this version and report any issues found using the bug tracking system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be Alpha 2, planned for 18 Jul 2024.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2024-07-18-1.xml b/archive/entries/2024-07-18-1.xml new file mode 100644 index 0000000000..aab36e368b --- /dev/null +++ b/archive/entries/2024-07-18-1.xml @@ -0,0 +1,29 @@ + + + PHP 8.4.0 Alpha 2 available for testing + https://www.php.net/archive/2024.php#2024-07-18-1 + 2024-07-18T13:30:46+00:00 + 2024-07-18T13:30:46+00:00 + + + + +
    +

    The PHP team is pleased to announce the second testing release of PHP 8.4.0, Alpha 2. This continues the PHP 8.4 release cycle, the rough outline of which is specified in the PHP Wiki.

    + +

    For source downloads of PHP 8.4.0 Alpha 2 please visit the download page.

    + +

    Please carefully test this version and report any issues found in the bug reporting system.

    + +

    Please DO NOT use this version in production, it is an early test version.

    + +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    + +

    The next release will be Alpha 3, planned for 1 Aug 2024.

    + +

    The signatures for the release can be found in the manifest or on the QA site.

    + +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2024-07-19-1.xml b/archive/entries/2024-07-19-1.xml new file mode 100644 index 0000000000..4894f769cd --- /dev/null +++ b/archive/entries/2024-07-19-1.xml @@ -0,0 +1,18 @@ + + + CascadiaPHP 2024 + https://www.php.net/archive/2024.php#2024-07-19-1 + 2024-07-19T01:27:49+00:00 + 2024-07-19T01:27:49+00:00 + + + 2024-10-24 + + cascadiaphp-2018.jpg + +
    +

    Join us in Portland, Oregon fon Thursday-Saturday, October 24-26 in Portland, Oregon for the third (and first since 2019) edition of CascadiaPHP! We're excited to bring back a PHP conference run by and for the community to the Pacific Northwest. As with previous years, Portland State University's campus will be our venue.

    +

    Attend for one, two, or three days, with a mix of talks and tutorials each day. Purchase a ticket before speakers are announced to get an extra discount.

    +
    +
    +
    diff --git a/archive/entries/2024-08-01-1.xml b/archive/entries/2024-08-01-1.xml new file mode 100644 index 0000000000..549984bc2f --- /dev/null +++ b/archive/entries/2024-08-01-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.10 Released! + https://www.php.net/archive/2024.php#2024-08-01-1 + 2024-08-01T13:28:53+00:00 + 2024-08-01T13:28:53+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.10. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.10 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-08-01-2.xml b/archive/entries/2024-08-01-2.xml new file mode 100644 index 0000000000..c2123c9988 --- /dev/null +++ b/archive/entries/2024-08-01-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.22 Released! + https://www.php.net/archive/2024.php#2024-08-01-2 + 2024-08-01T16:12:06+00:00 + 2024-08-01T16:12:06+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.22. This is a bug fix release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.22 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-08-01-3.xml b/archive/entries/2024-08-01-3.xml new file mode 100644 index 0000000000..588d12ff91 --- /dev/null +++ b/archive/entries/2024-08-01-3.xml @@ -0,0 +1,22 @@ + + + PHP 8.4.0 Alpha 4 available for testing + https://www.php.net/archive/2024.php#2024-08-01-3 + 2024-08-01T23:21:43+00:00 + 2024-08-01T23:21:43+00:00 + + + + +
    +

    The PHP team is pleased to announce the second testing release of PHP 8.4.0, Alpha 4. This continues the PHP 8.4 release cycle, the rough outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.4.0 Alpha 4 please visit the download page.

    +

    Please carefully test this version and report any issues found in the bug reporting system.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be Beta 1, planned for 15 Aug 2024.

    +

    The signatures for the release can be found in the manifest or on the QA site.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2024-08-15-1.xml b/archive/entries/2024-08-15-1.xml new file mode 100644 index 0000000000..a9c162207e --- /dev/null +++ b/archive/entries/2024-08-15-1.xml @@ -0,0 +1,45 @@ + + + PHP 8.4.0 Beta 3 now available for testing + https://www.php.net/archive/2024.php#2024-08-15-1 + 2024-08-15T13:45:25+00:00 + 2024-08-15T13:45:25+00:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.4.0, Beta 3. + This is the first beta release, continuing the PHP 8.4 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.4.0, Beta 3 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be Beta 4, planned for 29 August 2024. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2024-08-15-2.xml b/archive/entries/2024-08-15-2.xml new file mode 100644 index 0000000000..461443fc5d --- /dev/null +++ b/archive/entries/2024-08-15-2.xml @@ -0,0 +1,25 @@ + + + ConFoo Montreal 2025: Call for Papers + https://www.php.net/archive/2024.php#2024-08-15-2 + 2024-08-15T14:31:26-04:00 + 2024-08-15T14:31:26-04:00 + + + 2024-09-22 + + confoo_2024.png + +

    ConFoo is a multi-technology conference specifically crafted for developers. With over 150 presentations, offered by local and international speakers, this conference wish to bring outstanding diversity of content to expand developers knowledge, increase productivity and boost skills.

    + +

    Want to share your knowledge and expertise to hundreds of experts in your field? Want to be part of our talented team of renowned speakers? Want to demonstrate how human intelligence is changing our field of work?

    + +

    The team at ConFoo is looking for speakers and talk proposals for its 2025 event in Montreal. From PHP Framework to best practices and other related technologies, ConFoo is renowned for the quality of its program, and you could be a part of it!

    + +

    Our conferences are both dynamic and educational and are set to help participants build on their career. We usually recommend a 45-minute format, including a 10 Q&A session at the end. Checkout last year conference schedule to get an idea of what you can expect.

    + +

    You have until September 22 to submit your proposal on our website.

    + +

    Until October 18th, participants can enjoy a 300$ discount on their registration!

    +
    +
    diff --git a/archive/entries/2024-08-15-3.xml b/archive/entries/2024-08-15-3.xml new file mode 100644 index 0000000000..cc0b699040 --- /dev/null +++ b/archive/entries/2024-08-15-3.xml @@ -0,0 +1,20 @@ + + + PHP Russia 2024 + https://www.php.net/archive/2024.php#2024-08-15-3 + 2024-08-15T20:24:40+00:00 + 2024-08-15T20:24:40+00:00 + + + 2024-12-02 + + php_russia_2024.jpg + +
    +

    PHP Russia is the only Russian conference focused on PHP. It will be held in Moscow December 2-3, 2024. Main topics are PHP ecosystem (PHP itself, standards, frameworks, libraries and OpenSource) and major players experience in building complex projects using best practices and modern approaches.

    +

    We expect 600+ attendees and 20+ speakers!

    +

    Our audience consists of applications developers, API developers, CTO’s, CEO’s, fullstack developers, etc.

    +

    The program is designed by the developer community, representatives of large companies from Runet and around the world, and by tech developers and community activists. The selection of talks is multi-layered and complex — the Program Committee selects the best talks from the received applications unanimously according to several criteria.

    +
    +
    +
    diff --git a/archive/entries/2024-08-27-1.xml b/archive/entries/2024-08-27-1.xml new file mode 100644 index 0000000000..d92c13e8f0 --- /dev/null +++ b/archive/entries/2024-08-27-1.xml @@ -0,0 +1,19 @@ + + + API Platform Conference 2024 + https://www.php.net/archive/2024.php#2024-08-27-1 + 2024-08-27T19:55:44+00:00 + 2024-08-27T19:55:44+00:00 + + + 2024-09-19 + + api-platform-con-2024.png + +
    +

    API Platform is an open-source PHP framework, designed to build modern, fast, and robust APIs thanks to its wide set of tools and features. It supports many formats and protocols, including JSON-LD, OpenAPI, and GraphQL, and is designed to streamline the developer experience.

    +

    The API Platform Conference, the event dedicated to the API Platform framework and its ecosystem, is back and will be held in Lille, France, at EuraTechnologies (Europe's largest startup incubator and accelerator).

    +

    On September 19th and 20th, 25 talks will be delivered, in English and in French. Also, many organizations from the PHP, JavaScript and Cloud ecosystems will hold booths on an exhibition hall.

    +
    +
    +
    diff --git a/archive/entries/2024-08-29-1.xml b/archive/entries/2024-08-29-1.xml new file mode 100644 index 0000000000..7530f2d3b9 --- /dev/null +++ b/archive/entries/2024-08-29-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.23 Released! + https://www.php.net/archive/2024.php#2024-08-29-1 + 2024-08-29T15:58:02+00:00 + 2024-08-29T15:58:02+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.2.23. This is a bug fix release.

    +

    All PHP 8.2 users are encouraged to upgrade to this version.

    +

    For source downloads of PHP 8.2.23 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +
    +
    +
    diff --git a/archive/entries/2024-08-29-2.xml b/archive/entries/2024-08-29-2.xml new file mode 100644 index 0000000000..002a954294 --- /dev/null +++ b/archive/entries/2024-08-29-2.xml @@ -0,0 +1,45 @@ + + + PHP 8.4.0 Beta 4 now available for testing + https://www.php.net/archive/2024.php#2024-08-29-2 + 2024-08-29T18:15:12+00:00 + 2024-08-29T18:15:12+00:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.4.0, Beta 4. + This is the second beta release, continuing the PHP 8.4 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.4.0, Beta 4 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be Beta 5, planned for 12 September 2024. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2024-08-29-3.xml b/archive/entries/2024-08-29-3.xml new file mode 100644 index 0000000000..f42b235e7d --- /dev/null +++ b/archive/entries/2024-08-29-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.11 Released! + https://www.php.net/archive/2024.php#2024-08-29-3 + 2024-08-29T21:40:58+00:00 + 2024-08-29T21:40:58+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.11. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.11 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-09-12-1.xml b/archive/entries/2024-09-12-1.xml new file mode 100644 index 0000000000..6a5b69788f --- /dev/null +++ b/archive/entries/2024-09-12-1.xml @@ -0,0 +1,45 @@ + + + PHP 8.4.0 Beta 5 available for testing + https://www.php.net/archive/2024.php#2024-09-12-1 + 2024-09-12T14:14:49+00:00 + 2024-09-12T14:14:49+00:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.4.0, Beta 5. + This is the third beta release, continuing the PHP 8.4 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.4.0, Beta 5 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be RC 1, planned for 26 September 2024. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2024-09-17-1.xml b/archive/entries/2024-09-17-1.xml new file mode 100644 index 0000000000..809c6bbf95 --- /dev/null +++ b/archive/entries/2024-09-17-1.xml @@ -0,0 +1,40 @@ + + + Dutch PHP Conference 2025 - Call For Papers + https://www.php.net/archive/2024.php#2024-09-17-1 + 2024-09-17T07:18:41+00:00 + 2024-09-17T07:18:41+00:00 + + + 2024-12-17 + + dpc-2025.png + +
    +

    🚀 Dutch PHP Conference 2025 is coming! 🚀

    +

    We’re thrilled to announce that the 19th edition of the Dutch PHP Conference will take place from March 18 to March 21, 2025 in Amsterdam! 🗓️

    +

    🎤 Call for Papers is now OPEN! 🎤

    +

    Got insights, skills, or experience to share? Submit your talk ideas before the deadline on December 17th! We’re looking for both technical and non-technical sessions that will inspire and engage our community.

    +

    + Highlights: +

    +
      +
    • 👥 Expected attendance: around 800
    • +
    • 📅 Conference dates: March 18 – 21, 2025
    • +
    • 🎙️ 30-40 speaking slots available
    • +
    + +

    🎟️ Early Bird Tickets Available Now! 🎟️

    +

    Don’t miss out on the early bird prices! With your ticket, you’ll get access to not just one, but three incredible conferences: Dutch PHP Conference, Appdevcon (where app development meets creativity 📱✨), and Webdevcon (your gateway to the latest in web technology 🌐🚀)! Secure your spot for a fantastic lineup of workshop days, conference sessions, and social activities.

    +

    Get ready for an incredible edition of #DPC25, plus the added value of Appdevcon and Webdevcon! 🌟

    + +

    See you there! 🚀🎉

    +
    +
    +
    diff --git a/archive/entries/2024-09-26-1.xml b/archive/entries/2024-09-26-1.xml new file mode 100644 index 0000000000..c9a2b31b3a --- /dev/null +++ b/archive/entries/2024-09-26-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.12 Released! + https://www.php.net/archive/2024.php#2024-09-26-1 + 2024-09-26T13:31:15+00:00 + 2024-09-26T13:31:15+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.12. This is a security release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.12 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-09-26-2.xml b/archive/entries/2024-09-26-2.xml new file mode 100644 index 0000000000..30226f1bba --- /dev/null +++ b/archive/entries/2024-09-26-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.24 Released! + https://www.php.net/archive/2024.php#2024-09-26-2 + 2024-09-26T16:25:23+00:00 + 2024-09-26T16:25:23+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.24. This is a security release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.24 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-09-26-3.xml b/archive/entries/2024-09-26-3.xml new file mode 100644 index 0000000000..036d690372 --- /dev/null +++ b/archive/entries/2024-09-26-3.xml @@ -0,0 +1,45 @@ + + + PHP 8.4.0 RC 1 now available for testing + https://www.php.net/archive/2024.php#2024-09-26-3 + 2024-09-26T19:25:27+00:00 + 2024-09-26T19:25:27+00:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.4.0, RC 1. + This is the first release candidate, continuing the PHP 8.4 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.4.0, RC 1 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be RC 2, planned for 10 October 2024. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2024-09-26-4.xml b/archive/entries/2024-09-26-4.xml new file mode 100644 index 0000000000..b47bce95a2 --- /dev/null +++ b/archive/entries/2024-09-26-4.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.30 Released! + https://www.php.net/archive/2024.php#2024-09-26-4 + 2024-09-26T19:56:50+00:00 + 2024-09-26T19:56:50+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.30. This is a security release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.30 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-10-10-1.xml b/archive/entries/2024-10-10-1.xml new file mode 100644 index 0000000000..676a72898c --- /dev/null +++ b/archive/entries/2024-10-10-1.xml @@ -0,0 +1,45 @@ + + + PHP 8.4.0 RC2 available for testing + https://www.php.net/archive/2024.php#2024-10-10-1 + 2024-10-10T14:04:23+00:00 + 2024-10-10T14:04:23+00:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.4.0, RC2. + This is the second release candidate, continuing the PHP 8.4 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.4.0, RC2 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be RC 3, planned for 24 October 2024. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2024-10-24-1.xml b/archive/entries/2024-10-24-1.xml new file mode 100644 index 0000000000..cd9a62c1e9 --- /dev/null +++ b/archive/entries/2024-10-24-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.13 Released! + https://www.php.net/archive/2024.php#2024-10-24-1 + 2024-10-24T12:05:52+00:00 + 2024-10-24T12:05:52+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.13. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.13 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-10-24-2.xml b/archive/entries/2024-10-24-2.xml new file mode 100644 index 0000000000..cf97cf1f43 --- /dev/null +++ b/archive/entries/2024-10-24-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.25 Released! + https://www.php.net/archive/2024.php#2024-10-24-2 + 2024-10-24T12:54:49+00:00 + 2024-10-24T12:54:49+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.2.25. This is a bug fix release.

    +

    All PHP 8.2 users are encouraged to upgrade to this version.

    +

    For source downloads of PHP 8.2.25 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +
    +
    +
    diff --git a/archive/entries/2024-10-24-3.xml b/archive/entries/2024-10-24-3.xml new file mode 100644 index 0000000000..e300b09e74 --- /dev/null +++ b/archive/entries/2024-10-24-3.xml @@ -0,0 +1,45 @@ + + + PHP 8.4.0 RC3 available for testing + https://www.php.net/archive/2024.php#2024-10-24-3 + 2024-10-24T13:22:16+00:00 + 2024-10-24T13:22:16+00:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.4.0, RC3. + This is the third release candidate, continuing the PHP 8.4 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.4.0, RC3 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be RC 4, planned for 07 November 2024. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2024-11-07-1.xml b/archive/entries/2024-11-07-1.xml new file mode 100644 index 0000000000..1c184328b3 --- /dev/null +++ b/archive/entries/2024-11-07-1.xml @@ -0,0 +1,46 @@ + + + PHP 8.4.0 RC4 available for testing + https://www.php.net/archive/2024.php#2024-11-07-1 + 2024-11-07T18:53:19+00:00 + 2024-11-07T18:53:19+00:00 + + + + +
    +

    + The PHP team is pleased to announce the release of PHP 8.4.0, RC4. + This is the fourth release candidate, continuing the PHP 8.4 release cycle, + the rough outline of which is specified in the + PHP Wiki. +

    +

    + For source downloads of PHP 8.4.0, RC4 please visit the + download page. +

    +

    + Please carefully test this version and report any issues found in the + bug reporting system. +

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    + For more information on the new features and other changes, you can read the + NEWS file + or the UPGRADING + file for a complete list of upgrading notes. These files can also be + found in the release archive. +

    +

    + The next release will be the production-ready, general availability + release, planned for 21 November 2024. +

    +

    + The signatures for the release can be found in + the manifest + or on the QA site. +

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2024-11-21-1.xml b/archive/entries/2024-11-21-1.xml new file mode 100644 index 0000000000..11ea4fabf2 --- /dev/null +++ b/archive/entries/2024-11-21-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.26 Released! + https://www.php.net/archive/2024.php#2024-11-21-1 + 2024-11-21T03:50:54+00:00 + 2024-11-21T03:50:54+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.26. This is a security release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.26 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-11-21-2.xml b/archive/entries/2024-11-21-2.xml new file mode 100644 index 0000000000..71df0ca86e --- /dev/null +++ b/archive/entries/2024-11-21-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.14 Released! + https://www.php.net/archive/2024.php#2024-11-21-2 + 2024-11-21T04:17:35+00:00 + 2024-11-21T04:17:35+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.14. This is a security release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.14 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-11-21-3.xml b/archive/entries/2024-11-21-3.xml new file mode 100644 index 0000000000..2cca77d93f --- /dev/null +++ b/archive/entries/2024-11-21-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.31 Released! + https://www.php.net/archive/2024.php#2024-11-21-3 + 2024-11-21T06:23:55+00:00 + 2024-11-21T06:23:55+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.31. This is a security release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.31 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-11-21-4.xml b/archive/entries/2024-11-21-4.xml new file mode 100644 index 0000000000..fbcc172a44 --- /dev/null +++ b/archive/entries/2024-11-21-4.xml @@ -0,0 +1,35 @@ + + + PHP 8.4.1 Released! + https://www.php.net/archive/2024.php#2024-11-21-4 + 2024-11-21T06:55:34+00:00 + 2024-11-21T06:55:34+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.4.1. This release marks the latest minor release of the PHP language.

    +

    PHP 8.4 comes with numerous improvements and new features such as:

    + +

    + For source downloads of PHP 8.4.1 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +

    + The migration guide is available in the PHP Manual. + Please consult it for the detailed list of new features and backward incompatible changes. +

    +

    Kudos to all the contributors and supporters!

    +
    +
    +
    diff --git a/archive/entries/2024-12-03-1.xml b/archive/entries/2024-12-03-1.xml new file mode 100644 index 0000000000..e90448735a --- /dev/null +++ b/archive/entries/2024-12-03-1.xml @@ -0,0 +1,34 @@ + + + PHP Conference Nagoya 2025 + https://www.php.net/archive/2024.php#2024-12-03-1 + 2024-12-03T08:19:47+00:00 + 2024-12-03T08:19:47+00:00 + + + 2025-02-22 + + phpcon_nagoya2025.png + +
    +

    + PHP Conference Nagoya will be held for the first time in 2025. +

    +

    + The conference aims to promote interaction between Nagoya engineers and engineers across the country, and to bring a breath of fresh air to the Nagoya engineering community.
    + (This conference will be conducted in Japanese.) +

    + Basic facts
    +
      +
    • Date: February 22, 2025 (JST)
    • +
    • Location: Nagoya City, Aichi Prefecture, Japan
    • +
    +

    + For more information, see PHP Conference Nagoya 2025. +

    +

    + Follow us on 𝕏. +

    +
    +
    +
    diff --git a/archive/entries/2024-12-04-1.xml b/archive/entries/2024-12-04-1.xml new file mode 100644 index 0000000000..69d75343e8 --- /dev/null +++ b/archive/entries/2024-12-04-1.xml @@ -0,0 +1,34 @@ + + + PHP Conference Japan 2024 + https://www.php.net/archive/2024.php#2024-12-04-1 + 2024-12-04T13:44:00+00:00 + 2024-12-04T13:44:00+00:00 + + + 2024-12-04 + + phpcon-japan-2024.png + +
    +
  • Date: December 22, 2024 (JST)
  • +
  • Location: Ota Tokyo, Japan.
  • +

    + PHP Conference Japan 2024 the largest PHP event in Japan. +

    +

    + The first PHP Conference Japan was held in 2000 by PHP user group in Japan, and this year marks the 25th edition of the event. +

    +

    + We have prepared enjoyable programs for all PHPers, from beginners to advanced users. +

    + +

    + For more information, see PHP Conference Japan 2024. +

    +

    + Follow us on 𝕏 #phpcon +

    +
    +
    +
    diff --git a/archive/entries/2024-12-06-1.xml b/archive/entries/2024-12-06-1.xml new file mode 100644 index 0000000000..d2871380c1 --- /dev/null +++ b/archive/entries/2024-12-06-1.xml @@ -0,0 +1,35 @@ + + + phpday 2025 - Call For Papers + https://www.php.net/archive/2024.php#2024-12-06-1 + 2024-12-06T08:49:08+00:00 + 2024-12-06T08:49:08+00:00 + + + 2025-01-12 + + phpday2023.png + +

    +phpday is the annual gathering for developers, professionals, and PHP enthusiasts, +dedicated to sharing insights, expertise, and advancements in web programming. +The event offers a mix of technical sessions, hands-on workshops, and networking with industry leaders. +

    +

    +Now in its 22nd year, phpday has been held continuously since 2003. The 2025 edition +will be hosted in Verona on May 15-16. +

    +

    +The Call For Papers is now open! +

    +

    +At phpday, attendees can explore the latest trends and best practices in PHP development, +enhancing their technical skills and keeping their design and development teams at the +forefront of industry innovation. +

    +

    +phpday is proudly organized by GrUSP! +

    +
    +
    +
    diff --git a/archive/entries/2024-12-09-1.xml b/archive/entries/2024-12-09-1.xml new file mode 100644 index 0000000000..0f456cbc15 --- /dev/null +++ b/archive/entries/2024-12-09-1.xml @@ -0,0 +1,19 @@ + + + ConFoo 2025 + https://www.php.net/archive/2024.php#2024-12-09-1 + 2024-12-09T13:21:37-05:00 + 2024-12-09T13:21:37-05:00 + + + 2025-02-26 + + confoo_2024.png + +

    ConFoo is back for its 23rd edition, at Hotel Bonaventure in Montreal, with a full stack of incredible talks with the best speakers in tech. You can check our newest program right now on our website

    +

    With over 190 presentations, offered by over a hundred local and international speakers, ConFoo took on the mission to bring an outstanding diversity of content to expand your knowledge, increase your productivity and boost your development skills.

    +

    This year schedule is especially important for those looking to learn the latest news in cutting edge technologies and get better with their PHP skills.

    +

    In an environment especially crafted for developers, ConFoo is also a great opportunity to meet potential employers, enjoy networking sessions with colleagues and friends and discover Montreal in its prime season.

    +

    Attend and find out how human intelligence is building the future!

    +
    +
    diff --git a/archive/entries/2024-12-13-1.xml b/archive/entries/2024-12-13-1.xml new file mode 100644 index 0000000000..d6dafb439d --- /dev/null +++ b/archive/entries/2024-12-13-1.xml @@ -0,0 +1,43 @@ + + + International PHP Conference Berlin 2025 + https://www.php.net/archive/2024.php#2024-12-13-1 + 2024-12-13T11:11:55+01:00 + 2024-12-13T11:11:55+01:00 + + + 2025-06-06 + + IPC_24_Logo.png + +
    +

    + The International PHP Conference is the world's first PHP conference and stands since more than a decade for top-notch pragmatic expertise in PHP and web technologies. At the IPC, internationally renowned experts from the PHP industry meet up with PHP users and developers from large and small companies. Here is the place where concepts emerge and ideas are born - the IPC signifies knowledge transfer at highest level. +

    +

    + Basic facts: +

    +

    + Date: June 2 ‒ 6, 2025 +

    +

    + Location: Maritim ProArte Hotel Berlin, Berlin or Online +

    +

    Highlights:

    +
      +
    • 60+ best practice sessions
    • +
    • 50+ international top speakers
    • +
    • PHPower: Hands-on Power Workshops
    • +
    • Expo with exciting exhibitors on June 03 & 04
    • +
    • All inclusive: Changing buffets, snacks & refreshing drinks
    • +
    • Official certificate for attendees
    • +
    • Free Goodies:Developer bag, T-Shirt, magazines etc.
    • +
    • Exclusive networking events
    • +
    +

    + For further information on the International PHP Conference Berlin visit: https://phpconference.com/berlin-en/ +

    +
    +
    +
    diff --git a/archive/entries/2024-12-19-1.xml b/archive/entries/2024-12-19-1.xml new file mode 100644 index 0000000000..8baefc7224 --- /dev/null +++ b/archive/entries/2024-12-19-1.xml @@ -0,0 +1,24 @@ + + + PHP 8.2.27 Released! + https://www.php.net/archive/2024.php#2024-12-19-1 + 2024-12-19T15:47:10+00:00 + 2024-12-19T15:47:10+00:00 + + + + + +
    +

    The PHP development team announces the immediate availability of PHP 8.2.27. This is a bug fix release.

    +

    All PHP 8.2 users are encouraged to upgrade to this version.

    +

    For source downloads of PHP 8.2.27 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

    +

    Please note, this is the last bug-fix release for the 8.2.x series. Security fix support will continue until 31 Dec 2026. + For more information, please check our Supported Versions page. +

    +
    +
    +
    diff --git a/archive/entries/2024-12-19-2.xml b/archive/entries/2024-12-19-2.xml new file mode 100644 index 0000000000..ba1fc831b3 --- /dev/null +++ b/archive/entries/2024-12-19-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.15 Released! + https://www.php.net/archive/2024.php#2024-12-19-2 + 2024-12-19T16:40:56+00:00 + 2024-12-19T16:40:56+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.15. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.15 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-12-19-3.xml b/archive/entries/2024-12-19-3.xml new file mode 100644 index 0000000000..fc722e55ed --- /dev/null +++ b/archive/entries/2024-12-19-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.4.2 Released! + https://www.php.net/archive/2024.php#2024-12-19-3 + 2024-12-19T16:53:11+00:00 + 2024-12-19T16:53:11+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.4.2. This is a bug fix release.

    + +

    All PHP 8.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.4.2 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2024-12-31-1.xml b/archive/entries/2024-12-31-1.xml new file mode 100644 index 0000000000..c77abe7972 --- /dev/null +++ b/archive/entries/2024-12-31-1.xml @@ -0,0 +1,21 @@ + + + Web Summer Camp 2025 + https://www.php.net/archive/2024.php#2024-12-31-1 + 2024-12-31T15:56:51+01:00 + 2024-12-31T15:56:51+01:00 + + + 2025-07-03 + + websc.png + +
    +

    Web Summer Camp is a unique 3-day international conference for web professionals, focused on providing intensive knowledge exchange and hands-on workshops. It is set in a relaxed summer environment, offering a full-day program with numerous opportunities for learning and sharing experiences with web designers, developers, founders, and other web aficionados. The program will be divided into six tracks, one being focused on PHP. Other tracks include Javascript, Python, UX, etc. +

    + +

    The nextedition will be held on July 3rd-5th 2025 in Opatija, Croatia. Call for papers is open till March 15th 2025. For more information see the web site: Web Summer Camp 2025. +

    +
    +
    +
    diff --git a/archive/entries/2025-01-13-1.xml b/archive/entries/2025-01-13-1.xml new file mode 100644 index 0000000000..1269ae63e5 --- /dev/null +++ b/archive/entries/2025-01-13-1.xml @@ -0,0 +1,20 @@ + + + API Platform Conference 2025 + https://www.php.net/archive/2025.php#2025-01-13-1 + 2025-01-13T14:56:53+00:00 + 2025-01-13T14:56:53+00:00 + + + 2025-09-18 + + api-platform-con-2025.png + +
    +

    We are thrilled to announce that the API Platform Conference will return on September 18th and 19th, 2025, both in Lille (France) and online.

    +

    The API Platform Conference is a two-day event that highlights the latest trends, best practices, and case studies related to API Platform and its ecosystem, including PHP, Symfony, JavaScript, AI, FrankenPHP, performance, and tools.

    +

    With nearly 30 talks delivered in both English and French, the conference is a must-attend for innovative companies, project leaders, and skilled developers. If you're a developer, CTO, or decision-maker specializing in these technologies, this event is tailored for you!

    +

    The call for papers for the API Platform Conference 2025 is open until March 23. Final speakers will be announced starting May 14. Submit your pitch, and you could join us for this special anniversary edition: https://api-platform.com/con/2025/

    +
    +
    +
    diff --git a/archive/entries/2025-01-16-1.xml b/archive/entries/2025-01-16-1.xml new file mode 100644 index 0000000000..575199487a --- /dev/null +++ b/archive/entries/2025-01-16-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.16 Released! + https://www.php.net/archive/2025.php#2025-01-16-1 + 2025-01-16T16:36:10+00:00 + 2025-01-16T16:36:10+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.16. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.16 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-01-17-1.xml b/archive/entries/2025-01-17-1.xml new file mode 100644 index 0000000000..cd30ce5116 --- /dev/null +++ b/archive/entries/2025-01-17-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.4.3 Released! + https://www.php.net/archive/2025.php#2025-01-17-1 + 2025-01-17T01:15:24+00:00 + 2025-01-17T01:15:24+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.4.3. This is a bug fix release.

    + +

    All PHP 8.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.4.3 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-01-17-2.xml b/archive/entries/2025-01-17-2.xml new file mode 100644 index 0000000000..dce23c6b3f --- /dev/null +++ b/archive/entries/2025-01-17-2.xml @@ -0,0 +1,24 @@ + + + PHPerKaigi 2025 + https://www.php.net/archive/2025.php#2025-01-17-2 + 2025-01-17T14:42:59+00:00 + 2025-01-17T14:42:59+00:00 + + + 2025-03-21 + + phperkaigi-2025.png + +
    +

    PHPerKaigi 2025, Nakano, Tokyo, Japan

    +

    Date: Mar 21 - 23, 2025

    +

    PHPerKaigi is an event for PHPers, that is, those who are currently using PHP, those who have used PHP in the past, those who want to use PHP in the future, and those who love PHP, to share technical know-how and "#love" for PHP.

    +

    The conference consists of talk sessions by public speakers. In addition to we have unconference, social gathering and so on for all of developers from all from Japan. Let's talk about PHP!

    +

    Follow us on X (Formerly Twitter) @phperkaigi, #phperkaigi.

    +

    https://phperkaigi.jp/2025/

    +

    Note:

    +

    *Kaigi* means meeting in Japanese.

    +
    +
    +
    diff --git a/archive/entries/2025-01-28-1.xml b/archive/entries/2025-01-28-1.xml new file mode 100644 index 0000000000..e21c2039f8 --- /dev/null +++ b/archive/entries/2025-01-28-1.xml @@ -0,0 +1,42 @@ + + + PHP Tek 2025 + https://www.php.net/archive/2025.php#2025-01-28-1 + 2025-01-28T21:35:08+00:00 + 2025-01-28T21:35:08+00:00 + + + 2025-05-20 + + php-tek-2025.png + +
    +

    + Join us for the 17th Annual Web Developer Conference, PHP Tek 2025, May 20-22 2025. +

    + +

    + PHP Tek 2025 combines leadership, expertise, and networking in one event. A relaxing + atmosphere for tech leaders and developers to share, learn and grow professionally while + also providing you with the knowledge to solve your everyday problems. +

    + + +

    + We are the longest-running web developer conference in the United States, focusing on the + PHP programming language. The event is broken up into multiple days. The main conference + happens over the course of 3 days (May 20-22) and includes keynotes, talks, and networking + options. It will be broken into four tracks this year and will cover a range of topics. +

    + + +

    + Head over to + https://phptek.io + and get yours today! +

    + +
    +
    +
    diff --git a/archive/entries/2025-01-31-1.xml b/archive/entries/2025-01-31-1.xml new file mode 100644 index 0000000000..0c32b3f166 --- /dev/null +++ b/archive/entries/2025-01-31-1.xml @@ -0,0 +1,52 @@ + + + PHP Velho Oeste 2025 + https://www.php.net/archive/2025.php#2025-01-31-1 + 2025-01-31T15:00:00+03:00 + 2025-01-31T15:00:00+03:00 + + + 2025-05-30 + + php_velho_oeste_350x300px.png + + +
    +

    + The + PHP Velho Oeste + is a national-level conference that takes place annually in the West of Santa Catarina, Brazil, + known as Velho Oeste(Old West). +

    + +

    + Knowledge + Networking +

    + +

    + In this event, several relevant topics will be covered, from the latest language updates to best + development practices. You will have the opportunity to expand your PHP knowledge and stay up to date + with the latest market trends. +

    + +

    + Date: May 30-31, 2025 +

    + +

    + Location: Unochapecó Noble Hall in Chapecó, Santa Catarina, Brazil. +

    + +

    See how it was last year: + PHP Velho Oeste 2024. +

    + +

    Follow us on social media: + LinkedIn / + Instagram / + X. +

    +
    +
    +
    diff --git a/archive/entries/2025-02-09-1.xml b/archive/entries/2025-02-09-1.xml new file mode 100644 index 0000000000..86206c77c0 --- /dev/null +++ b/archive/entries/2025-02-09-1.xml @@ -0,0 +1,35 @@ + + + Laravel Live Denmark 2025 + https://www.php.net/archive/2024.php#2025-02-09-1 + 2025-01-09T00:00:00+00:00 + 2025-01-09T00:00:00+00:00 + + + 2025-08-22 + + laravellivedk2025.png + +
    +

    + Laravel Live Denmark is back! The conference is a two-day Laravel conference held in Copenhagen, Denmark on the 21 - 22. August 2025. +

    +

    + Join us and 300 other Laravel and PHP enthusiasts from around the world got for two days of learning, 16 speakers and more within the Laravel community. +

    + Information:
    +
      +
    • August 21-22, 2025
    • +
    • Copenhagen, Denmark
    • +
    • 16 speakers
    • +
    • +300 Laravel and PHP enthusiasts
    • +
    +

    + For more information, see Laravel Live Denmark 2025. +

    +

    + You can also find us at Twitter. +

    +
    +
    +
    diff --git a/archive/entries/2025-02-13-1.xml b/archive/entries/2025-02-13-1.xml new file mode 100644 index 0000000000..d32c3dfe19 --- /dev/null +++ b/archive/entries/2025-02-13-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.4.4 Released! + https://www.php.net/archive/2025.php#2025-02-13-1 + 2025-02-13T17:59:36+00:00 + 2025-02-13T17:59:36+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.4.4. This is a bug fix release.

    + +

    All PHP 8.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.4.4 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-02-13-2.xml b/archive/entries/2025-02-13-2.xml new file mode 100644 index 0000000000..ea8f0ac4d1 --- /dev/null +++ b/archive/entries/2025-02-13-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.17 Released! + https://www.php.net/archive/2025.php#2025-02-13-2 + 2025-02-13T18:53:19+00:00 + 2025-02-13T18:53:19+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.17. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.17 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-03-13-1.xml b/archive/entries/2025-03-13-1.xml new file mode 100644 index 0000000000..be74efa9fb --- /dev/null +++ b/archive/entries/2025-03-13-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.19 Released! + https://www.php.net/archive/2025.php#2025-03-13-1 + 2025-03-13T13:48:14+00:00 + 2025-03-13T13:48:14+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.19. This is a security release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.19 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-03-13-2.xml b/archive/entries/2025-03-13-2.xml new file mode 100644 index 0000000000..9175c3a698 --- /dev/null +++ b/archive/entries/2025-03-13-2.xml @@ -0,0 +1,32 @@ + + + PHPKonf 2025 + https://www.php.net/archive/2025.php#2025-03-13-1 + 2025-03-13T12:52:07+00:00 + 2025-03-13T12:52:07+00:00 + + + 2025-05-17 + + phpkonf_2015.png + +
    +

    + What is PHPKonf +

    + +

    + PHPKonf, the signature event of Istanbul PHP, is a landmark for PHP enthusiasts around the world. Now stepping into its 9th year, this annual conference is renowned for its dedication to spreading knowledge and building connections within the PHP community. Join us at PHPKonf, where PHP meets Istanbul. +

    + +

    + Date: May 17, 2025 in Istanbul, Turkiye. +

    + +

    For more information about the event, visit the website: + PHPKonf 2025 +

    +
    +
    +
    + diff --git a/archive/entries/2025-03-13-3.xml b/archive/entries/2025-03-13-3.xml new file mode 100644 index 0000000000..fef4def8b2 --- /dev/null +++ b/archive/entries/2025-03-13-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.4.5 Released! + https://www.php.net/archive/2025.php#2025-03-13-3 + 2025-03-13T14:47:07+00:00 + 2025-03-13T14:47:07+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.4.5. This is a security release.

    + +

    All PHP 8.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.4.5 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-03-13-4.xml b/archive/entries/2025-03-13-4.xml new file mode 100644 index 0000000000..670747d43f --- /dev/null +++ b/archive/entries/2025-03-13-4.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.32 Released! + https://www.php.net/archive/2025.php#2025-03-13-4 + 2025-03-13T16:02:34+00:00 + 2025-03-13T16:02:34+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.32. This is a security release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.32 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-03-13-5.xml b/archive/entries/2025-03-13-5.xml new file mode 100644 index 0000000000..b2c7f52792 --- /dev/null +++ b/archive/entries/2025-03-13-5.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.28 Released! + https://www.php.net/archive/2025.php#2025-03-13-5 + 2025-03-13T16:51:14+00:00 + 2025-03-13T16:51:14+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.28. This is a security release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.28 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-03-14-1.xml b/archive/entries/2025-03-14-1.xml new file mode 100644 index 0000000000..44b7f430e7 --- /dev/null +++ b/archive/entries/2025-03-14-1.xml @@ -0,0 +1,37 @@ + + + PHP Conference Odawara 2025 + https://www.php.net/archive/2025.php#2025-03-14-1 + 2025-03-14T00:24:54+00:00 + 2025-03-14T00:24:54+00:00 + + + 2025-04-12 + + phpcon_odawara2025.png + +
    +

    + PHP Conference Odawara is back for its second run!🍥 +

    +

    + This time, we're excited to welcome Saki Takamachi (RM) as our keynote speaker.
    + While talks will remain at the heart of the conference, we’re also planning interactive sessions designed to spark communication among fellow engineers.
    + Join us in Odawara again to share in the excitement of PHP and connect with passionate community members.
    + (This conference will be conducted in Japanese) +

    + Basic information
    +
      +
    • 🌸 Date: April 12, 2025 (JST)
    • +
    • 🏯 Location: Odawara Civic Exchange Center "UMECO", Kanagawa Prefecture, Japan
    • +
    +

    + For more information, see the event page: PHP Conference Odawara 2025. +

    +

    + Follow us on X. +

    + +
    +
    +
    diff --git a/archive/entries/2025-04-10-1.xml b/archive/entries/2025-04-10-1.xml new file mode 100644 index 0000000000..200ba0c4d3 --- /dev/null +++ b/archive/entries/2025-04-10-1.xml @@ -0,0 +1,27 @@ + + + PHP Core Undergoes Security Audit – Results Now Available + https://www.php.net/archive/2025.php#2025-04-10-1 + 2025-04-10T11:59:24+00:00 + 2025-04-10T11:59:24+00:00 + + + + +
    +

    + A focused security audit of the PHP source code (php/php-src) was recently completed, commissioned by the Sovereign Tech Agency, organized by The PHP Foundation in partnership with OSTIF, and performed by Quarkslab. The audit targeted the most critical parts of the codebase, leading to 27 findings, 17 with security implications, including four CVEs. +

    +

    + All issues have been addressed by the PHP development team. Users are encouraged to upgrade to the latest PHP versions to benefit from these security improvements. +

    +

    + Read the full audit report. + More details in the PHP Foundation blog post. +

    +

    + If your organization is interested in sponsoring further audits, please contact The PHP Foundation team: contact@thephp.foundation. +

    +
    +
    +
    diff --git a/archive/entries/2025-04-10-2.xml b/archive/entries/2025-04-10-2.xml new file mode 100644 index 0000000000..75796d9fed --- /dev/null +++ b/archive/entries/2025-04-10-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.20 Released! + https://www.php.net/archive/2025.php#2025-04-10-2 + 2025-04-10T15:56:49+00:00 + 2025-04-10T15:56:49+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.20. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.20 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-04-10-3.xml b/archive/entries/2025-04-10-3.xml new file mode 100644 index 0000000000..912da0a603 --- /dev/null +++ b/archive/entries/2025-04-10-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.4.6 Released! + https://www.php.net/archive/2025.php#2025-04-10-3 + 2025-04-10T21:09:01+00:00 + 2025-04-10T21:09:01+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.4.6. This is a bug fix release.

    + +

    All PHP 8.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.4.6 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-05-08-1.xml b/archive/entries/2025-05-08-1.xml new file mode 100644 index 0000000000..ee8f158be5 --- /dev/null +++ b/archive/entries/2025-05-08-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.4.7 Released! + https://www.php.net/archive/2025.php#2025-05-08-1 + 2025-05-08T14:51:28+00:00 + 2025-05-08T14:51:28+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.4.7. This is a bug fix release.

    + +

    All PHP 8.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.4.7 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-05-08-2.xml b/archive/entries/2025-05-08-2.xml new file mode 100644 index 0000000000..ef9216bc09 --- /dev/null +++ b/archive/entries/2025-05-08-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.21 Released! + https://www.php.net/archive/2025.php#2025-05-08-2 + 2025-05-08T22:02:15+00:00 + 2025-05-08T22:02:15+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.21. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.21 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-05-12-1.xml b/archive/entries/2025-05-12-1.xml new file mode 100644 index 0000000000..7e3e1de4b6 --- /dev/null +++ b/archive/entries/2025-05-12-1.xml @@ -0,0 +1,45 @@ + + + PHP Conference Kansai 2025 + https://www.php.net/archive/2025.php#2025-05-12-1 + 2025-05-12T14:19:01+00:00 + 2025-05-12T14:19:01+00:00 + + + 2025-07-19 + + phpConfKansaiJapan2025.png + +
    +

    + We are excited to announce the PHP Conference Kansai 2025. 🎉 +

    +

    + About the conference
    + PHP Conference Kansai is a large-scale technical conference in Japan for PHP engineers to share their technical knowledge and experiences in and around PHP. + It has been held 9 times in the past since 2011, and each time the topic is the latest information and trends in PHP at that time. + Following the 2024 event, which was held for the first time in six years, this will be the second consecutive year of the conference. + On the day of the event, there will be lectures by engineers who have been invited from the general public, as well as other events to share information. +

    +

    + Who can join?
    + All people related to PHP are eligible to participate, including those who use PHP, those who have used PHP, and those who are interested in PHP. + Please come visit us to update your information! + (The conference is given in Japanese.) +

    + Basic facts
    +
      +
    • Date: July 18 - 19, 2025
    • +
    • Location: Kobe, Japan.
    • +
    • Timetable
    • +
    +

    + For more information, See the event page: PHP Conference Kansai 2025. +

    +

    + Follow us on Twitter (X). +

    + +
    +
    +
    diff --git a/archive/entries/2025-06-04-1.xml b/archive/entries/2025-06-04-1.xml new file mode 100644 index 0000000000..e5b1227838 --- /dev/null +++ b/archive/entries/2025-06-04-1.xml @@ -0,0 +1,30 @@ + + + PHPverse 2025 + https://www.php.net/archive/2025.php#2025-06-04-1 + 2025-06-04T10:18:07+00:00 + 2025-06-04T10:18:07+00:00 + + + 2025-06-17 + + phpverse_2025.png + +
    +

    Celebrate 30 Years of PHP at PHPverse!

    +

    + PHP turns 30 this year, and the community is coming together to celebrate. PHPverse is a global online event organized by JetBrains, featuring talks, stories, and demos from prominent community leaders. +

    +

    + Whether you’ve been writing PHP for decades or just joined the party, you’re invited! +

    +

    + 📅 June 17, 2025
    + 📍 Online – free and open to everyone
    +

    +

    + Join PHPverse and be part of the celebration! +

    +
    +
    +
    diff --git a/archive/entries/2025-06-05-1.xml b/archive/entries/2025-06-05-1.xml new file mode 100644 index 0000000000..8879433ccb --- /dev/null +++ b/archive/entries/2025-06-05-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.4.8 Released! + https://www.php.net/archive/2025.php#2025-06-05-1 + 2025-06-05T19:12:13+00:00 + 2025-06-05T19:12:13+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.4.8. This is a bug fix release.

    + +

    All PHP 8.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.4.8 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-06-05-2.xml b/archive/entries/2025-06-05-2.xml new file mode 100644 index 0000000000..6fd95637f0 --- /dev/null +++ b/archive/entries/2025-06-05-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.22 Released! + https://www.php.net/archive/2025.php#2025-06-05-2 + 2025-06-05T20:46:27+00:00 + 2025-06-05T20:46:27+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.22. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.22 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-06-06-1.xml b/archive/entries/2025-06-06-1.xml new file mode 100644 index 0000000000..d1e2af85c6 --- /dev/null +++ b/archive/entries/2025-06-06-1.xml @@ -0,0 +1,42 @@ + + + International PHP Conference Munich 2025 + https://www.php.net/archive/2025.php#2025-06-06-1 + 2025-06-06T08:44:37+00:00 + 2025-06-06T08:44:37+00:00 + + + 2025-10-31 + + IPC_MUC25_MediaKit_1200x628_GT-7138_v1.jpg + +
    +

    + The International PHP Conference is the world's first PHP conference and stands since more than a decade for top-notch pragmatic expertise in PHP and web technologies. At the IPC, internationally renowned experts from the PHP industry meet up with PHP users and developers from large and small companies. Here is the place where concepts emerge and ideas are born - the IPC signifies knowledge transfer at highest level. +

    +

    + Basic facts: +

    +

    + Date: October 27 ‒ 31, 2025 +

    +

    + Location: Munich or Online +

    +

    Highlights:

    +
      +
    • 60+ best practice sessions
    • +
    • 50+ international top speakers
    • +
    • PHPower: Hands-on Power Workshops
    • +
    • Expo with exciting exhibitors
    • +
    • All inclusive: Changing buffets, snacks & refreshing drinks
    • +
    • Official certificate for attendees
    • +
    • Free Goodies: Developer bag, T-Shirt, magazines etc.
    • +
    • Exclusive networking events
    • +
    +

    + For further information on the International PHP Conference Munich visit: https://phpconference.com/munich/ +

    +
    +
    +
    diff --git a/archive/entries/2025-06-09-1.xml b/archive/entries/2025-06-09-1.xml new file mode 100644 index 0000000000..c2e56258c8 --- /dev/null +++ b/archive/entries/2025-06-09-1.xml @@ -0,0 +1,19 @@ + + + Longhorn PHP 2025 - Call For Papers + https://www.php.net/archive/2025.php#2025-06-09-1 + 2025-06-09T12:50:54+00:00 + 2025-06-09T12:50:54+00:00 + + + 2025-07-18 + + longhornphp.png + +
    +

    Longhorn PHP returns for 2025! Held in Austin, TX, the conference will run from October 23-25, with a tutorial day on Thursday, followed by two main conference days. We are excited to bring PHP developers from all backgrounds together again for three days of fun and education. We are currently accepting talk and tutorial submissions. While the CFP is open, we also have our Blind Bird tickets available for sale.

    +

    Register today!

    +

    Follow us on Mastodon signup for emails at longhornphp.com to get notified with important conference updates.

    +
    +
    +
    diff --git a/archive/entries/2025-06-11-1.xml b/archive/entries/2025-06-11-1.xml new file mode 100644 index 0000000000..1b0f181eba --- /dev/null +++ b/archive/entries/2025-06-11-1.xml @@ -0,0 +1,42 @@ + + + CakeFest 2025 Madrid: The Official CakePHP Conference + https://www.php.net/archive/2025.php#2025-06-11-1 + 2025-06-11T09:44:39+00:00 + 2025-06-11T09:44:39+00:00 + + + 2025-10-09 + + cakefest-2017.png + +
    +

    + CakeFest is the official conference dedicated to the CakePHP framework and community. Whether + you're a seasoned developer or just starting out, + CakeFest offers two days of workshops, talks, networking, and learning from top contributors and + professionals in the CakePHP ecosystem. +

    + +

    + In 2025, we’re celebrating 20 years of CakePHP - a major milestone in open-source history! +

    +

    + Quick links: +

    + +

    + Join us in Madrid for this special anniversary edition + of CakeFest: connect with fellow developers, discover the latest in CakePHP, and enjoy an + unforgettable community experience. +

    +
    +
    +
    diff --git a/archive/entries/2025-07-03-1.xml b/archive/entries/2025-07-03-1.xml new file mode 100644 index 0000000000..871374ace1 --- /dev/null +++ b/archive/entries/2025-07-03-1.xml @@ -0,0 +1,22 @@ + + + PHP 8.4.10 Released! + https://www.php.net/archive/2025.php#2025-07-03-1 + 2025-07-03T11:44:39+00:00 + 2025-07-03T11:44:39+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.4.10. This is a security release.

    + +

    Version 8.4.9 was skipped because it was tagged without including security patches.

    +

    All PHP 8.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.4.10 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-07-03-2.xml b/archive/entries/2025-07-03-2.xml new file mode 100644 index 0000000000..e545101462 --- /dev/null +++ b/archive/entries/2025-07-03-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.29 Released! + https://www.php.net/archive/2025.php#2025-07-03-2 + 2025-07-03T12:03:57+00:00 + 2025-07-03T12:03:57+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.29. This is a security release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.29 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-07-03-3.xml b/archive/entries/2025-07-03-3.xml new file mode 100644 index 0000000000..69519dc097 --- /dev/null +++ b/archive/entries/2025-07-03-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.33 Released! + https://www.php.net/archive/2025.php#2025-07-03-3 + 2025-07-03T14:35:29+00:00 + 2025-07-03T14:35:29+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.33. This is a security release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.33 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-07-03-4.xml b/archive/entries/2025-07-03-4.xml new file mode 100644 index 0000000000..ac1f7e26dc --- /dev/null +++ b/archive/entries/2025-07-03-4.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.23 Released! + https://www.php.net/archive/2025.php#2025-07-03-4 + 2025-07-03T15:24:35+00:00 + 2025-07-03T15:24:35+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.23. This is a security release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.23 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-07-03-5.xml b/archive/entries/2025-07-03-5.xml new file mode 100644 index 0000000000..f6a035ec2c --- /dev/null +++ b/archive/entries/2025-07-03-5.xml @@ -0,0 +1,22 @@ + + + PHP 8.5.0 Alpha 1 available for testing + https://www.php.net/archive/2025.php#2025-07-03-5 + 2025-07-03T17:59:40+00:00 + 2025-07-03T17:59:40+00:00 + + + + +
    +

    The PHP team is pleased to announce the first testing release of PHP 8.5.0, Alpha 1. This starts the PHP 8.5 release cycle, the rough outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.5.0 Alpha 1 please visit the download page.

    +

    Please carefully test this version and report any issues found on GitHub.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be Alpha 2, planned for 17 Jul 2025.

    +

    The signatures for the release can be found in the manifest or on the Release Candidates page.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2025-07-17-1.xml b/archive/entries/2025-07-17-1.xml new file mode 100644 index 0000000000..7e8bc9f616 --- /dev/null +++ b/archive/entries/2025-07-17-1.xml @@ -0,0 +1,22 @@ + + + PHP 8.5.0 Alpha 2 available for testing + https://www.php.net/archive/2025.php#2025-07-17-1 + 2025-07-17T11:45:54+00:00 + 2025-07-17T11:45:54+00:00 + + + + +
    +

    The PHP team is pleased to announce the second testing release of PHP 8.5.0, Alpha 2. This continues the PHP 8.5 release cycle, the rough outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.5.0 Alpha 2 please visit the download page.

    +

    Please carefully test this version and report any issues found on GitHub.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be Alpha 3, planned for 31 Jul 2025.

    +

    The signatures for the release can be found in the manifest or on the Release Candidates page.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2025-07-30-1.xml b/archive/entries/2025-07-30-1.xml new file mode 100644 index 0000000000..b62aa801c6 --- /dev/null +++ b/archive/entries/2025-07-30-1.xml @@ -0,0 +1,25 @@ + + + Pyh.conf’25: a new PHP conference for the Russian-speaking community + https://www.php.net/archive/2025.php#2025-07-30-1 + 2025-07-30T09:29:31+00:00 + 2025-07-30T09:29:31+00:00 + + + 2025-09-19 + + pyh-conf-25.png + +
    +

    Pyh.conf is a fresh PHP conference that brings together the Russian-speaking PHP community — whether you work with Bitrix, WordPress, Symfony, Laravel, Yii, AMPHP, Swoole, or anything else. Projects differ, approaches vary, but the language is one: PHP.

    +

    It’s a space to share experience, connect with others, and talk about designing, developing, and maintaining all kinds of PHP backends.

    +

    The program features 28 powerful talks, an open mic, a fail meetup, and a partner expo.

    + +
    +
    +
    diff --git a/archive/entries/2025-07-31-1.xml b/archive/entries/2025-07-31-1.xml new file mode 100644 index 0000000000..7ed8cd6e38 --- /dev/null +++ b/archive/entries/2025-07-31-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.24 Released! + https://www.php.net/archive/2025.php#2025-07-31-1 + 2025-07-31T19:24:06+00:00 + 2025-07-31T19:24:06+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.24. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.24 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-07-31-2.xml b/archive/entries/2025-07-31-2.xml new file mode 100644 index 0000000000..ff53f29164 --- /dev/null +++ b/archive/entries/2025-07-31-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.4.11 Released! + https://www.php.net/archive/2025.php#2025-07-31-2 + 2025-07-31T22:42:04+00:00 + 2025-07-31T22:42:04+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.4.11. This is a bug fix release.

    + +

    All PHP 8.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.4.11 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-07-31-3.xml b/archive/entries/2025-07-31-3.xml new file mode 100644 index 0000000000..8cfb67a1e9 --- /dev/null +++ b/archive/entries/2025-07-31-3.xml @@ -0,0 +1,26 @@ + + + PHP 8.5.0 Alpha 4 available for testing + https://www.php.net/archive/2025.php#2025-07-31-3 + 2025-08-01T00:02:33+00:00 + 2025-08-01T00:02:33+00:00 + + + + +
    +

    + The PHP team is pleased to announce the third testing release of PHP 8.5.0, Alpha 4. + This continues the PHP 8.5 release cycle, the rough outline of which is specified in the + PHP Wiki. +

    +

    For source downloads of PHP 8.5.0 Alpha 4 please visit the download page.

    +

    Please carefully test this version and report any issues found on GitHub.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be Beta 1, planned for 14 Aug 2025.

    +

    The signatures for the release can be found in the manifest or on the Release Candidates page.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2025-08-08-1.xml b/archive/entries/2025-08-08-1.xml new file mode 100644 index 0000000000..353d14babb --- /dev/null +++ b/archive/entries/2025-08-08-1.xml @@ -0,0 +1,27 @@ + + + ConFoo Montreal 2026: Call for Papers + https://www.php.net/archive/2025.php#2025-08-08-1 + 2025-08-08T17:41:33+00:00 + 2025-08-08T17:41:33+00:00 + + + 2025-09-21 + + confoo_2024.png + +
    +

    ConFoo is a multi-technology conference specifically crafted for tech professionals. Whether you’re a developer, architect or a CTO, this conference wishes to bring an outstanding diversity of content to expand your knowledge, increase your productivity and boost your development skills. With over 170 presentations, offered by local and international speakers, you’re sure to level up your skills and more!

    + +

    You’re a leader in your field and wish to share your wisdom? Want to be part of our 2026 lineup? Want to demonstrate how human intelligence is changing our industry? + The team at ConFoo is looking for speakers and conference proposals for its 2026 event in Montreal.

    + +

    Our conferences are both dynamic and educational and are set to challenge our participants. We usually recommend a 45-minute format, including a 10 Q&A session at the end. Checkout last year conference schedule to get an idea of what you can expect.

    + +

    You have until September 21 to submit your proposals.

    + +

    Until then, participants can enjoy a 300$ discount on their registration!

    + +
    +
    +
    diff --git a/archive/entries/2025-08-10-1.xml b/archive/entries/2025-08-10-1.xml new file mode 100644 index 0000000000..f0ea16a6b3 --- /dev/null +++ b/archive/entries/2025-08-10-1.xml @@ -0,0 +1,40 @@ + + + PHP Tek 2026 + https://www.php.net/archive/2025.php#2025-08-10-1 + 2025-08-10T07:23:31+00:00 + 2025-08-10T07:23:31+00:00 + + + 2025-10-31 + + php-tek-2026.png + +
    +

    + Join us for the 18th Annual Web Developer Conference, PHP Tek 2026, May 19-21 2026. +

    + +

    + PHP Tek combines leadership, expertise, and networking in one event. A relaxing + atmosphere for tech leaders and developers to share, learn and grow professionally while + also providing you with the knowledge to solve your everyday problems. +

    + + +

    + We are the longest-running web developer conference in the United States, focusing on the + PHP programming language. The event is broken up into multiple days. The main conference + happens over the course of 3 days (May 19-21) and includes keynotes, talks, and networking + options. It will be broken into four tracks this year and will cover a range of topics. +

    + + +

    + Head over to + https://phptek.io + and get yours today! +

    +
    +
    +
    diff --git a/archive/entries/2025-08-14-1.xml b/archive/entries/2025-08-14-1.xml new file mode 100644 index 0000000000..3fd215032f --- /dev/null +++ b/archive/entries/2025-08-14-1.xml @@ -0,0 +1,22 @@ + + + PHP 8.5.0 Beta 1 available for testing + https://www.php.net/archive/2025.php#2025-08-14-1 + 2025-08-14T12:28:04+00:00 + 2025-08-14T12:28:04+00:00 + + + + +
    +

    The PHP team is pleased to announce the first beta release of PHP 8.5.0, Beta 1. This continues the PHP 8.5 release cycle, the rough outline of which is specified in the PHP Wiki.

    +

    For source downloads of PHP 8.5.0 Beta 1 please visit the download page.

    +

    Please carefully test this version and report any issues found on GitHub.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be Beta 2, planned for 28 Aug 2025.

    +

    The signatures for the release can be found in the manifest or on the Release Candidates page.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2025-08-20-1.xml b/archive/entries/2025-08-20-1.xml new file mode 100644 index 0000000000..87d07a339e --- /dev/null +++ b/archive/entries/2025-08-20-1.xml @@ -0,0 +1,18 @@ + + + Longhorn PHP 2025 + https://www.php.net/archive/2025.php#2025-08-20-1 + 2025-08-20T17:41:57+00:00 + 2025-08-23T20:35:57+00:00 + + + 2025-10-23 + + longhornphp.png + +
    +

    Longhorn PHP is back for 2025 - and our schedule and speakers list is now live! The conference will be held in Austin, Texas, and will start with an optional tutorial day on Thursday, October 23, followed by two days full of talks and keynotes plus open spaces and more, on Friday and Saturday, October 24-25.

    +

    Longhorn PHP is a regional community run conference, designed to help PHP developers level up their craft and connect with the larger PHP community. Our full schedule is available now.

    +
    +
    +
    diff --git a/archive/entries/2025-08-25-1.xml b/archive/entries/2025-08-25-1.xml new file mode 100644 index 0000000000..dbb1235504 --- /dev/null +++ b/archive/entries/2025-08-25-1.xml @@ -0,0 +1,66 @@ + + + PHPeste 2025 - Parnaiba-PI + https://www.php.net/archive/2025.php#2025-08-25-1 + 2025-08-25T23:07:22+00:00 + 2025-08-25T23:07:22+00:00 + + + 2025-10-04 + + phpeste_400x120.png + +
    +

    + About the Conference +

    + +

    + Introducing PHPeste, a distinguished PHP conference, championed by the + resilient communities of Brazil's Northeast. Over the years, this event has graced cities including João Pessoa, + Salvador, São Luis, Recife, Natal, Fortaleza. +

    + +

    + Spanning two enriching days, attendees can anticipate: +

    + +
      +
    • + Comprehensive Learning: Dive deep into the world of PHP through hands-on sessions and + workshops. +
    • +
    • + Networking Opportunities: Engage with passionate PHP enthusiasts and professionals who embody + the spirit and vigor of the Northeast. +
    • +
    • + Expert Speakers: Gain insights from an array of top-tier industry speakers, sharing their + expertise and experiences. +
    • +
    + +

    + PHPeste is a collaborative effort by communities from various Northeastern states, including Alagoas, Bahia, + Ceará, Maranhão, Paraíba, Pernambuco, Rio Grande do Norte, and Sergipe. This year, the + "PHP Piaui" community takes the helm, ensuring that the event + remains both high-quality and accessible. Thanks to the tireless efforts of our volunteer members, we are able to + provide an exceptional experience at a cost-effective price, making this conference accessible to many. +

    + +

    + Date: October 3-4, 2025 in Parnaiba, Piaui. +

    + +

    + + Location: UESPI University of Piaui | Av. Nossa Sra. de Fátima, s/n - Nossa Sra. de Fátima, Parnaíba - PI, 64202-220 + +

    + +

    For more information about the event, visit the website: + PHPeste +

    +
    +
    +
    diff --git a/archive/entries/2025-08-28-1.xml b/archive/entries/2025-08-28-1.xml new file mode 100644 index 0000000000..c15e85d9fa --- /dev/null +++ b/archive/entries/2025-08-28-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.4.12 Released! + https://www.php.net/archive/2025.php#2025-08-28-1 + 2025-08-28T12:15:15+00:00 + 2025-08-28T12:15:15+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.4.12. This is a bug fix release.

    + +

    All PHP 8.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.4.12 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-08-28-2.xml b/archive/entries/2025-08-28-2.xml new file mode 100644 index 0000000000..71d498d9dc --- /dev/null +++ b/archive/entries/2025-08-28-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.25 Released! + https://www.php.net/archive/2025.php#2025-08-28-2 + 2025-08-28T14:53:02+00:00 + 2025-08-28T14:53:02+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.25. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.25 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-08-28-3.xml b/archive/entries/2025-08-28-3.xml new file mode 100644 index 0000000000..79511ae619 --- /dev/null +++ b/archive/entries/2025-08-28-3.xml @@ -0,0 +1,26 @@ + + + PHP 8.5.0 Beta 2 available for testing + https://www.php.net/archive/2025.php#2025-08-28-3 + 2025-08-28T17:58:45+00:00 + 2025-08-28T17:58:45+00:00 + + + + +
    +

    + The PHP team is pleased to announce the second beta release of PHP 8.5.0, Beta 2. + This continues the PHP 8.5 release cycle, the rough outline of which is specified in the + PHP Wiki. +

    +

    For source downloads of PHP 8.5.0 Beta 2 please visit the download page.

    +

    Please carefully test this version and report any issues found on GitHub.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be Beta 3, planned for 11 Sep 2025.

    +

    The signatures for the release can be found in the manifest or on the Release Candidates page.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2025-09-03-1.xml b/archive/entries/2025-09-03-1.xml new file mode 100644 index 0000000000..71fa556118 --- /dev/null +++ b/archive/entries/2025-09-03-1.xml @@ -0,0 +1,39 @@ + + + Dutch PHP Conference 2026 - Call For Papers + https://www.php.net/archive/2025.php#2025-09-03-1 + 2025-09-03T11:15:38+00:00 + 2025-09-03T11:15:38+00:00 + + + 2026-03-10 + + dpc-logo-2026.png + +
    +

    🚀 Dutch PHP Conference 2026 is coming! 🚀

    +

    We’re thrilled to announce that the 20th edition of the Dutch PHP Conference will take place from March 10 to March 13, 2026 in Amsterdam! 🗓️

    +

    🎤 Call for Papers is now OPEN! 🎤

    +

    Got insights, skills, or experience to share? Submit your talk ideas before the deadline on December 19th! We’re looking for both technical and non-technical sessions that will inspire and engage our community.

    +

    + Highlights: +

    +
      +
    • 👥 Expected attendance: around 1000
    • +
    • 📅 Conference dates: March 10 – 13, 2026
    • +
    • 🎙️ 30-40 speaking slots available
    • +
    + +

    🎟️ Early Bird Tickets Available Now! 🎟️

    +

    Don’t miss out on the early bird prices! With your ticket, you’ll get access to not just one, but three incredible conferences: Dutch PHP Conference, Appdevcon (where app development meets creativity 📱✨), and Webdevcon (your gateway to the latest in web technology 🌐🚀)! Secure your spot for a fantastic lineup of workshop days, conference sessions, and social activities.

    +

    Get ready for an incredible edition of #DPC26, plus the added value of Appdevcon and Webdevcon! 🌟

    + +

    See you there! 🚀🎉

    +
    +
    +
    diff --git a/archive/entries/2025-09-07-1.xml b/archive/entries/2025-09-07-1.xml new file mode 100644 index 0000000000..20f1d69ba5 --- /dev/null +++ b/archive/entries/2025-09-07-1.xml @@ -0,0 +1,35 @@ + + + Forum PHP 2025 + https://www.php.net/archive/2025.php#2025-09-07-1 + 2025-09-07T00:31:17+00:00 + 2025-09-07T00:31:17+00:00 + + + 2025-10-09 + + forumphp-2025.png + +
    +

    + Join the biggest PHP event organized by the French PHP user group, organized for the fourth time in Disneyland + Paris, at the Hotel New York - The Art of Marvel! +

    + +

    + For two days, on October 9th and 10th, enjoy the company of our friendly audience, share your knowledge with + +700 attendees, meet the companies who use PHP every day, in an environment that will bring even more magic to + the language. +

    + +

    + This year is a special one for the French PHP community: along with 30 years of PHP, we will also celebrate 25 + years of AFUP, 20 years of Symfony and 10 years of API Platform! +

    + +

    + Check out more details and tickets at Afup.org +

    +
    +
    +
    diff --git a/archive/entries/2025-09-08-1.xml b/archive/entries/2025-09-08-1.xml new file mode 100644 index 0000000000..ad1c62e80f --- /dev/null +++ b/archive/entries/2025-09-08-1.xml @@ -0,0 +1,35 @@ + + + PHPKonf 2025 Baku + https://www.php.net/archive/2025.php#2025-09-08-1 + 2025-09-08T06:53:09+00:00 + 2025-09-08T06:53:09+00:00 + + + 2025-10-26 + + phpkonf_2025.png + +
    +

    + PHPKonf 2025 will take place on October 26, 2025 in Baku, Azerbaijan, bringing together PHP developers, + software engineers, and technology enthusiasts from the local and international community. +

    +

    + This one-day conference will feature practical talks and case studies on PHP and its ecosystem, + including frameworks such as Laravel and Symfony, as well as modern practices in testing, + security, architecture, and performance optimization. +

    +

    + Participants will have the opportunity to connect with experienced speakers, + exchange knowledge with peers, and explore real-world solutions to everyday development challenges. +

    +

    + With support from local tech organizations and the broader PHP community, + PHPKonf 2025 aims to strengthen the professional network of developers + in the region and inspire collaboration on open source and enterprise projects. +

    +

    Official website: https://phpkonf.az/

    +
    +
    +
    diff --git a/archive/entries/2025-09-11-1.xml b/archive/entries/2025-09-11-1.xml new file mode 100644 index 0000000000..4f444e317c --- /dev/null +++ b/archive/entries/2025-09-11-1.xml @@ -0,0 +1,26 @@ + + + PHP 8.5.0 Beta 3 available for testing + https://www.php.net/archive/2025.php#2025-09-11-1 + 2025-09-11T17:59:49+00:00 + 2025-09-11T17:59:49+00:00 + + + + +
    +

    + The PHP team is pleased to announce the third beta release of PHP 8.5.0, Beta 3. + This continues the PHP 8.5 release cycle, the rough outline of which is specified in the + PHP Wiki. +

    +

    For source downloads of PHP 8.5.0 Beta 3, please visit the download page.

    +

    Please carefully test this version and report any issues found on GitHub.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be RC1, planned for 25 Sep 2025.

    +

    The signatures for the release can be found in the manifest or on the Release Candidates page.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2025-09-23-1.xml b/archive/entries/2025-09-23-1.xml new file mode 100644 index 0000000000..0a73f378f0 --- /dev/null +++ b/archive/entries/2025-09-23-1.xml @@ -0,0 +1,17 @@ + + + PHP Conference Brazil 2025 + https://www.php.net/archive/2025.php#2025-09-23-1 + 2025-09-23T18:54:43+00:00 + 2025-09-23T18:54:43+00:00 + + + 2025-12-06 + + +
    + Come join the 20th year of the main andd longest living PHP Conference in Latin America! +

    Official website: https://phpconference.com.br/

    +
    +
    +
    diff --git a/archive/entries/2025-09-25-1.xml b/archive/entries/2025-09-25-1.xml new file mode 100644 index 0000000000..293c10f0ab --- /dev/null +++ b/archive/entries/2025-09-25-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.4.13 Released! + https://www.php.net/archive/2025.php#2025-09-25-1 + 2025-09-25T17:56:59+00:00 + 2025-09-25T17:56:59+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.4.13. This is a bug fix release.

    + +

    All PHP 8.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.4.13 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-09-25-2.xml b/archive/entries/2025-09-25-2.xml new file mode 100644 index 0000000000..f3c9f4cabd --- /dev/null +++ b/archive/entries/2025-09-25-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.26 Released! + https://www.php.net/archive/2025.php#2025-09-25-2 + 2025-09-25T22:24:19+00:00 + 2025-09-25T22:24:19+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.26. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.26 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-09-25-3.xml b/archive/entries/2025-09-25-3.xml new file mode 100644 index 0000000000..bfb16da64d --- /dev/null +++ b/archive/entries/2025-09-25-3.xml @@ -0,0 +1,26 @@ + + + PHP 8.5.0 RC 1 available for testing + https://www.php.net/archive/2025.php#2025-09-25-3 + 2025-09-25T23:24:19+00:00 + 2025-09-25T23:24:19+00:00 + + + + +
    +

    + The PHP team is pleased to announce the first release candidate of PHP 8.5.0, RC 1. + This continues the PHP 8.5 release cycle, the rough outline of which is specified in the + PHP Wiki. +

    +

    For source downloads of PHP 8.5.0 RC1, please visit the download page.

    +

    Please carefully test this version and report any issues found on GitHub.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be RC2, planned for 9 Oct 2025.

    +

    The signatures for the release can be found in the manifest or on the Release Candidates page.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2025-10-03-1.xml b/archive/entries/2025-10-03-1.xml new file mode 100644 index 0000000000..47902d43fc --- /dev/null +++ b/archive/entries/2025-10-03-1.xml @@ -0,0 +1,37 @@ + + + PHP Conference Fukuoka 2025 + https://www.php.net/archive/2025.php#2025-10-03-1 + 2025-10-03T14:03:22+00:00 + 2025-10-03T14:03:22+00:00 + + + 2025-11-08 + + phpconfuk2025.png + +
    +

    + We are pleased to announce the PHP Conference Fukuoka 2025. +

    +

    + PHP Conference Fukuoka celebrates its 10th anniversary this year, and this edition will be the final one.
    + Since its first edition in 2015, the conference has aimed to boost the IT industry in the Kyushu region and provide a place where PHPers from Kyushu and all over Japan can connect and exchange ideas.
    + We hope this last gathering will once again inspire participants, spark new ideas, and create lasting connections. (The conference will be conducted in Japanese) +

    + Basic facts
    +
      +
    • Date: November 8, 2025 (JST)
    • +
    • Location: Fukuoka, Japan
    • +
    +

    + For more information, please visit the event page: PHP Conference Fukuoka 2025. +

    +

    + Follow us on X. +

    + + +
    +
    +
    diff --git a/archive/entries/2025-10-08-1.xml b/archive/entries/2025-10-08-1.xml new file mode 100644 index 0000000000..834a275715 --- /dev/null +++ b/archive/entries/2025-10-08-1.xml @@ -0,0 +1,33 @@ + + + PHP Conference Hiroshima 2025 + https://www.php.net/archive/2025.php#2025-10-08-1 + 2025-10-08T09:10:53+00:00 + 2025-10-08T09:10:53+00:00 + + + 2025-10-11 + + phpconfHiroshima-2025.png + +
    +

    That technical problem you've been struggling with alone? Turns out the person next to you has been wrestling with the same thing. +Why not come to Hiroshima and experience that moment of discovery and sence of relief for yourself?

    +

    We hope this conference will be not only a place to gain knowledge, but also a place to meet like-minded peers. +Learn from others' experience, inspire each other, and share your own insights.

    +

    As this cycle of learning continues, connections are made, and the PHP community of tomorrow grows even stronger. Let's make that day together.

    + Basic info +
      +
    • 📅 10/11 2025
    • +
    • 📍 Yale Yale A-kan 6th floor, Hiroshima, Japan
    • +
    + Links + +
    +
    +
    diff --git a/archive/entries/2025-10-09-1.xml b/archive/entries/2025-10-09-1.xml new file mode 100644 index 0000000000..c4ad416582 --- /dev/null +++ b/archive/entries/2025-10-09-1.xml @@ -0,0 +1,28 @@ + + + PHP Conference Kagawa 2025 + https://www.php.net/archive/2025.php#2025-10-09-1 + 2025-10-09T06:23:40+00:00 + 2025-10-09T06:23:40+00:00 + + + 2025-11-24 + + phpconkagawa2025.png + +
    +

    The first PHP Conference Kagawa held last year was a great success.

    +

    This year, the event will once again take place in the same traditional Japanese venue, designated as an Important Cultural Property of Japan.

    +

    Join us in Kagawa, one of Japan’s popular travel destinations, and connect with fellow PHP developers from across the country!

    + Basic facts
    +
      +
    • Date: November 24, 2025 (JST)
    • +
    • Location: Takamatsu City, Kagawa Prefecture, Japan
    • +
    +

    + Further information will be available on the event page and X(Twitter).
    + Buy tickets: https://fortee.jp/phpconkagawa-2025/ticket-shop/index +

    +
    +
    +
    diff --git a/archive/entries/2025-10-09-2.xml b/archive/entries/2025-10-09-2.xml new file mode 100644 index 0000000000..a8a51db165 --- /dev/null +++ b/archive/entries/2025-10-09-2.xml @@ -0,0 +1,26 @@ + + + PHP 8.5.0 RC 2 available for testing + https://www.php.net/archive/2025.php#2025-10-09-2 + 2025-10-09T15:54:19+00:00 + 2025-10-09T15:54:19+00:00 + + + + +
    +

    + The PHP team is pleased to announce the second release candidate of PHP 8.5.0, RC 2. + This continues the PHP 8.5 release cycle, the rough outline of which is specified in the + PHP Wiki. +

    +

    For source downloads of PHP 8.5.0 RC2, please visit the download page.

    +

    Please carefully test this version and report any issues found on GitHub.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be RC3, planned for 23 Oct 2025.

    +

    The signatures for the release can be found in the manifest or on the Release Candidates page.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2025-10-23-1.xml b/archive/entries/2025-10-23-1.xml new file mode 100644 index 0000000000..9628caf655 --- /dev/null +++ b/archive/entries/2025-10-23-1.xml @@ -0,0 +1,26 @@ + + + PHP 8.5.0 RC 3 available for testing + https://www.php.net/archive/2025.php#2025-10-23-1 + 2025-10-23T16:59:13+00:00 + 2025-10-23T16:59:13+00:00 + + + + +
    +

    + The PHP team is pleased to announce the third release candidate of PHP 8.5.0, RC 3. + This continues the PHP 8.5 release cycle, the rough outline of which is specified in the + PHP Wiki. +

    +

    For source downloads of PHP 8.5.0 RC3, please visit the download page.

    +

    Please carefully test this version and report any issues found on GitHub.

    +

    Please DO NOT use this version in production, it is an early test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be RC4, planned for 6 Nov 2025.

    +

    The signatures for the release can be found in the manifest or on the Release Candidates page.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2025-10-23-2.xml b/archive/entries/2025-10-23-2.xml new file mode 100644 index 0000000000..202c032f79 --- /dev/null +++ b/archive/entries/2025-10-23-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.4.14 Released! + https://www.php.net/archive/2025.php#2025-10-23-2 + 2025-10-23T18:19:40+00:00 + 2025-10-23T18:19:40+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.4.14. This is a bug fix release.

    + +

    All PHP 8.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.4.14 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-10-23-3.xml b/archive/entries/2025-10-23-3.xml new file mode 100644 index 0000000000..1bff7bae2f --- /dev/null +++ b/archive/entries/2025-10-23-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.27 Released! + https://www.php.net/archive/2025.php#2025-10-23-3 + 2025-10-23T20:47:41+00:00 + 2025-10-23T20:47:41+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.27. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.27 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-10-31-1.xml b/archive/entries/2025-10-31-1.xml new file mode 100644 index 0000000000..fa2af63e21 --- /dev/null +++ b/archive/entries/2025-10-31-1.xml @@ -0,0 +1,19 @@ + + + betterCode() PHP 2025 + https://www.php.net/archive/2025.php#2025-10-13-1 + 2025-10-31T12:00:00+00:00 + 2025-10-31T12:00:00+00:00 + + + 2025-11-25 + + bettercodephp2025.jpg + +
    +

    With version 8.5, PHP continues to evolve in its thirtieth year: the new pipe operator and numerous performance improvements make your development more efficient. At the same time, FrankenPHP is establishing itself in Caddy Server, a European open-source solution, as a modern alternative to Nginx.

    +

    betterCode() PHP supports you in using PHP 8.5, switching to FrankenPHP and the Caddy Server. Artificial intelligence is also part of the software development toolkit today: if you want to use it effectively, you need clear architectures, clean code, and solid patterns.

    +

    betterCode() PHP 2025 is an online conference lasting one day, with most of the presentations delivered in German.

    +
    +
    +
    diff --git a/archive/entries/2025-11-06-1.xml b/archive/entries/2025-11-06-1.xml new file mode 100644 index 0000000000..97b3aeb254 --- /dev/null +++ b/archive/entries/2025-11-06-1.xml @@ -0,0 +1,26 @@ + + + PHP 8.5.0 RC4 available for testing + https://www.php.net/archive/2025.php#2025-11-06-1 + 2025-11-06T20:42:30+00:00 + 2025-11-06T20:42:30+00:00 + + + + +
    +

    + The PHP team is pleased to announce the final planned release candidate of PHP 8.5.0, RC 4. + This continues the PHP 8.5 release cycle, the rough outline of which is specified in the + PHP Wiki. +

    +

    For source downloads of PHP 8.5.0 RC4, please visit the download page.

    +

    Please carefully test this version and report any issues found on GitHub.

    +

    Please DO NOT use this version in production, it is a test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be the GA release of PHP 8.5.0, planned for 20 Nov 2025.

    +

    The signatures for the release can be found in the manifest or on the Release Candidates page.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2025-11-13-1.xml b/archive/entries/2025-11-13-1.xml new file mode 100644 index 0000000000..daa3685863 --- /dev/null +++ b/archive/entries/2025-11-13-1.xml @@ -0,0 +1,26 @@ + + + PHP 8.5.0 RC 5 available for testing + https://www.php.net/archive/2025.php#2025-11-13-1 + 2025-11-13T22:39:02+00:00 + 2025-11-13T22:39:02+00:00 + + + + +
    +

    + The PHP team is pleased to announce the fifth release candidate of PHP 8.5.0, RC 5. + This continues the PHP 8.5 release cycle, the rough outline of which is specified in the + PHP Wiki. +

    +

    For source downloads of PHP 8.5.0 RC5, please visit the download page.

    +

    Please carefully test this version and report any issues found on GitHub.

    +

    Please DO NOT use this version in production, it is a test version.

    +

    For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

    +

    The next release will be the GA release of PHP 8.5.0, planned for 20 Nov 2025.

    +

    The signatures for the release can be found in the manifest or on the Release Candidates page.

    +

    Thank you for helping us make PHP better.

    +
    +
    +
    diff --git a/archive/entries/2025-11-20-1.xml b/archive/entries/2025-11-20-1.xml new file mode 100644 index 0000000000..119d071a7a --- /dev/null +++ b/archive/entries/2025-11-20-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.28 Released! + https://www.php.net/archive/2025.php#2025-11-20-1 + 2025-11-20T10:08:55+00:00 + 2025-11-20T10:08:55+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.28. This is a bug fix release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.28 please visit our downloads page, +Windows source and binaries can also be found there. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-11-20-2.xml b/archive/entries/2025-11-20-2.xml new file mode 100644 index 0000000000..fdd0429d3e --- /dev/null +++ b/archive/entries/2025-11-20-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.4.15 Released! + https://www.php.net/archive/2025.php#2025-11-20-2 + 2025-11-20T13:48:26+00:00 + 2025-11-20T13:48:26+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.4.15. This is a bug fix release.

    + +

    All PHP 8.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.4.15 please visit our downloads page, +Windows source and binaries can also be found there. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-11-20-3.xml b/archive/entries/2025-11-20-3.xml new file mode 100644 index 0000000000..cbd5cf6232 --- /dev/null +++ b/archive/entries/2025-11-20-3.xml @@ -0,0 +1,35 @@ + + + PHP 8.5.0 Released! + https://www.php.net/archive/2025.php#2025-11-20-3 + 2025-11-20T18:34:19+00:00 + 2025-11-20T18:34:19+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.5.0. This release marks the latest minor release of the PHP language.

    + +

    PHP 8.5 comes with numerous improvements and new features such as:

    +
      +
    • New "URI" extension
    • +
    • New pipe operator (|>)
    • +
    • Clone With
    • +
    • New #[\NoDiscard] attribute
    • +
    • Support for closures, casts, and first class callables in constant expressions
    • +
    • And much much more...
    • +
    +

    + For source downloads of PHP 8.5.0 please visit our downloads page, + Windows source and binaries can also be found there. + The list of changes is recorded in the ChangeLog. +

    +

    + The migration guide is available in the PHP Manual. + Please consult it for the detailed list of new features and backward incompatible changes. +

    +

    Kudos to all the contributors and supporters!

    +
    +
    +
    diff --git a/archive/entries/2025-11-30-1.xml b/archive/entries/2025-11-30-1.xml new file mode 100644 index 0000000000..fb513719fb --- /dev/null +++ b/archive/entries/2025-11-30-1.xml @@ -0,0 +1,28 @@ + + + Laravel Live Japan + https://www.php.net/archive/2025.php#2025-11-30-1 + 2025-11-30T04:52:32+00:00 + 2025-11-30T04:52:32+00:00 + + + 2026-05-26 + + laravellivejapan_2026.png + +
    +

    Laravel Live Japan is the first official Laravel community conference in Japan. It brings together developers, designers, and tech enthusiasts from around the world to share knowledge, exchange ideas, and celebrate the craft of building with Laravel.

    +

    Join us in Tokyo at Tachikawa Stage Garden on May 26-27, 2026 for this premiere event. Enjoy two days of inspiring talks, hands-on learning, and unforgettable community experiences.

    + Basic info
    +
      +
    • Date: May 26-27, 2026 (JST)
    • +
    • Location: Tachikawa City, Tokyo Prefecture, Japan
    • +
    + Links
    + +
    +
    +
    diff --git a/archive/entries/2025-12-17-1.xml b/archive/entries/2025-12-17-1.xml new file mode 100644 index 0000000000..bffbccb9a9 --- /dev/null +++ b/archive/entries/2025-12-17-1.xml @@ -0,0 +1,62 @@ + + + International PHP Conference Berlin 2026 + + https://www.php.net/archive/2026.php#2025-12-17-1 + + 2025-12-17T09:00:00+00:00 + 2025-12-17T09:00:00+00:00 + + + + + 2026-06-12 + + + + IPC.png + + +
    +

    + The International PHP Conference + is the world's first PHP conference and stands since more than a decade for top-notch + pragmatic expertise in PHP and web technologies. At the IPC, internationally renowned + experts from the PHP industry meet up with PHP users and developers from large and small + companies. Here is the place where concepts emerge and ideas are born – the IPC signifies + knowledge transfer at highest level. +

    + +

    Basic facts:

    + +

    + Date: June 8 – 12, 2026 +

    + +

    + Location: Maritim ProArte Hotel Berlin, Berlin or Online +

    + +

    Highlights:

    +
      +
    • 60+ best practice sessions
    • +
    • 50+ international top speakers
    • +
    • PHPower: Hands-on Power Workshops
    • +
    • Expo with exciting exhibitors on June 9 & 10
    • +
    • All inclusive: Changing buffets, snacks & refreshing drinks
    • +
    • Official certificate for attendees
    • +
    • Free Goodies: Developer bag, T-Shirt, magazines etc.
    • +
    • Exclusive networking events
    • +
    + +

    + For further information on the International PHP Conference Berlin visit: + https://phpconference.com/berlin-en/ +

    +
    +
    +
    \ No newline at end of file diff --git a/archive/entries/2025-12-18-1.xml b/archive/entries/2025-12-18-1.xml new file mode 100644 index 0000000000..d01e2083fe --- /dev/null +++ b/archive/entries/2025-12-18-1.xml @@ -0,0 +1,21 @@ + + + PHP 8.5.1 Released! + https://www.php.net/archive/2025.php#2025-12-18-1 + 2025-12-18T14:37:54+00:00 + 2025-12-18T14:37:54+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.5.1. This is a security release.

    + +

    All PHP 8.5 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.5.1 please visit our downloads page, +Windows source and binaries can also be found there. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-12-18-2.xml b/archive/entries/2025-12-18-2.xml new file mode 100644 index 0000000000..e01ed24530 --- /dev/null +++ b/archive/entries/2025-12-18-2.xml @@ -0,0 +1,21 @@ + + + PHP 8.3.29 Released! + https://www.php.net/archive/2025.php#2025-12-18-2 + 2025-12-18T15:37:23+00:00 + 2025-12-18T15:37:23+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.3.29. This is a security release.

    + +

    All PHP 8.3 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.3.29 please visit our downloads page, +Windows source and binaries can also be found there. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-12-18-3.xml b/archive/entries/2025-12-18-3.xml new file mode 100644 index 0000000000..42593df0a2 --- /dev/null +++ b/archive/entries/2025-12-18-3.xml @@ -0,0 +1,21 @@ + + + PHP 8.2.30 Released! + https://www.php.net/archive/2025.php#2025-12-18-3 + 2025-12-18T19:26:22+00:00 + 2025-12-18T19:26:22+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.2.30. This is a security release.

    + +

    All PHP 8.2 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.2.30 please visit our downloads page, +Windows source and binaries can also be found there. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-12-18-4.xml b/archive/entries/2025-12-18-4.xml new file mode 100644 index 0000000000..e946df7712 --- /dev/null +++ b/archive/entries/2025-12-18-4.xml @@ -0,0 +1,21 @@ + + + PHP 8.4.16 Released! + https://www.php.net/archive/2025.php#2025-12-18-4 + 2025-12-18T23:19:06+00:00 + 2025-12-18T23:19:06+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.4.16. This is a security release.

    + +

    All PHP 8.4 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.4.16 please visit our downloads page, +Windows source and binaries can also be found there. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/entries/2025-12-18-5.xml b/archive/entries/2025-12-18-5.xml new file mode 100644 index 0000000000..d652ce0359 --- /dev/null +++ b/archive/entries/2025-12-18-5.xml @@ -0,0 +1,21 @@ + + + PHP 8.1.34 Released! + https://www.php.net/archive/2025.php#2025-12-18-5 + 2025-12-18T23:59:59+00:00 + 2025-12-18T23:59:59+00:00 + + + + + +

    The PHP development team announces the immediate availability of PHP 8.1.34. This is a security release.

    + +

    All PHP 8.1 users are encouraged to upgrade to this version.

    + +

    For source downloads of PHP 8.1.34 please visit our downloads page, +Windows source and binaries can also be found there. +The list of changes is recorded in the ChangeLog. +

    +
    +
    diff --git a/archive/index.php b/archive/index.php index 95d28ea765..340b121666 100644 --- a/archive/index.php +++ b/archive/index.php @@ -1,13 +1,14 @@ 400, @@ -106,7 +107,7 @@ function getConfTime(): int { for(;;) { function getImage(): ?array { global $imageRestriction; - fwrite(STDOUT, "Will a picture be accompanying this entry? "); + fwrite(STDOUT, "Will a picture be accompanying this entry?(y/N) "); $yn = fgets(STDIN); @@ -128,7 +129,7 @@ function getImage(): ?array { $imageSizes = getimagesize("./images/news/$path"); if (($imageSizes[0] > $imageRestriction['width']) || ($imageSizes[1] > $imageRestriction['height'])) { - fwrite(STDOUT, "Provided image has a higher size than recommended (" . implode(' by ', $imageRestriction) . "). Continue? "); + fwrite(STDOUT, "Provided image has a higher size than recommended (" . implode(' by ', $imageRestriction) . "). Continue with this image?(y/N) "); $ynImg = fgets(STDIN); if (strtoupper($ynImg[0]) !== "Y") { $isValidImage = false; @@ -160,20 +161,6 @@ function getContent(): string { return $news; } -function updateArchiveXML(string $id, string $archiveFile): void { - $arch = new DOMDocument("1.0", "utf-8"); - $arch->formatOutput = true; - $arch->preserveWhiteSpace = false; - $arch->load($archiveFile); - - $first = $arch->createElementNs("http://www.w3.org/2001/XInclude", "xi:include"); - $first->setAttribute("href", "entries/{$id}.xml"); - - $second = $arch->getElementsByTagNameNs("http://www.w3.org/2001/XInclude", "include")->item(0); - $arch->documentElement->insertBefore($first, $second); - $arch->save($archiveFile); -} - function parseOptions(): Entry { $opts = getopt('h', [ 'help', diff --git a/bin/createReleaseEntry b/bin/createReleaseEntry index a2683d175c..a9dcf1e658 100755 --- a/bin/createReleaseEntry +++ b/bin/createReleaseEntry @@ -2,8 +2,9 @@ All PHP $branch users are encouraged to upgrade to this version.

    For source downloads of PHP $version please visit our downloads page, -Windows source and binaries can be found on windows.php.net/download/. +Windows source and binaries can also be found there. The list of changes is recorded in the ChangeLog.

    EOD; diff --git a/bin/index.php b/bin/index.php index f3e722c023..50d73f66f6 100644 --- a/bin/index.php +++ b/bin/index.php @@ -1,4 +1,5 @@ HEAD; +$bug_map = [ + '/Fixed bug #([0-9]+)/' => '', + '/Fixed PECL bug #([0-9]+)/' => '', + '/Implemented FR #([0-9]+)/' => '', + '/GitHub PR #([0-9]+)/' => '', + '/GH-([0-9]+)/' => '', + '/GHSA-([0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4})/' + => '', +]; + foreach($entries as $module => $items) { echo "
  • $module:\n
      \n"; foreach($items as $item) { @@ -68,11 +78,7 @@ foreach($entries as $module => $items) { // encode HTML $item = htmlspecialchars($item, ENT_NOQUOTES); // convert bug numbers - $item = preg_replace( - array('/Fixed bug #([0-9]+)/', '/Fixed PECL bug #([0-9]+)/', '/Implemented FR #([0-9]+)/', '/GitHub PR #([0-9]+)/'), - array('', '', '', ''), - $item - ); + $item = preg_replace(array_keys($bug_map), array_values($bug_map), $item); echo "
    • $item
    • \n"; } echo "
  • \n"; @@ -80,8 +86,7 @@ foreach($entries as $module => $items) { echo "\n
    \n\n"; if ($changelog) { - $contents = ob_get_contents(); - ob_end_clean(); + $contents = ob_get_clean(); $log = file_get_contents($changelog); if (empty($log)) { diff --git a/build-setup.php b/build-setup.php index 433e96c326..0ab2f84cab 100644 --- a/build-setup.php +++ b/build-setup.php @@ -2,18 +2,18 @@ $_SERVER['BASE_PAGE'] = 'build-setup.php'; include_once __DIR__ . '/include/prepend.inc'; -$SIDEBAR_DATA =' +$SIDEBAR_DATA = '

    This page is intended to help setup a development environment for PHP, if mistakes are found - please report them. + please report them.

    '; -site_header("Operating System Preparation", array("current" => "community")); +site_header("Operating System Preparation", ["current" => "community"]); ?>

    Operating System Preparation

    @@ -172,6 +172,4 @@

    $SIDEBAR_DATA)); - -/* vim: set et ts=4 sw=4 ft=php: : */ +site_footer(['sidebar' => $SIDEBAR_DATA]); diff --git a/cached.php b/cached.php index e155a44cb3..766afb2e65 100644 --- a/cached.php +++ b/cached.php @@ -18,11 +18,11 @@ exit; } $pwd = realpath($_SERVER["DOCUMENT_ROOT"]); -$abs = $pwd. "/" .(string)$_GET["f"]; +$abs = $pwd . "/" . (string)$_GET["f"]; $abs = realpath($abs); if (strncmp($abs, $pwd, strlen($pwd)) != 0) { - header("Location: https://www.php.net/" . strtr($_GET["f"],array("\r"=>"","\n"=>""))); + header("Location: https://www.php.net/" . strtr($_GET["f"],["\r" => "", "\n" => ""])); exit; } @@ -32,7 +32,6 @@ $time = filemtime($abs); } - $tsstring = gmdate("D, d M Y H:i:s ", $time) . "GMT"; if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]) && ($_SERVER["HTTP_IF_MODIFIED_SINCE"] == $tsstring)) { diff --git a/cal.php b/cal.php index ed02e43d08..0ee2bc2e83 100644 --- a/cal.php +++ b/cal.php @@ -2,11 +2,11 @@ $_SERVER['BASE_PAGE'] = 'cal.php'; include_once __DIR__ . '/include/prepend.inc'; -$site_header_config = array( +$site_header_config = [ "current" => "community", - "css" => array('calendar.css'), + "css" => ['calendar.css'], "layout_span" => 12, -); +]; /* This script serves three different forms of the calendar data: @@ -18,7 +18,7 @@ a fallback to display the actual month/year. */ -$begun = FALSE; $errors = array(); +$begun = false; $errors = []; $id = isset($_GET['id']) ? (int) $_GET['id'] : 0; $cy = isset($_GET['cy']) ? (int) $_GET['cy'] : 0; $cm = isset($_GET['cm']) ? (int) $_GET['cm'] : 0; @@ -37,11 +37,11 @@ if ($event = load_event($id)) { site_header("Event: " . stripslashes(htmlentities($event['sdesc'], ENT_QUOTES | ENT_IGNORE, 'UTF-8')), $site_header_config); display_event($event, 0); - $begun = TRUE; + $begun = true; } // Unable to find event, put this to the error messages' list else { - $errors[] = "There is no event for specified id ('".htmlentities($id, ENT_QUOTES | ENT_IGNORE, 'UTF-8')."')"; + $errors[] = "There is no event for specified id ('" . htmlentities($id, ENT_QUOTES | ENT_IGNORE, 'UTF-8') . "')"; } } @@ -56,44 +56,44 @@ // Try to load events for that day, and display them all if ($events = load_events($date)) { - $site_header_config = array('classes' => 'calendar calendar-day') + $site_header_config; - site_header("Events: ".date("F j, Y", $date), $site_header_config); + $site_header_config = ['classes' => 'calendar calendar-day'] + $site_header_config; + site_header("Events: " . date("F j, Y", $date), $site_header_config); echo "

    ", date("F j, Y", $date), "

    \n"; foreach ($events as $event) { display_event($event, 0); echo "
    "; } - $begun = TRUE; + $begun = true; } // Unable to load events for that day else { - $errors[] = "There are no events for the specified date (".date("F j, Y",$date).")."; + $errors[] = "There are no events for the specified date (" . date("F j, Y",$date) . ")."; } } // Wrong date specified else { - $errors[] = "The specified date (".htmlentities("$cy/$cm/$cd", ENT_QUOTES | ENT_IGNORE, 'UTF-8').") was not valid."; - unset($cm); unset($cd); unset($cy); + $errors[] = "The specified date (" . htmlentities("$cy/$cm/$cd", ENT_QUOTES | ENT_IGNORE, 'UTF-8') . ") was not valid."; + unset($cm, $cd, $cy); } } // Check if month and year is valid if ($cm && $cy && !checkdate($cm,1,$cy)) { - $errors[] = "The specified year and month (".htmlentities("$cy, $cm", ENT_QUOTES | ENT_IGNORE, 'UTF-8').") are not valid."; - unset($cm); unset($cy); + $errors[] = "The specified year and month (" . htmlentities("$cy, $cm", ENT_QUOTES | ENT_IGNORE, 'UTF-8') . ") are not valid."; + unset($cm, $cy); } // Give defaults for the month and day values if they were invalid -if (!isset($cm) || $cm == 0) { $cm = date("m"); } -if (!isset($cy) || $cy == 0) { $cy = date("Y"); } +if (empty($cm)) { $cm = date("m"); } +if (empty($cy)) { $cy = date("Y"); } // Start of the month date $date = mktime(0, 0, 1, $cm, 1, $cy); if (!$begun) { - site_header("Events: ".date("F Y", $date), $site_header_config); + site_header("Events: " . date("F Y", $date), $site_header_config); ?>

    @@ -110,10 +110,10 @@ } // Get events list for a whole month -$events = load_events($date, TRUE); +$events = load_events($date, true); // If there was an error, or there are no events, this is an error -if ($events === FALSE || count($events) == 0) { +if ($events === false || count($events) == 0) { $errors[] = "No events found for this month"; } @@ -126,10 +126,10 @@ // Beginning and end of this month $bom = mktime(0, 0, 1, $cm, 1, $cy); -$eom = mktime(0, 0, 1, $cm+1, 0, $cy); +$eom = mktime(0, 0, 1, $cm + 1, 0, $cy); // Link to previous month (but do not link to too early dates) -$prev_link = (function() use ($cm, $cy) { +$prev_link = (function () use ($cm, $cy) { $lm = mktime(0, 0, 1, $cm, 0, $cy); $year = date('Y', $lm); if (!valid_year($year)) { @@ -146,8 +146,8 @@ })(); // Link to next month (but do not link to too early dates) -$next_link = (function() use ($cm, $cy) { - $nm = mktime(0, 0, 1, $cm+1, 1, $cy); +$next_link = (function () use ($cm, $cy) { + $nm = mktime(0, 0, 1, $cm + 1, 1, $cy); $year = date('Y', $nm); if (!valid_year($year)) { return ' '; @@ -174,7 +174,7 @@ // Print out headers for weekdays for ($i = 0; $i < 7; $i++) { - echo '', date("l",mktime(0,0,1,4,$i+1,2001)), "\n"; + echo '', date("l",mktime(0,0,1,4,$i + 1,2001)), "\n"; } echo "\n"; @@ -189,7 +189,7 @@ // Print out day number and all events for the day echo '',$i,''; - display_events_for_day(date("Y-m-",$bom).sprintf("%02d",$i), $events); + display_events_for_day(date("Y-m-",$bom) . sprintf("%02d",$i), $events); echo ''; // Break HTML table row if at end of week @@ -222,18 +222,17 @@ function date_for_recur($recur, $day, $bom, $eom) } // ${recur}th to last $day of the month - else { - $eomd = date("w",$eom) + 1; - $days = (($eomd - $day + 7) % 7) + ((abs($recur) - 1) * 7); - return mktime(0,0,1, date("m",$bom)+1, -$days, date("Y",$bom)); - } + $eomd = date("w",$eom) + 1; + $days = (($eomd - $day + 7) % 7) + ((abs($recur) - 1) * 7); + + return mktime(0, 0, 1, date("m", $bom) + 1, -$days, date("Y", $bom)); } // Display a

    for each of the events that are on a given day -function display_events_for_day($day, $events) +function display_events_for_day($day, $events): void { // For preservation of state in the links - global $cm, $cy, $COUNTRY; + global $cm, $cy; // For all events, try to find the events for this day foreach ($events as $event) { @@ -242,12 +241,10 @@ function display_events_for_day($day, $events) if (($event['type'] == 2 && $event['start'] <= $day && $event['end'] >= $day) || ($event['start'] == $day)) { echo '
    ', - ($COUNTRY == $event['country'] ? "" : ""), '', stripslashes(htmlentities($event['sdesc'], ENT_QUOTES | ENT_IGNORE, 'UTF-8')), '', - ($COUNTRY == $event['country'] ? "" : ""), '
    '; } } @@ -258,7 +255,7 @@ function load_event($id) { // Open events CSV file, return on error $fp = @fopen("backend/events.csv",'r'); - if (!$fp) { return FALSE; } + if (!$fp) { return false; } // Read as we can, event by event while (!feof($fp)) { @@ -267,7 +264,7 @@ function load_event($id) // Return with the event, if it's ID is the one // we search for (also close the file) - if ($event !== FALSE && $event['id'] == $id) { + if ($event !== false && $event['id'] == $id) { fclose($fp); return $event; } @@ -275,12 +272,12 @@ function load_event($id) // Close file, and return sign of failure fclose($fp); - return FALSE; + return false; } // Load a list of events. Either for a particular day ($from) or a whole // month (if second parameter specified with TRUE) -function load_events($from, $whole_month = FALSE) +function load_events($from, $whole_month = false) { // Take advantage of the equality behavior of this date format $from_date = date("Y-m-d", $from); @@ -289,18 +286,18 @@ function load_events($from, $whole_month = FALSE) $to_date = date("Y-m-d", $whole_month ? $eom : $from); // Set arrays to their default - $events = $seen = array(); + $events = $seen = []; // Try to open the events file for reading, return if unable to $fp = @fopen("backend/events.csv",'r'); - if (!$fp) { return FALSE; } + if (!$fp) { return false; } // For all events, read in the event and check it if fits our scope while (!feof($fp)) { // Read the event data into $event, or continue with next // line, if there was an error with this line - if (($event = read_event($fp)) === FALSE) { + if (($event = read_event($fp)) === false) { continue; } @@ -328,8 +325,8 @@ function load_events($from, $whole_month = FALSE) // Multi-day event case 2: if (($event['start'] >= $from_date && $event['start'] <= $to_date) - || ($event['end'] >= $from_date && $event['end'] <= $to_date) - || ($event['start'] <= $from_date && $event['end'] >= $to_date)) { + || ($event['end'] >= $from_date && $event['end'] <= $to_date) + || ($event['start'] <= $from_date && $event['end'] >= $to_date)) { $events[] = $event; } break; @@ -346,36 +343,36 @@ function load_events($from, $whole_month = FALSE) function read_event($fp) { // We were unable to read a line from the file, return - if (($linearr = fgetcsv($fp, 8192)) === FALSE) { - return FALSE; + if (($linearr = fgetcsv($fp, 8192)) === false) { + return false; } // Corrupt line in CSV file - if (count($linearr) < 13) { return FALSE; } + if (count($linearr) < 13) { return false; } // Get components - list( + [ $day, $month, $year, $country, $sdesc, $id, $ldesc, $url, $recur, $tipo, $sdato, $edato, $category - ) = $linearr; + ] = $linearr; // Get info on recurring event - @list($recur, $recur_day) = explode(":", $recur, 2); + @[$recur, $recur_day] = explode(":", $recur, 2); // Return with SQL-resultset like array - return array( - 'id' => $id, - 'type' => $tipo, - 'start' => $sdato, - 'end' => $edato, - 'recur' => $recur, + return [ + 'id' => $id, + 'type' => $tipo, + 'start' => $sdato, + 'end' => $edato, + 'recur' => $recur, 'recur_day' => $recur_day, - 'sdesc' => $sdesc, - 'url' => $url, - 'ldesc' => base64_decode($ldesc), - 'country' => $country, - 'category' => $category, - ); + 'sdesc' => $sdesc, + 'url' => $url, + 'ldesc' => base64_decode($ldesc, false), + 'country' => $country, + 'category' => $category, + ]; } // We would not like to allow any year to be viewed, because @@ -386,12 +383,12 @@ function valid_year($year) $current_year = date("Y"); // We only allow this and the next year for displays - if ($year != $current_year && $year != $current_year+1) { - return FALSE; + if ($year != $current_year && $year != $current_year + 1) { + return false; } // The year is all right - return TRUE; + return true; } ?> diff --git a/composer.json b/composer.json new file mode 100644 index 0000000000..f99153bcc7 --- /dev/null +++ b/composer.json @@ -0,0 +1,34 @@ +{ + "name": "php/web-php", + "description": "The www.php.net site.", + "license": "proprietary", + "type": "project", + "homepage": "https://www.php.net/", + "support": { + "source": "https://github.com/php/web-php" + }, + "require": { + "php": "~8.2.0" + }, + "require-dev": { + "ext-curl": "*", + "friendsofphp/php-cs-fixer": "^3.92.5", + "phpunit/phpunit": "^11.5.6" + }, + "autoload": { + "psr-4": { + "phpweb\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "phpweb\\Test\\": "tests/" + } + }, + "config": { + "platform": { + "php": "8.2.0" + }, + "sort-packages": true + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000000..17a0f1419a --- /dev/null +++ b/composer.lock @@ -0,0 +1,4314 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "3255d773c671c9c378c6993d2419a668", + "packages": [], + "packages-dev": [ + { + "name": "clue/ndjson-react", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/clue/reactphp-ndjson.git", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "react/stream": "^1.2" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", + "react/event-loop": "^1.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\React\\NDJson\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", + "homepage": "https://github.com/clue/reactphp-ndjson", + "keywords": [ + "NDJSON", + "json", + "jsonlines", + "newline", + "reactphp", + "streaming" + ], + "support": { + "issues": "https://github.com/clue/reactphp-ndjson/issues", + "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-12-23T10:58:28+00:00" + }, + { + "name": "composer/pcre", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-11-12T16:29:46+00:00" + }, + { + "name": "composer/semver", + "version": "3.4.4", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.4" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + } + ], + "time": "2025-08-20T19:15:30+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", + "shasum": "" + }, + "require": { + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-05-06T16:37:16+00:00" + }, + { + "name": "evenement/evenement", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/igorw/evenement.git", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^9 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Evenement\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "Événement is a very simple event dispatching library for PHP", + "keywords": [ + "event-dispatcher", + "event-emitter" + ], + "support": { + "issues": "https://github.com/igorw/evenement/issues", + "source": "https://github.com/igorw/evenement/tree/v3.0.2" + }, + "time": "2023-08-08T05:53:35+00:00" + }, + { + "name": "fidry/cpu-core-counter", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2025-08-14T07:29:31+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v3.92.5", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "260cc8c4a1d2f6d2f22cd4f9c70aa72e55ebac58" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/260cc8c4a1d2f6d2f22cd4f9c70aa72e55ebac58", + "reference": "260cc8c4a1d2f6d2f22cd4f9c70aa72e55ebac58", + "shasum": "" + }, + "require": { + "clue/ndjson-react": "^1.3", + "composer/semver": "^3.4", + "composer/xdebug-handler": "^3.0.5", + "ext-filter": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "fidry/cpu-core-counter": "^1.3", + "php": "^7.4 || ^8.0", + "react/child-process": "^0.6.6", + "react/event-loop": "^1.5", + "react/socket": "^1.16", + "react/stream": "^1.4", + "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0", + "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.33", + "symfony/polyfill-php80": "^1.33", + "symfony/polyfill-php81": "^1.33", + "symfony/polyfill-php84": "^1.33", + "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0", + "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0" + }, + "require-dev": { + "facile-it/paraunit": "^1.3.1 || ^2.7", + "infection/infection": "^0.31", + "justinrainbow/json-schema": "^6.6", + "keradus/cli-executor": "^2.3", + "mikey179/vfsstream": "^1.6.12", + "php-coveralls/php-coveralls": "^2.9", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", + "phpunit/phpunit": "^9.6.31 || ^10.5.60 || ^11.5.46", + "symfony/polyfill-php85": "^1.33", + "symfony/var-dumper": "^5.4.48 || ^6.4.26 || ^7.4.0 || ^8.0", + "symfony/yaml": "^5.4.45 || ^6.4.30 || ^7.4.1 || ^8.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "exclude-from-classmap": [ + "src/**/Internal/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "keywords": [ + "Static code analysis", + "fixer", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.92.5" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2026-01-08T21:57:37+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.12.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2024-11-08T17:47:46+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.4.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" + }, + "time": "2024-12-30T11:07:19+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "11.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "418c59fd080954f8c4aa5631d9502ecda2387118" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/418c59fd080954f8c4aa5631d9502ecda2387118", + "reference": "418c59fd080954f8c4aa5631d9502ecda2387118", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.3.1", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.0", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^11.5.0" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-12-11T12:34:27+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-27T05:02:59+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^11.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:07:44+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:08:43+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "7.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:09:35+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "11.5.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "3c3ae14c90f244cdda95028c3e469028e8d1c02c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3c3ae14c90f244cdda95028c3e469028e8d1c02c", + "reference": "3c3ae14c90f244cdda95028c3e469028e8d1c02c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.12.1", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.8", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.2", + "sebastian/comparator": "^6.3.0", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.0", + "sebastian/exporter": "^6.3.0", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/type": "^5.1.0", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.6" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2025-01-31T07:03:30+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "react/cache", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/cache.git", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/promise": "^3.0 || ^2.0 || ^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, Promise-based cache interface for ReactPHP", + "keywords": [ + "cache", + "caching", + "promise", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/cache/issues", + "source": "https://github.com/reactphp/cache/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2022-11-30T15:59:55+00:00" + }, + { + "name": "react/child-process", + "version": "v0.6.7", + "source": { + "type": "git", + "url": "https://github.com/reactphp/child-process.git", + "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/970f0e71945556422ee4570ccbabaedc3cf04ad3", + "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/event-loop": "^1.2", + "react/stream": "^1.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/socket": "^1.16", + "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\ChildProcess\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven library for executing child processes with ReactPHP.", + "keywords": [ + "event-driven", + "process", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/child-process/issues", + "source": "https://github.com/reactphp/child-process/tree/v0.6.7" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-12-23T15:25:20+00:00" + }, + { + "name": "react/dns", + "version": "v1.14.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/dns.git", + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/dns/zipball/7562c05391f42701c1fccf189c8225fece1cd7c3", + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/cache": "^1.0 || ^0.6 || ^0.5", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.7 || ^1.2.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3 || ^2", + "react/promise-timer": "^1.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Dns\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async DNS resolver for ReactPHP", + "keywords": [ + "async", + "dns", + "dns-resolver", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/dns/issues", + "source": "https://github.com/reactphp/dns/tree/v1.14.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-11-18T19:34:28+00:00" + }, + { + "name": "react/event-loop", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/ba276bda6083df7e0050fd9b33f66ad7a4ac747a", + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "suggest": { + "ext-pcntl": "For signal handling support when using the StreamSelectLoop" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "support": { + "issues": "https://github.com/reactphp/event-loop/issues", + "source": "https://github.com/reactphp/event-loop/tree/v1.6.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-11-17T20:46:25+00:00" + }, + { + "name": "react/promise", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a", + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpstan/phpstan": "1.12.28 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v3.3.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-08-19T18:57:03+00:00" + }, + { + "name": "react/socket", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/socket.git", + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/socket/zipball/ef5b17b81f6f60504c539313f94f2d826c5faa08", + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/dns": "^1.13", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.6 || ^1.2.1", + "react/stream": "^1.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3.3 || ^2", + "react/promise-stream": "^1.4", + "react/promise-timer": "^1.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Socket\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", + "keywords": [ + "Connection", + "Socket", + "async", + "reactphp", + "stream" + ], + "support": { + "issues": "https://github.com/reactphp/socket/issues", + "source": "https://github.com/reactphp/socket/tree/v1.17.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-11-19T20:47:34+00:00" + }, + { + "name": "react/stream", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/stream.git", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.2" + }, + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Stream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", + "keywords": [ + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" + ], + "support": { + "issues": "https://github.com/reactphp/stream/issues", + "source": "https://github.com/reactphp/stream/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-06-11T12:45:25+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:41:36+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", + "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-12-12T09:59:06+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:45:54+00:00" + }, + { + "name": "sebastian/comparator", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/d4e47a769525c4dd38cea90e5dcd435ddbbc7115", + "reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.4" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-01-06T10:28:19+00:00" + }, + { + "name": "sebastian/complexity", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:49:50+00:00" + }, + { + "name": "sebastian/diff", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:53:05+00:00" + }, + { + "name": "sebastian/environment", + "version": "7.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", + "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:54:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-12-05T09:17:50+00:00" + }, + { + "name": "sebastian/global-state", + "version": "7.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:57:36+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:58:38+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:00:13+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:01:32+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", + "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:10:34+00:00" + }, + { + "name": "sebastian/type", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/461b9c5da241511a2a0e8f240814fb23ce5c0aac", + "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-17T13:12:04+00:00" + }, + { + "name": "sebastian/version", + "version": "5.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-10-09T05:16:32+00:00" + }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" + }, + { + "name": "symfony/console", + "version": "v7.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "732a9ca6cd9dfd940c639062d5edbde2f6727fb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/732a9ca6cd9dfd940c639062d5edbde2f6727fb6", + "reference": "732a9ca6cd9dfd940c639062d5edbde2f6727fb6", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^7.2|^8.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v7.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-12-23T14:50:43+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "9dddcddff1ef974ad87b3708e4b442dc38b2261d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9dddcddff1ef974ad87b3708e4b442dc38b2261d", + "reference": "9dddcddff1ef974ad87b3708e4b442dc38b2261d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-10-28T09:38:46+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "d551b38811096d0be9c4691d406991b47c0c630a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d551b38811096d0be9c4691d406991b47c0c630a", + "reference": "d551b38811096d0be9c4691d406991b47c0c630a", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony/process": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-11-27T13:27:24+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "fffe05569336549b20a1be64250b40516d6e8d06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/fffe05569336549b20a1be64250b40516d6e8d06", + "reference": "fffe05569336549b20a1be64250b40516d6e8d06", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-12-23T14:50:43+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "b38026df55197f9e39a44f3215788edf83187b80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b38026df55197f9e39a44f3215788edf83187b80", + "reference": "b38026df55197f9e39a44f3215788edf83187b80", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-11-12T15:39:26+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-27T09:58:17+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-23T08:48:59+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-02T08:10:11+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-24T13:30:11+00:00" + }, + { + "name": "symfony/process", + "version": "v7.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "2f8e1a6cdf590ca63715da4d3a7a3327404a523f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/2f8e1a6cdf590ca63715da4d3a7a3327404a523f", + "reference": "2f8e1a6cdf590ca63715da4d3a7a3327404a523f", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v7.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-12-19T10:00:43+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.6.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T11:30:57+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "8a24af0a2e8a872fb745047180649b8418303084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/8a24af0a2e8a872fb745047180649b8418303084", + "reference": "8a24af0a2e8a872fb745047180649b8418303084", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/service-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-04T07:05:15+00:00" + }, + { + "name": "symfony/string", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/d50e862cb0a0e0886f73ca1f31b865efbb795003", + "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.33", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-11-27T13:27:24+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "~8.2.0" + }, + "platform-dev": { + "ext-curl": "*" + }, + "platform-overrides": { + "php": "8.2.0" + }, + "plugin-api-version": "2.6.0" +} diff --git a/conferences/index.php b/conferences/index.php index de805a194b..3718ba5baf 100644 --- a/conferences/index.php +++ b/conferences/index.php @@ -1,39 +1,26 @@ '', - 'current' => 'community', - 'css' => array('home.css'), -)); + 'current' => 'community', + 'css' => ['home.css'], +]); $content = "
    "; -$frontpage = array(); -foreach($NEWS_ENTRIES as $entry) { - foreach($entry["category"] as $category) { - if ($category["term"] == "cfp") { - $frontpage[] = $entry; - break; - } - if ($category["term"] == "conferences") { - $frontpage[] = $entry; - break; - } - } -} $panels = '

    Want to see your conference appear here?

    '; - -foreach($frontpage as $entry) { +foreach ((new NewsHandler())->getConferences() as $entry) { $link = preg_replace('~^(http://php.net/|https://www.php.net/)~', '', $entry["id"]); - $id = parse_url($entry["id"], PHP_URL_FRAGMENT); + $id = parse_url($entry["id"], PHP_URL_FRAGMENT); $date = date_format(date_create($entry["updated"]), 'Y-m-d'); $content .= '
    '; - $content .= '

    ' . $entry["title"] . '

    '; + $content .= '

    ' . $entry["title"] . '

    '; $content .= '
    '; if (isset($entry["newsImage"])) { @@ -52,10 +39,8 @@ echo $content; -site_footer( - array( - "atom" => "/feed.atom", - "elephpants" => true, - "sidebar" => $panels, - ) -); +site_footer([ + "atom" => "/feed.atom", + "elephpants" => true, + "sidebar" => $panels, +]); diff --git a/contact.php b/contact.php index 34b669d5f7..6e0e7b8e21 100644 --- a/contact.php +++ b/contact.php @@ -1,30 +1,38 @@ "community")); +site_header("Contact", ["current" => "community"]); ?>

    Advertising at PHP.net and mirror sites

    - The maintainers of PHP.net and the mirror sites are definitely - not interested in graphical banner or text ad placement - deals. + The maintainers of PHP.net are definitely not interested in graphical + banner or text ad placement deals.

    Contact

    - Please report problems you find on PHP.net and mirror sites in - the bug system. Categorize the bug - as "PHP.net Website Problem". This allows us to follow the progress of - the problem until it is fixed. + Please report problems you find on PHP.net and mirror sites on GitHub. + This allows us to follow the progress of the + problem until it is fixed. +

    +

    + For security related issues (in PHP or our websites) please contact security@php.net, or report a vulnerability on + GitHub. +

    +

    + We have published a Vulnerability Disclosure + Policy.

    - For security related issues (in PHP or our websites) please contact - security@php.net. Please note that the following are NOT security issues:

    • Requests for help with using PHP. Please use the @@ -48,7 +56,7 @@

      If you would like to contact the webmasters for some other reason, please write to php-webmaster@lists.php.net. - Note that this address is mapped to a mailing list and a newsgroup, so + Note that this address is mapped to a mailing list and a newsgroup, so every message you send will be stored in public archives at multiple servers.

      diff --git a/copyright.php b/copyright.php index 97cb1ea30d..57233ded2c 100644 --- a/copyright.php +++ b/copyright.php @@ -1,15 +1,7 @@ -

      PHP License

      -

      - For information on the PHP License (i.e. using the PHP language), - see our licensing information page. -

      -'; -site_header("Copyright", array("current" => "footer")); +site_header("Copyright", ["current" => "footer"]); ?> diff --git a/credits.php b/credits.php index 540919c059..b652bd652f 100644 --- a/credits.php +++ b/credits.php @@ -1,12 +1,12 @@ (.*)!ims', $credits, $m); @@ -15,16 +15,14 @@ // Fix for PHP bug #24839, // which affects the page layout $credits = str_replace( - array("", "& "), - array("
    ", "& "), - $credits + ["", "& "], + ["
    ", "& "], + $credits, ); // If there is something left, print it out if ($credits) { - site_header("Credits", array("current" => "community", 'css' => array('credits.css'))); + site_header("Credits", ["current" => "community", 'css' => ['credits.css']]); echo $credits; site_footer(); } - -?> diff --git a/distributions b/distributions index debabac640..2deda056c3 160000 --- a/distributions +++ b/distributions @@ -1 +1 @@ -Subproject commit debabac640a25c8141a7583be262fddbcdfd629c +Subproject commit 2deda056c3b4d280ee51f1db632599c36fc78a7b diff --git a/docs.php b/docs.php index 9681074056..3119d5bf7d 100644 --- a/docs.php +++ b/docs.php @@ -1,8 +1,11 @@ "docs")); +site_header("Documentation", ["current" => "docs"]); ?> @@ -14,76 +17,58 @@ Please pick a language from the list below.

    -

    - More information about php.net URL shortcuts by visiting our - URL howto page. -

    -

    Note, that many languages are just under translation, and the untranslated parts are still in English. Also some translated - parts might be outdated. The translation teams are open to - contributions. + parts might be outdated. The translation teams are + open to contributions.

    - - - - - - - - - - - - - -
    FormatsDestinations
    View Online +

    + View Online: $langname) { - if (!file_exists($_SERVER["DOCUMENT_ROOT"] . "/manual/{$langcode}/index.php")) { - continue; - } +$lastlang = array_key_last(Languages::ACTIVE_ONLINE_LANGUAGES); +foreach (Languages::ACTIVE_ONLINE_LANGUAGES as $langcode => $langname) { + if (!file_exists($_SERVER["DOCUMENT_ROOT"] . "/manual/{$langcode}/index.php")) { + continue; + } // Make preferred language bold - if ($langcode == $LANG) { echo ""; } + if ($langcode === $LANG) { echo ""; } echo '' . $langname . ''; - echo ($lastlang != $langname) ? ",\n" : "\n"; + echo ($lastlang !== $langcode) ? ",\n" : "\n"; - if ($langcode == $LANG) { echo ""; } + if ($langcode === $LANG) { echo ""; } } ?> -

    Downloads - For downloadable formats, please visit our - documentation downloads page. -
    - -
    -

    - Documentation for PHP 4 and PHP 5 has been removed from the - manual, but there are still archived versions still. For - more information, please read - Documentation for PHP 4 and - Documentation for 5, respectively. -

    -
    +

    + +

    + The language currently being used as the default for you should be in + bold above. You can change the setting for this on the + My PHP.net customization page. +

    + +

    + For downloadable formats, please visit our + documentation downloads page. +

    + +

    + Information about php.net URL shortcuts can be found by visiting our + Navigation tips & tricks page. +

    More documentation

    diff --git a/download-docs.php b/download-docs.php index e32c0e9e7b..b8714ea578 100644 --- a/download-docs.php +++ b/download-docs.php @@ -1,13 +1,16 @@
    Online documentation
    @@ -25,29 +28,24 @@
    Other formats

    - The manual is also available via *nix style man pages. To - install and use: + The manual is also available in other formats. For instructions on + building the documentation see the + local environment + setup guide.

    -
      -
    • Install: pear install doc.php.net/pman
    • -
    • Upgrade: pear upgrade doc.php.net/pman
    • -
    • Example usage: pman strlen
    • -
    '; -site_header("Download documentation", array("current" => "docs")); +site_header("Download documentation", ["current" => "docs"]); // Format to look for -$formats = array( +$formats = [ "Single HTML file" => "html.gz", - "Many HTML files" => "tar.gz", -# "Many PDF files" => "pdf.tar.gz", -# "PDF" => "pdf", - "HTML Help file" => "chm", + "Many HTML files" => "tar.gz", + "HTML Help file" => "chm", "HTML Help file (with user notes)" => "chm", -); +]; ?>

    Download documentation

    @@ -88,15 +86,11 @@

    $language) { - if(isset($INACTIVE_ONLINE_LANGUAGES[$langcode]) && $MYSITE !== 'http://docs.php.net/') { - continue; - } - +foreach (Languages::LANGUAGES as $langcode => $language) { // Go through all possible manual formats foreach ($formats as $formatname => $extension) { @@ -116,17 +110,17 @@ $link_to = "/distributions/manual/$filename"; // Try to get size and changed date - $size = @filesize($filepath); + $size = @filesize($filepath); $changed = @filemtime($filepath); // Size available, collect information - if ($size !== FALSE) { - $files[$langcode][$formatname] = array( + if ($size !== false) { + $files[$langcode][$formatname] = [ $link_to, - (int) ($size/1024), + (int) ($size / 1024), date("j M Y", $changed), - $extension - ); + $extension, + ]; $found_formats[$formatname] = 1; } } @@ -172,8 +166,8 @@ foreach ($files as $langcode => $lang_files) { // See if current language is the preferred one - if ($langcode == $LANG) { $preflang = TRUE; } - else { $preflang = FALSE; } + if ($langcode == $LANG) { $preflang = true; } + else { $preflang = false; } // Highlight manual in preferred language if ($preflang) { @@ -182,7 +176,7 @@ $cellclass = ""; } - echo "\n" . $LANGUAGES[$langcode] . "\n"; + echo "\n" . Languages::LANGUAGES[$langcode] . "\n"; foreach ($formats as $formatname => $extension) { @@ -223,4 +217,4 @@ } ?> - $SIDEBAR_DATA)); + $SIDEBAR_DATA]); diff --git a/download-logos.php b/download-logos.php index 02158900ab..f044336630 100644 --- a/download-logos.php +++ b/download-logos.php @@ -10,19 +10,19 @@ under a GPL license.

    '; -site_header("Download Logos", array("current" => "downloads")); +site_header("Download Logos", ["current" => "downloads"]); // Print recommended star cell -function print_star() +function print_star(): void { echo "*\n"; } // Provide a random bgcolor setting for a cell -function random_bgcolor($min, $max) +function random_bgcolor($min, $max): void { echo "style=\"background-color: #" . - sprintf('%02x%02x%02x', rand($min, $max)*51, rand($min, $max)*51, rand($min, $max)*51) . + sprintf('%02x%02x%02x', mt_rand($min, $max) * 51, mt_rand($min, $max) * 51, mt_rand($min, $max) * 51) . ";\""; } ?> @@ -65,7 +65,7 @@ function random_bgcolor($min, $max)

    - +
    SVG | PNG @@ -78,7 +78,7 @@ function random_bgcolor($min, $max)

    - +
    SVG | PNG diff --git a/downloads-get-instructions.php b/downloads-get-instructions.php new file mode 100644 index 0000000000..0af5138158 --- /dev/null +++ b/downloads-get-instructions.php @@ -0,0 +1,87 @@ + '', + 'usage' => '', + 'version' => '', + ]; +} + +if ($options['os'] === 'windows') { + if ($options['osvariant'] === 'windows-wsl-debian') { + $options['os'] = 'linux'; + $options['osvariant'] = 'linux-debian'; + } + if ($options['osvariant'] === 'windows-wsl-ubuntu') { + $options['os'] = 'linux'; + $options['osvariant'] = 'linux-ubuntu'; + } +} +if ($options['os'] === 'osx' || $options['os'] === 'windows') { + if ($options['version'] === 'default') { + $options['version'] = $latestPhpVersion; + } +} + +if (in_array($options['usage'], ['fw-drupal', 'fw-laravel', 'fw-symfony', 'fw-wordpress', 'fw-joomla'])) { + $file = "{$options['usage']}"; + $options['os'] = null; +} + +$multiversion = false; + +if (array_key_exists('multiversion', $options)) { + $multiversion = $options['multiversion'] === 'Y'; +} + +$source = false; + +if (array_key_exists('source', $options)) { + if ($options['source'] === 'Y') { + $source = $options['source'] === 'Y'; + } +} + +switch ($options['os']) { + case 'linux': + $defaultOrCommunity = ($options['version'] !== 'default' || $multiversion) ? 'community' : 'default'; + if ($defaultOrCommunity === 'community' && $options['version'] == 'default') { + $options['version'] = $latestPhpVersion; + } + $file = "{$options['osvariant']}-{$options['usage']}-{$defaultOrCommunity}"; + break; + case 'osx': + case 'windows': + if($options['osvariant'] === "{$options['os']}-docker") { + $file = "{$options['osvariant']}-{$options['usage']}"; + } else { + $file = "{$options['osvariant']}"; + } + break; +} + +if ($source) { + $file = "{$options['os']}-source"; +} + +$version = $options['version']; +$versionNoDot = str_replace('.', '', $version); + +if (file_exists(__DIR__ . "/include/download-instructions/{$file}.php")) { + include __DIR__ . "/include/download-instructions/{$file}.php"; + if ($source) { + return false; + } + return true; +} else { +?> +

    + There are no instructions yet. Try using the generic installation from source. +

    + diff --git a/downloads.php b/downloads.php index ff23d5ee54..fd123c3f35 100644 --- a/downloads.php +++ b/downloads.php @@ -1,4 +1,4 @@ - Supported Versions @@ -18,70 +16,206 @@
    -

    Documentation download

    -

    PHP logos

    +

    Source Tarballs

    +

    Documentation Download

    +

    PHP Logos

    -

    Development sources (git)

    -

    Old archives

    +

    Pre-Release Builds

    +

    Development Sources (git)

    +

    Old Archives

    '; site_header("Downloads", - array( - 'link' => array( - array( - "rel" => "alternate", - "type" => "application/atom+xml", - "href" => $MYSITE . "releases/feed.php", - "title" => "PHP Release feed" - ), - ), + [ + 'link' => [ + [ + "rel" => "alternate", + "type" => "application/atom+xml", + "href" => $MYSITE . "releases/feed.php", + "title" => "PHP Release feed", + ], + ], "current" => "downloads", - ) + "css" => [ + "prism.css", + "code-syntax.css", + ], + "js_files" => [ + "js/ext/prism.js", + ], + ], ); + +function option(string $value, string $desc, $attributes = []): string +{ + return ''; +} + +$usage = [ + 'web' => 'Web Development', + 'cli' => 'CLI/Library Development', + 'fw-drupal' => 'Drupal Development', + 'fw-joomla' => 'Joomla Development', + 'fw-laravel' => 'Laravel Development', + 'fw-symfony' => 'Symfony Development', + 'fw-wordpress' => 'WordPress Development', +]; + +$os = [ + 'linux' => [ + 'name' => 'Linux', + 'variants' => [ + 'linux-debian' => 'Debian', + 'linux-fedora' => 'Fedora', + 'linux-redhat' => 'RedHat', + 'linux-ubuntu' => 'Ubuntu', + 'linux-docker' => 'Docker', + ], + ], + 'osx' => [ + 'name' => 'macOS', + 'variants' => [ + 'osx-homebrew' => 'Homebrew', + 'osx-homebrew-php' => 'Homebrew-PHP', + 'osx-docker' => 'Docker', + 'osx-macports' => 'MacPorts', + ], + ], + 'windows' => [ + 'name' => 'Windows', + 'variants' => [ + 'windows-downloads' => 'ZIP Downloads', + 'windows-native' => 'Single Line Installer', + 'windows-chocolatey' => 'Chocolatey', + 'windows-scoop' => 'Scoop', + 'windows-winget' => 'Winget', + 'windows-docker' => 'Docker', + 'windows-wsl-debian' => 'WSL/Debian', + 'windows-wsl-ubuntu' => 'WSL/Ubuntu', + ], + ], +]; + +$versions = [ + '8.5' => 'version 8.5', + '8.4' => 'version 8.4', + '8.3' => 'version 8.3', + '8.2' => 'version 8.2', + 'default' => 'OS default version', +]; + + +$platform = $_SERVER['HTTP_SEC_CH_UA_PLATFORM'] ?? ''; +$ua = $_SERVER['HTTP_USER_AGENT'] ?? ''; +$auto_os = null; +$auto_osvariant = null; + +if (!empty($platform) || !empty($ua)) { + $platform = strtolower(trim($platform, '"')); + if ($platform === 'windows' || stripos($ua, 'Windows') !== false) { + $auto_os = 'windows'; + } elseif ($platform === 'macos' || stripos($ua, 'Mac') !== false) { + $auto_os = 'osx'; + } elseif ($platform === 'linux' || stripos($ua, 'Linux') !== false) { + $auto_os = 'linux'; + if (stripos($ua, 'Ubuntu') !== false) { + $auto_osvariant = 'linux-ubuntu'; + } elseif (stripos($ua, 'Debian') !== false) { + $auto_osvariant = 'linux-debian'; + } elseif (stripos($ua, 'Fedora') !== false) { + $auto_osvariant = 'linux-fedora'; + } elseif (stripos($ua, 'Red Hat') !== false || stripos($ua, 'RedHat') !== false) { + $auto_osvariant = 'linux-redhat'; + } + } +} + +$defaults = [ + 'os' => $auto_os ?? 'linux', + 'version' => 'default', + 'usage' => 'web', +]; + +$options = array_merge($defaults, $_GET); + +if ($auto_osvariant && (!array_key_exists('osvariant', $options) || !array_key_exists($options['osvariant'], $os[$options['os']]['variants']))) { + $options['osvariant'] = $auto_osvariant; +} elseif (!array_key_exists('osvariant', $options) || !array_key_exists($options['osvariant'], $os[$options['os']]['variants'])) { + $options['osvariant'] = array_key_first($os[$options['os']]['variants']); +} ?> - $major_releases): /* major releases loop start */ - $releases = array_slice($major_releases, 0, $SHOW_COUNT); -?> - - $a): ?> - - - -

    - - PHP - (Changelog) -

    -
    +

    Downloads & Installation Instructions

    -
      - -
    • - - - ', $rel['md5'], ''; - if (isset($rel['sha256'])) echo '', $rel['sha256'], ''; - ?> - -

      - Note: - -

      - -
    • - -
    • - - Windows downloads - -
    • -
    +
    +
    + I want to use PHP for + . +
    - GPG Keys for PHP -
    - - +
    + I work with + + + + + , + and use + +
    + + + + + + + + +
    +

    + Did you find a mistake? Didn't find what you were looking for? + Please submit an issue. +

    +
    + +

    Instructions

    +
    + + + +

    Source Code

    +

    GPG Keys

    @@ -94,11 +228,106 @@

    - - A full list of GPG keys used for current and older releases is also - available. - + + A full list of GPG keys used for current and older releases is also + available. +

    +

    Binaries

    + +

    + Binaries are available for + Microsoft Windows. The PHP project does not currently release binary packages + for other platforms such as Linux or macOS, but they are packaged by distributions + and other providers. For more information, see: + +

    +

    + + +
    + + + $SIDEBAR_DATA)); +site_footer(['sidebar' => $SIDEBAR_DATA]); diff --git a/elephpant.php b/elephpant.php index 8fa1934be8..cab6dcf0c4 100644 --- a/elephpant.php +++ b/elephpant.php @@ -1,15 +1,7 @@ -

    PHP License

    -

    - For information on the PHP License (i.e. using the PHP language), - see our licensing information page. -

    -'; -site_header("ElePHPant", array("current" => "footer")); +site_header("ElePHPant", ["current" => "footer"]); ?> @@ -35,8 +27,6 @@ true - ) -); +site_footer([ + 'elephpants' => true, +]); diff --git a/eol.php b/eol.php index ed1407ada9..e3eff384a4 100644 --- a/eol.php +++ b/eol.php @@ -5,19 +5,23 @@ include_once __DIR__ . '/include/branches.inc'; // Notes for specific branches can be added here, and will appear in the table. -$BRANCH_NOTES = array( - '7.2' => 'A guide is available for migrating from PHP 7.2 to 7.3.', - '7.1' => 'A guide is available for migrating from PHP 7.1 to 7.2.', - '7.0' => 'A guide is available for migrating from PHP 7.0 to 7.1.', - '5.6' => 'A guide is available for migrating from PHP 5.6 to 7.0.', - '5.5' => 'A guide is available for migrating from PHP 5.5 to 5.6.', - '5.4' => 'A guide is available for migrating from PHP 5.4 to 5.5.', - '5.3' => 'A guide is available for migrating from PHP 5.3 to 5.4.', - '5.2' => 'A guide is available for migrating from PHP 5.2 to 5.3.', - '5.1' => 'A guide is available for migrating from PHP 5.1 to 5.2.', - '5.0' => 'A guide is available for migrating from PHP 5.0 to 5.1.', - '4.4' => 'A guide is available for migrating from PHP 4 to PHP 5.0.
    The end of life for PHP 4.4 also marks the end of life for PHP 4 as a whole.', -); +$BRANCH_NOTES = [ + '8.1' => 'A guide is available for migrating from PHP 8.1 to 8.2.', + '8.0' => 'A guide is available for migrating from PHP 8.0 to 8.1.', + '7.4' => 'A guide is available for migrating from PHP 7.4 to 8.0.', + '7.3' => 'A guide is available for migrating from PHP 7.3 to 7.4.', + '7.2' => 'A guide is available for migrating from PHP 7.2 to 7.3.', + '7.1' => 'A guide is available for migrating from PHP 7.1 to 7.2.', + '7.0' => 'A guide is available for migrating from PHP 7.0 to 7.1.', + '5.6' => 'A guide is available for migrating from PHP 5.6 to 7.0.', + '5.5' => 'A guide is available for migrating from PHP 5.5 to 5.6.', + '5.4' => 'A guide is available for migrating from PHP 5.4 to 5.5.', + '5.3' => 'A guide is available for migrating from PHP 5.3 to 5.4.', + '5.2' => 'A guide is available for migrating from PHP 5.2 to 5.3.', + '5.1' => 'A guide is available for migrating from PHP 5.1 to 5.2.', + '5.0' => 'A guide is available for migrating from PHP 5.0 to 5.1.', + '4.4' => 'A guide is available for migrating from PHP 4 to 5.0.', +]; site_header('Unsupported Branches'); ?> @@ -36,7 +40,7 @@ Branch - Date + Date Last Release Notes @@ -45,14 +49,13 @@ $branches): ?> $detail): ?> - + format('j M Y') ?> - - - +
    + () @@ -60,7 +63,7 @@ - + diff --git a/error.php b/error.php index ec996f5201..d01e6cf8e2 100644 --- a/error.php +++ b/error.php @@ -9,14 +9,17 @@ */ +use phpweb\I18n\Languages; +use phpweb\UserPreferences; + // Ensure that our environment is set up include_once __DIR__ . '/include/prepend.inc'; -include_once __DIR__ . '/include/languages.inc'; include_once __DIR__ . '/include/errors.inc'; // Get URI for this request, strip leading slash // See langchooser.inc for more info on STRIPPED_URI $URI = substr($_SERVER['STRIPPED_URI'], 1); +$queryString = $_SERVER['QUERY_STRING'] ?? ''; // ============================================================================ // Mozilla Search Sidebar plugin resource file handling (need to be mirror @@ -77,7 +80,7 @@ // default language manual accessibility on mirror sites through /manual/filename) // @todo do we rely on this? how about removing it... if (preg_match("!^manual/([^/]*)$!", $URI, $array)) { - if (!isset($INACTIVE_ONLINE_LANGUAGES[$array[1]])) { + if (!isset(Languages::INACTIVE_ONLINE_LANGUAGES[$array[1]])) { mirror_redirect("/manual/$LANG/$array[1]"); } } elseif (preg_match("!^manual/html/([^/]+)$!", $URI, $array)) { @@ -116,34 +119,37 @@ // ============================================================================ // The trailing slash only causes problems from now on -$URI = preg_replace('!/+$!', '', $URI); +$URI = rtrim($URI, '/'); // ============================================================================ // Some nice URLs for getting something for download if (preg_match("!^get/([^/]+)$!", $URI, $what)) { switch ($what[1]) { - case "php" : $URI = "downloads"; break; - case "docs" : // intentional - case "documentation" : $URI = "download-docs"; break; + case "php": + $URI = "downloads"; + break; + case "docs": // intentional + case "documentation": + $URI = "download-docs"; + break; } } - // ============================================================================ // Nice URLs for download files, so wget works completely well with download links if (preg_match("!^get/([^/]+)/from/([^/]+)(/mirror)?$!", $URI, $dlinfo)) { $df = $dlinfo[1]; - if(strpos($df, "7-LATEST") !== false) { + if (strpos($df, "7-LATEST") !== false) { include_once __DIR__ . "/include/version.inc"; - [ $latest ] = release_get_latest(); + [$latest] = release_get_latest(); $df = str_replace("7-LATEST", $latest, $df); } $mr = "https://www.php.net/"; // Check if that mirror really exists if not, bail out - if(!isset($MIRRORS[$mr])) { + if (!isset($MIRRORS[$mr])) { error_nomirror($mr); exit; } @@ -164,14 +170,25 @@ // php.net/42 --> likely a bug number if (is_numeric($URI)) { - mirror_redirect("http://bugs.php.net/bug.php?id=$URI"); + mirror_redirect("https://bugs.php.net/bug.php?id=$URI"); +} + +// php.net/GH-123 -> php-src GH issue #123 +if (preg_match('/^GH-(\d+)$/', $URI, $matches)) { + mirror_redirect("https://github.com/php/php-src/issues/" . $matches[1]); +} + +// php.net/supported-versions.PHP -> supported-versions.php +if ($URI == 'supported-versions.PHP') { + mirror_redirect("https://www.php.net/supported-versions.php"); } + // ============================================================================ // Redirect if the entered URI was a PHP page name (except some pages, // which we display in the mirror's language or the explicitly specified // language [see below]) -if (!in_array($URI, array('mirror-info', 'error', 'mod')) && +if (!in_array($URI, ['mirror-info', 'error', 'mod'], true) && file_exists($_SERVER['DOCUMENT_ROOT'] . "/$URI.php")) { mirror_redirect("/$URI.php"); } @@ -203,44 +220,59 @@ // Major manual page modifications (need to handle shortcuts and pages in all languages) // Used permanent HTTP redirects, so search engines will be able to pick up the correct // new URLs for these pages. -$manual_page_moves = array( +$manual_page_moves = [ // entry point changed - 'installation' => 'install', + 'installation' => 'install', + + // XML Id changed (see https://github.com/php/doc-en/commit/0d51ca45814bbc60d7a1e6cf6fc7213f0b49c8d5) + 'enum.random.intervalboundary' => 'enum.random-intervalboundary', + 'enum.random.intervalboundary.intro' => 'enum.random-intervalboundary.intro', + 'enum.random.intervalboundary.synopsis' => 'enum.random-intervalboundary.synopsis', // was split among platforms (don't know where to redirect) - 'install.apache' => 'install', - 'install.apache2' => 'install', - 'install.netscape-enterprise'=> 'install', - 'install.otherhttpd' => 'install', + 'install.apache' => 'install', + 'install.apache2' => 'install', + 'install.netscape-enterprise' => 'install', + 'install.otherhttpd' => 'install', // moved to platform sections - 'install.caudium' => 'install.unix.caudium', - 'install.commandline' => 'install.unix.commandline', - 'install.fhttpd' => 'install.unix.fhttpd', - 'install.hpux' => 'install.unix.hpux', - 'install.iis' => 'install.windows.iis', - 'install.linux' => 'install.unix', - 'install.omnihttpd' => 'install.windows.omnihttpd', - 'install.openbsd' => 'install.unix.openbsd', - 'install.sambar' => 'install.windows.sambar', - 'install.solaris' => 'install.unix.solaris', - 'install.xitami' => 'install.windows.xitami', + 'install.caudium' => 'install.unix.caudium', + 'install.commandline' => 'install.unix.commandline', + 'install.fhttpd' => 'install.unix.fhttpd', + 'install.hpux' => 'install.unix.hpux', + 'install.iis' => 'install.windows.iis', + 'install.linux' => 'install.unix', + 'install.omnihttpd' => 'install.windows.omnihttpd', + 'install.openbsd' => 'install.unix.openbsd', + 'install.sambar' => 'install.windows.sambar', + 'install.solaris' => 'install.unix.solaris', + 'install.xitami' => 'install.windows.xitami', 'install.windows.installer.msi' => 'install.windows', - 'install.windows.installer' => 'install.windows', + 'install.windows.installer' => 'install.windows', // Internals docs where moved - 'zend' => 'internals2.ze1.zendapi', - 'zend-api' => 'internals2.ze1.zendapi', - 'internals.pdo' => 'internals2.pdo', - 'phpdevel' => 'internals2.ze1.php3devel', - 'tsrm' => 'internals2.ze1.tsrm', + 'zend' => 'internals2.ze1.zendapi', + 'zend-api' => 'internals2.ze1.zendapi', + 'internals.pdo' => 'internals2.pdo', + 'phpdevel' => 'internals2.ze1.php3devel', + 'tsrm' => 'internals2.ze1.tsrm', // Replaced extensions - 'aspell' => 'pspell', + 'aspell' => 'pspell', // Refactored - 'regexp.reference' => 'regexp.introduction', -); + 'regexp.reference' => 'regexp.introduction', + "security" => "manual/security", + + // MongoDB converted from set to book + 'set.mongodb' => 'book.mongodb', + 'mongodb.installation.homebrew' => 'mongodb.installation#mongodb.installation.homebrew', + 'mongodb.installation.manual' => 'mongodb.installation#mongodb.installation.manual', + 'mongodb.installation.pecl' => 'mongodb.installation#mongodb.installation.pecl', + 'mongodb.installation.windows' => 'mongodb.installation#mongodb.installation.windows', + 'mongodb.persistence.deserialization' => 'mongodb.persistence#mongodb.persistence.deserialization', + 'mongodb.persistence.serialization' => 'mongodb.persistence#mongodb.persistence.serialization', +]; if (isset($manual_page_moves[$URI])) { status_header(301); @@ -248,337 +280,396 @@ } elseif (preg_match("!^manual/([^/]+)/([^/]+).php$!", $URI, $match) && isset($manual_page_moves[$match[2]])) { status_header(301); - mirror_redirect("/manual/$match[1]/" . $manual_page_moves[$match[2]] . ".php"); + + $parts = explode('#', $manual_page_moves[$match[2]], 2); + if (count($parts) === 1) { + mirror_redirect("/manual/{$match[1]}/{$parts[0]}.php"); + } else { + mirror_redirect("/manual/{$match[1]}/{$parts[0]}.php#{$parts[1]}"); + } +} + +$manual_redirections = [ + 'class.oci-lob' => 'class.ocilob', + 'oci-lob.append' => 'ocilob.append', + 'oci-lob.close' => 'ocilob.close', + 'oci-lob.eof' => 'ocilob.eof', + 'oci-lob.erase' => 'ocilob.erase', + 'oci-lob.export' => 'ocilob.export', + 'oci-lob.flush' => 'ocilob.flush', + 'oci-lob.free' => 'ocilob.free', + 'oci-lob.getbuffering' => 'ocilob.getbuffering', + 'oci-lob.import' => 'ocilob.import', + 'oci-lob.load' => 'ocilob.load', + 'oci-lob.read' => 'ocilob.read', + 'oci-lob.rewind' => 'ocilob.rewind', + 'oci-lob.save' => 'ocilob.save', + 'oci-lob.seek' => 'ocilob.seek', + 'oci-lob.setbuffering' => 'ocilob.setbuffering', + 'oci-lob.size' => 'ocilob.size', + 'oci-lob.tell' => 'ocilob.tell', + 'oci-lob.truncate' => 'ocilob.truncate', + 'oci-lob.write' => 'ocilob.write', + 'oci-lob.writetemporary' => 'ocilob.writetemporary', + 'class.oci-collection' => 'class.ocicollection', + 'oci-collection.append' => 'ocicollection.append', + 'oci-collection.assign' => 'ocicollection.assign', + 'oci-collection.assignelem' => 'ocicollection.assignelem', + 'oci-collection.free' => 'ocicollection.free', + 'oci-collection.getelem' => 'ocicollection.getelem', + 'oci-collection.max' => 'ocicollection.max', + 'oci-collection.size' => 'ocicollection.size', + 'oci-collection.trim' => 'ocicollection.trim', + 'splstack.setiteratormode' => 'spldoublylinkedlist.setiteratormode', + 'splqueue.setiteratormode' => 'spldoublylinkedlist.setiteratormode', + 'class.allow-dynamic-properties' => 'class.allowdynamicproperties', + 'class.return-type-will-change' => 'class.returntypewillchange', + 'class.sensitive-parameter' => 'class.sensitiveparameter', + 'function.curl-file-create' => 'curlfile.construct', + 'simplexmliterator.current' => 'simplexmlelement.current', + 'simplexmliterator.getchildren' => 'simplexmlelement.getchildren', + 'simplexmliterator.haschildren' => 'simplexmlelement.haschildren', + 'simplexmliterator.key' => 'simplexmlelement.key', + 'simplexmliterator.next' => 'simplexmlelement.next', + 'simplexmliterator.rewind' => 'simplexmlelement.rewind', + 'simplexmliterator.valid' => 'simplexmlelement.valid', +]; + +if (preg_match("!^manual/([^/]+)/([^/]+?)(?:\.php)?$!", $URI, $match) && isset($manual_redirections[$match[2]])) { + status_header(301); + mirror_redirect("/manual/$match[1]/" . $manual_redirections[$match[2]]); } // ============================================================================ // Define shortcuts for PHP files, manual pages and external redirects -$uri_aliases = array ( +$uri_aliases = [ # PHP page shortcuts - "download" => "downloads", - "getphp" => "downloads", - "getdocs" => "download-docs", + "download" => "downloads", + "getphp" => "downloads", + "getdocs" => "download-docs", "documentation" => "docs", - "mailinglists" => "mailing-lists", - "mailinglist" => "mailing-lists", - "changelog" => "ChangeLog-7", - "gethelp" => "support", - "help" => "support", - "unsubscribe" => "unsub", - "subscribe" => "mailing-lists", - "logos" => "download-logos", + "mailinglists" => "mailing-lists", + "mailinglist" => "mailing-lists", + "changelog" => "ChangeLog-8", + "gethelp" => "support", + "help" => "support", + "unsubscribe" => "unsub", + "subscribe" => "mailing-lists", + "logos" => "download-logos", # manual shortcuts - "intro" => "introduction", - "whatis" => "introduction", - "whatisphp" => "introduction", - "what_is_php" => "introduction", + "intro" => "introduction", + "whatis" => "introduction", + "whatisphp" => "introduction", + "what_is_php" => "introduction", + "composer" => "install.composer.intro", - "windows" => "install.windows", - "win32" => "install.windows", + "windows" => "install.windows", + "win32" => "install.windows", - "globals" => "language.variables.predefined", + "globals" => "language.variables.predefined", "register_globals" => "security.globals", - "registerglobals" => "security.globals", + "registerglobals" => "security.globals", "manual/en/security.registerglobals.php" => "security.globals", // fix for 4.3.8 configure - "magic_quotes" => "security.magicquotes", - "magicquotes" => "security.magicquotes", - "gd" => "image", - "bcmath" => "bc", - 'streams' => 'book.stream', - "mongodb" => "set.mongodb", - - "callback" => "language.pseudo-types", - "number" => "language.pseudo-types", - "mixed" => "language.pseudo-types", - "bool" => "language.types.boolean", - "boolean" => "language.types.boolean", - "int" => "language.types.integer", - "integer" => "language.types.integer", - "float" => "language.types.float", - "string" => "language.types.string", - "heredoc" => "language.types.string", - "<<<" => "language.types.string", - "object" => "language.types.object", - "null" => "language.types.null", - 'callable' => 'language.types.callable', - - "htaccess" => "configuration.changes", - "php_value" => "configuration.changes", - - "ternary" => "language.operators.comparison", - "instanceof" => "language.operators.type", - "if" => "language.control-structures", - "static" => "language.variables.scope", - "global" => "language.variables.scope", - "@" => "language.operators.errorcontrol", - "&" => "language.references", - "**" => "language.operators.arithmetic", - "..." => "functions.arguments", - "splat" => "functions.arguments", - "arrow" => "functions.arrow", - "fn" => "functions.arrow", + "magic_quotes" => "security.magicquotes", + "magicquotes" => "security.magicquotes", + "gd" => "image", + "bcmath" => "bc", + 'streams' => 'book.stream', + "mongodb" => "book.mongodb", + "hrtime" => "function.hrtime", // Prefer function over PECL ext + + "callback" => "language.pseudo-types", + "number" => "language.pseudo-types", + "mixed" => "language.pseudo-types", + "bool" => "language.types.boolean", + "boolean" => "language.types.boolean", + "int" => "language.types.integer", + "integer" => "language.types.integer", + "float" => "language.types.float", + "string" => "language.types.string", + "heredoc" => "language.types.string", + "<<<" => "language.types.string", + "object" => "language.types.object", + "null" => "language.types.null", + 'callable' => 'language.types.callable', + + "htaccess" => "configuration.changes", + "php_value" => "configuration.changes", + + "ternary" => "language.operators.comparison", + "instanceof" => "language.operators.type", + "if" => "language.control-structures", + "static" => "language.variables.scope", + "global" => "language.variables.scope", + "@" => "language.operators.errorcontrol", + "&" => "language.references", + "**" => "language.operators.arithmetic", + "..." => "functions.arguments", + "splat" => "functions.arguments", + "arrow" => "functions.arrow", + "fn" => "functions.arrow", + "pipe" => "operators.functional", + "|>" => "operators.functional", // ?:, ??, ??= // These shortcuts can not be captured here since they // don't actually produce a 404 error. // Instead, we have a small check in index.php directly. - "dowhile" => "control-structures.do.while", + "dowhile" => "control-structures.do.while", - "tut" => "tutorial", - "tut.php" => "tutorial", // BC + "tut" => "tutorial", + "tut.php" => "tutorial", // BC - "faq.php" => "faq", // BC - "bugs.php" => "bugs", // BC + "faq.php" => "faq", // BC + "bugs.php" => "bugs", // BC "bugstats.php" => "bugstats", // BC - "docs-echm.php"=> "download-docs", // BC - - "odbc" => "uodbc", // BC - - "links" => "support", // BC - "links.php" => "support", // BC - "oracle" => "oci8", - "_" => "function.gettext", - "cli" => "features.commandline", - - "oop4" => "language.oop", - "oop" => "language.oop5", - - "const" => "language.constants.syntax", - "class" => "language.oop5.basic", - "new" => "language.oop5.basic", - "extends" => "language.oop5.basic", - "clone" => "language.oop5.cloning", - "construct" => "language.oop5.decon", - "destruct" => "language.oop5.decon", - "public" => "language.oop5.visibility", - "private" => "language.oop5.visibility", - "protected" => "language.oop5.visibility", - "var" => "language.oop5.visibility", - "abstract" => "language.oop5.abstract", - "interface" => "language.oop5.interfaces", - "interfaces" => "language.oop5.interfaces", - "autoload" => "language.oop5.autoload", - "__autoload" => "language.oop5.autoload", + "docs-echm.php" => "download-docs", // BC + + "odbc" => "uodbc", // BC + + "links" => "support", // BC + "links.php" => "support", // BC + "oracle" => "oci8", + "cli" => "features.commandline", + + "oop" => "language.oop5", + "enum" => "language.enumerations", + "enums" => "language.enumerations", + + "const" => "language.constants.syntax", + "class" => "language.oop5.basic", + "new" => "language.oop5.basic", + "extends" => "language.oop5.basic", + "clone" => "language.oop5.cloning", + "construct" => "language.oop5.decon", + "destruct" => "language.oop5.decon", + "public" => "language.oop5.visibility", + "private" => "language.oop5.visibility", + "protected" => "language.oop5.visibility", + "var" => "language.oop5.visibility", + "abstract" => "language.oop5.abstract", + "interface" => "language.oop5.interfaces", + "interfaces" => "language.oop5.interfaces", + "autoload" => "language.oop5.autoload", + "__autoload" => "language.oop5.autoload", "language.oop5.reflection" => "book.reflection", // BC - "::" => "language.oop5.paamayim-nekudotayim", + "::" => "language.oop5.paamayim-nekudotayim", - "__construct" => "language.oop5.decon", - "__destruct" => "language.oop5.decon", - "__call" => "language.oop5.overloading", + "__construct" => "language.oop5.decon", + "__destruct" => "language.oop5.decon", + "__call" => "language.oop5.overloading", "__callstatic" => "language.oop5.overloading", - "__get" => "language.oop5.overloading", - "__set" => "language.oop5.overloading", - "__isset" => "language.oop5.overloading", - "__unset" => "language.oop5.overloading", - "__sleep" => "language.oop5.magic", - "__wakeup" => "language.oop5.magic", - "__tostring" => "language.oop5.magic", - "__set_state" => "language.oop5.magic", - "__debuginfo" => "language.oop5.magic", - "__clone" => "language.oop5.cloning", - - "throw" => "language.exceptions", - "try" => "language.exceptions", - "catch" => "language.exceptions", - "lsb" => "language.oop5.late-static-bindings", - "namespace" => "language.namespaces", - "use" => "language.namespaces.using", - "iterator" => "language.oop5.iterations", - - "factory" => "language.oop5.patterns", - "singleton" => "language.oop5.patterns", - - "trait" => "language.oop5.traits", - "traits" => "language.oop5.traits", - - "news.php" => "archive/index", // BC - "readme.mirror" => "mirroring", // BC - - "php5" => "language.oop5", - "zend_changes.txt" => "language.oop5", // BC - "zend2_example.phps" => "language.oop5", // BC + "__get" => "language.oop5.overloading", + "__set" => "language.oop5.overloading", + "__isset" => "language.oop5.overloading", + "__unset" => "language.oop5.overloading", + "__sleep" => "language.oop5.magic", + "__wakeup" => "language.oop5.magic", + "__tostring" => "language.oop5.magic", + "__invoke" => "language.oop5.magic", + "__set_state" => "language.oop5.magic", + "__debuginfo" => "language.oop5.magic", + "__clone" => "language.oop5.cloning", + + "throw" => "language.exceptions", + "try" => "language.exceptions", + "catch" => "language.exceptions", + "lsb" => "language.oop5.late-static-bindings", + "namespace" => "language.namespaces", + "use" => "language.namespaces.using", + + "factory" => "language.oop5.patterns", + "singleton" => "language.oop5.patterns", + + "trait" => "language.oop5.traits", + "traits" => "language.oop5.traits", + + "news.php" => "archive/index", // BC + "readme.mirror" => "mirroring", // BC + + "php5" => "language.oop5", + "zend_changes.txt" => "language.oop5", // BC + "zend2_example.phps" => "language.oop5", // BC "zend_changes_php_5_0_0b2.txt" => "language.oop5", // BC - "zend-engine-2" => "language.oop5", // BC - "zend-engine-2.php" => "language.oop5", // BC + "zend-engine-2" => "language.oop5", // BC + "zend-engine-2.php" => "language.oop5", // BC - "news_php_5_0_0b2.txt" => "ChangeLog-5", // BC - "news_php_5_0_0b3.txt" => "ChangeLog-5", // BC + "news_php_5_0_0b2.txt" => "ChangeLog-5", // BC + "news_php_5_0_0b3.txt" => "ChangeLog-5", // BC "manual/about-notes.php" => "manual/add-note", // BC - "software/index.php" => "software", // BC - "releases.php" => "releases/index", // BC + "software/index.php" => "software", // BC + "releases.php" => "releases/index", // BC - "migration7" => "migration70", // Consistent with migration5 - "update_5_2.txt" => "migration52", // BC - "readme_upgrade_51.php" => "migration51", // BC - "internals" => "internals2", // BC + "migration7" => "migration70", // Consistent with migration5 + "update_5_2.txt" => "migration52", // BC + "readme_upgrade_51.php" => "migration51", // BC + "internals" => "internals2", // BC "configuration.directives" => "ini.core", // BC # regexp. BC - "regexp.reference.backslash" => "regexp.reference.escape", - "regexp.reference.circudollar" => "regexp.reference.anchors", + "regexp.reference.backslash" => "regexp.reference.escape", + "regexp.reference.circudollar" => "regexp.reference.anchors", "regexp.reference.squarebrackets" => "regexp.reference.character-classes", - "regexp.reference.verticalbar" => "regexp.reference.alternation", + "regexp.reference.verticalbar" => "regexp.reference.alternation", # external shortcut aliases ;) - "dochowto" => "phpdochowto", + "dochowto" => "phpdochowto", # CVS -> SVN - "anoncvs.php" => "git", - "cvs-php.php" => "git-php", + "anoncvs.php" => "git", + "cvs-php.php" => "git-php", # SVN -> Git - "svn" => "git", - "svn.php" => "git", - "svn-php" => "git-php", - "svn-php.php" => "git-php", + "svn" => "git", + "svn.php" => "git", + "svn-php" => "git-php", + "svn-php.php" => "git-php", # CVSUp -> Nada - "cvsup" => "mirroring", + "cvsup" => "mirroring", # Other items "security/crypt" => "security/crypt_blowfish", # Bugfixes - "array_sort" => "sort", // #64743 - "array-sort" => "sort", // #64743 + "array_sort" => "sort", // #64743 + "array-sort" => "sort", // #64743 # Removed pages - "tips.php" => "urlhowto", - "tips" => "urlhowto", -); - -$external_redirects = array( - "php4news" => "https://github.com/php/php-src/raw/PHP-4.4/NEWS", - "php5news" => "https://github.com/php/php-src/raw/PHP-5.6/NEWS", - "php53news" => "https://github.com/php/php-src/raw/PHP-5.3/NEWS", - "php54news" => "https://github.com/php/php-src/raw/PHP-5.4/NEWS", - "php55news" => "https://github.com/php/php-src/raw/PHP-5.5/NEWS", - "php56news" => "https://github.com/php/php-src/raw/PHP-5.6/NEWS", - "php70news" => "https://github.com/php/php-src/raw/PHP-7.0/NEWS", - "php71news" => "https://github.com/php/php-src/raw/PHP-7.1/NEWS", - "php72news" => "https://github.com/php/php-src/raw/PHP-7.2/NEWS", - "php73news" => "https://github.com/php/php-src/raw/PHP-7.3/NEWS", - "php74news" => "https://github.com/php/php-src/raw/PHP-7.4/NEWS", - "php80news" => "https://github.com/php/php-src/raw/PHP-8.0/NEWS", - "phptrunknews"=> "https://github.com/php/php-src/raw/master/NEWS", - "pear" => "http://pear.php.net/", - "bugs" => "https://bugs.php.net/", - "bugstats" => "https://bugs.php.net/stats.php", - "phpdochowto" => "http://doc.php.net/tutorial/", - "rev" => "http://doc.php.net/revcheck.php?p=graph&lang=$LANG", + "tips.php" => "urlhowto", + "tips" => "urlhowto", + "release-candidates.php" => "pre-release-builds", +]; + +$external_redirects = [ + "php4news" => "https://github.com/php/php-src/raw/PHP-4.4/NEWS", + "php5news" => "https://github.com/php/php-src/raw/PHP-5.6/NEWS", + "php53news" => "https://github.com/php/php-src/raw/PHP-5.3/NEWS", + "php54news" => "https://github.com/php/php-src/raw/PHP-5.4/NEWS", + "php55news" => "https://github.com/php/php-src/raw/PHP-5.5/NEWS", + "php56news" => "https://github.com/php/php-src/raw/PHP-5.6/NEWS", + "php70news" => "https://github.com/php/php-src/raw/PHP-7.0/NEWS", + "php71news" => "https://github.com/php/php-src/raw/PHP-7.1/NEWS", + "php72news" => "https://github.com/php/php-src/raw/PHP-7.2/NEWS", + "php73news" => "https://github.com/php/php-src/raw/PHP-7.3/NEWS", + "php74news" => "https://github.com/php/php-src/raw/PHP-7.4/NEWS", + "php80news" => "https://github.com/php/php-src/raw/PHP-8.0/NEWS", + "phptrunknews" => "https://github.com/php/php-src/raw/master/NEWS", + "pear" => "http://pear.php.net/", + "bugs" => "https://bugs.php.net/", + "bugstats" => "https://bugs.php.net/stats.php", + "phpdochowto" => "https://doc.php.net/guide/", + "rev" => "https://doc.php.net/revcheck.php?p=graph&lang=$LANG", "release/5_3_0.php" => "/releases/5_3_0.php", // PHP 5.3.0 release announcement had a typo - "ideas.php" => "http://wiki.php.net/ideas", // BC + "ideas.php" => "https://wiki.php.net/ideas", // BC "releases.atom" => "/releases/feed.php", // BC, No need to pre-generate it - "spec" => "https://github.com/php/php-langspec", - "sunglasses" => "https://www.youtube.com/watch?v=dQw4w9WgXcQ", // Temporary easter egg for bug#66144 -); + "spec" => "https://github.com/php/php-langspec", + "sunglasses" => "https://www.youtube.com/watch?v=dQw4w9WgXcQ", // Temporary easter egg for bug#66144 +]; // Temporary hack to fix bug #49956 for mysqli -- Please don't hate me for this. Data taken from mysqli/summary.xml -$mysqli_redirects = array( - "mysqli_affected_rows" => "mysqli.affected-rows", - "mysqli_get_client_info" => "mysqli.client-info", - "mysqli_get_client_version" => "mysqli.client-version", - "mysqli_connect_errno" => "mysqli.connect-errno", - "mysqli_connect_error" => "mysqli.connect-error", - "mysqli_errno" => "mysqli.errno", - "mysqli_error" => "mysqli.error", - "mysqli_field_count" => "mysqli.field-count", - "mysqli_get_host_info" => "mysqli.host-info", - "mysqli_get_proto_info" => "mysqli.protocol-version", - "mysqli_get_server_info" => "mysqli.server-info", - "mysqli_get_server_version" => "mysqli.server-version", - "mysqli_info" => "mysqli.info", - "mysqli_insert_id" => "mysqli.insert-id", - "mysqli_sqlstate" => "mysqli.sqlstate", - "mysqli_warning_count" => "mysqli.warning-count", - "mysqli_autocommit" => "mysqli.autocommit", - "mysqli_change_user" => "mysqli.change-user", - "mysqli_character_set_name" => "mysqli.character-set-name", - "mysqli_close" => "mysqli.close", - "mysqli_commit" => "mysqli.commit", - "mysqli_connect" => "mysqli.construct", - "mysqli_debug" => "mysqli.debug", - "mysqli_dump_debug_info" => "mysqli.dump-debug-info", - "mysqli_get_charset" => "mysqli.get-charset", - "mysqli_get_connection_stats" => "mysqli.get-connection-stats", - "mysqli_get_client_info" => "mysqli.get-client-info", - "mysqli_get_client_stats" => "mysqli.get-client-stats", - "mysqli_get_cache_stats" => "mysqli.get-cache-stats", - "mysqli_get_server_info" => "mysqli.get-server-info", - "mysqli_get_warnings" => "mysqli.get-warnings", - "mysqli_init" => "mysqli.init", - "mysqli_kill" => "mysqli.kill", - "mysqli_more_results" => "mysqli.more-results", - "mysqli_multi_query" => "mysqli.multi-query", - "mysqli_next_result" => "mysqli.next-result", - "mysqli_options" => "mysqli.options", - "mysqli_ping" => "mysqli.ping", - "mysqli_prepare" => "mysqli.prepare", - "mysqli_query" => "mysqli.query", - "mysqli_real_connect" => "mysqli.real-connect", - "mysqli_real_escape_string" => "mysqli.real-escape-string", - "mysqli_real_query" => "mysqli.real-query", - "mysqli_refresh" => "mysqli.refresh", - "mysqli_rollback" => "mysqli.rollback", - "mysqli_select_db" => "mysqli.select-db", - "mysqli_set_charset" => "mysqli.set-charset", - "mysqli_set_local_infile_default" => "mysqli.set-local-infile-default", - "mysqli_set_local_infile_handler" => "mysqli.set-local-infile-handler", - "mysqli_ssl_set" => "mysqli.ssl-set", - "mysqli_stat" => "mysqli.stat", - "mysqli_stmt_init" => "mysqli.stmt-init", - "mysqli_store_result" => "mysqli.store-result", - "mysqli_thread_id" => "mysqli.thread-id", - "mysqli_thread_safe" => "mysqli.thread-safe", - "mysqli_use_result" => "mysqli.use-result", - "mysqli_stmt_affected_rows" => "mysqli-stmt.affected-rows", - "mysqli_stmt_errno" => "mysqli-stmt.errno", - "mysqli_stmt_error" => "mysqli-stmt.error", - "mysqli_stmt_field_count" => "mysqli-stmt.field-count", - "mysqli_stmt_insert_id" => "mysqli-stmt.insert-id", - "mysqli_stmt_num_rows" => "mysqli-stmt.num-rows", - "mysqli_stmt_param_count" => "mysqli-stmt.param-count", - "mysqli_stmt_sqlstate" => "mysqli-stmt.sqlstate", - "mysqli_stmt_attr_get" => "mysqli-stmt.attr-get", - "mysqli_stmt_attr_set" => "mysqli-stmt.attr-set", - "mysqli_stmt_bind_param" => "mysqli-stmt.bind-param", - "mysqli_stmt_bind_result" => "mysqli-stmt.bind-result", - "mysqli_stmt_close" => "mysqli-stmt.close", - "mysqli_stmt_data_seek" => "mysqli-stmt.data-seek", - "mysqli_stmt_execute" => "mysqli-stmt.execute", - "mysqli_stmt_fetch" => "mysqli-stmt.fetch", - "mysqli_stmt_free_result" => "mysqli-stmt.free-result", - "mysqli_stmt_get_result" => "mysqli-stmt.get-result", - "mysqli_stmt_get_warnings" => "mysqli-stmt.get-warnings", - "mysqli_stmt_more_results" => "mysqli-stmt.more-results", - "mysqli_stmt_next_result" => "mysqli-stmt.next-result", - "mysqli_stmt_num_rows" => "mysqli-stmt.num-rows", - "mysqli_stmt_prepare" => "mysqli-stmt.prepare", - "mysqli_stmt_reset" => "mysqli-stmt.reset", - "mysqli_stmt_result_metadata" => "mysqli-stmt.result-metadata", - "mysqli_stmt_send_long_data" => "mysqli-stmt.send-long-data", - "mysqli_stmt_store_result" => "mysqli-stmt.store-result", - "mysqli_field_tell" => "mysqli-result.current-field", - "mysqli_num_fields" => "mysqli-result.field-count", - "mysqli_fetch_lengths" => "mysqli-result.lengths", - "mysqli_num_rows" => "mysqli-result.num-rows", - "mysqli_data_seek" => "mysqli-result.data-seek", - "mysqli_fetch_all" => "mysqli-result.fetch-all", - "mysqli_fetch_array" => "mysqli-result.fetch-array", - "mysqli_fetch_assoc" => "mysqli-result.fetch-assoc", - "mysqli_fetch_field_direct" => "mysqli-result.fetch-field-direct", - "mysqli_fetch_field" => "mysqli-result.fetch-field", - "mysqli_fetch_fields" => "mysqli-result.fetch-fields", - "mysqli_fetch_object" => "mysqli-result.fetch-object", - "mysqli_fetch_row" => "mysqli-result.fetch-row", - "mysqli_field_seek" => "mysqli-result.field-seek", - "mysqli_free_result" => "mysqli-result.free", - "mysqli_embedded_server_end" => "mysqli-driver.embedded-server-end", - "mysqli_embedded_server_start" => "mysqli-driver.embedded-server-start", -); +$mysqli_redirects = [ + "mysqli_affected_rows" => "mysqli.affected-rows", + "mysqli_get_client_version" => "mysqli.client-version", + "mysqli_connect_errno" => "mysqli.connect-errno", + "mysqli_connect_error" => "mysqli.connect-error", + "mysqli_errno" => "mysqli.errno", + "mysqli_error" => "mysqli.error", + "mysqli_field_count" => "mysqli.field-count", + "mysqli_get_host_info" => "mysqli.host-info", + "mysqli_get_proto_info" => "mysqli.protocol-version", + "mysqli_get_server_version" => "mysqli.server-version", + "mysqli_info" => "mysqli.info", + "mysqli_insert_id" => "mysqli.insert-id", + "mysqli_sqlstate" => "mysqli.sqlstate", + "mysqli_warning_count" => "mysqli.warning-count", + "mysqli_autocommit" => "mysqli.autocommit", + "mysqli_change_user" => "mysqli.change-user", + "mysqli_character_set_name" => "mysqli.character-set-name", + "mysqli_close" => "mysqli.close", + "mysqli_commit" => "mysqli.commit", + "mysqli_connect" => "mysqli.construct", + "mysqli_debug" => "mysqli.debug", + "mysqli_dump_debug_info" => "mysqli.dump-debug-info", + "mysqli_get_charset" => "mysqli.get-charset", + "mysqli_get_connection_stats" => "mysqli.get-connection-stats", + "mysqli_get_client_info" => "mysqli.get-client-info", + "mysqli_get_client_stats" => "mysqli.get-client-stats", + "mysqli_get_cache_stats" => "mysqli.get-cache-stats", + "mysqli_get_server_info" => "mysqli.get-server-info", + "mysqli_get_warnings" => "mysqli.get-warnings", + "mysqli_init" => "mysqli.init", + "mysqli_kill" => "mysqli.kill", + "mysqli_more_results" => "mysqli.more-results", + "mysqli_multi_query" => "mysqli.multi-query", + "mysqli_next_result" => "mysqli.next-result", + "mysqli_options" => "mysqli.options", + "mysqli_ping" => "mysqli.ping", + "mysqli_prepare" => "mysqli.prepare", + "mysqli_query" => "mysqli.query", + "mysqli_real_connect" => "mysqli.real-connect", + "mysqli_real_escape_string" => "mysqli.real-escape-string", + "mysqli_real_query" => "mysqli.real-query", + "mysqli_refresh" => "mysqli.refresh", + "mysqli_rollback" => "mysqli.rollback", + "mysqli_select_db" => "mysqli.select-db", + "mysqli_set_charset" => "mysqli.set-charset", + "mysqli_set_local_infile_default" => "mysqli.set-local-infile-default", + "mysqli_set_local_infile_handler" => "mysqli.set-local-infile-handler", + "mysqli_ssl_set" => "mysqli.ssl-set", + "mysqli_stat" => "mysqli.stat", + "mysqli_stmt_init" => "mysqli.stmt-init", + "mysqli_store_result" => "mysqli.store-result", + "mysqli_thread_id" => "mysqli.thread-id", + "mysqli_thread_safe" => "mysqli.thread-safe", + "mysqli_use_result" => "mysqli.use-result", + "mysqli_stmt_affected_rows" => "mysqli-stmt.affected-rows", + "mysqli_stmt_errno" => "mysqli-stmt.errno", + "mysqli_stmt_error" => "mysqli-stmt.error", + "mysqli_stmt_field_count" => "mysqli-stmt.field-count", + "mysqli_stmt_insert_id" => "mysqli-stmt.insert-id", + "mysqli_stmt_param_count" => "mysqli-stmt.param-count", + "mysqli_stmt_sqlstate" => "mysqli-stmt.sqlstate", + "mysqli_stmt_attr_get" => "mysqli-stmt.attr-get", + "mysqli_stmt_attr_set" => "mysqli-stmt.attr-set", + "mysqli_stmt_bind_param" => "mysqli-stmt.bind-param", + "mysqli_stmt_bind_result" => "mysqli-stmt.bind-result", + "mysqli_stmt_close" => "mysqli-stmt.close", + "mysqli_stmt_data_seek" => "mysqli-stmt.data-seek", + "mysqli_stmt_execute" => "mysqli-stmt.execute", + "mysqli_stmt_fetch" => "mysqli-stmt.fetch", + "mysqli_stmt_free_result" => "mysqli-stmt.free-result", + "mysqli_stmt_get_result" => "mysqli-stmt.get-result", + "mysqli_stmt_get_warnings" => "mysqli-stmt.get-warnings", + "mysqli_stmt_more_results" => "mysqli-stmt.more-results", + "mysqli_stmt_next_result" => "mysqli-stmt.next-result", + "mysqli_stmt_num_rows" => "mysqli-stmt.num-rows", + "mysqli_stmt_prepare" => "mysqli-stmt.prepare", + "mysqli_stmt_reset" => "mysqli-stmt.reset", + "mysqli_stmt_result_metadata" => "mysqli-stmt.result-metadata", + "mysqli_stmt_send_long_data" => "mysqli-stmt.send-long-data", + "mysqli_stmt_store_result" => "mysqli-stmt.store-result", + "mysqli_field_tell" => "mysqli-result.current-field", + "mysqli_num_fields" => "mysqli-result.field-count", + "mysqli_fetch_lengths" => "mysqli-result.lengths", + "mysqli_num_rows" => "mysqli-result.num-rows", + "mysqli_data_seek" => "mysqli-result.data-seek", + "mysqli_fetch_all" => "mysqli-result.fetch-all", + "mysqli_fetch_array" => "mysqli-result.fetch-array", + "mysqli_fetch_assoc" => "mysqli-result.fetch-assoc", + "mysqli_fetch_field_direct" => "mysqli-result.fetch-field-direct", + "mysqli_fetch_field" => "mysqli-result.fetch-field", + "mysqli_fetch_fields" => "mysqli-result.fetch-fields", + "mysqli_fetch_object" => "mysqli-result.fetch-object", + "mysqli_fetch_row" => "mysqli-result.fetch-row", + "mysqli_field_seek" => "mysqli-result.field-seek", + "mysqli_free_result" => "mysqli-result.free", + "mysqli_embedded_server_end" => "mysqli-driver.embedded-server-end", + "mysqli_embedded_server_start" => "mysqli-driver.embedded-server-start", +]; // Merge this temporary hack with $uri_aliases so it'll be treated as such $uri_aliases = array_merge($uri_aliases, $mysqli_redirects); @@ -590,7 +681,11 @@ $URI = $uri_aliases[$URI]; /* If it was a page alias, redirect right away */ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/$URI.php")) { - mirror_redirect("/$URI.php"); + $target = "/$URI.php"; + if ($queryString !== '') { + $target .= (strpos($target, '?') === false ? '?' : '&') . $queryString; + } + mirror_redirect($target); } } @@ -602,7 +697,7 @@ // Temporary hack for mirror-info, until all the pages // will be capable of being included from anywhere -if ($URI=='mirror-info') { +if ($URI == 'mirror-info') { status_header(200); include_once __DIR__ . "/$URI.php"; exit; @@ -619,7 +714,7 @@ } // BC. The class methods are now classname.methodname if (preg_match("!^manual/(.+)/function\.(.+)-(.+).php$!", $URI, $array)) { - $try = find_manual_page($array[1], $array[2]. "." .$array[3]); + $try = find_manual_page($array[1], $array[2] . "." . $array[3]); if ($try) { status_header(301); mirror_redirect($try); @@ -630,14 +725,13 @@ // ============================================================================ // For manual pages for inactive languages, point visitors to the English page if (preg_match("!^manual/([^/]+)/([^/]+).php$!", $URI, $match) && - isset($INACTIVE_ONLINE_LANGUAGES[$match[1]])) { + isset(Languages::INACTIVE_ONLINE_LANGUAGES[$match[1]])) { $try = find_manual_page("en", $match[2]); if ($try) { - error_inactive_manual_page($INACTIVE_ONLINE_LANGUAGES[$match[1]], $try); + error_inactive_manual_page(Languages::INACTIVE_ONLINE_LANGUAGES[$match[1]], $try); } } - // ============================================================================ // 404 page for manual pages (eg. not built language) if (strpos($URI, "manual/") === 0) { @@ -651,12 +745,8 @@ // ============================================================================ // If no match was found till this point, the last action is to start a // search with the URI the user typed in -$fallback = (myphpnet_urlsearch() === MYPHPNET_URL_MANUAL ? "404manual" : "404quickref"); +$fallback = ($userPreferences->searchType === UserPreferences::URL_MANUAL ? "404manual" : "404quickref"); mirror_redirect( '/search.php?show=' . $fallback . '&lang=' . urlencode($LANG) . - '&pattern=' . substr($_SERVER['REQUEST_URI'], 1) + '&pattern=' . substr($_SERVER['REQUEST_URI'], 1), ); -/* - * vim: set et ts=4 sw=4 ft=php: : - */ -?> diff --git a/favicon-16x16.png b/favicon-16x16.png new file mode 100644 index 0000000000..b647caba67 Binary files /dev/null and b/favicon-16x16.png differ diff --git a/favicon-196x196.png b/favicon-196x196.png new file mode 100644 index 0000000000..fa3143bbbd Binary files /dev/null and b/favicon-196x196.png differ diff --git a/favicon-32x32.png b/favicon-32x32.png new file mode 100644 index 0000000000..46e450542e Binary files /dev/null and b/favicon-32x32.png differ diff --git a/favicon.ico b/favicon.ico index f095b7f75b..da70605614 100644 Binary files a/favicon.ico and b/favicon.ico differ diff --git a/favicon.svg b/favicon.svg new file mode 100644 index 0000000000..9053d3ca78 --- /dev/null +++ b/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fonts/Fira/fira.css b/fonts/Fira/fira.css index 14c871e85e..ec17749838 100644 --- a/fonts/Fira/fira.css +++ b/fonts/Fira/fira.css @@ -1,65 +1,83 @@ @font-face{ font-family: 'Fira Sans'; src: url('/https/github.com/fonts/Fira/eot/FiraSans-Book.eot'); - src: local('/fonts/Fira/Fira Sans Book'), - url('/https/github.com/fonts/Fira/eot/FiraSans-Book.eot') format('embedded-opentype'), + src: local('Fira Sans Book'), + local('FiraSans-Book'), + url('/https/github.com/fonts/Fira/woff2/FiraSans-Book.woff2') format('woff2'), url('/https/github.com/fonts/Fira/woff/FiraSans-Book.woff') format('woff'), + url('/https/github.com/fonts/Fira/eot/FiraSans-Book.eot') format('embedded-opentype'), url('/https/github.com/fonts/Fira/ttf/FiraSans-Book.ttf') format('truetype'); font-weight: 400; font-style: normal; + font-display: swap; } @font-face{ font-family: 'Fira Sans'; src: url('/https/github.com/fonts/Fira/eot/FiraSans-BookItalic.eot'); - src: local('/fonts/Fira/Fira Sans Book Italic'), - url('/https/github.com/fonts/Fira/eot/FiraSans-BookItalic.eot') format('embedded-opentype'), + src: local('Fira Sans Book Italic'), + local('FiraSans-BookItalic'), + url('/https/github.com/fonts/Fira/woff2/FiraSans-BookItalic.woff2') format('woff2'), url('/https/github.com/fonts/Fira/woff/FiraSans-BookItalic.woff') format('woff'), + url('/https/github.com/fonts/Fira/eot/FiraSans-BookItalic.eot') format('embedded-opentype'), url('/https/github.com/fonts/Fira/ttf/FiraSans-BookItalic.ttf') format('truetype'); font-weight: 400; font-style: italic; + font-display: swap; } @font-face{ font-family: 'Fira Sans'; src: url('/https/github.com/fonts/Fira/eot/FiraSans-Medium.eot'); - src: local('/fonts/Fira/Fira Sans Medium'), - url('/https/github.com/fonts/Fira/eot/FiraSans-Medium.eot') format('embedded-opentype'), + src: local('Fira Sans Medium'), + local('FiraSans-Medium'), + url('/https/github.com/fonts/Fira/woff2/FiraSans-Medium.woff2') format('woff2'), url('/https/github.com/fonts/Fira/woff/FiraSans-Medium.woff') format('woff'), + url('/https/github.com/fonts/Fira/eot/FiraSans-Medium.eot') format('embedded-opentype'), url('/https/github.com/fonts/Fira/ttf/FiraSans-Medium.ttf') format('truetype'); font-weight: 500; font-style: normal; + font-display: swap; } @font-face{ font-family: 'Fira Sans'; src: url('/https/github.com/fonts/Fira/eot/FiraSans-MediumItalic.eot'); - src: local('/fonts/Fira/Fira Sans Medium Italic'), - url('/https/github.com/fonts/Fira/eot/FiraSans-MediumItalic.eot') format('embedded-opentype'), + src: local('Fira Sans Medium Italic'), + local('FiraSans-MediumItalic'), + url('/https/github.com/fonts/Fira/woff2/FiraSans-MediumItalic.woff2') format('woff2'), url('/https/github.com/fonts/Fira/woff/FiraSans-MediumItalic.woff') format('woff'), + url('/https/github.com/fonts/Fira/eot/FiraSans-MediumItalic.eot') format('embedded-opentype'), url('/https/github.com/fonts/Fira/ttf/FiraSans-MediumItalic.ttf') format('truetype'); font-weight: 500; font-style: italic; + font-display: swap; } @font-face{ font-family: 'Fira Mono'; src: url('/https/github.com/fonts/Fira/eot/FiraMono-Regular.eot'); - src: local('/fonts/Fira/Fira Mono'), - url('/https/github.com/fonts/Fira/eot/FiraMono-Regular.eot') format('embedded-opentype'), + src: local('Fira Mono'), + local('FiraMono-Regular'), + url('/https/github.com/fonts/Fira/woff2/FiraMono-Regular.woff2') format('woff2'), url('/https/github.com/fonts/Fira/woff/FiraMono-Regular.woff') format('woff'), + url('/https/github.com/fonts/Fira/eot/FiraMono-Regular.eot') format('embedded-opentype'), url('/https/github.com/fonts/Fira/ttf/FiraMono-Regular.ttf') format('truetype'); font-weight: 400; font-style: normal; + font-display: swap; } @font-face{ font-family: 'Fira Mono'; src: url('/https/github.com/fonts/Fira/eot/FiraMono-Bold.eot'); - src: local('/fonts/Fira/Fira Mono Bold'), - url('/https/github.com/fonts/Fira/eot/FiraMono-Bold.eot') format('embedded-opentype'), + src: local('Fira Mono Bold'), + local('FiraMono-Bold'), + url('/https/github.com/fonts/Fira/woff2/FiraMono-Bold.woff2') format('woff2'), url('/https/github.com/fonts/Fira/woff/FiraMono-Bold.woff') format('woff'), + url('/https/github.com/fonts/Fira/eot/FiraMono-Bold.eot') format('embedded-opentype'), url('/https/github.com/fonts/Fira/ttf/FiraMono-Bold.ttf') format('truetype'); font-weight: 700; font-style: normal; + font-display: swap; } diff --git a/fonts/Fira/ttf/FiraMono-Bold.ttf b/fonts/Fira/ttf/FiraMono-Bold.ttf new file mode 100755 index 0000000000..6d4ffb06c4 Binary files /dev/null and b/fonts/Fira/ttf/FiraMono-Bold.ttf differ diff --git a/fonts/Fira/ttf/FiraMono-Regular.ttf b/fonts/Fira/ttf/FiraMono-Regular.ttf new file mode 100755 index 0000000000..59e1e1a1d3 Binary files /dev/null and b/fonts/Fira/ttf/FiraMono-Regular.ttf differ diff --git a/fonts/Fira/woff2/FiraMono-Bold.woff2 b/fonts/Fira/woff2/FiraMono-Bold.woff2 new file mode 100755 index 0000000000..832aaabbb2 Binary files /dev/null and b/fonts/Fira/woff2/FiraMono-Bold.woff2 differ diff --git a/fonts/Fira/woff2/FiraMono-Regular.woff2 b/fonts/Fira/woff2/FiraMono-Regular.woff2 new file mode 100755 index 0000000000..9fa44b7cc2 Binary files /dev/null and b/fonts/Fira/woff2/FiraMono-Regular.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-Bold.woff2 b/fonts/Fira/woff2/FiraSans-Bold.woff2 new file mode 100755 index 0000000000..4c550c7d42 Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-Bold.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-BoldItalic.woff2 b/fonts/Fira/woff2/FiraSans-BoldItalic.woff2 new file mode 100755 index 0000000000..9e66901467 Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-BoldItalic.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-Book.woff2 b/fonts/Fira/woff2/FiraSans-Book.woff2 new file mode 100755 index 0000000000..9d5db65829 Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-Book.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-BookItalic.woff2 b/fonts/Fira/woff2/FiraSans-BookItalic.woff2 new file mode 100755 index 0000000000..84f272c44c Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-BookItalic.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-Eight.woff2 b/fonts/Fira/woff2/FiraSans-Eight.woff2 new file mode 100755 index 0000000000..b5b1dfebc2 Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-Eight.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-EightItalic.woff2 b/fonts/Fira/woff2/FiraSans-EightItalic.woff2 new file mode 100755 index 0000000000..48dc9f935a Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-EightItalic.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-Four.woff2 b/fonts/Fira/woff2/FiraSans-Four.woff2 new file mode 100755 index 0000000000..95ebb7e6d6 Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-Four.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-FourItalic.woff2 b/fonts/Fira/woff2/FiraSans-FourItalic.woff2 new file mode 100755 index 0000000000..cf408094da Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-FourItalic.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-Hair.woff2 b/fonts/Fira/woff2/FiraSans-Hair.woff2 new file mode 100755 index 0000000000..10e728784b Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-Hair.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-HairItalic.woff2 b/fonts/Fira/woff2/FiraSans-HairItalic.woff2 new file mode 100755 index 0000000000..6027bad83a Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-HairItalic.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-Heavy.woff2 b/fonts/Fira/woff2/FiraSans-Heavy.woff2 new file mode 100755 index 0000000000..b61bf0d816 Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-Heavy.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-HeavyItalic.woff2 b/fonts/Fira/woff2/FiraSans-HeavyItalic.woff2 new file mode 100755 index 0000000000..f12daf3000 Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-HeavyItalic.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-Light.woff2 b/fonts/Fira/woff2/FiraSans-Light.woff2 new file mode 100755 index 0000000000..5c0e34d6bc Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-Light.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-LightItalic.woff2 b/fonts/Fira/woff2/FiraSans-LightItalic.woff2 new file mode 100755 index 0000000000..0e9b453ee6 Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-LightItalic.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-Medium.woff2 b/fonts/Fira/woff2/FiraSans-Medium.woff2 new file mode 100755 index 0000000000..7a1e5fc548 Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-Medium.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-MediumItalic.woff2 b/fonts/Fira/woff2/FiraSans-MediumItalic.woff2 new file mode 100755 index 0000000000..2d08f9f7d4 Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-MediumItalic.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-Regular.woff2 b/fonts/Fira/woff2/FiraSans-Regular.woff2 new file mode 100755 index 0000000000..e766e06ccb Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-Regular.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-RegularItalic.woff2 b/fonts/Fira/woff2/FiraSans-RegularItalic.woff2 new file mode 100755 index 0000000000..3f63664fee Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-RegularItalic.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-SemiBold.woff2 b/fonts/Fira/woff2/FiraSans-SemiBold.woff2 new file mode 100755 index 0000000000..bafabb5a18 Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-SemiBold.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-SemiBoldItalic.woff2 b/fonts/Fira/woff2/FiraSans-SemiBoldItalic.woff2 new file mode 100755 index 0000000000..a256463b49 Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-SemiBoldItalic.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-Thin.woff2 b/fonts/Fira/woff2/FiraSans-Thin.woff2 new file mode 100755 index 0000000000..73e2d82dda Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-Thin.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-ThinItalic.woff2 b/fonts/Fira/woff2/FiraSans-ThinItalic.woff2 new file mode 100755 index 0000000000..c8d3b364b7 Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-ThinItalic.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-Two.woff2 b/fonts/Fira/woff2/FiraSans-Two.woff2 new file mode 100755 index 0000000000..6b389c706a Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-Two.woff2 differ diff --git a/fonts/Fira/woff2/FiraSans-TwoItalic.woff2 b/fonts/Fira/woff2/FiraSans-TwoItalic.woff2 new file mode 100755 index 0000000000..479ca9f739 Binary files /dev/null and b/fonts/Fira/woff2/FiraSans-TwoItalic.woff2 differ diff --git a/fonts/Font-Awesome/README.txt b/fonts/Font-Awesome/README.txt new file mode 100644 index 0000000000..d870892e39 --- /dev/null +++ b/fonts/Font-Awesome/README.txt @@ -0,0 +1,75 @@ +This webfont is generated by https://fontello.com open source project. + + +================================================================================ +Please, note, that you should obey original font licenses, used to make this +webfont pack. Details available in LICENSE.txt file. + +- Usually, it's enough to publish content of LICENSE.txt file somewhere on your + site in "About" section. + +- If your project is open-source, usually, it will be ok to make LICENSE.txt + file publicly available in your repository. + +- Fonts, used in Fontello, don't require a clickable link on your site. + But any kind of additional authors crediting is welcome. +================================================================================ + + +Comments on archive content +--------------------------- + +- /font/* - fonts in different formats + +- /css/* - different kinds of css, for all situations. Should be ok with + twitter bootstrap. Also, you can skip style and assign icon classes + directly to text elements, if you don't mind about IE7. + +- demo.html - demo file, to show your webfont content + +- LICENSE.txt - license info about source fonts, used to build your one. + +- config.json - keeps your settings. You can import it back into fontello + anytime, to continue your work + + +Why so many CSS files ? +----------------------- + +Because we like to fit all your needs :) + +- basic file, .css - is usually enough, it contains @font-face + and character code definitions + +- *-ie7.css - if you need IE7 support, but still don't wish to put char codes + directly into html + +- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face + rules, but still wish to benefit from css generation. That can be very + convenient for automated asset build systems. When you need to update font - + no need to manually edit files, just override old version with archive + content. See fontello source code for examples. + +- *-embedded.css - basic css file, but with embedded WOFF font, to avoid + CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain. + We strongly recommend to resolve this issue by `Access-Control-Allow-Origin` + server headers. But if you ok with dirty hack - this file is for you. Note, + that data url moved to separate @font-face to avoid problems with -Copyright (C) 2014 by original authors @ fontello.com +Copyright (C) 2025 by original authors @ fontello.com - + + + + + - \ No newline at end of file + diff --git a/fonts/Font-Awesome/font/fontello.ttf b/fonts/Font-Awesome/font/fontello.ttf index 79289304af..f923addce5 100644 Binary files a/fonts/Font-Awesome/font/fontello.ttf and b/fonts/Font-Awesome/font/fontello.ttf differ diff --git a/fonts/Font-Awesome/font/fontello.woff b/fonts/Font-Awesome/font/fontello.woff index 30d8934cfb..a2a63016b7 100644 Binary files a/fonts/Font-Awesome/font/fontello.woff and b/fonts/Font-Awesome/font/fontello.woff differ diff --git a/fonts/Font-Awesome/font/fontello.woff2 b/fonts/Font-Awesome/font/fontello.woff2 new file mode 100644 index 0000000000..260ff4542f Binary files /dev/null and b/fonts/Font-Awesome/font/fontello.woff2 differ diff --git a/get-involved.php b/get-involved.php index 6bbe168bdf..62793409a8 100644 --- a/get-involved.php +++ b/get-involved.php @@ -2,7 +2,7 @@ $_SERVER['BASE_PAGE'] = 'get-involved.php'; include_once __DIR__ . '/include/prepend.inc'; -site_header("Get Involved", array("current" => "community")); +site_header("Get Involved", ["current" => "community"]); ?>

    Contributing to PHP

    @@ -26,15 +26,15 @@

    Four Best Ways to Contribute

      -
    1. Running test suites in RC - and release distributions of PHP
    2. +
    3. Running test suites in RC + and release distributions of PHP
    4. Help finding and diagnosing failed tests, see - the phpt documentation
    5. + the phpt documentation
    6. Filing and resolving bug reports - at bugs.php.net
    7. + on GitHub Issues.
    8. Help maintain and or translate documentation files at the doc-* repositories on github. Check out our - guide for contributors.
    9. + guide for contributors.

    Development of the PHP source

    @@ -66,7 +66,7 @@
    Table of Contents
    @@ -80,6 +80,4 @@
    '; -site_footer(array('sidebar'=>$SIDEBAR_DATA)); - -/* vim: set et ts=4 sw=4 ft=php: : */ +site_footer(['sidebar' => $SIDEBAR_DATA]); diff --git a/git-php.php b/git-php.php index ddac98589b..493de5253d 100644 --- a/git-php.php +++ b/git-php.php @@ -6,7 +6,7 @@ // Force the account requests to php.net if (!is_primary_site()) { - header('Location: https://www.php.net/'.$_SERVER['BASE_PAGE']); + header('Location: https://www.php.net/' . $_SERVER['BASE_PAGE']); exit; } @@ -20,19 +20,19 @@

    Git access

    If you would like to grab PHP sources or other PHP.net - hosted project data from PHP.net, you can also use + hosted project data from PHP.net, you can also use Git. No Git account is required.

    '; -site_header("Using Git for PHP Development", array("current" => "community")); +site_header("Using Git for PHP Development", ["current" => "community"]); -$groups = array( - "none" => "Choose One", - "php" => "PHP Group", - "pear" => "PEAR Group", - "pecl" => "PECL Group", - "doc" => "Doc Group", -); +$groups = [ + "none" => "Choose One", + "php" => "PHP Group", + "pear" => "PEAR Group", + "pecl" => "PECL Group", + "doc" => "Doc Group", +]; ?> @@ -42,24 +42,14 @@ // We have a form submitted, and the user have read all the comments if (count($_POST) && (!isset($_POST['purpose']) || !is_array($_POST['purpose']) || !count($_POST['purpose']))) { - // Clean up incoming POST vars - if (function_exists('get_magic_quotes_gpc') && @get_magic_quotes_gpc()) { - foreach ($_POST as $k => $v) { - $cleaned[$k] = stripslashes($v); - } - } - else { - $cleaned = $_POST; - } - // No error found yet $error = ""; // Check for errors if (empty($_POST['id'])) { $error .= "You must supply a desired Git user id.
    "; - } elseif(!preg_match('!^[a-z]\w+$!', $_POST['id']) || strlen($_POST['id']) > 16) { - $error .= "Your user id must be from 1-16 characters long, start with ". + } elseif (!preg_match('!^[a-z]\w+$!', $_POST['id']) || strlen($_POST['id']) > 16) { + $error .= "Your user id must be from 1-16 characters long, start with " . "a letter and contain nothing but a-z, 0-9, and _
    "; } if (empty($_POST['fullname'])) { @@ -71,7 +61,7 @@ if (empty($_POST['password'])) { $error .= "You must supply a desired password.
    "; } - if (empty($_POST['email']) || !is_emailable_address($cleaned['email'])) { + if (empty($_POST['email']) || !is_emailable_address($_POST['email'])) { $error .= "You must supply a proper email address.
    "; } if (empty($_POST['yesno']) || $_POST['yesno'] != 'yes') { @@ -80,7 +70,7 @@ if (empty($_POST['group']) || $_POST['group'] === 'none' || !isset($groups[$_POST['group']])) { $error .= "You did not fill out where to send the request.
    "; } - if (!isset($_POST['guidelines']) || !$_POST['guidelines']) { + if (empty($_POST['guidelines'])) { $error .= "You did not agree to follow the contribution guidelines.
    "; } @@ -88,15 +78,15 @@ if (!$error) { $error = posttohost( "https://main.php.net/entry/svn-account.php", - array( - "username" => $cleaned['id'], - "name" => $cleaned['fullname'], - "email" => $cleaned['email'], - "passwd" => $cleaned['password'], - "note" => $cleaned['realpurpose'], - "yesno" => $cleaned['yesno'], - "group" => $cleaned['group'], - ) + [ + "username" => $_POST['id'], + "name" => $_POST['fullname'], + "email" => $_POST['email'], + "passwd" => $_POST['password'], + "note" => $_POST['realpurpose'], + "yesno" => $_POST['yesno'], + "group" => $_POST['group'], + ], ); // Error while posting if ($error) { @@ -112,7 +102,7 @@ ?>

    Thank you. Your request has been sent. You should hear something within the - next week or so. If you haven't heard anything by around + next week or so. If you haven't heard anything by around then please send an email to the appropriate mailing list:

      @@ -168,8 +158,8 @@ } // endif: no data or checkread not checked else { - if (count($_POST)) { - print <<

      We could not have said it more clearly. Read everything on @@ -215,11 +205,11 @@ Reading the PHP source - Maintaining the documentation + Maintaining the documentation Using PHP extensions - Translating the documentation + Translating the documentation Creating experimental PHP extensions @@ -244,7 +234,7 @@ If you are contributing a patch, a small fix, or another minor change you do not need to ask for a Git account before submitting it. Fork our GitHub repository and create a - pull request, attach + pull request, attach a patch to a bug report or feature request, or send your patch to @@ -269,7 +259,7 @@ Similarly, if you plan on contributing documentation, you should subscribe to the documentation mailing list, and read the - PHP Documentation HOWTO. + PHP Documentation contribution guide.

      @@ -314,7 +304,7 @@ patient!), gives you access to a number of things. First, and most importantly, it gives you access to modify those parts of the PHP Git tree for which you have requested and been granted access. It also allows you to comment - on and close bugs in our bug database, and + on and close bugs in our bug database, and allows you to modify the documentation notes in the annotated manual. Your Git account also translates into a foo@php.net forwarding email address where foo is your Git user id. Feel free to use it! @@ -370,10 +360,10 @@ class="max" value=" $p) { ?> $name) { +foreach ($groups as $group => $name) { $selected = (isset($_POST["group"]) && $_POST["group"] == $group) ? ' selected="selected"' : ''; echo "\n"; } diff --git a/git.php b/git.php index 3428bcc33a..7c42182c82 100644 --- a/git.php +++ b/git.php @@ -21,7 +21,7 @@ to contribute.

      '; -site_header("Git Access", array("current" => "community")); +site_header("Git Access", ["current" => "community"]); ?>

      Git Access

      @@ -43,21 +43,24 @@

        -
      • autoconf: +
      • autoconf:
          -
        • PHP 5.4 - 7.1: 2.59+
        • +
        • PHP 7.3 and later: 2.68+
        • PHP 7.2: 2.64+
        • -
        • PHP 7.3: 2.68+
        • +
        • PHP 7.1 and earlier: 2.59+
        • +
        +
      • +
      • libtool: 1.4.x+ (except 1.4.2)
      • +
      • re2c: +
          +
        • PHP 8.3 and later: 1.0.3+
        • +
        • PHP 8.2 and earlier: 0.13.4+
      • -
      • libtool: 1.4.x+ (except 1.4.2)
      • -
      • re2c: 0.13.4+
      • bison:
          -
        • PHP 5.4: 1.28, 1.35, 1.75, 2.0 to 2.6.4
        • -
        • PHP 5.5 and 5.6: 2.4 to 2.7
        • -
        • PHP 7.0 - 7.3: 2.4+
        • -
        • PHP 7.4 - PHP 8.0: 3.0.0+
        • +
        • PHP 7.4 and later: 3.0.0+
        • +
        • PHP 7.3 and earlier: 2.4+
      @@ -96,23 +99,20 @@
    • You can then check out the branch you want to build, for example:

      - PHP 7.1: - git checkout PHP-7.1 -
      - PHP 7.2: - git checkout PHP-7.2 + PHP HEAD: + git checkout master
      - PHP 7.3: - git checkout PHP-7.3 + PHP 8.5: + git checkout PHP-8.5
      - PHP 7.4: - git checkout PHP-7.4 + PHP 8.4: + git checkout PHP-8.4
      - PHP 8.0: - git checkout PHP-8.0 + PHP 8.3: + git checkout PHP-8.3
      - PHP HEAD: - git checkout master + PHP 8.2: + git checkout PHP-8.2

    • diff --git a/gpg-keys.php b/gpg-keys.php index eaea085365..7cad2a0e6e 100644 --- a/gpg-keys.php +++ b/gpg-keys.php @@ -1,4 +1,4 @@ - "Specify how many elephpants to serve via 'count'." - )); + echo json_encode([ + 'error' => "Specify how many elephpants to serve via 'count'.", + ]); exit; } // read out photo metadata -$path = __DIR__ . '/elephpants'; -$json = @file_get_contents($path . '/flickr.json'); +$path = __DIR__ . '/elephpants'; +$json = @file_get_contents($path . '/flickr.json'); $photos = json_decode($json, true); // if no photo data, respond with an error. if (!$photos || !is_array($photos)) { header('HTTP/1.1 500', true, 500); - print json_encode(array( - 'error' => "No elephpant metadata available." - )); + echo json_encode([ + 'error' => "No elephpant metadata available.", + ]); exit; } // prepare requested number of elephpants at random. shuffle($photos); -$elephpants = array(); +$elephpants = []; $got = 0; foreach ($photos as $photo) { @@ -76,11 +77,11 @@ $got++; // add photo to response array. - $elephpants[] = array( + $elephpants[] = [ 'title' => $photo['title'], - 'url' => "http://flickr.com/photos/" . $photo['owner'] . "/" . $photo['id'], - 'data' => base64_encode(file_get_contents($path . '/' . $photo['filename'])) - ); + 'url' => "http://flickr.com/photos/" . $photo['owner'] . "/" . $photo['id'], + 'data' => base64_encode(file_get_contents($path . '/' . $photo['filename'])), + ]; } -print json_encode($elephpants); +echo json_encode($elephpants); diff --git a/images/index.php b/images/index.php index 9e64d3ff53..3c8f520d95 100644 --- a/images/index.php +++ b/images/index.php @@ -1,4 +1,5 @@ + + + + diff --git a/images/meta-image.png b/images/meta-image.png new file mode 100644 index 0000000000..4f535f9bb2 Binary files /dev/null and b/images/meta-image.png differ diff --git a/images/news/IPC.png b/images/news/IPC.png new file mode 100644 index 0000000000..e78746ce6c Binary files /dev/null and b/images/news/IPC.png differ diff --git a/images/news/IPC_24_Logo.png b/images/news/IPC_24_Logo.png new file mode 100644 index 0000000000..d487d42f8c Binary files /dev/null and b/images/news/IPC_24_Logo.png differ diff --git a/images/news/IPC_Fall23_Logo.png b/images/news/IPC_Fall23_Logo.png new file mode 100644 index 0000000000..19798ed981 Binary files /dev/null and b/images/news/IPC_Fall23_Logo.png differ diff --git a/images/news/IPC_MUC25_MediaKit_1200x628_GT-7138_v1.jpg b/images/news/IPC_MUC25_MediaKit_1200x628_GT-7138_v1.jpg new file mode 100644 index 0000000000..5cc3992584 Binary files /dev/null and b/images/news/IPC_MUC25_MediaKit_1200x628_GT-7138_v1.jpg differ diff --git a/images/news/IPC_MUN_Hybrid_Logo_250_2022.png b/images/news/IPC_MUN_Hybrid_Logo_250_2022.png new file mode 100644 index 0000000000..ed8e80b2e9 Binary files /dev/null and b/images/news/IPC_MUN_Hybrid_Logo_250_2022.png differ diff --git a/images/news/IPC_SE23_Logo.png b/images/news/IPC_SE23_Logo.png new file mode 100644 index 0000000000..19798ed981 Binary files /dev/null and b/images/news/IPC_SE23_Logo.png differ diff --git a/images/news/PHPKonf-Logo-2023.png b/images/news/PHPKonf-Logo-2023.png new file mode 100644 index 0000000000..412243cc60 Binary files /dev/null and b/images/news/PHPKonf-Logo-2023.png differ diff --git a/images/news/api-platform-con-2024.png b/images/news/api-platform-con-2024.png new file mode 100644 index 0000000000..cc1d2900e9 Binary files /dev/null and b/images/news/api-platform-con-2024.png differ diff --git a/images/news/api-platform-con-2025.png b/images/news/api-platform-con-2025.png new file mode 100644 index 0000000000..cedcf2606d Binary files /dev/null and b/images/news/api-platform-con-2025.png differ diff --git a/images/news/bettercodephp2025.jpg b/images/news/bettercodephp2025.jpg new file mode 100644 index 0000000000..9a63d94526 Binary files /dev/null and b/images/news/bettercodephp2025.jpg differ diff --git a/images/news/confoo_2024.png b/images/news/confoo_2024.png new file mode 100644 index 0000000000..ce3f4f6f16 Binary files /dev/null and b/images/news/confoo_2024.png differ diff --git a/images/news/dpc-2025.png b/images/news/dpc-2025.png new file mode 100644 index 0000000000..628515987d Binary files /dev/null and b/images/news/dpc-2025.png differ diff --git a/images/news/dpc-logo-2026.png b/images/news/dpc-logo-2026.png new file mode 100644 index 0000000000..03902770d0 Binary files /dev/null and b/images/news/dpc-logo-2026.png differ diff --git a/images/news/drupalmountaincamp-2024-banner.png b/images/news/drupalmountaincamp-2024-banner.png new file mode 100644 index 0000000000..494676ae5d Binary files /dev/null and b/images/news/drupalmountaincamp-2024-banner.png differ diff --git a/images/news/forumphp-2024.png b/images/news/forumphp-2024.png new file mode 100644 index 0000000000..82d8b6e3f7 Binary files /dev/null and b/images/news/forumphp-2024.png differ diff --git a/images/news/forumphp-2025.png b/images/news/forumphp-2025.png new file mode 100644 index 0000000000..7277797de9 Binary files /dev/null and b/images/news/forumphp-2025.png differ diff --git a/images/news/laravellivedk2024.png b/images/news/laravellivedk2024.png new file mode 100644 index 0000000000..ab929700eb Binary files /dev/null and b/images/news/laravellivedk2024.png differ diff --git a/images/news/laravellivedk2025.png b/images/news/laravellivedk2025.png new file mode 100644 index 0000000000..8789d5967d Binary files /dev/null and b/images/news/laravellivedk2025.png differ diff --git a/images/news/laravellivejapan_2026.png b/images/news/laravellivejapan_2026.png new file mode 100644 index 0000000000..fcf75f11d4 Binary files /dev/null and b/images/news/laravellivejapan_2026.png differ diff --git a/images/news/php-tek-2023.png b/images/news/php-tek-2023.png new file mode 100644 index 0000000000..1743fc9e40 Binary files /dev/null and b/images/news/php-tek-2023.png differ diff --git a/images/news/php-tek-2025.png b/images/news/php-tek-2025.png new file mode 100644 index 0000000000..c57860d493 Binary files /dev/null and b/images/news/php-tek-2025.png differ diff --git a/images/news/php-tek-2026.png b/images/news/php-tek-2026.png new file mode 100644 index 0000000000..553ecaa3d3 Binary files /dev/null and b/images/news/php-tek-2026.png differ diff --git a/images/news/phpConfKansaiJapan2024.png b/images/news/phpConfKansaiJapan2024.png new file mode 100644 index 0000000000..a686c52747 Binary files /dev/null and b/images/news/phpConfKansaiJapan2024.png differ diff --git a/images/news/phpConfKansaiJapan2025.png b/images/news/phpConfKansaiJapan2025.png new file mode 100644 index 0000000000..208de1f84f Binary files /dev/null and b/images/news/phpConfKansaiJapan2025.png differ diff --git a/images/news/php_russia_2022.jpg b/images/news/php_russia_2022.jpg new file mode 100644 index 0000000000..5cdbcb88df Binary files /dev/null and b/images/news/php_russia_2022.jpg differ diff --git a/images/news/php_russia_2024.jpg b/images/news/php_russia_2024.jpg new file mode 100644 index 0000000000..0a14930729 Binary files /dev/null and b/images/news/php_russia_2024.jpg differ diff --git a/images/news/php_velho_oeste_350x300px.png b/images/news/php_velho_oeste_350x300px.png new file mode 100644 index 0000000000..ec3d2e14ab Binary files /dev/null and b/images/news/php_velho_oeste_350x300px.png differ diff --git a/images/news/phpcon-japan-2024.png b/images/news/phpcon-japan-2024.png new file mode 100644 index 0000000000..cf592cd27d Binary files /dev/null and b/images/news/phpcon-japan-2024.png differ diff --git a/images/news/phpcon_nagoya2025.png b/images/news/phpcon_nagoya2025.png new file mode 100644 index 0000000000..916af91b6c Binary files /dev/null and b/images/news/phpcon_nagoya2025.png differ diff --git a/images/news/phpcon_odawara2024.png b/images/news/phpcon_odawara2024.png new file mode 100644 index 0000000000..8c15513a65 Binary files /dev/null and b/images/news/phpcon_odawara2024.png differ diff --git a/images/news/phpcon_odawara2025.png b/images/news/phpcon_odawara2025.png new file mode 100644 index 0000000000..c9064e841d Binary files /dev/null and b/images/news/phpcon_odawara2025.png differ diff --git a/images/news/phpcondo2024.png b/images/news/phpcondo2024.png new file mode 100644 index 0000000000..e1c863292b Binary files /dev/null and b/images/news/phpcondo2024.png differ diff --git a/images/news/phpconfHiroshima-2025.png b/images/news/phpconfHiroshima-2025.png new file mode 100644 index 0000000000..aeab1519fd Binary files /dev/null and b/images/news/phpconfHiroshima-2025.png differ diff --git a/images/news/phpconfuk2024.png b/images/news/phpconfuk2024.png new file mode 100644 index 0000000000..1435213efa Binary files /dev/null and b/images/news/phpconfuk2024.png differ diff --git a/images/news/phpconfuk2025.png b/images/news/phpconfuk2025.png new file mode 100644 index 0000000000..5b9c17da12 Binary files /dev/null and b/images/news/phpconfuk2025.png differ diff --git a/images/news/phpconkagawa2024.png b/images/news/phpconkagawa2024.png new file mode 100644 index 0000000000..7a0853d763 Binary files /dev/null and b/images/news/phpconkagawa2024.png differ diff --git a/images/news/phpconkagawa2025.png b/images/news/phpconkagawa2025.png new file mode 100644 index 0000000000..00ace64830 Binary files /dev/null and b/images/news/phpconkagawa2025.png differ diff --git a/images/news/phpconpl2024.png b/images/news/phpconpl2024.png new file mode 100644 index 0000000000..1cb53fcc62 Binary files /dev/null and b/images/news/phpconpl2024.png differ diff --git a/images/news/phpday2022.png b/images/news/phpday2022.png new file mode 100644 index 0000000000..b4eb7acbe5 Binary files /dev/null and b/images/news/phpday2022.png differ diff --git a/images/news/phpday2023.png b/images/news/phpday2023.png new file mode 100644 index 0000000000..b4eb7acbe5 Binary files /dev/null and b/images/news/phpday2023.png differ diff --git a/images/news/phperkaigi-2024.png b/images/news/phperkaigi-2024.png new file mode 100644 index 0000000000..8fc0f9606a Binary files /dev/null and b/images/news/phperkaigi-2024.png differ diff --git a/images/news/phperkaigi-2025.png b/images/news/phperkaigi-2025.png new file mode 100644 index 0000000000..dd0a4b83ee Binary files /dev/null and b/images/news/phperkaigi-2025.png differ diff --git a/images/news/phpeste_400x120.png b/images/news/phpeste_400x120.png new file mode 100644 index 0000000000..dc151a78d5 Binary files /dev/null and b/images/news/phpeste_400x120.png differ diff --git a/images/news/phpkonf_2025.png b/images/news/phpkonf_2025.png new file mode 100644 index 0000000000..85d8f2250b Binary files /dev/null and b/images/news/phpkonf_2025.png differ diff --git a/images/news/phptek2024.png b/images/news/phptek2024.png new file mode 100644 index 0000000000..d8ee73dc61 Binary files /dev/null and b/images/news/phptek2024.png differ diff --git a/images/news/phpukconf2024.jpg b/images/news/phpukconf2024.jpg new file mode 100644 index 0000000000..dd1015af27 Binary files /dev/null and b/images/news/phpukconf2024.jpg differ diff --git a/images/news/phpverse_2025.png b/images/news/phpverse_2025.png new file mode 100644 index 0000000000..84b9cb8384 Binary files /dev/null and b/images/news/phpverse_2025.png differ diff --git a/images/news/pyh-conf-25.png b/images/news/pyh-conf-25.png new file mode 100644 index 0000000000..f93190fa96 Binary files /dev/null and b/images/news/pyh-conf-25.png differ diff --git a/images/news/symfonycon-brussels-2023.png b/images/news/symfonycon-brussels-2023.png new file mode 100644 index 0000000000..9ed9b6667f Binary files /dev/null and b/images/news/symfonycon-brussels-2023.png differ diff --git a/images/news/symfonycon-disneyland-paris-2022.png b/images/news/symfonycon-disneyland-paris-2022.png new file mode 100644 index 0000000000..e0baa3b4a6 Binary files /dev/null and b/images/news/symfonycon-disneyland-paris-2022.png differ diff --git a/images/news/symfonycon-vienna-2024.png b/images/news/symfonycon-vienna-2024.png new file mode 100644 index 0000000000..87d5a858b9 Binary files /dev/null and b/images/news/symfonycon-vienna-2024.png differ diff --git a/images/news/symfonylive-paris-2023.png b/images/news/symfonylive-paris-2023.png new file mode 100644 index 0000000000..2d681519ce Binary files /dev/null and b/images/news/symfonylive-paris-2023.png differ diff --git a/images/news/symfonylive-paris-2024.png b/images/news/symfonylive-paris-2024.png new file mode 100644 index 0000000000..6198c7402d Binary files /dev/null and b/images/news/symfonylive-paris-2024.png differ diff --git a/images/news/symfonyonline-january-2024.png b/images/news/symfonyonline-january-2024.png new file mode 100644 index 0000000000..afeb61b22b Binary files /dev/null and b/images/news/symfonyonline-january-2024.png differ diff --git a/images/news/symfonyonline-june-2023.png b/images/news/symfonyonline-june-2023.png new file mode 100644 index 0000000000..2a09fa3cbf Binary files /dev/null and b/images/news/symfonyonline-june-2023.png differ diff --git a/images/news/symfonyworld-online-winter-edition-2022.png b/images/news/symfonyworld-online-winter-edition-2022.png new file mode 100644 index 0000000000..daebd3b105 Binary files /dev/null and b/images/news/symfonyworld-online-winter-edition-2022.png differ diff --git a/images/news/websc.png b/images/news/websc.png new file mode 100644 index 0000000000..6248ae96dd Binary files /dev/null and b/images/news/websc.png differ diff --git a/images/news/websc2023.svg b/images/news/websc2023.svg new file mode 100644 index 0000000000..f4d8908784 --- /dev/null +++ b/images/news/websc2023.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/news/wsc2024.png b/images/news/wsc2024.png new file mode 100644 index 0000000000..4da076ea74 Binary files /dev/null and b/images/news/wsc2024.png differ diff --git a/images/notes-add.gif b/images/notes-add.gif deleted file mode 100644 index 54a4d0ee4b..0000000000 Binary files a/images/notes-add.gif and /dev/null differ diff --git a/images/notes-add@2x.png b/images/notes-add@2x.png deleted file mode 100644 index ab97defb17..0000000000 Binary files a/images/notes-add@2x.png and /dev/null differ diff --git a/images/php8/anchor-white.svg b/images/php8/anchor-white.svg new file mode 100644 index 0000000000..0334aba436 --- /dev/null +++ b/images/php8/anchor-white.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/images/php8/logo_php8_1.svg b/images/php8/logo_php8_1.svg new file mode 100644 index 0000000000..b8dcd0fcd6 --- /dev/null +++ b/images/php8/logo_php8_1.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + diff --git a/images/php8/logo_php8_2.svg b/images/php8/logo_php8_2.svg new file mode 100644 index 0000000000..5bfb8df725 --- /dev/null +++ b/images/php8/logo_php8_2.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + diff --git a/images/php8/logo_php8_3.svg b/images/php8/logo_php8_3.svg new file mode 100644 index 0000000000..ae9af2100d --- /dev/null +++ b/images/php8/logo_php8_3.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/images/php8/logo_php8_4.svg b/images/php8/logo_php8_4.svg new file mode 100644 index 0000000000..9ca76c1c05 --- /dev/null +++ b/images/php8/logo_php8_4.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/images/php8/logo_php8_5.svg b/images/php8/logo_php8_5.svg new file mode 100644 index 0000000000..befa8d9efe --- /dev/null +++ b/images/php8/logo_php8_5.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/images/php8/php81_performance.svg b/images/php8/php81_performance.svg new file mode 100644 index 0000000000..28131054f4 --- /dev/null +++ b/images/php8/php81_performance.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/php8/php_8_1_released.png b/images/php8/php_8_1_released.png new file mode 100644 index 0000000000..ec540a532e Binary files /dev/null and b/images/php8/php_8_1_released.png differ diff --git a/images/php8/php_8_2_released.png b/images/php8/php_8_2_released.png new file mode 100644 index 0000000000..357e322cb8 Binary files /dev/null and b/images/php8/php_8_2_released.png differ diff --git a/images/php8/php_8_3_released.png b/images/php8/php_8_3_released.png new file mode 100644 index 0000000000..f8e4fd786c Binary files /dev/null and b/images/php8/php_8_3_released.png differ diff --git a/images/php8/php_8_4_released.png b/images/php8/php_8_4_released.png new file mode 100644 index 0000000000..3dc88ee1b4 Binary files /dev/null and b/images/php8/php_8_4_released.png differ diff --git a/images/php8/php_8_5_released.png b/images/php8/php_8_5_released.png new file mode 100644 index 0000000000..747ae1033a Binary files /dev/null and b/images/php8/php_8_5_released.png differ diff --git a/images/sponsors/appveyor.png b/images/sponsors/appveyor.png new file mode 100644 index 0000000000..dc9b599e93 Binary files /dev/null and b/images/sponsors/appveyor.png differ diff --git a/images/sponsors/bauer+kirch.png b/images/sponsors/bauer+kirch.png new file mode 100644 index 0000000000..7dc5f99325 Binary files /dev/null and b/images/sponsors/bauer+kirch.png differ diff --git a/images/sponsors/deft.svg b/images/sponsors/deft.svg new file mode 100644 index 0000000000..70cf866a2a --- /dev/null +++ b/images/sponsors/deft.svg @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/sponsors/digitalocean.png b/images/sponsors/digitalocean.png new file mode 100644 index 0000000000..ad528652aa Binary files /dev/null and b/images/sponsors/digitalocean.png differ diff --git a/images/sponsors/directi.svg b/images/sponsors/directi.svg new file mode 100644 index 0000000000..c9b9d8302f --- /dev/null +++ b/images/sponsors/directi.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/images/sponsors/duocast.svg b/images/sponsors/duocast.svg new file mode 100644 index 0000000000..0c55a1078a --- /dev/null +++ b/images/sponsors/duocast.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/images/sponsors/easydns.png b/images/sponsors/easydns.png new file mode 100644 index 0000000000..146de2fe96 Binary files /dev/null and b/images/sponsors/easydns.png differ diff --git a/images/sponsors/eukhost.svg b/images/sponsors/eukhost.svg new file mode 100644 index 0000000000..40776678b6 --- /dev/null +++ b/images/sponsors/eukhost.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/sponsors/myra.png b/images/sponsors/myra.png new file mode 100644 index 0000000000..4f678a7c30 Binary files /dev/null and b/images/sponsors/myra.png differ diff --git a/images/sponsors/sinnerg.jpg b/images/sponsors/sinnerg.jpg new file mode 100644 index 0000000000..72e7cc8bd7 Binary files /dev/null and b/images/sponsors/sinnerg.jpg differ diff --git a/images/sponsors/travis.png b/images/sponsors/travis.png new file mode 100644 index 0000000000..9639aed13a Binary files /dev/null and b/images/sponsors/travis.png differ diff --git a/images/supported-versions.php b/images/supported-versions.php index 4b29f23d83..af69352412 100644 --- a/images/supported-versions.php +++ b/images/supported-versions.php @@ -11,49 +11,51 @@ $footer_height = 24; function branches_to_show() { - // Basically: show all 5.3+ branches with EOL dates > min_date(). - $branches = array(); - - // Flatten out the majors. - foreach (get_all_branches() as $major => $major_branches) { - foreach ($major_branches as $branch => $version) { - if (version_compare($branch, '5.3', 'ge') && get_branch_security_eol_date($branch) > min_date()) { - $branches[$branch] = $version; - } - } - } - - ksort($branches); - return $branches; + // Basically: show all 5.3+ branches with EOL dates > min_date(). + $branches = []; + + // Flatten out the majors. + foreach (get_all_branches() as $major_branches) { + foreach ($major_branches as $branch => $version) { + if (version_compare($branch, '5.3', 'ge') && get_branch_security_eol_date($branch) > min_date()) { + $branches[$branch] = $version; + } + } + } + + ksort($branches); + return $branches; } -function min_date() { - $now = new DateTime('January 1'); - return $now->sub(new DateInterval('P3Y')); +function min_date(): DateTime +{ + $now = new DateTime('January 1'); + return $now->sub(new DateInterval('P3Y')); } -function max_date() { - $now = new DateTime('January 1'); - return $now->add(new DateInterval('P5Y')); +function max_date(): DateTime +{ + $now = new DateTime('January 1'); + return $now->add(new DateInterval('P5Y')); } function date_horiz_coord(DateTime $date) { - $diff = $date->diff(min_date()); - if (!$diff->invert) { - return $GLOBALS['margin_left']; - } - return $GLOBALS['margin_left'] + ($diff->days / (365.24 / $GLOBALS['year_width'])); + $diff = $date->diff(min_date()); + if (!$diff->invert) { + return $GLOBALS['margin_left']; + } + return $GLOBALS['margin_left'] + ($diff->days / (365.24 / $GLOBALS['year_width'])); } $branches = branches_to_show(); $i = 0; foreach ($branches as $branch => $version) { - $branches[$branch]['top'] = $header_height + ($branch_height * $i++); + $branches[$branch]['top'] = $header_height + ($branch_height * $i++); } if (!isset($non_standalone)) { - header('Content-Type: image/svg+xml'); - echo ''; + header('Content-Type: image/svg+xml'); + echo ''; } $years = iterator_to_array(new DatePeriod(min_date(), new DateInterval('P1Y'), max_date())); @@ -67,7 +69,7 @@ function date_horiz_coord(DateTime $date) { text { fill: #333; - font-family: "Fira Sans", "Source Sans Pro", Helvetica, Arial, sans-serif; + font-family: var(--font-family-sans-serif); font-size: px; } @@ -96,13 +98,13 @@ function date_horiz_coord(DateTime $date) { } .today line { - stroke: #f33; + stroke: #333; stroke-dasharray: 7,7; stroke-width: 3px; } .today text { - fill: #f33; + fill: #333; text-anchor: middle; } @@ -132,10 +134,10 @@ function date_horiz_coord(DateTime $date) { $version): ?> + $x_release = date_horiz_coord(get_branch_release_date($branch)); + $x_bug = date_horiz_coord(get_branch_bug_eol_date($branch)); + $x_eol = date_horiz_coord(get_branch_security_eol_date($branch)); + ?> @@ -154,12 +156,12 @@ function date_horiz_coord(DateTime $date) { + $now = new DateTime(); + $x = date_horiz_coord($now); + ?> - format('j M Y') ?> + format('j M Y') ?> diff --git a/include/branches.inc b/include/branches.inc index cca5b8575b..deb1f79841 100644 --- a/include/branches.inc +++ b/include/branches.inc @@ -1,4 +1,5 @@ array( - 'security' => '2000-10-20', - ), - '5.3' => array( - 'stable' => '2013-07-11', - 'security' => '2014-08-14', - ), - '5.4' => array( - 'stable' => '2014-09-14', - 'security' => '2015-09-03', - ), - '5.5' => array( - 'stable' => '2015-07-10', - 'security' => '2016-07-21', - ), - '5.6' => array( - 'stable' => '2017-01-19', - 'security' => '2018-12-31', - ), - '7.0' => array( - 'stable' => '2018-01-04', - 'security' => '2019-01-10', - ), -); +$BRANCHES = [ + /* 3.0 is here because version_compare() can't handle the only version in + * $OLDRELEASES, and it saves another special case in + * get_branch_security_eol_date(). */ + '3.0' => [ + 'security' => '2000-10-20', + ], + '5.3' => [ + 'stable' => '2013-07-11', + 'security' => '2014-08-14', + ], + '5.4' => [ + 'stable' => '2014-09-14', + 'security' => '2015-09-03', + ], + '5.5' => [ + 'stable' => '2015-07-10', + 'security' => '2016-07-21', + ], + '5.6' => [ + 'stable' => '2017-01-19', + 'security' => '2018-12-31', + ], + '7.0' => [ + 'stable' => '2018-01-04', + 'security' => '2019-01-10', + ], + '8.4' => [ + 'date' => '2024-11-21', + ], +]; /* Time to keep EOLed branches in the array returned by get_active_branches(), * which is used on the front page download links and the supported versions * page. (Currently 28 days.) */ $KEEP_EOL = new DateInterval('P28D'); -function format_interval($from, $to) { - try { - $from_obj = $from instanceof DateTime ? $from : new DateTime($from); - $to_obj = $to instanceof DateTime ? $to : new DateTime($to); - $diff = $to_obj->diff($from_obj); - - $times = array(); - if ($diff->y) { - $times[] = array($diff->y,'year'); - if ($diff->m) { - $times[] = array($diff->m,'month'); - } - } elseif ($diff->m) { - $times[] = array($diff->m,'month'); - } elseif ($diff->d) { - $times[] = array($diff->d,'day'); - } else { - $eolPeriod = 'midnight'; - } - if ($times) { - $eolPeriod = implode(', ', - array_map( - function($t) { - return "$t[0] $t[1]" . - ($t[0] != 1 ? 's' : ''); - }, - $times - ) - ); - - if ($diff->invert) { - $eolPeriod = "$eolPeriod ago"; - } else { - $eolPeriod = "in $eolPeriod"; - } - } - } catch(Exception $e) { - $eolPeriod = 'unknown'; - } - - return $eolPeriod; +function format_interval($from, DateTime $to) { + try { + $from_obj = $from instanceof DateTime ? $from : new DateTime($from); + $diff = $to->diff($from_obj); + + $times = []; + if ($diff->y) { + $times[] = [$diff->y, 'year']; + if ($diff->m) { + $times[] = [$diff->m, 'month']; + } + } elseif ($diff->m) { + $times[] = [$diff->m, 'month']; + } elseif ($diff->d) { + $times[] = [$diff->d, 'day']; + } else { + $eolPeriod = 'midnight'; + } + if ($times) { + $eolPeriod = implode(', ', + array_map( + function ($t) { + return "$t[0] $t[1]" . + ($t[0] != 1 ? 's' : ''); + }, + $times, + ), + ); + + if ($diff->invert) { + $eolPeriod = "$eolPeriod ago"; + } else { + $eolPeriod = "in $eolPeriod"; + } + } + } catch (Exception $e) { + $eolPeriod = 'unknown'; + } + + return $eolPeriod; } -function version_number_to_branch($version) { - $parts = explode('.', $version); - if (count($parts) > 1) { - return "$parts[0].$parts[1]"; - } +function version_number_to_branch(string $version): ?string { + $parts = explode('.', $version); + if (count($parts) > 1) { + return "$parts[0].$parts[1]"; + } + + return null; } function get_all_branches() { - $branches = array(); - - foreach ($GLOBALS['OLDRELEASES'] as $major => $releases) { - foreach ($releases as $version => $release) { - if ($branch = version_number_to_branch($version)) { - if (!isset($branches[$major][$branch]) || version_compare($version, $branches[$major][$branch]['version'], 'gt')) { - $branches[$major][$branch] = $release; - $branches[$major][$branch]['version'] = $version; - } - } - } - } - - foreach ($GLOBALS['RELEASES'] as $major => $releases) { - foreach ($releases as $version => $release) { - if ($branch = version_number_to_branch($version)) { - if (!isset($branches[$major][$branch]) || version_compare($version, $branches[$major][$branch]['version'], 'gt')) { - $branches[$major][$branch] = $release; - $branches[$major][$branch]['version'] = $version; - } - } - } - } - - krsort($branches); - foreach ($branches as $major => &$branch) { - krsort($branch); - } - - return $branches; + $branches = []; + + foreach ($GLOBALS['OLDRELEASES'] as $major => $releases) { + foreach ($releases as $version => $release) { + $branch = version_number_to_branch($version); + + if ($branch) { + if (!isset($branches[$major][$branch]) || version_compare($version, $branches[$major][$branch]['version'], 'gt')) { + $branches[$major][$branch] = $release; + $branches[$major][$branch]['version'] = $version; + } + } + } + } + + foreach ($GLOBALS['RELEASES'] as $major => $releases) { + foreach ($releases as $version => $release) { + $branch = version_number_to_branch($version); + + if ($branch) { + if (!isset($branches[$major][$branch]) || version_compare($version, $branches[$major][$branch]['version'], 'gt')) { + $branches[$major][$branch] = $release; + $branches[$major][$branch]['version'] = $version; + } + } + } + } + + krsort($branches); + foreach ($branches as &$branch) { + krsort($branch); + } + + return $branches; } function get_active_branches($include_recent_eols = true) { - $branches = array(); - $now = new DateTime; - - foreach ($GLOBALS['RELEASES'] as $major => $releases) { - foreach ($releases as $version => $release) { - if ($branch = version_number_to_branch($version)) { - $threshold = get_branch_security_eol_date($branch); - if ($threshold === null) { - // No EOL date available, assume it is ancient. - continue; - } - if ($include_recent_eols) { - $threshold->add($GLOBALS['KEEP_EOL']); - } - if ($now < $threshold) { - $branches[$major][$branch] = $release; - $branches[$major][$branch]['version'] = $version; - } - } - } - if (!empty($branches[$major])) { - ksort($branches[$major]); - } - } - - ksort($branches); - return $branches; + $branches = []; + $now = new DateTime(); + + foreach ($GLOBALS['RELEASES'] as $major => $releases) { + foreach ($releases as $version => $release) { + $branch = version_number_to_branch($version); + + if ($branch) { + $threshold = get_branch_security_eol_date($branch); + if ($threshold === null) { + // No EOL date available, assume it is ancient. + continue; + } + if ($include_recent_eols) { + $threshold->add($GLOBALS['KEEP_EOL']); + } + if ($now < $threshold) { + $branches[$major][$branch] = $release; + $branches[$major][$branch]['version'] = $version; + } + } + } + if (!empty($branches[$major])) { + ksort($branches[$major]); + } + } + + ksort($branches); + return $branches; } /* If you provide an array to $always_include, note that the version numbers * must be in $RELEASES _and_ must be the full version number, not the branch: * ie provide array('5.3.29'), not array('5.3'). */ function get_eol_branches($always_include = null) { - $always_include = $always_include ? $always_include : array(); - $branches = array(); - $now = new DateTime; - - // Gather the last release on each branch into a convenient array. - foreach ($GLOBALS['OLDRELEASES'] as $major => $releases) { - foreach ($releases as $version => $release) { - if ($branch = version_number_to_branch($version)) { - if (!isset($branches[$major][$branch]) || version_compare($version, $branches[$major][$branch]['version'], 'gt')) { - $branches[$major][$branch] = array( - 'date' => strtotime($release['date']), - 'link' => "/releases#$version", - 'version' => $version, - ); - } - } - } - } - - /* Exclude releases from active branches, where active is defined as "in - * the $RELEASES array and not explicitly marked as EOL there". */ - foreach ($GLOBALS['RELEASES'] as $major => $releases) { - foreach ($releases as $version => $release) { - if ($branch = version_number_to_branch($version)) { - if ($now < get_branch_security_eol_date($branch)) { - /* This branch isn't EOL: remove it from our array. */ - if (isset($branches[$major][$branch])) { - unset($branches[$major][$branch]); - } - } else { - /* Add the release information to the EOL branches array, since it - * should be newer than the information we got from $OLDRELEASES. */ - $always_include[] = $version; - } - } - } - } - - // Include any release in the always_include list that's in $RELEASES. - if ($always_include) { - foreach ($always_include as $version) { - $parts = explode('.', $version); - $major = $parts[0]; - - if (isset($GLOBALS['RELEASES'][$major][$version])) { - $release = $GLOBALS['RELEASES'][$major][$version]; - if ($branch = version_number_to_branch($version)) { - $branches[$major][$branch] = array( - 'date' => strtotime($release['source'][0]['date']), - 'link' => "/downloads#v$version", - 'version' => $version, - ); - } - } - } - } - - krsort($branches); - foreach ($branches as $major => &$branch) { - krsort($branch); - } - - return $branches; + $always_include = $always_include ?: []; + $branches = []; + $now = new DateTime(); + + // Gather the last release on each branch into a convenient array. + foreach ($GLOBALS['OLDRELEASES'] as $major => $releases) { + foreach ($releases as $version => $release) { + $branch = version_number_to_branch($version); + + if ($branch) { + if (!isset($branches[$major][$branch]) || version_compare($version, $branches[$major][$branch]['version'], 'gt')) { + $branches[$major][$branch] = [ + 'date' => strtotime($release['date']), + 'link' => "/releases#$version", + 'version' => $version, + ]; + } + } + } + } + + /* Exclude releases from active branches, where active is defined as "in + * the $RELEASES array and not explicitly marked as EOL there". */ + foreach ($GLOBALS['RELEASES'] as $major => $releases) { + foreach ($releases as $version => $release) { + $branch = version_number_to_branch($version); + + if ($branch) { + if ($now < get_branch_security_eol_date($branch)) { + /* This branch isn't EOL: remove it from our array. */ + if (isset($branches[$major][$branch])) { + unset($branches[$major][$branch]); + } + } else { + /* Add the release information to the EOL branches array, since it + * should be newer than the information we got from $OLDRELEASES. */ + $always_include[] = $version; + } + } + } + } + + // Include any release in the always_include list that's in $RELEASES. + if ($always_include) { + foreach ($always_include as $version) { + $parts = explode('.', $version); + $major = $parts[0]; + + if (isset($GLOBALS['RELEASES'][$major][$version])) { + $release = $GLOBALS['RELEASES'][$major][$version]; + $branch = version_number_to_branch($version); + + if ($branch) { + $branches[$major][$branch] = [ + 'date' => strtotime($release['source'][0]['date']), + 'link' => "/downloads#v$version", + 'version' => $version, + ]; + } + } + } + } + + krsort($branches); + foreach ($branches as &$branch) { + krsort($branch); + } + + return $branches; } /* $branch is expected to have at least two components: MAJOR.MINOR or @@ -230,179 +247,197 @@ function get_eol_branches($always_include = null) { * return either null (if no release exists on the given branch), or the usual * version metadata from $RELEASES for a single release. */ function get_initial_release($branch) { - $branch = version_number_to_branch($branch); - if (!$branch) { - return null; - } - $major = substr($branch, 0, strpos($branch, '.')); - - if (isset($GLOBALS['OLDRELEASES'][$major]["$branch.0"])) { - return $GLOBALS['OLDRELEASES'][$major]["$branch.0"]; - } - - /* If there's only been one release on the branch, it won't be in - * $OLDRELEASES yet, so let's check $RELEASES. */ - if (isset($GLOBALS['RELEASES'][$major]["$branch.0"])) { - // Fake a date like we have on the oldreleases array. - $release = $GLOBALS['RELEASES'][$major]["$branch.0"]; - $release['date'] = $release['source'][0]['date']; - return $release; - } - - // Shrug. - return null; + $branch = version_number_to_branch($branch); + if (!$branch) { + return null; + } + $major = substr($branch, 0, strpos($branch, '.')); + + if (isset($GLOBALS['OLDRELEASES'][$major]["$branch.0"])) { + return $GLOBALS['OLDRELEASES'][$major]["$branch.0"]; + } + + if(isset($GLOBALS['BRANCHES'][$branch])) { + return $GLOBALS['BRANCHES'][$branch]; + } + + /* If there's only been one release on the branch, it won't be in + * $OLDRELEASES yet, so let's check $RELEASES. */ + if (isset($GLOBALS['RELEASES'][$major]["$branch.0"])) { + // Fake a date like we have on the oldreleases array. + $release = $GLOBALS['RELEASES'][$major]["$branch.0"]; + $release['date'] = $release['source'][0]['date']; + return $release; + } + + // Shrug. + return null; } function get_final_release($branch) { - $branch = version_number_to_branch($branch); - if (!$branch) { - return null; - } - $major = substr($branch, 0, strpos($branch, '.')); - - $last = "$branch.0"; - foreach ($GLOBALS['OLDRELEASES'][$major] as $version => $release) { - if (version_number_to_branch($version) == $branch && version_compare($version, $last, '>')) { - $last = $version; - } - } - - if (isset($GLOBALS['OLDRELEASES'][$major][$last])) { - return $GLOBALS['OLDRELEASES'][$major][$last]; - } - - /* If there's only been one release on the branch, it won't be in - * $OLDRELEASES yet, so let's check $RELEASES. */ - if (isset($GLOBALS['RELEASES'][$major][$last])) { - // Fake a date like we have on the oldreleases array. - $release = $GLOBALS['RELEASES'][$major][$last]; - $release['date'] = $release['source'][0]['date']; - return $release; - } - - // Shrug. - return null; + $branch = version_number_to_branch($branch); + if (!$branch) { + return null; + } + $major = substr($branch, 0, strpos($branch, '.')); + + $last = "$branch.0"; + foreach ($GLOBALS['OLDRELEASES'][$major] as $version => $release) { + if (version_number_to_branch($version) == $branch && version_compare($version, $last, '>')) { + $last = $version; + } + } + + if (isset($GLOBALS['OLDRELEASES'][$major][$last])) { + return $GLOBALS['OLDRELEASES'][$major][$last]; + } + + /* If there's only been one release on the branch, it won't be in + * $OLDRELEASES yet, so let's check $RELEASES. */ + if (isset($GLOBALS['RELEASES'][$major][$last])) { + // Fake a date like we have on the oldreleases array. + $release = $GLOBALS['RELEASES'][$major][$last]; + $release['date'] = $release['source'][0]['date']; + return $release; + } + + // Shrug. + return null; } -function get_branch_bug_eol_date($branch) { - if (isset($GLOBALS['BRANCHES'][$branch]['stable'])) { - return new DateTime($GLOBALS['BRANCHES'][$branch]['stable']); - } +function get_branch_bug_eol_date($branch): ?DateTime +{ + if (isset($GLOBALS['BRANCHES'][$branch]['stable'])) { + return new DateTime($GLOBALS['BRANCHES'][$branch]['stable']); + } + + $date = get_branch_release_date($branch); + + $date = $date?->add(new DateInterval('P2Y')); - $date = get_branch_release_date($branch); + // Versions before 8.2 do not extend the release cycle to the end of the year + if (version_compare($branch, '8.2', '<')) { + return $date; + } - return $date ? $date->add(new DateInterval('P2Y')) : null; + // Extend the release cycle to the end of the year + return $date?->setDate($date->format('Y'), 12, 31); } -function get_branch_security_eol_date($branch) { - if (isset($GLOBALS['BRANCHES'][$branch]['security'])) { - return new DateTime($GLOBALS['BRANCHES'][$branch]['security']); - } +function get_branch_security_eol_date($branch): ?DateTime +{ + if (isset($GLOBALS['BRANCHES'][$branch]['security'])) { + return new DateTime($GLOBALS['BRANCHES'][$branch]['security']); + } + + /* Versions before 5.3 are based solely on the final release date in + * $OLDRELEASES. */ + if (version_compare($branch, '5.3', '<')) { + $release = get_final_release($branch); + + return $release ? new DateTime($release['date']) : null; + } + + $date = get_branch_release_date($branch); - /* Versions before 5.3 are based solely on the final release date in - * $OLDRELEASES. */ - if (version_compare($branch, '5.3', '<')) { - $release = get_final_release($branch); + // Versions before 8.1 have 3-year support since the initial release + if (version_compare($branch, '8.1', '<')) { + return $date?->add(new DateInterval('P3Y')); + } - return $release ? new DateTime($release['date']) : null; - } + $date = $date?->add(new DateInterval('P4Y')); - $date = get_branch_release_date($branch); - return $date ? $date->add(new DateInterval('P3Y')) : null; + // Extend the release cycle to the end of the year + return $date?->setDate($date->format('Y'), 12, 31); } -function get_branch_release_date($branch) { - $initial = get_initial_release($branch); +function get_branch_release_date($branch): ?DateTime +{ + $initial = get_initial_release($branch); - return $initial ? new DateTime($initial['date']) : null; + return isset($initial['date']) ? new DateTime($initial['date']) : null; } function get_branch_support_state($branch) { - $initial = get_branch_release_date($branch); - $bug = get_branch_bug_eol_date($branch); - $security = get_branch_security_eol_date($branch); - - if ($initial && $bug && $security) { - $now = new DateTime; - - if ($now >= $security) { - return 'eol'; - } elseif ($now >= $bug) { - return 'security'; - } elseif ($now >= $initial) { - return 'stable'; - } else { - return 'future'; - } - } - - return null; + $initial = get_branch_release_date($branch); + $bug = get_branch_bug_eol_date($branch); + $security = get_branch_security_eol_date($branch); + + if ($initial && $bug && $security) { + $now = new DateTime(); + + if ($now >= $security) { + return 'eol'; + } + + if ($now >= $bug) { + return 'security'; + } + + if ($now >= $initial) { + return 'stable'; + } + + return 'future'; + } + + return null; } -function compare_version($arrayA, $versionB) +function compare_version(array $arrayA, string $versionB) { - static $sortValues = array( - true => 1, - false => -1, - ); - - $length = count($arrayA); - $arrayB = version_array($versionB, $length); - - if (!is_array($arrayA) || !is_array($arrayB)) { - return $sortValues[$arrayA > $arrayB]; - } - - foreach ($arrayA as $index => $componentA) { - $componentA = $arrayA[$index]; - $componentB = $arrayB[$index]; - if ($componentA != $componentB) { - return $sortValues[$componentA > $componentB]; - } - } - - return 0; + $arrayB = version_array($versionB, count($arrayA)); + + foreach ($arrayA as $index => $componentA) { + $componentA = $arrayA[$index]; + $componentB = $arrayB[$index]; + if ($componentA != $componentB) { + return $componentA > $componentB ? 1 : -1; + } + } + + return 0; } -function version_array($version, $length = null) +function version_array(string $version, ?int $length = null) { - $versionArray = array_map( - 'intval', - explode('.', $version) - ); - - if (is_int($length)) { - $versionArray = count($versionArray) < $length - ? array_pad($versionArray, $length, 0) - : array_slice( - $versionArray, - 0, - $length - ); - } - - return $versionArray; + $versionArray = array_map( + 'intval', + explode('.', $version), + ); + + if (is_int($length)) { + $versionArray = count($versionArray) < $length + ? array_pad($versionArray, $length, 0) + : array_slice( + $versionArray, + 0, + $length, + ); + } + + return $versionArray; } function get_current_release_for_branch(int $major, ?int $minor): ?string { - global $RELEASES, $OLDRELEASES; - - $prefix = "{$major}."; - if ($minor !== null) { - $prefix .= "{$minor}."; - } - - foreach (($RELEASES[$major] ?? []) as $version => $_) { - if (!strncmp($prefix, $version, strlen($prefix))) { - return $version; - } - } - - foreach (($OLDRELEASES[$major] ?? []) as $version => $_) { - if (!strncmp($prefix, $version, strlen($prefix))) { - return $version; - } - } - - return NULL; + global $RELEASES, $OLDRELEASES; + + $prefix = "{$major}."; + if ($minor !== null) { + $prefix .= "{$minor}."; + } + + foreach (($RELEASES[$major] ?? []) as $version => $_) { + if (!strncmp($prefix, $version, strlen($prefix))) { + return $version; + } + } + + foreach (($OLDRELEASES[$major] ?? []) as $version => $_) { + if (!strncmp($prefix, $version, strlen($prefix))) { + return $version; + } + } + + return null; } diff --git a/include/changelogs.inc b/include/changelogs.inc index 994133192e..91dac645a1 100644 --- a/include/changelogs.inc +++ b/include/changelogs.inc @@ -1,33 +1,38 @@ #$number"; +function bugl($number): void { + echo "#$number"; } -function implemented($number) { +function implemented($number): void { echo "Implemented FR "; bugl($number); } -function peclbugfix($number) { +function peclbugfix($number): void { echo "Fixed PECL bug "; bugl($number); } -function peclbugl($number) { +function peclbugl($number): void { echo "#$number"; } -function githubissue($repo, $number) { +function githubissue($repo, $number): void { echo "Fixed issue "; githubissuel($repo, $number); } -function githubissuel($repo, $number) { - echo "#$number"; +function githubissuel($repo, $number): void { + echo "GH-$number"; +} + +function githubsecurityl($repo, $id): void { + echo "GHSA-$id"; } -function release_date($in) { +function release_date($in): void { $time = strtotime($in); $human_readable = date('d M Y', $time); $for_tools = date('Y-m-d', $time); @@ -35,36 +40,36 @@ function release_date($in) { } function changelog_makelink(string $branch): string { - return '' . htmlentities($branch) . ''; + return '' . htmlentities($branch) . ''; } function changelog_header(int $major_version, array $minor_versions): void { - site_header("PHP {$major_version} ChangeLog", [ - 'current' => 'docs', - 'css' => ['changelog.css'], - 'layout_span' => 12, - ]); - echo "

      PHP {$major_version} ChangeLog

      \n"; - $glue = ''; - foreach($minor_versions as $branch) { - echo $glue, changelog_makelink($branch); - $glue = ' | '; - } - echo "\n"; + site_header("PHP {$major_version} ChangeLog", [ + 'current' => 'docs', + 'css' => ['changelog.css'], + 'layout_span' => 12, + ]); + echo "

      PHP {$major_version} ChangeLog

      \n"; + $glue = ''; + foreach ($minor_versions as $branch) { + echo $glue, changelog_makelink($branch); + $glue = ' | '; + } + echo "\n"; } function changelog_footer(int $current_major, array $minor_versions): void { - $sidebar = "
      ChangeLogs
        \n"; - foreach ([8, 7, 5, 4] as $major) { - if ($major === $current_major) { - $sidebar .= "
      • PHP {$major}.x\n
          "; - foreach ($minor_versions as $branch) { - $sidebar .= "
        • " . changelog_makelink($branch) . "
        • \n"; - } - $sidebar .= "
      • \n"; - } else { - $sidebar .= "
      • PHP {$major}.x
      • \n"; - } - } - site_footer(['sidebar' => "$sidebar
      "]); + $sidebar = "
      ChangeLogs
        \n"; + foreach ([8, 7, 5, 4] as $major) { + if ($major === $current_major) { + $sidebar .= "
      • PHP {$major}.x\n
          "; + foreach ($minor_versions as $branch) { + $sidebar .= "
        • " . changelog_makelink($branch) . "
        • \n"; + } + $sidebar .= "
      • \n"; + } else { + $sidebar .= "
      • PHP {$major}.x
      • \n"; + } + } + site_footer(['sidebar' => "$sidebar
      "]); } diff --git a/include/check_email_func.php b/include/check_email_func.php deleted file mode 100644 index 8f617f34d6..0000000000 --- a/include/check_email_func.php +++ /dev/null @@ -1,28 +0,0 @@ - -email validation test - -"; -} - -?> -
      -The jesusmc@scripps.edu, jmcastagnetto@yahoo.com and jcastagnetto@yahoo.com -should validate OK as of 2001-02-28 --- JMC - - diff --git a/include/countries-alpha2.inc b/include/countries-alpha2.inc deleted file mode 100644 index eac8a47073..0000000000 --- a/include/countries-alpha2.inc +++ /dev/null @@ -1,255 +0,0 @@ - "Andorra", - "AE" => "United Arab Emirates", - "AF" => "Afghanistan", - "AG" => "Antigua and Barbuda", - "AI" => "Anguilla", - "AL" => "Albania", - "AM" => "Armenia", - "AO" => "Angola", - "AQ" => "Antarctica", - "AR" => "Argentina", - "AS" => "American Samoa", - "AT" => "Austria", - "AU" => "Australia", - "AW" => "Aruba", - "AX" => "Åland Islands", - "AZ" => "Azerbaijan", - "BA" => "Bosnia and Herzegovina", - "BB" => "Barbados", - "BD" => "Bangladesh", - "BE" => "Belgium", - "BF" => "Burkina Faso", - "BG" => "Bulgaria", - "BH" => "Bahrain", - "BI" => "Burundi", - "BJ" => "Benin", - "BL" => "Saint Barthélemy", - "BM" => "Bermuda", - "BN" => "Brunei Darussalam", - "BO" => "Bolivia, Plurinational State of", - "BQ" => "Bonaire, Sint Eustatius and Saba", - "BR" => "Brazil", - "BS" => "Bahamas", - "BT" => "Bhutan", - "BV" => "Bouvet Island", - "BW" => "Botswana", - "BY" => "Belarus", - "BZ" => "Belize", - "CA" => "Canada", - "CC" => "Cocos (Keeling) Islands", - "CD" => "Congo, the Democratic Republic of the", - "CF" => "Central African Republic", - "CG" => "Congo", - "CH" => "Switzerland", - "CI" => "Côte d'Ivoire", - "CK" => "Cook Islands", - "CL" => "Chile", - "CM" => "Cameroon", - "CN" => "China", - "CO" => "Colombia", - "CR" => "Costa Rica", - "CU" => "Cuba", - "CV" => "Cape Verde", - "CW" => "Curaçao", - "CX" => "Christmas Island", - "CY" => "Cyprus", - "CZ" => "Czech Republic", - "DE" => "Germany", - "DJ" => "Djibouti", - "DK" => "Denmark", - "DM" => "Dominica", - "DO" => "Dominican Republic", - "DZ" => "Algeria", - "EC" => "Ecuador", - "EE" => "Estonia", - "EG" => "Egypt", - "EH" => "Western Sahara", - "ER" => "Eritrea", - "ES" => "Spain", - "ET" => "Ethiopia", - "FI" => "Finland", - "FJ" => "Fiji", - "FK" => "Falkland Islands (Malvinas)", - "FM" => "Micronesia, Federated States of", - "FO" => "Faroe Islands", - "FR" => "France", - "GA" => "Gabon", - "GB" => "United Kingdom", - "GD" => "Grenada", - "GE" => "Georgia", - "GF" => "French Guiana", - "GG" => "Guernsey", - "GH" => "Ghana", - "GI" => "Gibraltar", - "GL" => "Greenland", - "GM" => "Gambia", - "GN" => "Guinea", - "GP" => "Guadeloupe", - "GQ" => "Equatorial Guinea", - "GR" => "Greece", - "GS" => "South Georgia and the South Sandwich Islands", - "GT" => "Guatemala", - "GU" => "Guam", - "GW" => "Guinea-Bissau", - "GY" => "Guyana", - "HK" => "Hong Kong", - "HM" => "Heard Island and McDonald Islands", - "HN" => "Honduras", - "HR" => "Croatia", - "HT" => "Haiti", - "HU" => "Hungary", - "ID" => "Indonesia", - "IE" => "Ireland", - "IL" => "Israel", - "IM" => "Isle of Man", - "IN" => "India", - "IO" => "British Indian Ocean Territory", - "IQ" => "Iraq", - "IR" => "Iran, Islamic Republic of", - "IS" => "Iceland", - "IT" => "Italy", - "JE" => "Jersey", - "JM" => "Jamaica", - "JO" => "Jordan", - "JP" => "Japan", - "KE" => "Kenya", - "KG" => "Kyrgyzstan", - "KH" => "Cambodia", - "KI" => "Kiribati", - "KM" => "Comoros", - "KN" => "Saint Kitts and Nevis", - "KP" => "Korea, Democratic People's Republic of", - "KR" => "Korea, Republic of", - "KW" => "Kuwait", - "KY" => "Cayman Islands", - "KZ" => "Kazakhstan", - "LA" => "Lao People's Democratic Republic", - "LB" => "Lebanon", - "LC" => "Saint Lucia", - "LI" => "Liechtenstein", - "LK" => "Sri Lanka", - "LR" => "Liberia", - "LS" => "Lesotho", - "LT" => "Lithuania", - "LU" => "Luxembourg", - "LV" => "Latvia", - "LY" => "Libya", - "MA" => "Morocco", - "MC" => "Monaco", - "MD" => "Moldova, Republic of", - "ME" => "Montenegro", - "MF" => "Saint Martin (French part)", - "MG" => "Madagascar", - "MH" => "Marshall Islands", - "MK" => "Macedonia, the former Yugoslav Republic of", - "ML" => "Mali", - "MM" => "Myanmar", - "MN" => "Mongolia", - "MO" => "Macao", - "MP" => "Northern Mariana Islands", - "MQ" => "Martinique", - "MR" => "Mauritania", - "MS" => "Montserrat", - "MT" => "Malta", - "MU" => "Mauritius", - "MV" => "Maldives", - "MW" => "Malawi", - "MX" => "Mexico", - "MY" => "Malaysia", - "MZ" => "Mozambique", - "NA" => "Namibia", - "NC" => "New Caledonia", - "NE" => "Niger", - "NF" => "Norfolk Island", - "NG" => "Nigeria", - "NI" => "Nicaragua", - "NL" => "Netherlands", - "NO" => "Norway", - "NP" => "Nepal", - "NR" => "Nauru", - "NU" => "Niue", - "NZ" => "New Zealand", - "OM" => "Oman", - "PA" => "Panama", - "PE" => "Peru", - "PF" => "French Polynesia", - "PG" => "Papua New Guinea", - "PH" => "Philippines", - "PK" => "Pakistan", - "PL" => "Poland", - "PM" => "Saint Pierre and Miquelon", - "PN" => "Pitcairn", - "PR" => "Puerto Rico", - "PS" => "Palestine, State of", - "PT" => "Portugal", - "PW" => "Palau", - "PY" => "Paraguay", - "QA" => "Qatar", - "RE" => "Réunion", - "RO" => "Romania", - "RS" => "Serbia", - "RU" => "Russian Federation", - "RW" => "Rwanda", - "SA" => "Saudi Arabia", - "SB" => "Solomon Islands", - "SC" => "Seychelles", - "SD" => "Sudan", - "SE" => "Sweden", - "SG" => "Singapore", - "SH" => "Saint Helena, Ascension and Tristan da Cunha", - "SI" => "Slovenia", - "SJ" => "Svalbard and Jan Mayen", - "SK" => "Slovakia", - "SL" => "Sierra Leone", - "SM" => "San Marino", - "SN" => "Senegal", - "SO" => "Somalia", - "SR" => "Suriname", - "SS" => "South Sudan", - "ST" => "Sao Tome and Principe", - "SV" => "El Salvador", - "SX" => "Sint Maarten (Dutch part)", - "SY" => "Syrian Arab Republic", - "SZ" => "Swaziland", - "TC" => "Turks and Caicos Islands", - "TD" => "Chad", - "TF" => "French Southern Territories", - "TG" => "Togo", - "TH" => "Thailand", - "TJ" => "Tajikistan", - "TK" => "Tokelau", - "TL" => "Timor-Leste", - "TM" => "Turkmenistan", - "TN" => "Tunisia", - "TO" => "Tonga", - "TR" => "Turkey", - "TT" => "Trinidad and Tobago", - "TV" => "Tuvalu", - "TW" => "Taiwan, Province of China", - "TZ" => "Tanzania, United Republic of", - "UA" => "Ukraine", - "UG" => "Uganda", - "UM" => "United States Minor Outlying Islands", - "US" => "United States", - "UY" => "Uruguay", - "UZ" => "Uzbekistan", - "VA" => "Holy See (Vatican City State)", - "VC" => "Saint Vincent and the Grenadines", - "VE" => "Venezuela, Bolivarian Republic of", - "VG" => "Virgin Islands, British", - "VI" => "Virgin Islands, U.S.", - "VN" => "Viet Nam", - "VU" => "Vanuatu", - "WF" => "Wallis and Futuna", - "WS" => "Samoa", - "YE" => "Yemen", - "YT" => "Mayotte", - "ZA" => "South Africa", - "ZM" => "Zambia", - "ZW" => "Zimbabwe", -); diff --git a/include/countries.inc b/include/countries.inc index 0594540d4a..0cb4fe45c6 100644 --- a/include/countries.inc +++ b/include/countries.inc @@ -1,235 +1,236 @@ 'Afghanistan', -'ALB' => 'Albania', -'DZA' => 'Algeria', -'ASM' => 'American Samoa', -'AND' => 'Andorra', -'AGO' => 'Angola', -'AIA' => 'Anguilla', -'ATG' => 'Antigua and Barbuda', -'ARG' => 'Argentina', -'ARM' => 'Armenia', -'ABW' => 'Aruba', -'AUS' => 'Australia', -'AUT' => 'Austria', -'AZE' => 'Azerbaijan', -'BHS' => 'Bahamas', -'BHR' => 'Bahrain', -'BGD' => 'Bangladesh', -'BRB' => 'Barbados', -'BLR' => 'Belarus', -'BEL' => 'Belgium', -'BLZ' => 'Belize', -'BEN' => 'Benin', -'BMU' => 'Bermuda', -'BTN' => 'Bhutan', -'BOL' => 'Bolivia', -'BIH' => 'Bosnia and Herzegovina', -'BWA' => 'Botswana', -'BRA' => 'Brazil', -'VGB' => 'British Virgin Islands', -'BRN' => 'Brunei Darussalam', -'BGR' => 'Bulgaria', -'BFA' => 'Burkina Faso', -'BDI' => 'Burundi', -'KHM' => 'Cambodia', -'CMR' => 'Cameroon', -'CAN' => 'Canada', -'CPV' => 'Cape Verde', -'CYM' => 'Cayman Islands', -'CAF' => 'Central African Republic', -'TCD' => 'Chad', -'CHL' => 'Chile', -'CHN' => 'China', -'COL' => 'Colombia', -'COM' => 'Comoros', -'COG' => 'Congo', -'COK' => 'Cook Islands', -'CRI' => 'Costa Rica', -'CIV' => 'Cote d\'Ivoire', -'HRV' => 'Croatia', -'CUB' => 'Cuba', -'CYP' => 'Cyprus', -'CZE' => 'Czech Republic', -'PRK' => 'Democratic People\'s Republic of Korea', -'COD' => 'Democratic Republic of the Congo', -'DNK' => 'Denmark', -'DJI' => 'Djibouti', -'DMA' => 'Dominica', -'DOM' => 'Dominican Republic', -'ECU' => 'Ecuador', -'EGY' => 'Egypt', -'SLV' => 'El Salvador', -'GNQ' => 'Equatorial Guinea', -'ERI' => 'Eritrea', -'EST' => 'Estonia', -'ETH' => 'Ethiopia', -'EUR' => 'Europe', -'FRO' => 'Faeroe Islands', -'FLK' => 'Falkland Islands (Malvinas)', -'FJI' => 'Fiji', -'FIN' => 'Finland', -'FRA' => 'France', -'GUF' => 'French Guiana', -'PYF' => 'French Polynesia', -'GAB' => 'Gabon', -'GMB' => 'Gambia', -'GEO' => 'Georgia', -'DEU' => 'Germany', -'GHA' => 'Ghana', -'GIB' => 'Gibraltar', -'GRC' => 'Greece', -'GRL' => 'Greenland', -'GRD' => 'Grenada', -'GLP' => 'Guadeloupe', -'GUM' => 'Guam', -'GTM' => 'Guatemala', -'GIN' => 'Guinea', -'GNB' => 'Guinea-Bissau', -'GUY' => 'Guyana', -'HTI' => 'Haiti', -'VAT' => 'Holy See', -'HND' => 'Honduras', -'HKG' => 'Hong Kong', -'HUN' => 'Hungary', -'ISL' => 'Iceland', -'IND' => 'India', -'IDN' => 'Indonesia', -'IRN' => 'Iran', -'IRQ' => 'Iraq', -'IRL' => 'Ireland', -'ISR' => 'Israel', -'ITA' => 'Italy', -'JAM' => 'Jamaica', -'JPN' => 'Japan', -'JOR' => 'Jordan', -'KAZ' => 'Kazakhstan', -'KEN' => 'Kenya', -'KIR' => 'Kiribati', -'KWT' => 'Kuwait', -'KGZ' => 'Kyrgyzstan', -'LAO' => 'Lao People\'s Democratic Republic', -'LVA' => 'Latvia', -'LBN' => 'Lebanon', -'LSO' => 'Lesotho', -'LBR' => 'Liberia', -'LBY' => 'Libyan Arab Jamahiriya', -'LIE' => 'Liechtenstein', -'LTU' => 'Lithuania', -'LUX' => 'Luxembourg', -'MAC' => 'Macao Special Administrative Region of China', -'MDG' => 'Madagascar', -'MWI' => 'Malawi', -'MYS' => 'Malaysia', -'MDV' => 'Maldives', -'MLI' => 'Mali', -'MLT' => 'Malta', -'MHL' => 'Marshall Islands', -'MTQ' => 'Martinique', -'MRT' => 'Mauritania', -'MUS' => 'Mauritius', -'MEX' => 'Mexico', -'FSM' => 'Micronesia Federated States of,', -'MCO' => 'Monaco', -'MNG' => 'Mongolia', -'MSR' => 'Montserrat', -'MAR' => 'Morocco', -'MOZ' => 'Mozambique', -'MMR' => 'Myanmar', -'NAM' => 'Namibia', -'NRU' => 'Nauru', -'NPL' => 'Nepal', -'NLD' => 'Netherlands', -'ANT' => 'Netherlands Antilles', -'NCL' => 'New Caledonia', -'NZL' => 'New Zealand', -'NIC' => 'Nicaragua', -'NER' => 'Niger', -'NGA' => 'Nigeria', -'NIU' => 'Niue', -'NFK' => 'Norfolk Island', -'MNP' => 'Northern Mariana Islands', -'NOR' => 'Norway', -'PSE' => 'Occupied Palestinian Territory', -'OMN' => 'Oman', -'PAK' => 'Pakistan', -'PLW' => 'Palau', -'PAN' => 'Panama', -'PNG' => 'Papua New Guinea', -'PRY' => 'Paraguay', -'PER' => 'Peru', -'PHL' => 'Philippines', -'PCN' => 'Pitcairn', -'POL' => 'Poland', -'PRT' => 'Portugal', -'PRI' => 'Puerto Rico', -'QAT' => 'Qatar', -'KOR' => 'Republic of Korea', -'MDA' => 'Republic of Moldova', -'REU' => 'R�union', -'ROU' => 'Romania', -'RUS' => 'Russian Federation', -'RWA' => 'Rwanda', -'SHN' => 'Saint Helena', -'KNA' => 'Saint Kitts and Nevis', -'LCA' => 'Saint Lucia', -'SPM' => 'Saint Pierre and Miquelon', -'VCT' => 'Saint Vincent and the Grenadines', -'WSM' => 'Samoa', -'SMR' => 'San Marino', -'STP' => 'Sao Tome and Principe', -'SAU' => 'Saudi Arabia', -'SEN' => 'Senegal', -'SRB' => 'Serbia', -'YUG' => 'Serbia and Montenegro', -'SYC' => 'Seychelles', -'SLE' => 'Sierra Leone', -'SGP' => 'Singapore', -'SVK' => 'Slovakia', -'SVN' => 'Slovenia', -'SLB' => 'Solomon Islands', -'SOM' => 'Somalia', -'ZAF' => 'South Africa', -'ESP' => 'Spain', -'LKA' => 'Sri Lanka', -'SDN' => 'Sudan', -'SUR' => 'Suriname', -'SJM' => 'Svalbard and Jan Mayen Islands', -'SWZ' => 'Swaziland', -'SWE' => 'Sweden', -'CHE' => 'Switzerland', -'SYR' => 'Syrian Arab Republic', -'TWN' => 'Taiwan', -'TJK' => 'Tajikistan', -'THA' => 'Thailand', -'MKD' => 'The former Yugoslav Republic of Macedonia', -'TLS' => 'Timor-Leste', -'TGO' => 'Togo', -'TKL' => 'Tokelau', -'TON' => 'Tonga', -'TTO' => 'Trinidad and Tobago', -'TUN' => 'Tunisia', -'TUR' => 'Turkey', -'TKM' => 'Turkmenistan', -'TCA' => 'Turks and Caicos Islands', -'TUV' => 'Tuvalu', -'UGA' => 'Uganda', -'UKR' => 'Ukraine', -'ARE' => 'United Arab Emirates', -'GBR' => 'United Kingdom', -'TZA' => 'United Republic of Tanzania', -'USA' => 'United States', -'VIR' => 'United States Virgin Islands', -'XXX' => 'Unknown', -'URY' => 'Uruguay', -'UZB' => 'Uzbekistan', -'VUT' => 'Vanuatu', -'VEN' => 'Venezuela', -'VNM' => 'Viet Nam', -'WLF' => 'Wallis and Futuna Islands', -'ESH' => 'Western Sahara', -'YEM' => 'Yemen', -'ZMB' => 'Zambia', -'ZWE' => 'Zimbabwe', -); + +return [ + 'AFG' => 'Afghanistan', + 'ALB' => 'Albania', + 'DZA' => 'Algeria', + 'ASM' => 'American Samoa', + 'AND' => 'Andorra', + 'AGO' => 'Angola', + 'AIA' => 'Anguilla', + 'ATG' => 'Antigua and Barbuda', + 'ARG' => 'Argentina', + 'ARM' => 'Armenia', + 'ABW' => 'Aruba', + 'AUS' => 'Australia', + 'AUT' => 'Austria', + 'AZE' => 'Azerbaijan', + 'BHS' => 'Bahamas', + 'BHR' => 'Bahrain', + 'BGD' => 'Bangladesh', + 'BRB' => 'Barbados', + 'BLR' => 'Belarus', + 'BEL' => 'Belgium', + 'BLZ' => 'Belize', + 'BEN' => 'Benin', + 'BMU' => 'Bermuda', + 'BTN' => 'Bhutan', + 'BOL' => 'Bolivia', + 'BIH' => 'Bosnia and Herzegovina', + 'BWA' => 'Botswana', + 'BRA' => 'Brazil', + 'VGB' => 'British Virgin Islands', + 'BRN' => 'Brunei Darussalam', + 'BGR' => 'Bulgaria', + 'BFA' => 'Burkina Faso', + 'BDI' => 'Burundi', + 'KHM' => 'Cambodia', + 'CMR' => 'Cameroon', + 'CAN' => 'Canada', + 'CPV' => 'Cape Verde', + 'CYM' => 'Cayman Islands', + 'CAF' => 'Central African Republic', + 'TCD' => 'Chad', + 'CHL' => 'Chile', + 'CHN' => 'China', + 'COL' => 'Colombia', + 'COM' => 'Comoros', + 'COG' => 'Congo', + 'COK' => 'Cook Islands', + 'CRI' => 'Costa Rica', + 'CIV' => 'Cote d\'Ivoire', + 'HRV' => 'Croatia', + 'CUB' => 'Cuba', + 'CYP' => 'Cyprus', + 'CZE' => 'Czech Republic', + 'PRK' => 'Democratic People\'s Republic of Korea', + 'COD' => 'Democratic Republic of the Congo', + 'DNK' => 'Denmark', + 'DJI' => 'Djibouti', + 'DMA' => 'Dominica', + 'DOM' => 'Dominican Republic', + 'ECU' => 'Ecuador', + 'EGY' => 'Egypt', + 'SLV' => 'El Salvador', + 'GNQ' => 'Equatorial Guinea', + 'ERI' => 'Eritrea', + 'EST' => 'Estonia', + 'ETH' => 'Ethiopia', + 'EUR' => 'Europe', + 'FRO' => 'Faeroe Islands', + 'FLK' => 'Falkland Islands (Malvinas)', + 'FJI' => 'Fiji', + 'FIN' => 'Finland', + 'FRA' => 'France', + 'GUF' => 'French Guiana', + 'PYF' => 'French Polynesia', + 'GAB' => 'Gabon', + 'GMB' => 'Gambia', + 'GEO' => 'Georgia', + 'DEU' => 'Germany', + 'GHA' => 'Ghana', + 'GIB' => 'Gibraltar', + 'GRC' => 'Greece', + 'GRL' => 'Greenland', + 'GRD' => 'Grenada', + 'GLP' => 'Guadeloupe', + 'GUM' => 'Guam', + 'GTM' => 'Guatemala', + 'GIN' => 'Guinea', + 'GNB' => 'Guinea-Bissau', + 'GUY' => 'Guyana', + 'HTI' => 'Haiti', + 'VAT' => 'Holy See', + 'HND' => 'Honduras', + 'HKG' => 'Hong Kong', + 'HUN' => 'Hungary', + 'ISL' => 'Iceland', + 'IND' => 'India', + 'IDN' => 'Indonesia', + 'IRN' => 'Iran', + 'IRQ' => 'Iraq', + 'IRL' => 'Ireland', + 'ISR' => 'Israel', + 'ITA' => 'Italy', + 'JAM' => 'Jamaica', + 'JPN' => 'Japan', + 'JOR' => 'Jordan', + 'KAZ' => 'Kazakhstan', + 'KEN' => 'Kenya', + 'KIR' => 'Kiribati', + 'KWT' => 'Kuwait', + 'KGZ' => 'Kyrgyzstan', + 'LAO' => 'Lao People\'s Democratic Republic', + 'LVA' => 'Latvia', + 'LBN' => 'Lebanon', + 'LSO' => 'Lesotho', + 'LBR' => 'Liberia', + 'LBY' => 'Libyan Arab Jamahiriya', + 'LIE' => 'Liechtenstein', + 'LTU' => 'Lithuania', + 'LUX' => 'Luxembourg', + 'MAC' => 'Macao Special Administrative Region of China', + 'MDG' => 'Madagascar', + 'MWI' => 'Malawi', + 'MYS' => 'Malaysia', + 'MDV' => 'Maldives', + 'MLI' => 'Mali', + 'MLT' => 'Malta', + 'MHL' => 'Marshall Islands', + 'MTQ' => 'Martinique', + 'MRT' => 'Mauritania', + 'MUS' => 'Mauritius', + 'MEX' => 'Mexico', + 'FSM' => 'Micronesia Federated States of,', + 'MCO' => 'Monaco', + 'MNG' => 'Mongolia', + 'MSR' => 'Montserrat', + 'MAR' => 'Morocco', + 'MOZ' => 'Mozambique', + 'MMR' => 'Myanmar', + 'NAM' => 'Namibia', + 'NRU' => 'Nauru', + 'NPL' => 'Nepal', + 'NLD' => 'Netherlands', + 'ANT' => 'Netherlands Antilles', + 'NCL' => 'New Caledonia', + 'NZL' => 'New Zealand', + 'NIC' => 'Nicaragua', + 'NER' => 'Niger', + 'NGA' => 'Nigeria', + 'NIU' => 'Niue', + 'NFK' => 'Norfolk Island', + 'MNP' => 'Northern Mariana Islands', + 'NOR' => 'Norway', + 'PSE' => 'Occupied Palestinian Territory', + 'OMN' => 'Oman', + 'PAK' => 'Pakistan', + 'PLW' => 'Palau', + 'PAN' => 'Panama', + 'PNG' => 'Papua New Guinea', + 'PRY' => 'Paraguay', + 'PER' => 'Peru', + 'PHL' => 'Philippines', + 'PCN' => 'Pitcairn', + 'POL' => 'Poland', + 'PRT' => 'Portugal', + 'PRI' => 'Puerto Rico', + 'QAT' => 'Qatar', + 'KOR' => 'Republic of Korea', + 'MDA' => 'Republic of Moldova', + 'REU' => 'Réunion', + 'ROU' => 'Romania', + 'RUS' => 'Russian Federation', + 'RWA' => 'Rwanda', + 'SHN' => 'Saint Helena', + 'KNA' => 'Saint Kitts and Nevis', + 'LCA' => 'Saint Lucia', + 'SPM' => 'Saint Pierre and Miquelon', + 'VCT' => 'Saint Vincent and the Grenadines', + 'WSM' => 'Samoa', + 'SMR' => 'San Marino', + 'STP' => 'Sao Tome and Principe', + 'SAU' => 'Saudi Arabia', + 'SEN' => 'Senegal', + 'SRB' => 'Serbia', + 'YUG' => 'Serbia and Montenegro', + 'SYC' => 'Seychelles', + 'SLE' => 'Sierra Leone', + 'SGP' => 'Singapore', + 'SVK' => 'Slovakia', + 'SVN' => 'Slovenia', + 'SLB' => 'Solomon Islands', + 'SOM' => 'Somalia', + 'ZAF' => 'South Africa', + 'ESP' => 'Spain', + 'LKA' => 'Sri Lanka', + 'SDN' => 'Sudan', + 'SUR' => 'Suriname', + 'SJM' => 'Svalbard and Jan Mayen Islands', + 'SWZ' => 'Swaziland', + 'SWE' => 'Sweden', + 'CHE' => 'Switzerland', + 'SYR' => 'Syrian Arab Republic', + 'TWN' => 'Taiwan', + 'TJK' => 'Tajikistan', + 'THA' => 'Thailand', + 'MKD' => 'The former Yugoslav Republic of Macedonia', + 'TLS' => 'Timor-Leste', + 'TGO' => 'Togo', + 'TKL' => 'Tokelau', + 'TON' => 'Tonga', + 'TTO' => 'Trinidad and Tobago', + 'TUN' => 'Tunisia', + 'TUR' => 'Turkey', + 'TKM' => 'Turkmenistan', + 'TCA' => 'Turks and Caicos Islands', + 'TUV' => 'Tuvalu', + 'UGA' => 'Uganda', + 'UKR' => 'Ukraine', + 'ARE' => 'United Arab Emirates', + 'GBR' => 'United Kingdom', + 'TZA' => 'United Republic of Tanzania', + 'USA' => 'United States', + 'VIR' => 'United States Virgin Islands', + 'XXX' => 'Unknown', + 'URY' => 'Uruguay', + 'UZB' => 'Uzbekistan', + 'VUT' => 'Vanuatu', + 'VEN' => 'Venezuela', + 'VNM' => 'Viet Nam', + 'WLF' => 'Wallis and Futuna Islands', + 'ESH' => 'Western Sahara', + 'YEM' => 'Yemen', + 'ZMB' => 'Zambia', + 'ZWE' => 'Zimbabwe', +]; diff --git a/include/countries_alpha_mapping.inc b/include/countries_alpha_mapping.inc deleted file mode 100644 index a69dccc085..0000000000 --- a/include/countries_alpha_mapping.inc +++ /dev/null @@ -1,255 +0,0 @@ - "AF", - "ALA" => "AX", - "ALB" => "AL", - "DZA" => "DZ", - "ASM" => "AS", - "AND" => "AD", - "AGO" => "AO", - "AIA" => "AI", - "ATA" => "AQ", - "ATG" => "AG", - "ARG" => "AR", - "ARM" => "AM", - "ABW" => "AW", - "AUS" => "AU", - "AUT" => "AT", - "AZE" => "AZ", - "BHS" => "BS", - "BHR" => "BH", - "BGD" => "BD", - "BRB" => "BB", - "BLR" => "BY", - "BEL" => "BE", - "BLZ" => "BZ", - "BEN" => "BJ", - "BMU" => "BM", - "BTN" => "BT", - "BOL" => "BO", - "BES" => "BQ", - "BIH" => "BA", - "BWA" => "BW", - "BVT" => "BV", - "BRA" => "BR", - "IOT" => "IO", - "BRN" => "BN", - "BGR" => "BG", - "BFA" => "BF", - "BDI" => "BI", - "KHM" => "KH", - "CMR" => "CM", - "CAN" => "CA", - "CPV" => "CV", - "CYM" => "KY", - "CAF" => "CF", - "TCD" => "TD", - "CHL" => "CL", - "CHN" => "CN", - "CXR" => "CX", - "CCK" => "CC", - "COL" => "CO", - "COM" => "KM", - "COG" => "CG", - "COD" => "CD", - "COK" => "CK", - "CRI" => "CR", - "CIV" => "CI", - "HRV" => "HR", - "CUB" => "CU", - "CUW" => "CW", - "CYP" => "CY", - "CZE" => "CZ", - "DNK" => "DK", - "DJI" => "DJ", - "DMA" => "DM", - "DOM" => "DO", - "ECU" => "EC", - "EGY" => "EG", - "SLV" => "SV", - "GNQ" => "GQ", - "ERI" => "ER", - "EST" => "EE", - "ETH" => "ET", - "FLK" => "FK", - "534" => "FO", - "FJI" => "FJ", - "FIN" => "FI", - "FRA" => "FR", - "GUF" => "GF", - "PYF" => "PF", - "ATF" => "TF", - "GAB" => "GA", - "GMB" => "GM", - "GEO" => "GE", - "DEU" => "DE", - "GHA" => "GH", - "GIB" => "GI", - "GRC" => "GR", - "GRL" => "GL", - "GRD" => "GD", - "GLP" => "GP", - "GUM" => "GU", - "GTM" => "GT", - "GGY" => "GG", - "GIN" => "GN", - "GNB" => "GW", - "GUY" => "GY", - "HTI" => "HT", - "HMD" => "HM", - "VAT" => "VA", - "HND" => "HN", - "HKG" => "HK", - "HUN" => "HU", - "ISL" => "IS", - "IND" => "IN", - "IDN" => "ID", - "IRN" => "IR", - "IRQ" => "IQ", - "IRL" => "IE", - "IMN" => "IM", - "ISR" => "IL", - "ITA" => "IT", - "JAM" => "JM", - "JPN" => "JP", - "JEY" => "JE", - "JOR" => "JO", - "KAZ" => "KZ", - "KEN" => "KE", - "KIR" => "KI", - "PRK" => "KP", - "KOR" => "KR", - "KWT" => "KW", - "KGZ" => "KG", - "LAO" => "LA", - "LVA" => "LV", - "LBN" => "LB", - "LSO" => "LS", - "LBR" => "LR", - "LBY" => "LY", - "LIE" => "LI", - "LTU" => "LT", - "LUX" => "LU", - "MAC" => "MO", - "MKD" => "MK", - "MDG" => "MG", - "MWI" => "MW", - "MYS" => "MY", - "MDV" => "MV", - "MLI" => "ML", - "MLT" => "MT", - "MHL" => "MH", - "MTQ" => "MQ", - "MRT" => "MR", - "MUS" => "MU", - "MYT" => "YT", - "MEX" => "MX", - "FSM" => "FM", - "MDA" => "MD", - "MCO" => "MC", - "MNG" => "MN", - "MNE" => "ME", - "MSR" => "MS", - "MAR" => "MA", - "MOZ" => "MZ", - "MMR" => "MM", - "NAM" => "NA", - "NRU" => "NR", - "NPL" => "NP", - "NLD" => "NL", - "NCL" => "NC", - "NZL" => "NZ", - "NIC" => "NI", - "NER" => "NE", - "NGA" => "NG", - "NIU" => "NU", - "NFK" => "NF", - "MNP" => "MP", - "NOR" => "NO", - "PSE" => "PS", - "OMN" => "OM", - "PAK" => "PK", - "PLW" => "PW", - "PAN" => "PA", - "PNG" => "PG", - "PRY" => "PY", - "PER" => "PE", - "PHL" => "PH", - "PCN" => "PN", - "POL" => "PL", - "PRT" => "PT", - "PRI" => "PR", - "QAT" => "QA", - "REU" => "RE", - "ROU" => "RO", - "RUS" => "RU", - "RWA" => "RW", - "534" => "BL", - "SHN" => "SH", - "KNA" => "KN", - "LCA" => "LC", - "MAF" => "MF", - "SPM" => "PM", - "VCT" => "VC", - "WSM" => "WS", - "SMR" => "SM", - "STP" => "ST", - "SAU" => "SA", - "SEN" => "SN", - "SRB" => "RS", - "SYC" => "SC", - "SLE" => "SL", - "SGP" => "SG", - "SXM" => "SX", - "SVK" => "SK", - "SVN" => "SI", - "SLB" => "SB", - "SOM" => "SO", - "ZAF" => "ZA", - "SGS" => "GS", - "ESP" => "ES", - "LKA" => "LK", - "SDN" => "SD", - "SUR" => "SR", - "534" => "SJ", - "SWZ" => "SZ", - "SWE" => "SE", - "CHE" => "CH", - "SYR" => "SY", - "TWN" => "TW", - "TJK" => "TJ", - "TZA" => "TZ", - "THA" => "TH", - "TLS" => "TL", - "TGO" => "TG", - "TKL" => "TK", - "TON" => "TO", - "TTO" => "TT", - "TUN" => "TN", - "TUR" => "TR", - "TKM" => "TM", - "TCA" => "TC", - "TUV" => "TV", - "UGA" => "UG", - "UKR" => "UA", - "ARE" => "AE", - "GBR" => "GB", - "USA" => "US", - "UMI" => "UM", - "URY" => "UY", - "UZB" => "UZ", - "VUT" => "VU", - "VEN" => "VE", - "VNM" => "VN", - "VGB" => "VG", - "VIR" => "VI", - "WLF" => "WF", - "ESH" => "EH", - "YEM" => "YE", - "ZMB" => "ZM", - "ZWE" => "ZW", - ); -$COUNTRY_ALPHA_2_TO_3 = array_flip($COUNTRY_ALPHA_3_TO_2); diff --git a/include/do-download.inc b/include/do-download.inc index c5861acfc1..b31f763b2c 100644 --- a/include/do-download.inc +++ b/include/do-download.inc @@ -9,10 +9,10 @@ function get_actual_download_file($file) { // Could be a normal download or a manual download file - $possible_files = array($file => TRUE, "manual/$file" => FALSE); + $possible_files = [$file => true, "manual/$file" => false]; // Find out what is the exact file requested - $found = FALSE; + $found = false; foreach ($possible_files as $name => $log) { if (@file_exists($_SERVER['DOCUMENT_ROOT'] . '/distributions/' . $name)) { $found = $name; @@ -23,10 +23,8 @@ function get_actual_download_file($file) return $found; } // Download a file from a mirror site -function download_file($mirror, $file) +function download_file($mirror, $file): void { - global $MYSITE; - // Redirect to the particular file if (!headers_sent()) { status_header(302); diff --git a/include/download-instructions/fw-drupal.php b/include/download-instructions/fw-drupal.php new file mode 100644 index 0000000000..20ff7332ae --- /dev/null +++ b/include/download-instructions/fw-drupal.php @@ -0,0 +1,6 @@ +

      +Instructions for installing PHP for Drupal development can be found on: +

      +

      https://www.drupal.org/docs/getting-started/installing-drupal +

      diff --git a/include/download-instructions/fw-joomla.php b/include/download-instructions/fw-joomla.php new file mode 100644 index 0000000000..1173ee7a98 --- /dev/null +++ b/include/download-instructions/fw-joomla.php @@ -0,0 +1,6 @@ +

      +Instructions for installing PHP for Joomla! development can be found on: +

      +

      https://manual.joomla.org/docs/get-started/ +

      \ No newline at end of file diff --git a/include/download-instructions/fw-laravel.php b/include/download-instructions/fw-laravel.php new file mode 100644 index 0000000000..62c4282b6a --- /dev/null +++ b/include/download-instructions/fw-laravel.php @@ -0,0 +1,6 @@ +

      +Instructions for installing PHP for Laravel development can be found on: +

      +

      https://laravel.com/docs/12.x/installation#installing-php +

      diff --git a/include/download-instructions/fw-symfony.php b/include/download-instructions/fw-symfony.php new file mode 100644 index 0000000000..f03259972f --- /dev/null +++ b/include/download-instructions/fw-symfony.php @@ -0,0 +1,6 @@ +

      +Instructions for installing PHP for Symfony development can be found on: +

      +

      https://symfony.com/doc/current/setup.html +

      diff --git a/include/download-instructions/fw-wordpress.php b/include/download-instructions/fw-wordpress.php new file mode 100644 index 0000000000..1fd289f75d --- /dev/null +++ b/include/download-instructions/fw-wordpress.php @@ -0,0 +1,6 @@ +

      +Instructions for installing PHP for WordPress development can be found on: +

      +

      https://wordpress.org/support/article/how-to-install-wordpress/ +

      diff --git a/include/download-instructions/linux-debian-cli-community.php b/include/download-instructions/linux-debian-cli-community.php new file mode 100644 index 0000000000..cc1595689a --- /dev/null +++ b/include/download-instructions/linux-debian-cli-community.php @@ -0,0 +1,15 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Add the packages.sury.org/php repository.
      +sudo apt-get update
      +sudo apt-get install -y lsb-release ca-certificates apt-transport-https curl
      +sudo curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
      +sudo dpkg -i /tmp/debsuryorg-archive-keyring.deb
      +sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
      +sudo apt-get update
      +
      +# Install PHP.
      +sudo apt-get install -y php
      +
      diff --git a/include/download-instructions/linux-debian-cli-default.php b/include/download-instructions/linux-debian-cli-default.php new file mode 100644 index 0000000000..534da00616 --- /dev/null +++ b/include/download-instructions/linux-debian-cli-default.php @@ -0,0 +1,10 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Update the package lists.
      +sudo apt update
      +
      +# Install PHP.
      +sudo apt install -y php
      +
      diff --git a/include/download-instructions/linux-debian-web-community.php b/include/download-instructions/linux-debian-web-community.php new file mode 120000 index 0000000000..b21d40f00c --- /dev/null +++ b/include/download-instructions/linux-debian-web-community.php @@ -0,0 +1 @@ +linux-debian-cli-community.php \ No newline at end of file diff --git a/include/download-instructions/linux-debian-web-default.php b/include/download-instructions/linux-debian-web-default.php new file mode 120000 index 0000000000..0017979f66 --- /dev/null +++ b/include/download-instructions/linux-debian-web-default.php @@ -0,0 +1 @@ +linux-debian-cli-default.php \ No newline at end of file diff --git a/include/download-instructions/linux-docker-cli-community.php b/include/download-instructions/linux-docker-cli-community.php new file mode 100644 index 0000000000..943a8f6488 --- /dev/null +++ b/include/download-instructions/linux-docker-cli-community.php @@ -0,0 +1,10 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Pull the PHP Docker image.
      +docker pull php:-cli
      +
      +# Launch a container with PHP.
      +docker run --rm -it --entrypoint bash php:-cli
      +
      diff --git a/include/download-instructions/linux-docker-cli-default.php b/include/download-instructions/linux-docker-cli-default.php new file mode 100644 index 0000000000..282372e9dc --- /dev/null +++ b/include/download-instructions/linux-docker-cli-default.php @@ -0,0 +1,10 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Pull the PHP Docker image.
      +docker pull php-cli
      +
      +# Launch a container with PHP.
      +docker run --rm -it --entrypoint bash php-cli
      +
      diff --git a/include/download-instructions/linux-docker-web-community.php b/include/download-instructions/linux-docker-web-community.php new file mode 100644 index 0000000000..27ed68ad54 --- /dev/null +++ b/include/download-instructions/linux-docker-web-community.php @@ -0,0 +1,10 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Pull the PHP Docker image.
      +docker pull php:-fpm
      +
      +# Launch a container with PHP.
      +docker run --rm -it --entrypoint bash php:-fpm
      +
      diff --git a/include/download-instructions/linux-docker-web-default.php b/include/download-instructions/linux-docker-web-default.php new file mode 100644 index 0000000000..c04a74df5d --- /dev/null +++ b/include/download-instructions/linux-docker-web-default.php @@ -0,0 +1,10 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Pull the PHP Docker image.
      +docker pull php:fpm
      +
      +# Launch a container with PHP.
      +docker run --rm -it --entrypoint bash php:fpm
      +
      diff --git a/include/download-instructions/linux-fedora-cli-community.php b/include/download-instructions/linux-fedora-cli-community.php new file mode 100644 index 0000000000..3e406b988b --- /dev/null +++ b/include/download-instructions/linux-fedora-cli-community.php @@ -0,0 +1,19 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Add the Remi's RPM repository.
      +sudo dnf install -y dnf-plugins-core
      +sudo dnf install -y https://rpms.remirepo.net/fedora/remi-release-$(rpm -E %fedora).rpm
      +
      +
      +# Install PHP (multiple versions).
      +sudo dnf install -y php
      +
      +sudo dnf module reset php -y
      +sudo dnf module enable php:remi- -y
      +
      +# Install PHP (single/default version).
      +sudo dnf install -y php
      +
      +
      diff --git a/include/download-instructions/linux-fedora-cli-default.php b/include/download-instructions/linux-fedora-cli-default.php new file mode 100644 index 0000000000..61d64d3c50 --- /dev/null +++ b/include/download-instructions/linux-fedora-cli-default.php @@ -0,0 +1,7 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Install PHP.
      +sudo dnf install -y php
      +
      diff --git a/include/download-instructions/linux-fedora-web-community.php b/include/download-instructions/linux-fedora-web-community.php new file mode 120000 index 0000000000..96f87a049c --- /dev/null +++ b/include/download-instructions/linux-fedora-web-community.php @@ -0,0 +1 @@ +linux-fedora-cli-community.php \ No newline at end of file diff --git a/include/download-instructions/linux-fedora-web-default.php b/include/download-instructions/linux-fedora-web-default.php new file mode 120000 index 0000000000..83c945fbe5 --- /dev/null +++ b/include/download-instructions/linux-fedora-web-default.php @@ -0,0 +1 @@ +linux-fedora-cli-default.php \ No newline at end of file diff --git a/include/download-instructions/linux-redhat-cli-community.php b/include/download-instructions/linux-redhat-cli-community.php new file mode 100644 index 0000000000..024609acfb --- /dev/null +++ b/include/download-instructions/linux-redhat-cli-community.php @@ -0,0 +1,21 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Add the Remi's RPM repository.
      +sudo subscription-manager repos --enable codeready-builder-for-rhel-$(rpm -E %rhel)-$(arch)-rpms
      +sudo dnf install -y dnf-plugins-core
      +sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-$(rpm -E %rhel).noarch.rpm
      +sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E %rhel).rpm
      +
      +
      +# Install PHP (multiple versions).
      +sudo dnf install -y php
      +
      +sudo dnf module reset php -y
      +sudo dnf module enable php:remi- -y
      +
      +# Install PHP (single/default version).
      +sudo dnf install -y php
      +
      +
      diff --git a/include/download-instructions/linux-redhat-cli-default.php b/include/download-instructions/linux-redhat-cli-default.php new file mode 100644 index 0000000000..61d64d3c50 --- /dev/null +++ b/include/download-instructions/linux-redhat-cli-default.php @@ -0,0 +1,7 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Install PHP.
      +sudo dnf install -y php
      +
      diff --git a/include/download-instructions/linux-redhat-web-community.php b/include/download-instructions/linux-redhat-web-community.php new file mode 120000 index 0000000000..b41bc5d464 --- /dev/null +++ b/include/download-instructions/linux-redhat-web-community.php @@ -0,0 +1 @@ +linux-redhat-cli-community.php \ No newline at end of file diff --git a/include/download-instructions/linux-redhat-web-default.php b/include/download-instructions/linux-redhat-web-default.php new file mode 120000 index 0000000000..38d6e97f7b --- /dev/null +++ b/include/download-instructions/linux-redhat-web-default.php @@ -0,0 +1 @@ +linux-redhat-cli-default.php \ No newline at end of file diff --git a/include/download-instructions/linux-source.php b/include/download-instructions/linux-source.php new file mode 100644 index 0000000000..47437b2c77 --- /dev/null +++ b/include/download-instructions/linux-source.php @@ -0,0 +1,4 @@ +

      + The instructions for compiling from source + on Linux are described in the PHP manual. +

      diff --git a/include/download-instructions/linux-ubuntu-cli-community.php b/include/download-instructions/linux-ubuntu-cli-community.php new file mode 100644 index 0000000000..100666c8ea --- /dev/null +++ b/include/download-instructions/linux-ubuntu-cli-community.php @@ -0,0 +1,13 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Add the ondrej/php repository.
      +sudo apt update
      +sudo apt install -y software-properties-common
      +sudo LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php -y
      +sudo apt update
      +
      +# Install PHP.
      +sudo apt install -y php
      +
      diff --git a/include/download-instructions/linux-ubuntu-cli-default.php b/include/download-instructions/linux-ubuntu-cli-default.php new file mode 100644 index 0000000000..534da00616 --- /dev/null +++ b/include/download-instructions/linux-ubuntu-cli-default.php @@ -0,0 +1,10 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Update the package lists.
      +sudo apt update
      +
      +# Install PHP.
      +sudo apt install -y php
      +
      diff --git a/include/download-instructions/linux-ubuntu-web-community.php b/include/download-instructions/linux-ubuntu-web-community.php new file mode 120000 index 0000000000..cbcc4a6ff3 --- /dev/null +++ b/include/download-instructions/linux-ubuntu-web-community.php @@ -0,0 +1 @@ +linux-ubuntu-cli-community.php \ No newline at end of file diff --git a/include/download-instructions/linux-ubuntu-web-default.php b/include/download-instructions/linux-ubuntu-web-default.php new file mode 120000 index 0000000000..c4a0004521 --- /dev/null +++ b/include/download-instructions/linux-ubuntu-web-default.php @@ -0,0 +1 @@ +linux-ubuntu-cli-default.php \ No newline at end of file diff --git a/include/download-instructions/osx-docker-cli.php b/include/download-instructions/osx-docker-cli.php new file mode 120000 index 0000000000..a851bfe642 --- /dev/null +++ b/include/download-instructions/osx-docker-cli.php @@ -0,0 +1 @@ +linux-docker-cli-community.php \ No newline at end of file diff --git a/include/download-instructions/osx-docker-web.php b/include/download-instructions/osx-docker-web.php new file mode 120000 index 0000000000..ded3a794ad --- /dev/null +++ b/include/download-instructions/osx-docker-web.php @@ -0,0 +1 @@ +linux-docker-web-community.php \ No newline at end of file diff --git a/include/download-instructions/osx-homebrew-php.php b/include/download-instructions/osx-homebrew-php.php new file mode 100644 index 0000000000..5fd20fc401 --- /dev/null +++ b/include/download-instructions/osx-homebrew-php.php @@ -0,0 +1,12 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Download and install Homebrew.
      +curl -o- https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh | bash
      +
      +# Install and link PHP.
      +brew install shivammathur/php/php@
      +
      +brew link --force --overwrite php@
      +
      diff --git a/include/download-instructions/osx-homebrew.php b/include/download-instructions/osx-homebrew.php new file mode 100644 index 0000000000..bc2f033cac --- /dev/null +++ b/include/download-instructions/osx-homebrew.php @@ -0,0 +1,12 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Download and install Homebrew.
      +curl -o- https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh | bash
      +
      +# Install and link PHP.
      +brew install php@
      +
      +brew link --force --overwrite php@
      +
      diff --git a/include/download-instructions/osx-macports.php b/include/download-instructions/osx-macports.php new file mode 100644 index 0000000000..4ed4c24f3a --- /dev/null +++ b/include/download-instructions/osx-macports.php @@ -0,0 +1,14 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Please refer to https://guide.macports.org/chunked/installing.macports.html for installing MacPorts.
      +
      +# Install PHP 
      +
      +sudo port install php
      +
      +
      +# Switch Active PHP  version
      +sudo port select --set php php
      +
      diff --git a/include/download-instructions/osx-source.php b/include/download-instructions/osx-source.php new file mode 100644 index 0000000000..aa81b80171 --- /dev/null +++ b/include/download-instructions/osx-source.php @@ -0,0 +1,4 @@ +

      + The instructions for compiling from source + on macOS are described in the PHP manual. +

      diff --git a/include/download-instructions/windows-chocolatey.php b/include/download-instructions/windows-chocolatey.php new file mode 100644 index 0000000000..56c6205465 --- /dev/null +++ b/include/download-instructions/windows-chocolatey.php @@ -0,0 +1,10 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Download and install Chocolatey.
      +powershell -c "irm https://community.chocolatey.org/install.ps1|iex"
      +
      +# Download and install PHP.
      +choco install php --version= -y
      +
      diff --git a/include/download-instructions/windows-docker-cli.php b/include/download-instructions/windows-docker-cli.php new file mode 120000 index 0000000000..a851bfe642 --- /dev/null +++ b/include/download-instructions/windows-docker-cli.php @@ -0,0 +1 @@ +linux-docker-cli-community.php \ No newline at end of file diff --git a/include/download-instructions/windows-docker-web.php b/include/download-instructions/windows-docker-web.php new file mode 120000 index 0000000000..ded3a794ad --- /dev/null +++ b/include/download-instructions/windows-docker-web.php @@ -0,0 +1 @@ +linux-docker-web-community.php \ No newline at end of file diff --git a/include/download-instructions/windows-downloads.php b/include/download-instructions/windows-downloads.php new file mode 100644 index 0000000000..89e7525bcc --- /dev/null +++ b/include/download-instructions/windows-downloads.php @@ -0,0 +1,107 @@ +Windows release index is temporarily unavailable.

      '; + return; +} + +if (!isset($releases[$version]) || !is_array($releases[$version])) { + echo '

      No Windows builds found for PHP ' . htmlspecialchars($version ?? '') . '.

      '; + return; +} + +$verBlock = $releases[$version]; +$fullVersion = isset($verBlock['version']) ? $verBlock['version'] : $version; + +function ws_build_label(string $k, array $entry): string { + $tool = 'VS'; + if (strpos($k, 'vs17') !== false) { + $tool .= '17'; + } elseif (strpos($k, 'vs16') !== false) { + $tool .= '16'; + } elseif (strpos($k, 'vc15') !== false) { + $tool = 'VC15'; + } + + $arch = (strpos($k, 'x64') !== false) ? 'x64' : ((strpos($k, 'x86') !== false) ? 'x86' : ''); + $ts = (strpos($k, 'nts') !== false) ? 'Non Thread Safe' : 'Thread Safe'; + + if (strncmp($k, 'nts-', 4) === 0) { + $ts = 'Non Thread Safe'; + } elseif (strncmp($k, 'ts-', 3) === 0) { + $ts = 'Thread Safe'; + } + + $mtime = isset($entry['mtime']) ? strtotime($entry['mtime']) : 0; + $mt = $mtime ? gmdate('Y-M-d H:i:s', $mtime) : ''; + + return trim(($tool ? $tool . ' ' : '') . ($arch ? $arch . ' ' : '') . $ts . ($mt ? ' ' . $mt . ' UTC' : '')); +} + +echo '

      PHP ' . htmlspecialchars($version) . ' (' . $fullVersion . ')

      '; + +if (!empty($verBlock['source']['path'])) { + echo '

      Download source code ' . ($verBlock['source']['size'] ?? '') . '

      ', PHP_EOL; +} +if (!empty($verBlock['test_pack']['path'])) { + echo '

      Download tests package (phpt) ' . ($verBlock['test_pack']['size'] ?? '') . '

      ', PHP_EOL; +} + +$buckets = [ + 'nts-x64' => [], + 'ts-x64' => [], + 'nts-x86' => [], + 'ts-x86' => [], +]; + +$package_names = [ + 'zip' => 'Zip', + 'debug_pack' => 'Debug Pack', + 'devel_pack' => 'Development package (SDK to develop PHP extensions)', +]; + +foreach ($verBlock as $k => $entry) { + if (!is_array($entry)) { + continue; + } + if (in_array($k, ['version', 'source', 'test_pack'], true)) { + continue; + } + + $isNts = (strncmp($k, 'nts-', 4) === 0) || (strpos($k, 'nts') !== false); + $arch = (strpos($k, 'x64') !== false) ? 'x64' : ((strpos($k, 'x86') !== false) ? 'x86' : ''); + $bucketKey = ($isNts ? 'nts' : 'ts') . '-' . ($arch !== '' ? $arch : 'other'); + + if (!isset($buckets[$bucketKey])) { + $bucketKey = 'other'; + } + $buckets[$bucketKey][] = [$k, $entry]; +} + +foreach (['nts-x64', 'ts-x64', 'nts-x86', 'ts-x86'] as $bk) { + foreach ($buckets[$bk] as [$k, $entry]) { + $label = ws_build_label($k, $entry); + if ($label === '') { + continue; + } + + echo PHP_EOL; + echo '
      ', PHP_EOL; + echo "\t", '

      ' . $label . '

      ', PHP_EOL; + + foreach(['zip', 'debug_pack', 'devel_pack'] as $type) { + if (!empty($entry[$type]['path'])) { + $p = $entry[$type]['path']; + echo "\t", '

      ' . $package_names[$type] . ' ' . $entry[$type]['size'] . '
      ', PHP_EOL; + echo "\t", 'sha256: ' . $entry[$type]['sha256'] ?? '' . '

      ', PHP_EOL; + } + } + + echo '
      ', PHP_EOL; + } +} +?> diff --git a/include/download-instructions/windows-native.php b/include/download-instructions/windows-native.php new file mode 100644 index 0000000000..23e0e118cc --- /dev/null +++ b/include/download-instructions/windows-native.php @@ -0,0 +1,7 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Download and install PHP.
      +powershell -c "& ([ScriptBlock]::Create((irm 'https://www.php.net/include/download-instructions/windows.ps1'))) -Version "
      +
      diff --git a/include/download-instructions/windows-scoop.php b/include/download-instructions/windows-scoop.php new file mode 100644 index 0000000000..b95b7d1992 --- /dev/null +++ b/include/download-instructions/windows-scoop.php @@ -0,0 +1,11 @@ +

      +On the command line, run the following commands: +

      +
      
      +# Download and install Scoop.
      +powershell -c "irm https://get.scoop.sh | iex"
      +
      +# Download and install PHP.
      +scoop bucket add versions
      +scoop install php
      +
      diff --git a/include/download-instructions/windows-source.php b/include/download-instructions/windows-source.php new file mode 100644 index 0000000000..252be497c5 --- /dev/null +++ b/include/download-instructions/windows-source.php @@ -0,0 +1,5 @@ +

      + The instructions for compiling from source on Windows are described in the + php/php-windows-builder + repository. +

      diff --git a/include/download-instructions/windows-winget.php b/include/download-instructions/windows-winget.php new file mode 100644 index 0000000000..e21ccd24a5 --- /dev/null +++ b/include/download-instructions/windows-winget.php @@ -0,0 +1,20 @@ +

      +On the command line, run the following commands: +

      + +
      
      +# Download and install 
      +
      +winget install 
      +
      + + +[CmdletBinding()] +param( + [Parameter(Mandatory = $true, Position=0)] + [ValidatePattern('^\d+(\.\d+)?(\.\d+)?((alpha|beta|RC)\d*)?$')] + [string]$Version, + + [Parameter(Mandatory = $false, Position=1)] + [ValidateSet("x64", "x86")] + [string]$Arch = "x64", + + [Parameter(Mandatory = $false, Position=2)] + [bool]$ThreadSafe = $False, + + [Parameter(Mandatory = $false, Position=3)] + [string]$Timezone = 'UTC', + + [Parameter(Mandatory = $false)] + [ValidateSet('Auto', 'CurrentUser', 'AllUsers', 'Custom')] + [string]$Scope = 'Auto', + + [Parameter(Mandatory = $false)] + [string]$CustomPath +) + +Function Get-File { + param ( + [Parameter(Mandatory = $true, Position=0)] + [ValidateNotNullOrEmpty()] + [string] $Url, + [Parameter(Mandatory = $false, Position=1)] + [string] $FallbackUrl, + [Parameter(Mandatory = $false, Position=2)] + [string] $OutFile = '', + [Parameter(Mandatory = $false, Position=3)] + [int] $Retries = 3, + [Parameter(Mandatory = $false, Position=4)] + [int] $TimeoutSec = 0 + ) + + for ($i = 0; $i -lt $Retries; $i++) { + try { + if($OutFile -ne '') { + Invoke-WebRequest -Uri $Url -OutFile $OutFile -TimeoutSec $TimeoutSec -UseBasicParsing -ErrorAction Stop + return + } else { + return Invoke-WebRequest -Uri $Url -TimeoutSec $TimeoutSec -UseBasicParsing -ErrorAction Stop + } + } catch { + if ($i -eq ($Retries - 1)) { + if($FallbackUrl) { + try { + if($OutFile -ne '') { + Invoke-WebRequest -Uri $FallbackUrl -OutFile $OutFile -TimeoutSec $TimeoutSec -UseBasicParsing -ErrorAction Stop + return + } else { + return Invoke-WebRequest -Uri $FallbackUrl -TimeoutSec $TimeoutSec -UseBasicParsing -ErrorAction Stop + } + } catch { + throw "Failed to download the file from $Url and $FallbackUrl" + } + } else { + throw "Failed to download the file from $Url" + } + } + } + } +} + +Function Test-IsAdmin { + $p = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent()) + return $p.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) +} + +Function ConvertTo-BoolOrDefault { + param([string]$UserInput, [bool]$Default) + if ([string]::IsNullOrWhiteSpace($UserInput)) { return $Default } + switch -Regex ($UserInput.Trim().ToLowerInvariant()) { + '^(1|true|t|y|yes)$' { return $true } + '^(0|false|f|n|no)$' { return $false } + default { return $Default } + } +} + +Function Edit-PathForCompare([string]$p) { + if ([string]::IsNullOrWhiteSpace($p)) { return '' } + return ($p.Trim().Trim('"').TrimEnd('\')).ToLowerInvariant() +} + +Function Set-PathEntryFirst { + param( + [Parameter(Mandatory = $true)][ValidateSet('User','Machine')] [string]$Target, + [Parameter(Mandatory = $true)][string]$Entry + ) + + $entryNorm = Edit-PathForCompare $Entry + + $existing = [Environment]::GetEnvironmentVariable('Path', $Target) + if ($null -eq $existing) { $existing = '' } + + $parts = @() + foreach ($p in ($existing -split ';')) { + if (-not [string]::IsNullOrWhiteSpace($p)) { + if ((Edit-PathForCompare $p) -ne $entryNorm) { $parts += $p } + } + } + $newParts = @($Entry) + $parts + [Environment]::SetEnvironmentVariable('Path', ($newParts -join ';'), $Target) + + $procParts = @() + foreach ($p in ($env:Path -split ';')) { + if (-not [string]::IsNullOrWhiteSpace($p)) { + if ((Edit-PathForCompare $p) -ne $entryNorm) { $procParts += $p } + } + } + $env:Path = ((@($Entry) + $procParts) -join ';') +} + +function Send-EnvironmentChangeBroadcast { + try { + $sig = @' +using System; +using System.Runtime.InteropServices; +public static class NativeMethods { + [DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)] + public static extern IntPtr SendMessageTimeout( + IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam, + uint fuFlags, uint uTimeout, out UIntPtr lpdwResult); +} +'@ + Add-Type -TypeDefinition $sig -ErrorAction SilentlyContinue | Out-Null + $HWND_BROADCAST = [IntPtr]0xffff + $WM_SETTINGCHANGE = 0x001A + $SMTO_ABORTIFHUNG = 0x0002 + [UIntPtr]$result = [UIntPtr]::Zero + [NativeMethods]::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE, [UIntPtr]::Zero, "Environment", $SMTO_ABORTIFHUNG, 5000, [ref]$result) | Out-Null + } catch { } +} + +Function Test-EmptyDir([string]$Dir) { + if (-not (Test-Path -LiteralPath $Dir)) { + New-Item -ItemType Directory -Path $Dir -Force | Out-Null + return + } + $items = Get-ChildItem -LiteralPath $Dir -Force -ErrorAction SilentlyContinue + if ($items -and $items.Count -gt 0) { + throw "The directory '$Dir' is not empty. Please choose another location." + } +} + +Function Get-Semver { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true, Position=0)] + [ValidateNotNull()] + [ValidatePattern('^\d+\.\d+$')] + [string]$Version + ) + + $jsonUrl = "https://downloads.php.net/~windows/releases/releases.json" + $releases = ((Get-File -Url $jsonUrl).Content | ConvertFrom-Json) + + $semver = $releases.$Version.version + if ($null -ne $semver) { return [string]$semver } + + $html = (Get-File -Url "https://downloads.php.net/~windows/releases/archives/").Content + $rx = [regex]"php-($([regex]::Escape($Version))\.[0-9]+)" + $found = $rx.Matches($html) | ForEach-Object { $_.Groups[1].Value } | + Sort-Object { [version]$_ } -Descending | + Select-Object -First 1 + + if ($null -ne $found) { return [string]$found } + + throw "Unsupported PHP version series: $Version" +} + +Function Get-VSVersion { + param( + [Parameter(Mandatory = $true, Position=0)] + [ValidateNotNull()] + [ValidatePattern('^\d+\.\d+$')] + [string]$Version + ) + $map = @{ + '5.2' = 'VC6' + '5.3' = 'VC9'; '5.4' = 'VC9' + '5.5' = 'VC11'; '5.6' = 'VC11' + '7.0' = 'VC14'; '7.1' = 'VC14' + '7.2' = 'VC15'; '7.3' = 'VC15'; '7.4' = 'vc15' + '8.0' = 'vs16'; '8.1' = 'vs16'; '8.2' = 'vs16'; '8.3' = 'vs16' + '8.4' = 'vs17'; '8.5' = 'vs17' + } + + if ($map.ContainsKey($Version)) { + return $map[$Version] + } + throw "Unsupported PHP version: $Version" +} + +Function Get-ReleaseType { + param( + [Parameter(Mandatory = $true, Position=0)] + [ValidateNotNull()] + [ValidatePattern('^\d+(\.\d+)?(\.\d+)?((alpha|beta|RC)\d*)?$')] + [string]$Version + ) + if ($Version -match "[a-zA-Z]") { + return "qa" + } else { + return "releases" + } +} + +Function Get-PhpFromUrl { + param( + [Parameter(Mandatory = $true, Position=0)] + [ValidateNotNull()] + [ValidatePattern('^\d+\.\d+$')] + [string]$Version, + [Parameter(Mandatory = $true, Position=1)] + [ValidateNotNull()] + [ValidatePattern('^\d+(\.\d+)?(\.\d+)?((alpha|beta|RC)\d*)?$')] + [string]$Semver, + [Parameter(Mandatory = $false, Position=2)] + [ValidateSet("x64", "x86")] + [string]$Arch = "x64", + [Parameter(Mandatory = $false, Position=3)] + [bool]$ThreadSafe = $false, + [Parameter(Mandatory = $true, Position=4)] + [ValidateNotNull()] + [ValidateLength(1, [int]::MaxValue)] + [string]$OutFile + ) + $vs = Get-VSVersion $Version + $ts = if ($ThreadSafe) { "ts" } else { "nts" } + $zipName = if ($ThreadSafe) { "php-$Semver-Win32-$vs-$Arch.zip" } else { "php-$Semver-$ts-Win32-$vs-$Arch.zip" } + $type = Get-ReleaseType $Semver + + $base = "https://downloads.php.net/~windows/$type" + try { + Get-File -Url "$base/$zipName" -OutFile $OutFile + } catch { + try { + Get-File -Url "$base/archives/$zipName" -OutFile $OutFile + } catch { + throw "Failed to download PHP $Semver." + } + } +} + +$tempFile = [IO.Path]::ChangeExtension([IO.Path]::GetTempFileName(), '.zip') + +try { + $isAdmin = Test-IsAdmin + + if (-not $PSBoundParameters.ContainsKey('Arch')) { + Write-Host "" + Write-Host "What architecture would you like to install?" + Write-Host "Enter x64 for 64-bit" + Write-Host "Enter x86 for 32-bit" + Write-Host "Press Enter to use default ($Arch)" + $archSel = Read-Host "Please enter [x64/x86]" + if (-not [string]::IsNullOrWhiteSpace($archSel) -and @('x64','x86') -contains $archSel.Trim()) { + $Arch = $archSel.Trim() + } + } + + if (-not $PSBoundParameters.ContainsKey('ThreadSafe')) { + Write-Host "" + Write-Host "What ThreadSafe option would you like to use?" + Write-Host "Enter true for ThreadSafe" + Write-Host "Enter false for Non-ThreadSafe" + Write-Host "Press Enter to use default ($ThreadSafe)" + $tsSel = Read-Host "Please enter [true/false]" + $ThreadSafe = ConvertTo-BoolOrDefault -UserInput $tsSel -Default $ThreadSafe + } + + if (-not $PSBoundParameters.ContainsKey('Timezone')) { + Write-Host "" + Write-Host "What timezone would you like to set in php.ini?" + Write-Host "Press Enter to use default ($Timezone)" + $tzSel = Read-Host "Please enter timezone" + if (-not [string]::IsNullOrWhiteSpace($tzSel)) { + $Timezone = $tzSel.Trim() + } + } + + if (-not $PSBoundParameters.ContainsKey('Scope')) { + Write-Host "" + Write-Host "Would you like to install PHP for:" + Write-Host "Enter 1 for Current user" + Write-Host "Enter 2 for All users (requires admin elevation)" + Write-Host "Enter 3 to install PHP at a custom path" + Write-Host "Press Enter to choose automatically" + $sel = Read-Host "Please enter [1-3]" + switch ($sel) { + '1' { $Scope = 'CurrentUser' } + '2' { $Scope = 'AllUsers' } + '3' { $Scope = 'Custom' } + default { $Scope = 'Auto' } + } + } + + if ($Scope -eq 'Custom' -and -not $PSBoundParameters.ContainsKey('CustomPath')) { + $defaultCustom = if ($CustomPath) { $CustomPath } else { (Join-Path $env:LOCALAPPDATA 'Programs\PHP') } + Write-Host "" + Write-Host "Please enter the custom installation path." + Write-Host "Press Enter to use default ($defaultCustom)" + $cr = Read-Host "Please enter" + $CustomPath = if ([string]::IsNullOrWhiteSpace($cr)) { $defaultCustom } else { $cr.Trim() } + } + + if ($Version -match "^\d+\.\d+$") { + $Semver = Get-Semver $Version + $MajorMinor = $Version + } else { + $Semver = $Version + if ($Semver -notmatch '^(\d+\.\d+)') { throw "Could not derive major.minor from Version '$Version'." } + $MajorMinor = $Matches[1] + } + + if ([version]$MajorMinor -lt [version]'5.5' -and $Arch -eq 'x64') { + $Arch = 'x86' + Write-Host "PHP series $MajorMinor does not support x64 on Windows. Using x86." + } + + $EffectiveScope = $Scope + if ($Scope -eq 'Auto') { + $EffectiveScope = if ($isAdmin) { 'AllUsers' } else { 'CurrentUser' } + } + + if ($EffectiveScope -eq 'AllUsers' -and -not $isAdmin) { + throw "AllUsers install selected but this session is not elevated. Re-run as Administrator or choose CurrentUser/Custom." + } + + $installRootDirectory = switch ($EffectiveScope) { + 'CurrentUser' { Join-Path $env:LOCALAPPDATA 'Programs\PHP' } + 'AllUsers' { + $pf = $env:ProgramFiles + if ($Arch -eq 'x86' -and ${env:ProgramFiles(x86)}) { $pf = ${env:ProgramFiles(x86)} } + Join-Path $pf 'PHP' + } + 'Custom' { + if ([string]::IsNullOrWhiteSpace($CustomPath)) { throw "Scope=Custom requires -CustomPath (or interactive input)." } + [Environment]::ExpandEnvironmentVariables($CustomPath) + } + default { throw "Unexpected scope: $EffectiveScope" } + } + + if (-not (Test-Path -LiteralPath $installRootDirectory)) { + New-Item -ItemType Directory -Path $installRootDirectory | Out-Null + } + + $tsTag = if ($ThreadSafe) { 'ts' } else { 'nts' } + $installDirectory = Join-Path (Join-Path (Join-Path $installRootDirectory $Semver) $tsTag) $Arch + $currentLink = Join-Path $installRootDirectory 'current' + + Test-EmptyDir $installDirectory + + Write-Host "Downloading PHP $Semver ($Arch, $tsTag) -> $installDirectory" + Get-PhpFromUrl $MajorMinor $Semver $Arch $ThreadSafe $tempFile + + Expand-Archive -Path $tempFile -DestinationPath $installDirectory -Force -ErrorAction Stop + + $phpIniProd = Join-Path $installDirectory "php.ini-production" + if(-not(Test-Path $phpIniProd)) { + $phpIniProd = Join-Path $installDirectory "php.ini-recommended" + } + $phpIni = Join-Path $installDirectory "php.ini" + if (Test-Path $phpIniProd) { + Copy-Item $phpIniProd $phpIni -Force + + $extensionDir = Join-Path $installDirectory "ext" + (Get-Content $phpIni) -replace '^extension_dir = "./"', "extension_dir = `"$extensionDir`"" | Set-Content $phpIni + (Get-Content $phpIni) -replace ';\s?extension_dir = "ext"', "extension_dir = `"$extensionDir`"" | Set-Content $phpIni + (Get-Content $phpIni) -replace ';\s?date.timezone =', "date.timezone = `"$Timezone`"" | Set-Content $phpIni + } + + if (Test-Path -LiteralPath $currentLink) { + Remove-Item -LiteralPath $currentLink -Force -Recurse + } + New-Item -ItemType Junction -Path $currentLink -Target $installDirectory | Out-Null + + $pathTarget = if ($EffectiveScope -eq 'AllUsers') { 'Machine' } else { 'User' } + Set-PathEntryFirst -Target $pathTarget -Entry $currentLink + Send-EnvironmentChangeBroadcast + + Write-Host "" + Write-Host "Installed PHP ${Semver}: $installDirectory" + Write-Host "It has been linked to $currentLink and added to PATH." + Write-Host "Please restart any open Command Prompt/PowerShell windows or IDEs to pick up the new PATH." + Write-Host "You can run 'php -v' to verify the installation in the new window." +} catch { + Write-Error $_ + Exit 1 +} finally { + if (Test-Path $tempFile) { + Remove-Item $tempFile -Force -ErrorAction SilentlyContinue + } +} diff --git a/include/email-validation.inc b/include/email-validation.inc index 3c38d51eb3..a4045127b2 100644 --- a/include/email-validation.inc +++ b/include/email-validation.inc @@ -12,13 +12,13 @@ function is_emailable_address($email) { $email = filter_var($email, FILTER_VALIDATE_EMAIL); // No email, no validation - if (! $email) { + if (!$email) { return false; } $host = substr($email, strrpos($email, '@') + 1); // addresses from our mailing-list servers - $host_regex = "!(lists\.php\.net|chek[^\.*]\.com)!i"; + $host_regex = "!(lists\.php\.net|chek[^.*]\.com)!i"; if (preg_match($host_regex, $host)) { return false; } @@ -42,67 +42,67 @@ function is_emailable_address($email) * real_person@thisispamsendoftheweb.example.com */ function blacklisted($email) { - $mosquitoes = array( + $mosquitoes = [ 'saradhaaa@gmail.com', 'mg-tuzi@yahoo.com.cn', 'bitlifesciences', 'bitconferences', - 'grandeurhk', - 'legaladvantagellc', - 'sanath7285', - 'omicsgroup', - '@sina.com', - 'omicsonline', - 'bit-ibio', - 'evabrianparker', - 'bitpetrobio', - 'cogzidel', - 'vaccinecon', - 'bit-ica', - 'geki@live.cl', - 'wcd-bit', - 'bit-pepcon', - 'proformative.com', - 'bitcongress', - 'medifest@gmail.com', - '@sina.cn', - 'wcc-congress', - 'albanezi', - 'supercoderarticle', - 'somebody@hotmail.com', - 'bit-cloudcon', - 'eclinicalcentral', - 'iddst.com', - 'achromicpoint.com', - 'wcgg-bit', - '@163.com', - 'a-hassani2011@live.fr', - 'analytix-congress', - 'nexus-irc', - 'bramyao23', - 'dbmall27@gmail.com', - 'robinsonm750@gmail.com', - 'enu.kz', - 'isim-congress', - '.*cmcb.*', - 'molmedcon', - 'agbtinternational', - 'biosensors', - 'conferenceseries.net', - 'wirelesscommunication', - 'clinicalpharmacy', - 'antibiotics', - 'globaleconomics', - 'sandeepsingh.torrent117232@gmail.com', - 'herbals', - 'europsychiatrysummit', - 'antibodies', - 'graduatecentral', - 'a@a.com', - '@insightconferences.com', - '@conferenceseries.com', - ); + 'grandeurhk', + 'legaladvantagellc', + 'sanath7285', + 'omicsgroup', + '@sina.com', + 'omicsonline', + 'bit-ibio', + 'evabrianparker', + 'bitpetrobio', + 'cogzidel', + 'vaccinecon', + 'bit-ica', + 'geki@live.cl', + 'wcd-bit', + 'bit-pepcon', + 'proformative.com', + 'bitcongress', + 'medifest@gmail.com', + '@sina.cn', + 'wcc-congress', + 'albanezi', + 'supercoderarticle', + 'somebody@hotmail.com', + 'bit-cloudcon', + 'eclinicalcentral', + 'iddst.com', + 'achromicpoint.com', + 'wcgg-bit', + '@163.com', + 'a-hassani2011@live.fr', + 'analytix-congress', + 'nexus-irc', + 'bramyao23', + 'dbmall27@gmail.com', + 'robinsonm750@gmail.com', + 'enu.kz', + 'isim-congress', + '.*cmcb.*', + 'molmedcon', + 'agbtinternational', + 'biosensors', + 'conferenceseries.net', + 'wirelesscommunication', + 'clinicalpharmacy', + 'antibiotics', + 'globaleconomics', + 'sandeepsingh.torrent117232@gmail.com', + 'herbals', + 'europsychiatrysummit', + 'antibodies', + 'graduatecentral', + 'a@a.com', + '@insightconferences.com', + '@conferenceseries.com', + ]; foreach ($mosquitoes as $m) { - if (preg_match('/'.preg_quote($m, '/').'/i',$email)) return true; + if (preg_match('/' . preg_quote($m, '/') . '/i',$email)) return true; } } diff --git a/include/errors.inc b/include/errors.inc index bfdada3331..6bc9cf6c74 100644 --- a/include/errors.inc +++ b/include/errors.inc @@ -5,12 +5,14 @@ not available. */ +use phpweb\I18n\Languages; + // A 'good looking' 404 error message page -function error_404() +function error_404(): void { global $MYSITE; status_header(404); - site_header('404 Not Found', array("noindex")); + site_header('404 Not Found', ["noindex"]); echo "

      Not Found

      \n

      " . htmlspecialchars(substr($MYSITE, 0, -1) . $_SERVER['REQUEST_URI']) . " not found on this server.

      \n"; @@ -19,11 +21,11 @@ function error_404() } // A 'good looking' 404 error message page for manual pages -function error_404_manual() +function error_404_manual(): void { global $MYSITE; status_header(404); - site_header('404 Not Found', array("noindex")); + site_header('404 Not Found', ["noindex"]); echo "

      Not Found

      \n" . "

      The manual page you are looking for (" . htmlspecialchars(substr($MYSITE, 0, -1) . $_SERVER['REQUEST_URI']) . @@ -35,11 +37,11 @@ function error_404_manual() } // An error message page for manual pages from inactive languages -function error_inactive_manual_page($lang_name, $en_page) +function error_inactive_manual_page($lang_name, $en_page): void { - global $MYSITE, $ACTIVE_ONLINE_LANGUAGES; + global $MYSITE; status_header(404); - site_header('Page gone', array("noindex")); + site_header('Page gone', ["noindex"]); echo "

      Page gone

      \n" . "

      The " . htmlspecialchars($lang_name) . " manual page you are looking for (" . htmlspecialchars(substr($MYSITE, 0, -1) . $_SERVER['REQUEST_URI']) . @@ -48,7 +50,7 @@ function error_inactive_manual_page($lang_name, $en_page) echo "

      The English page is available at {$en_url}

      \n"; echo "

      Several other languages are also available:

      \n"; echo "
        \n"; - foreach ($ACTIVE_ONLINE_LANGUAGES as $alt_lang => $alt_lang_name) { + foreach (Languages::ACTIVE_ONLINE_LANGUAGES as $alt_lang => $alt_lang_name) { if ($alt_lang === "en") { continue; } @@ -61,10 +63,10 @@ function error_inactive_manual_page($lang_name, $en_page) } // This service is not working right now -function error_noservice() +function error_noservice(): void { global $MYSITE; - site_header('Service not working', array("noindex")); + site_header('Service not working', ["noindex"]); echo "

        Service not working

        \n" . "

        The service you tried to access with " . htmlspecialchars(substr($MYSITE, 0, -1) . $_SERVER['REQUEST_URI']) . @@ -76,35 +78,35 @@ function error_noservice() } // There is no such mirror -function error_nomirror($mirror) { - site_header("No such mirror", array("noindex")); - echo "

        No such mirror

        \n

        The mirror you tried to access (" . - htmlspecialchars($mirror) . - ") is not registered php.net mirror. Please check back later," . - " or if the problem persists, " . - "contact the webmasters.

        \n"; - site_footer(); - exit; +function error_nomirror($mirror): void { + site_header("No such mirror", ["noindex"]); + echo "

        No such mirror

        \n

        The mirror you tried to access (" . + htmlspecialchars($mirror) . + ") is not registered php.net mirror. Please check back later," . + " or if the problem persists, " . + "contact the webmasters.

        \n"; + site_footer(); + exit; } // Send out a proper status header function status_header(int $status): bool { - $text = [ - 200 => 'OK', - 301 => 'Moved Permanently', - 302 => 'Found', - 404 => 'Not Found', - ]; - if (!isset($text[$status])) { - return false; - } - - // Only respond with HTTP/1.0 for a 1.0 request specifically. - // Respond with 1.1 for anything else. - $proto = strcasecmp($_SERVER['SERVER_PROTOCOL'], 'HTTP/1.0') ? '1.1' : '1.0'; - - @header("HTTP/$proto $status {$text[$status]}"); + $text = [ + 200 => 'OK', + 301 => 'Moved Permanently', + 302 => 'Found', + 404 => 'Not Found', + ]; + if (!isset($text[$status])) { + return false; + } + + // Only respond with HTTP/1.0 for a 1.0 request specifically. + // Respond with 1.1 for anything else. + $proto = strcasecmp($_SERVER['SERVER_PROTOCOL'], 'HTTP/1.0') ? '1.1' : '1.0'; + + @header("HTTP/$proto $status {$text[$status]}"); @header("Status: $status {$text[$status]}", true, $status); return true; @@ -123,381 +125,451 @@ The most commonly searched terms have also been added. TODO: Determine if we want to continue 301 -OR- make these official URLs. ******************************************************************************/ -function is_known_ini (string $ini): ?string { - $inis = [ - 'engine' => 'apache.configuration.php#ini.engine', - 'short-open-tag' => 'ini.core.php#ini.short-open-tag', - 'asp-tags' => 'ini.core.php#ini.asp-tags', - 'precision' => 'ini.core.php#ini.precision', - 'y2k-compliance' => 'ini.core.php#ini.y2k-compliance', - 'output-buffering' => 'outcontrol.configuration.php#ini.output-buffering', - 'output-handler' => 'outcontrol.configuration.php#ini.output-handler', - 'zlib.output-compression' => 'zlib.configuration.php#ini.zlib.output-compression', - 'zlib.output-compression-level' => 'zlib.configuration.php#ini.zlib.output-compression-level', - 'zlib.output-handler' => 'zlib.configuration.php#ini.zlib.output-handler', - 'implicit-flush' => 'outcontrol.configuration.php#ini.implicit-flush', - 'allow-call-time-pass-reference'=> 'ini.core.php#ini.allow-call-time-pass-reference', - 'safe-mode' => 'ini.sect.safe-mode.php#ini.safe-mode', - 'safe-mode-gid' => 'ini.sect.safe-mode.php#ini.safe-mode-gid', - 'safe-mode-include-dir' => 'ini.sect.safe-mode.php#ini.safe-mode-include-dir', - 'safe-mode-exec-dir' => 'ini.sect.safe-mode.php#ini.safe-mode-exec-dir', - 'safe-mode-allowed-env-vars' => 'ini.sect.safe-mode.php#ini.safe-mode-allowed-env-vars', - 'safe-mode-protected-env-vars' => 'ini.sect.safe-mode.php#ini.safe-mode-protected-env-vars', - 'open-basedir' => 'ini.core.php#ini.open-basedir', - 'disable-functions' => 'ini.core.php#ini.disable-functions', - 'disable-classes' => 'ini.core.php#ini.disable-classes', - 'syntax-highlighting' => 'misc.configuration.php#ini.syntax-highlighting', - 'ignore-user-abort' => 'misc.configuration.php#ini.ignore-user-abort', - 'realpath-cache-size' => 'ini.core.php#ini.realpath-cache-size', - 'realpath-cache-ttl' => 'ini.core.php#ini.realpath-cache-ttl', - 'expose-php' => 'ini.core.php#ini.expose-php', - 'max-execution-time' => 'info.configuration.php#ini.max-execution-time', - 'max-input-time' => 'info.configuration.php#ini.max-input-time', - 'max-input-nesting-level' => 'info.configuration.php#ini.max-input-nesting-level', - 'memory-limit' => 'ini.core.php#ini.memory-limit', - 'error-reporting' => 'errorfunc.configuration.php#ini.error-reporting', - 'display-errors' => 'errorfunc.configuration.php#ini.display-errors', - 'display-startup-errors' => 'errorfunc.configuration.php#ini.display-startup-errors', - 'log-errors' => 'errorfunc.configuration.php#ini.log-errors', - 'log-errors-max-len' => 'errorfunc.configuration.php#ini.log-errors-max-len', - 'ignore-repeated-errors' => 'errorfunc.configuration.php#ini.ignore-repeated-errors', - 'ignore-repeated-source' => 'errorfunc.configuration.php#ini.ignore-repeated-source', - 'report-memleaks' => 'errorfunc.configuration.php#ini.report-memleaks', - 'track-errors' => 'errorfunc.configuration.php#ini.track-errors', - 'xmlrpc-errors' => 'errorfunc.configuration.php#ini.xmlrpc-errors', - 'html-errors' => 'errorfunc.configuration.php#ini.html-errors', - 'docref-root' => 'errorfunc.configuration.php#ini.docref-root', - 'docref-ext' => 'errorfunc.configuration.php#ini.docref-ext', - 'error-prepend-string' => 'errorfunc.configuration.php#ini.error-prepend-string', - 'error-append-string' => 'errorfunc.configuration.php#ini.error-append-string', - 'error-log' => 'errorfunc.configuration.php#ini.error-log', - 'syslog.facility' => 'errorfunc.configuration.php#ini.syslog.facility', - 'syslog.filter' => 'errorfunc.configuration.php#ini.syslog.filter', - 'syslog.ident' => 'errorfunc.configuration.php#ini.syslog.ident', - 'arg-separator.output' => 'ini.core.php#ini.arg-separator.output', - 'arg-separator.input' => 'ini.core.php#ini.arg-separator.input', - 'variables-order' => 'ini.core.php#ini.variables-order', - 'request-order' => 'ini.core.php#ini.request-order', - 'register-globals' => 'ini.core.php#ini.register-globals', - 'register-long-arrays' => 'ini.core.php#ini.register-long-arrays', - 'register-argc-argv' => 'ini.core.php#ini.register-argc-argv', - 'auto-globals-jit' => 'ini.core.php#ini.auto-globals-jit', - 'post-max-size' => 'ini.core.php#ini.post-max-size', - 'magic-quotes-gpc' => 'info.configuration.php#ini.magic-quotes-gpc', - 'magic-quotes-runtime' => 'info.configuration.php#ini.magic-quotes-runtime', - 'magic-quotes-sybase' => 'sybase.configuration.php#ini.magic-quotes-sybase', - 'auto-prepend-file' => 'ini.core.php#ini.auto-prepend-file', - 'auto-append-file' => 'ini.core.php#ini.auto-append-file', - 'default-mimetype' => 'ini.core.php#ini.default-mimetype', - 'default-charset' => 'ini.core.php#ini.default-charset', - 'always-populate-raw-post-data' => 'ini.core.php#ini.always-populate-raw-post-data', - 'include-path' => 'ini.core.php#ini.include-path', - 'doc-root' => 'ini.core.php#ini.doc-root', - 'user-dir' => 'ini.core.php#ini.user-dir', - 'extension-dir' => 'ini.core.php#ini.extension-dir', - 'enable-dl' => 'info.configuration.php#ini.enable-dl', - 'cgi.force-redirect' => 'ini.core.php#ini.cgi.force-redirect', - 'cgi.redirect-status-env' => 'ini.core.php#ini.cgi.redirect-status-env', - 'cgi.fix-pathinfo' => 'ini.core.php#ini.cgi.fix-pathinfo', - 'fastcgi.impersonate' => 'ini.core.php#ini.fastcgi.impersonate', - 'cgi.rfc2616-headers' => 'ini.core.php#ini.cgi.rfc2616-headers', - 'file-uploads' => 'ini.core.php#ini.file-uploads', - 'upload-tmp-dir' => 'ini.core.php#ini.upload-tmp-dir', - 'upload-max-filesize' => 'ini.core.php#ini.upload-max-filesize', - 'allow-url-fopen' => 'filesystem.configuration.php#ini.allow-url-fopen', - 'allow-url-include' => 'filesystem.configuration.php#ini.allow-url-include', - 'from' => 'filesystem.configuration.php#ini.from', - 'user-agent' => 'filesystem.configuration.php#ini.user-agent', - 'default-socket-timeout' => 'filesystem.configuration.php#ini.default-socket-timeout', - 'auto-detect-line-endings' => 'filesystem.configuration.php#ini.auto-detect-line-endings', - 'date.timezone' => 'datetime.configuration.php#ini.date.timezone', - 'date.default-latitude' => 'datetime.configuration.php#ini.date.default-latitude', - 'date.default-longitude' => 'datetime.configuration.php#ini.date.default-longitude', - 'date.sunrise-zenith' => 'datetime.configuration.php#ini.date.sunrise-zenith', - 'date.sunset-zenith' => 'datetime.configuration.php#ini.date.sunset-zenith', - 'filter.default' => 'filter.configuration.php#ini.filter.default', - 'filter.default-flags' => 'filter.configuration.php#ini.filter.default-flags', - 'sqlite.assoc-case' => 'sqlite.configuration.php#ini.sqlite.assoc-case', - 'pcre.backtrack-limit' => 'pcre.configuration.php#ini.pcre.backtrack-limit', - 'pcre.recursion-limit' => 'pcre.configuration.php#ini.pcre.recursion-limit', - 'pdo-odbc.connection-pooling' => 'ref.pdo-odbc.php#ini.pdo-odbc.connection-pooling', - 'phar.readonly' => 'phar.configuration.php#ini.phar.readonly', - 'phar.require-hash' => 'phar.configuration.php#ini.phar.require-hash', - 'define-syslog-variables' => 'network.configuration.php#ini.define-syslog-variables', - 'smtp' => 'mail.configuration.php#ini.smtp', - 'smtp-port' => 'mail.configuration.php#ini.smtp-port', - 'sendmail-from' => 'mail.configuration.php#ini.sendmail-from', - 'sendmail-path' => 'mail.configuration.php#ini.sendmail-path', - 'sql.safe-mode' => 'ini.core.php#ini.sql.safe-mode', - 'odbc.default-db' => 'odbc.configuration.php#ini.uodbc.default-db', - 'odbc.default-user' => 'odbc.configuration.php#ini.uodbc.default-user', - 'odbc.default-pw' => 'odbc.configuration.php#ini.uodbc.default-pw', - 'odbc.allow-persistent' => 'odbc.configuration.php#ini.uodbc.allow-persistent', - 'odbc.check-persistent' => 'odbc.configuration.php#ini.uodbc.check-persistent', - 'odbc.max-persistent' => 'odbc.configuration.php#ini.uodbc.max-persistent', - 'odbc.max-links' => 'odbc.configuration.php#ini.uodbc.max-links', - 'odbc.defaultlrl' => 'odbc.configuration.php#ini.uodbc.defaultlrl', - 'odbc.defaultbinmode' => 'odbc.configuration.php#ini.uodbc.defaultbinmode', - 'mysql.allow-local-infile' => 'mysql.configuration.php#ini.mysql.allow-local-infile', - 'mysql.allow-persistent' => 'mysql.configuration.php#ini.mysql.allow-persistent', - 'mysql.max-persistent' => 'mysql.configuration.php#ini.mysql.max-persistent', - 'mysql.max-links' => 'mysql.configuration.php#ini.mysql.max-links', - 'mysql.default-port' => 'mysql.configuration.php#ini.mysql.default-port', - 'mysql.default-socket' => 'mysql.configuration.php#ini.mysql.default-socket', - 'mysql.default-host' => 'mysql.configuration.php#ini.mysql.default-host', - 'mysql.default-user' => 'mysql.configuration.php#ini.mysql.default-user', - 'mysql.default-password' => 'mysql.configuration.php#ini.mysql.default-password', - 'mysql.connect-timeout' => 'mysql.configuration.php#ini.mysql.connect-timeout', - 'mysql.trace-mode' => 'mysql.configuration.php#ini.mysql.trace-mode', - 'mysqli.allow-local-infile' => 'mysqli.configuration.php#ini.mysqli.allow-local-infile', - 'mysqli.max-links' => 'mysqli.configuration.php#ini.mysqli.max-links', - 'mysqli.allow-persistent' => 'mysqli.configuration.php#ini.mysqli.allow-persistent', - 'mysqli.default-port' => 'mysqli.configuration.php#ini.mysqli.default-port', - 'mysqli.default-socket' => 'mysqli.configuration.php#ini.mysqli.default-socket', - 'mysqli.default-host' => 'mysqli.configuration.php#ini.mysqli.default-host', - 'mysqli.default-user' => 'mysqli.configuration.php#ini.mysqli.default-user', - 'mysqli.default-pw' => 'mysqli.configuration.php#ini.mysqli.default-pw', - 'oci8.privileged-connect' => 'oci8.configuration.php#ini.oci8.privileged-connect', - 'oci8.max-persistent' => 'oci8.configuration.php#ini.oci8.max-persistent', - 'oci8.persistent-timeout' => 'oci8.configuration.php#ini.oci8.persistent-timeout', - 'oci8.ping-interval' => 'oci8.configuration.php#ini.oci8.ping-interval', - 'oci8.statement-cache-size' => 'oci8.configuration.php#ini.oci8.statement-cache-size', - 'oci8.default-prefetch' => 'oci8.configuration.php#ini.oci8.default-prefetch', - 'oci8.old-oci-close-semantics' => 'oci8.configuration.php#ini.oci8.old-oci-close-semantics', - 'opcache.preload' => 'opcache.configuration.php#ini.opcache.preload', - 'pgsql.allow-persistent' => 'pgsql.configuration.php#ini.pgsql.allow-persistent', - 'pgsql.auto-reset-persistent' => 'pgsql.configuration.php#ini.pgsql.auto-reset-persistent', - 'pgsql.max-persistent' => 'pgsql.configuration.php#ini.pgsql.max-persistent', - 'pgsql.max-links' => 'pgsql.configuration.php#ini.pgsql.max-links', - 'pgsql.ignore-notice' => 'pgsql.configuration.php#ini.pgsql.ignore-notice', - 'pgsql.log-notice' => 'pgsql.configuration.php#ini.pgsql.log-notice', - 'sqlite3.extension-dir' => 'sqlite3.configuration.php#ini.sqlite3.extension-dir', - 'sybct.allow-persistent' => 'sybase.configuration.php#ini.sybct.allow-persistent', - 'sybct.max-persistent' => 'sybase.configuration.php#ini.sybct.max-persistent', - 'sybct.max-links' => 'sybase.configuration.php#ini.sybct.max-links', - 'sybct.min-server-severity' => 'sybase.configuration.php#ini.sybct.min-server-severity', - 'sybct.min-client-severity' => 'sybase.configuration.php#ini.sybct.min-client-severity', - 'sybct.timeout' => 'sybase.configuration.php#ini.sybct.timeout', - 'bcmath.scale' => 'bc.configuration.php#ini.bcmath.scale', - 'browscap' => 'misc.configuration.php#ini.browscap', - 'session.save-handler' => 'session.configuration.php#ini.session.save-handler', - 'session.save-path' => 'session.configuration.php#ini.session.save-path', - 'session.use-cookies' => 'session.configuration.php#ini.session.use-cookies', - 'session.cookie-secure' => 'session.configuration.php#ini.session.cookie-secure', - 'session.use-only-cookies' => 'session.configuration.php#ini.session.use-only-cookies', - 'session.name' => 'session.configuration.php#ini.session.name', - 'session.auto-start' => 'session.configuration.php#ini.session.auto-start', - 'session.cookie-lifetime' => 'session.configuration.php#ini.session.cookie-lifetime', - 'session.cookie-path' => 'session.configuration.php#ini.session.cookie-path', - 'session.cookie-domain' => 'session.configuration.php#ini.session.cookie-domain', - 'session.cookie-httponly' => 'session.configuration.php#ini.session.cookie-httponly', - 'session.serialize-handler' => 'session.configuration.php#ini.session.serialize-handler', - 'session.gc-probability' => 'session.configuration.php#ini.session.gc-probability', - 'session.gc-divisor' => 'session.configuration.php#ini.session.gc-divisor', - 'session.gc-maxlifetime' => 'session.configuration.php#ini.session.gc-maxlifetime', - 'session.bug-compat-42' => 'session.configuration.php#ini.session.bug-compat-42', - 'session.bug-compat-warn' => 'session.configuration.php#ini.session.bug-compat-warn', - 'session.referer-check' => 'session.configuration.php#ini.session.referer-check', - 'session.entropy-length' => 'session.configuration.php#ini.session.entropy-length', - 'session.entropy-file' => 'session.configuration.php#ini.session.entropy-file', - 'session.cache-limiter' => 'session.configuration.php#ini.session.cache-limiter', - 'session.cache-expire' => 'session.configuration.php#ini.session.cache-expire', - 'session.sid-length' => 'session.configuration.php#ini.session.sid-length', - 'session.use-trans-sid' => 'session.configuration.php#ini.session.use-trans-sid', - 'session.hash-function' => 'session.configuration.php#ini.session.hash-function', - 'session.hash-bits-per-character' => 'session.configuration.php#ini.session.hash-bits-per-character', - 'session.upload-progress.enabled' => 'session.configuration.php#ini.session.upload-progress.enabled', - 'session.upload-progress.cleanup' => 'session.configuration.php#ini.session.upload-progress.cleanup', - 'session.upload-progress.prefix' => 'session.configuration.php#ini.session.upload-progress.prefix', - 'session.upload-progress.name' => 'session.configuration.php#ini.session.upload-progress.name', - 'session.upload-progress.freq' => 'session.configuration.php#ini.session.upload-progress.freq', - 'session.upload-progress.min-freq' => 'session.configuration.php#ini.session.upload-progress.min-freq', - 'url-rewriter.tags' => 'session.configuration.php#ini.url-rewriter.tags', - 'assert.active' => 'info.configuration.php#ini.assert.active', - 'assert.exception' => 'info.configuration.php#ini.assert.exception', - 'assert.warning' => 'info.configuration.php#ini.assert.warning', - 'assert.bail' => 'info.configuration.php#ini.assert.bail', - 'assert.callback' => 'info.configuration.php#ini.assert.callback', - 'assert.quiet-eval' => 'info.configuration.php#ini.assert.quiet-eval', - 'zend.enable-gc' => 'info.configuration.php#ini.zend.enable-gc', - 'com.typelib-file' => 'com.configuration.php#ini.com.typelib-file', - 'com.allow-dcom' => 'com.configuration.php#ini.com.allow-dcom', - 'com.autoregister-typelib' => 'com.configuration.php#ini.com.autoregister-typelib', - 'com.autoregister-casesensitive'=> 'com.configuration.php#ini.com.autoregister-casesensitive', - 'com.autoregister-verbose' => 'com.configuration.php#ini.com.autoregister-verbose', - 'mbstring.language' => 'mbstring.configuration.php#ini.mbstring.language', - 'mbstring.internal-encoding' => 'mbstring.configuration.php#ini.mbstring.internal-encoding', - 'mbstring.http-input' => 'mbstring.configuration.php#ini.mbstring.http-input', - 'mbstring.http-output' => 'mbstring.configuration.php#ini.mbstring.http-output', - 'mbstring.encoding-translation' => 'mbstring.configuration.php#ini.mbstring.encoding-translation', - 'mbstring.detect-order' => 'mbstring.configuration.php#ini.mbstring.detect-order', - 'mbstring.substitute-character' => 'mbstring.configuration.php#ini.mbstring.substitute-character', - 'mbstring.func-overload' => 'mbstring.configuration.php#ini.mbstring.func-overload', - 'gd.jpeg-ignore-warning' => 'image.configuration.php#ini.image.jpeg-ignore-warning', - 'exif.encode-unicode' => 'exif.configuration.php#ini.exif.encode-unicode', - 'exif.decode-unicode-motorola' => 'exif.configuration.php#ini.exif.decode-unicode-motorola', - 'exif.decode-unicode-intel' => 'exif.configuration.php#ini.exif.decode-unicode-intel', - 'exif.encode-jis' => 'exif.configuration.php#ini.exif.encode-jis', - 'exif.decode-jis-motorola' => 'exif.configuration.php#ini.exif.decode-jis-motorola', - 'exif.decode-jis-intel' => 'exif.configuration.php#ini.exif.decode-jis-intel', - 'tidy.default-config' => 'tidy.configuration.php#ini.tidy.default-config', - 'tidy.clean-output' => 'tidy.configuration.php#ini.tidy.clean-output', - 'soap.wsdl-cache-enabled' => 'soap.configuration.php#ini.soap.wsdl-cache-enabled', - 'soap.wsdl-cache-dir' => 'soap.configuration.php#ini.soap.wsdl-cache-dir', - 'soap.wsdl-cache-ttl' => 'soap.configuration.php#ini.soap.wsdl-cache-ttl', - ]; - - return $inis[$ini] ?? null; +function is_known_ini(string $ini): ?string { + $inis = [ + 'engine' => 'apache.configuration.php#ini.engine', + 'short-open-tag' => 'ini.core.php#ini.short-open-tag', + 'asp-tags' => 'ini.core.php#ini.asp-tags', + 'precision' => 'ini.core.php#ini.precision', + 'y2k-compliance' => 'ini.core.php#ini.y2k-compliance', + 'output-buffering' => 'outcontrol.configuration.php#ini.output-buffering', + 'output-handler' => 'outcontrol.configuration.php#ini.output-handler', + 'zlib.output-compression' => 'zlib.configuration.php#ini.zlib.output-compression', + 'zlib.output-compression-level' => 'zlib.configuration.php#ini.zlib.output-compression-level', + 'zlib.output-handler' => 'zlib.configuration.php#ini.zlib.output-handler', + 'implicit-flush' => 'outcontrol.configuration.php#ini.implicit-flush', + 'allow-call-time-pass-reference' => 'ini.core.php#ini.allow-call-time-pass-reference', + 'open-basedir' => 'ini.core.php#ini.open-basedir', + 'disable-functions' => 'ini.core.php#ini.disable-functions', + 'disable-classes' => 'ini.core.php#ini.disable-classes', + 'zend.assertions' => 'ini.core.php#ini.zend.assertions', + 'syntax-highlighting' => 'misc.configuration.php#ini.syntax-highlighting', + 'ignore-user-abort' => 'misc.configuration.php#ini.ignore-user-abort', + 'realpath-cache-size' => 'ini.core.php#ini.realpath-cache-size', + 'realpath-cache-ttl' => 'ini.core.php#ini.realpath-cache-ttl', + 'expose-php' => 'ini.core.php#ini.expose-php', + 'max-execution-time' => 'info.configuration.php#ini.max-execution-time', + 'max-input-time' => 'info.configuration.php#ini.max-input-time', + 'max-input-vars' => 'info.configuration.php#ini.max-input-vars', + 'max-input-nesting-level' => 'info.configuration.php#ini.max-input-nesting-level', + 'memory-limit' => 'ini.core.php#ini.memory-limit', + 'error-reporting' => 'errorfunc.configuration.php#ini.error-reporting', + 'display-errors' => 'errorfunc.configuration.php#ini.display-errors', + 'display-startup-errors' => 'errorfunc.configuration.php#ini.display-startup-errors', + 'log-errors' => 'errorfunc.configuration.php#ini.log-errors', + 'log-errors-max-len' => 'errorfunc.configuration.php#ini.log-errors-max-len', + 'ignore-repeated-errors' => 'errorfunc.configuration.php#ini.ignore-repeated-errors', + 'ignore-repeated-source' => 'errorfunc.configuration.php#ini.ignore-repeated-source', + 'report-memleaks' => 'errorfunc.configuration.php#ini.report-memleaks', + 'track-errors' => 'errorfunc.configuration.php#ini.track-errors', + 'xmlrpc-errors' => 'errorfunc.configuration.php#ini.xmlrpc-errors', + 'html-errors' => 'errorfunc.configuration.php#ini.html-errors', + 'docref-root' => 'errorfunc.configuration.php#ini.docref-root', + 'docref-ext' => 'errorfunc.configuration.php#ini.docref-ext', + 'error-prepend-string' => 'errorfunc.configuration.php#ini.error-prepend-string', + 'error-append-string' => 'errorfunc.configuration.php#ini.error-append-string', + 'error-log' => 'errorfunc.configuration.php#ini.error-log', + 'syslog.facility' => 'errorfunc.configuration.php#ini.syslog.facility', + 'syslog.filter' => 'errorfunc.configuration.php#ini.syslog.filter', + 'syslog.ident' => 'errorfunc.configuration.php#ini.syslog.ident', + 'arg-separator.output' => 'ini.core.php#ini.arg-separator.output', + 'arg-separator.input' => 'ini.core.php#ini.arg-separator.input', + 'variables-order' => 'ini.core.php#ini.variables-order', + 'request-order' => 'ini.core.php#ini.request-order', + 'register-globals' => 'ini.core.php#ini.register-globals', + 'register-long-arrays' => 'ini.core.php#ini.register-long-arrays', + 'register-argc-argv' => 'ini.core.php#ini.register-argc-argv', + 'auto-globals-jit' => 'ini.core.php#ini.auto-globals-jit', + 'post-max-size' => 'ini.core.php#ini.post-max-size', + 'magic-quotes-gpc' => 'info.configuration.php#ini.magic-quotes-gpc', + 'magic-quotes-runtime' => 'info.configuration.php#ini.magic-quotes-runtime', + 'auto-prepend-file' => 'ini.core.php#ini.auto-prepend-file', + 'auto-append-file' => 'ini.core.php#ini.auto-append-file', + 'default-mimetype' => 'ini.core.php#ini.default-mimetype', + 'default-charset' => 'ini.core.php#ini.default-charset', + 'always-populate-raw-post-data' => 'ini.core.php#ini.always-populate-raw-post-data', + 'include-path' => 'ini.core.php#ini.include-path', + 'doc-root' => 'ini.core.php#ini.doc-root', + 'user-dir' => 'ini.core.php#ini.user-dir', + 'extension-dir' => 'ini.core.php#ini.extension-dir', + 'enable-dl' => 'info.configuration.php#ini.enable-dl', + 'cgi.force-redirect' => 'ini.core.php#ini.cgi.force-redirect', + 'cgi.redirect-status-env' => 'ini.core.php#ini.cgi.redirect-status-env', + 'cgi.fix-pathinfo' => 'ini.core.php#ini.cgi.fix-pathinfo', + 'fastcgi.impersonate' => 'ini.core.php#ini.fastcgi.impersonate', + 'cgi.rfc2616-headers' => 'ini.core.php#ini.cgi.rfc2616-headers', + 'file-uploads' => 'ini.core.php#ini.file-uploads', + 'upload-tmp-dir' => 'ini.core.php#ini.upload-tmp-dir', + 'upload-max-filesize' => 'ini.core.php#ini.upload-max-filesize', + 'allow-url-fopen' => 'filesystem.configuration.php#ini.allow-url-fopen', + 'allow-url-include' => 'filesystem.configuration.php#ini.allow-url-include', + 'from' => 'filesystem.configuration.php#ini.from', + 'user-agent' => 'filesystem.configuration.php#ini.user-agent', + 'default-socket-timeout' => 'filesystem.configuration.php#ini.default-socket-timeout', + 'auto-detect-line-endings' => 'filesystem.configuration.php#ini.auto-detect-line-endings', + 'date.timezone' => 'datetime.configuration.php#ini.date.timezone', + 'date.default-latitude' => 'datetime.configuration.php#ini.date.default-latitude', + 'date.default-longitude' => 'datetime.configuration.php#ini.date.default-longitude', + 'date.sunrise-zenith' => 'datetime.configuration.php#ini.date.sunrise-zenith', + 'date.sunset-zenith' => 'datetime.configuration.php#ini.date.sunset-zenith', + 'filter.default' => 'filter.configuration.php#ini.filter.default', + 'filter.default-flags' => 'filter.configuration.php#ini.filter.default-flags', + 'pcre.backtrack-limit' => 'pcre.configuration.php#ini.pcre.backtrack-limit', + 'pcre.recursion-limit' => 'pcre.configuration.php#ini.pcre.recursion-limit', + 'pdo-odbc.connection-pooling' => 'ref.pdo-odbc.php#ini.pdo-odbc.connection-pooling', + 'phar.readonly' => 'phar.configuration.php#ini.phar.readonly', + 'phar.require-hash' => 'phar.configuration.php#ini.phar.require-hash', + 'define-syslog-variables' => 'network.configuration.php#ini.define-syslog-variables', + 'smtp' => 'mail.configuration.php#ini.smtp', + 'smtp-port' => 'mail.configuration.php#ini.smtp-port', + 'sendmail-from' => 'mail.configuration.php#ini.sendmail-from', + 'sendmail-path' => 'mail.configuration.php#ini.sendmail-path', + 'sql.safe-mode' => 'ini.core.php#ini.sql.safe-mode', + 'odbc.default-db' => 'odbc.configuration.php#ini.uodbc.default-db', + 'odbc.default-user' => 'odbc.configuration.php#ini.uodbc.default-user', + 'odbc.default-pw' => 'odbc.configuration.php#ini.uodbc.default-pw', + 'odbc.allow-persistent' => 'odbc.configuration.php#ini.uodbc.allow-persistent', + 'odbc.check-persistent' => 'odbc.configuration.php#ini.uodbc.check-persistent', + 'odbc.max-persistent' => 'odbc.configuration.php#ini.uodbc.max-persistent', + 'odbc.max-links' => 'odbc.configuration.php#ini.uodbc.max-links', + 'odbc.defaultlrl' => 'odbc.configuration.php#ini.uodbc.defaultlrl', + 'odbc.defaultbinmode' => 'odbc.configuration.php#ini.uodbc.defaultbinmode', + 'mysql.allow-local-infile' => 'mysql.configuration.php#ini.mysql.allow-local-infile', + 'mysql.allow-persistent' => 'mysql.configuration.php#ini.mysql.allow-persistent', + 'mysql.max-persistent' => 'mysql.configuration.php#ini.mysql.max-persistent', + 'mysql.max-links' => 'mysql.configuration.php#ini.mysql.max-links', + 'mysql.default-port' => 'mysql.configuration.php#ini.mysql.default-port', + 'mysql.default-socket' => 'mysql.configuration.php#ini.mysql.default-socket', + 'mysql.default-host' => 'mysql.configuration.php#ini.mysql.default-host', + 'mysql.default-user' => 'mysql.configuration.php#ini.mysql.default-user', + 'mysql.default-password' => 'mysql.configuration.php#ini.mysql.default-password', + 'mysql.connect-timeout' => 'mysql.configuration.php#ini.mysql.connect-timeout', + 'mysql.trace-mode' => 'mysql.configuration.php#ini.mysql.trace-mode', + 'mysqli.allow-local-infile' => 'mysqli.configuration.php#ini.mysqli.allow-local-infile', + 'mysqli.max-links' => 'mysqli.configuration.php#ini.mysqli.max-links', + 'mysqli.allow-persistent' => 'mysqli.configuration.php#ini.mysqli.allow-persistent', + 'mysqli.default-port' => 'mysqli.configuration.php#ini.mysqli.default-port', + 'mysqli.default-socket' => 'mysqli.configuration.php#ini.mysqli.default-socket', + 'mysqli.default-host' => 'mysqli.configuration.php#ini.mysqli.default-host', + 'mysqli.default-user' => 'mysqli.configuration.php#ini.mysqli.default-user', + 'mysqli.default-pw' => 'mysqli.configuration.php#ini.mysqli.default-pw', + 'oci8.privileged-connect' => 'oci8.configuration.php#ini.oci8.privileged-connect', + 'oci8.max-persistent' => 'oci8.configuration.php#ini.oci8.max-persistent', + 'oci8.persistent-timeout' => 'oci8.configuration.php#ini.oci8.persistent-timeout', + 'oci8.ping-interval' => 'oci8.configuration.php#ini.oci8.ping-interval', + 'oci8.statement-cache-size' => 'oci8.configuration.php#ini.oci8.statement-cache-size', + 'oci8.default-prefetch' => 'oci8.configuration.php#ini.oci8.default-prefetch', + 'oci8.old-oci-close-semantics' => 'oci8.configuration.php#ini.oci8.old-oci-close-semantics', + 'opcache.preload' => 'opcache.configuration.php#ini.opcache.preload', + 'pgsql.allow-persistent' => 'pgsql.configuration.php#ini.pgsql.allow-persistent', + 'pgsql.auto-reset-persistent' => 'pgsql.configuration.php#ini.pgsql.auto-reset-persistent', + 'pgsql.max-persistent' => 'pgsql.configuration.php#ini.pgsql.max-persistent', + 'pgsql.max-links' => 'pgsql.configuration.php#ini.pgsql.max-links', + 'pgsql.ignore-notice' => 'pgsql.configuration.php#ini.pgsql.ignore-notice', + 'pgsql.log-notice' => 'pgsql.configuration.php#ini.pgsql.log-notice', + 'sqlite3.extension-dir' => 'sqlite3.configuration.php#ini.sqlite3.extension-dir', + 'bcmath.scale' => 'bc.configuration.php#ini.bcmath.scale', + 'browscap' => 'misc.configuration.php#ini.browscap', + 'session.save-handler' => 'session.configuration.php#ini.session.save-handler', + 'session.save-path' => 'session.configuration.php#ini.session.save-path', + 'session.use-cookies' => 'session.configuration.php#ini.session.use-cookies', + 'session.cookie-secure' => 'session.configuration.php#ini.session.cookie-secure', + 'session.use-only-cookies' => 'session.configuration.php#ini.session.use-only-cookies', + 'session.name' => 'session.configuration.php#ini.session.name', + 'session.auto-start' => 'session.configuration.php#ini.session.auto-start', + 'session.cookie-lifetime' => 'session.configuration.php#ini.session.cookie-lifetime', + 'session.cookie-path' => 'session.configuration.php#ini.session.cookie-path', + 'session.cookie-domain' => 'session.configuration.php#ini.session.cookie-domain', + 'session.cookie-httponly' => 'session.configuration.php#ini.session.cookie-httponly', + 'session.serialize-handler' => 'session.configuration.php#ini.session.serialize-handler', + 'session.gc-probability' => 'session.configuration.php#ini.session.gc-probability', + 'session.gc-divisor' => 'session.configuration.php#ini.session.gc-divisor', + 'session.gc-maxlifetime' => 'session.configuration.php#ini.session.gc-maxlifetime', + 'session.bug-compat-42' => 'session.configuration.php#ini.session.bug-compat-42', + 'session.bug-compat-warn' => 'session.configuration.php#ini.session.bug-compat-warn', + 'session.referer-check' => 'session.configuration.php#ini.session.referer-check', + 'session.entropy-length' => 'session.configuration.php#ini.session.entropy-length', + 'session.entropy-file' => 'session.configuration.php#ini.session.entropy-file', + 'session.cache-limiter' => 'session.configuration.php#ini.session.cache-limiter', + 'session.cache-expire' => 'session.configuration.php#ini.session.cache-expire', + 'session.sid-length' => 'session.configuration.php#ini.session.sid-length', + 'session.use-trans-sid' => 'session.configuration.php#ini.session.use-trans-sid', + 'session.hash-function' => 'session.configuration.php#ini.session.hash-function', + 'session.hash-bits-per-character' => 'session.configuration.php#ini.session.hash-bits-per-character', + 'session.upload-progress.enabled' => 'session.configuration.php#ini.session.upload-progress.enabled', + 'session.upload-progress.cleanup' => 'session.configuration.php#ini.session.upload-progress.cleanup', + 'session.upload-progress.prefix' => 'session.configuration.php#ini.session.upload-progress.prefix', + 'session.upload-progress.name' => 'session.configuration.php#ini.session.upload-progress.name', + 'session.upload-progress.freq' => 'session.configuration.php#ini.session.upload-progress.freq', + 'session.upload-progress.min-freq' => 'session.configuration.php#ini.session.upload-progress.min-freq', + 'url-rewriter.tags' => 'session.configuration.php#ini.url-rewriter.tags', + 'assert.active' => 'info.configuration.php#ini.assert.active', + 'assert.exception' => 'info.configuration.php#ini.assert.exception', + 'assert.warning' => 'info.configuration.php#ini.assert.warning', + 'assert.bail' => 'info.configuration.php#ini.assert.bail', + 'assert.callback' => 'info.configuration.php#ini.assert.callback', + 'assert.quiet-eval' => 'info.configuration.php#ini.assert.quiet-eval', + 'zend.enable-gc' => 'info.configuration.php#ini.zend.enable-gc', + 'com.typelib-file' => 'com.configuration.php#ini.com.typelib-file', + 'com.allow-dcom' => 'com.configuration.php#ini.com.allow-dcom', + 'com.autoregister-typelib' => 'com.configuration.php#ini.com.autoregister-typelib', + 'com.autoregister-casesensitive' => 'com.configuration.php#ini.com.autoregister-casesensitive', + 'com.autoregister-verbose' => 'com.configuration.php#ini.com.autoregister-verbose', + 'mbstring.language' => 'mbstring.configuration.php#ini.mbstring.language', + 'mbstring.internal-encoding' => 'mbstring.configuration.php#ini.mbstring.internal-encoding', + 'mbstring.http-input' => 'mbstring.configuration.php#ini.mbstring.http-input', + 'mbstring.http-output' => 'mbstring.configuration.php#ini.mbstring.http-output', + 'mbstring.encoding-translation' => 'mbstring.configuration.php#ini.mbstring.encoding-translation', + 'mbstring.detect-order' => 'mbstring.configuration.php#ini.mbstring.detect-order', + 'mbstring.substitute-character' => 'mbstring.configuration.php#ini.mbstring.substitute-character', + 'mbstring.func-overload' => 'mbstring.configuration.php#ini.mbstring.func-overload', + 'gd.jpeg-ignore-warning' => 'image.configuration.php#ini.image.jpeg-ignore-warning', + 'exif.encode-unicode' => 'exif.configuration.php#ini.exif.encode-unicode', + 'exif.decode-unicode-motorola' => 'exif.configuration.php#ini.exif.decode-unicode-motorola', + 'exif.decode-unicode-intel' => 'exif.configuration.php#ini.exif.decode-unicode-intel', + 'exif.encode-jis' => 'exif.configuration.php#ini.exif.encode-jis', + 'exif.decode-jis-motorola' => 'exif.configuration.php#ini.exif.decode-jis-motorola', + 'exif.decode-jis-intel' => 'exif.configuration.php#ini.exif.decode-jis-intel', + 'tidy.default-config' => 'tidy.configuration.php#ini.tidy.default-config', + 'tidy.clean-output' => 'tidy.configuration.php#ini.tidy.clean-output', + 'soap.wsdl-cache-enabled' => 'soap.configuration.php#ini.soap.wsdl-cache-enabled', + 'soap.wsdl-cache-dir' => 'soap.configuration.php#ini.soap.wsdl-cache-dir', + 'soap.wsdl-cache-ttl' => 'soap.configuration.php#ini.soap.wsdl-cache-ttl', + ]; + + return $inis[$ini] ?? null; } function is_known_variable(string $variable): ?string { - $variables = [ - // Variables - 'globals' => 'reserved.variables.globals.php', - '-server' => 'reserved.variables.server.php', - '-get' => 'reserved.variables.get.php', - '-post' => 'reserved.variables.post.php', - '-files' => 'reserved.variables.files.php', - '-request' => 'reserved.variables.request.php', - '-session' => 'reserved.variables.session.php', - '-cookie' => 'reserved.variables.cookies.php', - '-env' => 'reserved.variables.environment.php', - 'this' => 'language.oop5.basic.php', - 'php-errormsg' => 'reserved.variables.phperrormsg.php', - 'argv' => 'reserved.variables.argv.php', - 'argc' => 'reserved.variables.argc.php', - 'http-raw-post-data' => 'reserved.variables.httprawpostdata.php', - 'http-response-header' => 'reserved.variables.httpresponseheader.php', - 'http-server-vars' => 'reserved.variables.server.php', - 'http-get-vars' => 'reserved.variables.get.php', - 'http-post-vars' => 'reserved.variables.post.php', - 'http-session-vars' => 'reserved.variables.session.php', - 'http-post-files' => 'reserved.variables.files.php', - 'http-cookie-vars' => 'reserved.variables.cookies.php', - 'http-env-vars' => 'reserved.variables.env.php', - ]; - - return $variables[ltrim($variable, '$')] ?? null; + $variables = [ + // Variables + 'globals' => 'reserved.variables.globals.php', + '-server' => 'reserved.variables.server.php', + '-get' => 'reserved.variables.get.php', + '-post' => 'reserved.variables.post.php', + '-files' => 'reserved.variables.files.php', + '-request' => 'reserved.variables.request.php', + '-session' => 'reserved.variables.session.php', + '-cookie' => 'reserved.variables.cookies.php', + '-env' => 'reserved.variables.environment.php', + 'this' => 'language.oop5.basic.php', + 'php-errormsg' => 'reserved.variables.phperrormsg.php', + 'argv' => 'reserved.variables.argv.php', + 'argc' => 'reserved.variables.argc.php', + 'http-response-header' => 'reserved.variables.httpresponseheader.php', + 'http-server-vars' => 'reserved.variables.server.php', + 'http-get-vars' => 'reserved.variables.get.php', + 'http-post-vars' => 'reserved.variables.post.php', + 'http-session-vars' => 'reserved.variables.session.php', + 'http-post-files' => 'reserved.variables.files.php', + 'http-cookie-vars' => 'reserved.variables.cookies.php', + ]; + + return $variables[ltrim($variable, '$')] ?? null; } -function is_known_term (string $term): ?string { - $terms = [ - '<>' => 'language.operators.comparison.php', - '<=>' => 'language.operators.comparison.php', - 'spaceship' => 'language.operators.comparison.php', - '==' => 'language.operators.comparison.php', - '===' => 'language.operators.comparison.php', - '@' => 'language.operators.errorcontrol.php', - 'apache' => 'install.php', - 'array' => 'language.types.array.php', - 'arrays' => 'language.types.array.php', - 'case' => 'control-structures.switch.php', - 'catch' => 'language.exceptions.php', - 'checkbox' => 'faq.html.php', - 'class' => 'language.oop5.basic.php', - 'classes' => 'language.oop5.basic.php', - 'closures' => 'functions.anonymous.php', - 'cookie' => 'features.cookies.php', - 'date' => 'function.date.php', - 'exception' => 'language.exceptions.php', - 'extends' => 'language.oop5.basic.php#language.oop5.basic.extends', - 'file' => 'function.file.php', - 'finally' => 'language.exceptions.php', - 'fopen' => 'function.fopen.php', - 'for' => 'control-structures.for.php', - 'foreach' => 'control-structures.foreach.php', - 'form' => 'language.variables.external.php', - 'forms' => 'language.variables.external.php', - 'function' => 'language.functions.php', - 'gd' => 'book.image.php', - 'get' => 'reserved.variables.get.php', - 'global' => 'language.variables.scope.php', - 'globals' => 'language.variables.scope.php', - 'header' => 'function.header.php', - 'heredoc' => 'language.types.string.php#language.types.string.syntax.heredoc', - 'nowdoc' => 'language.types.string.php#language.types.string.syntax.nowdoc', - 'htaccess' => 'configuration.file.php', - 'if' => 'control-structures.if.php', - 'include' => 'function.include.php', - 'int' => 'language.types.integer.php', - 'ip' => 'reserved.variables.server.php', - 'iterable' => 'language.types.iterable.php', - 'juggling' => 'language.types.type-juggling.php', - 'location' => 'function.header.php', - 'mail' => 'function.mail.php', - 'modulo' => 'language.operators.arithmetic.php', - 'mysql' => 'mysql.php', - 'new' => 'language.oop5.basic.php#language.oop5.basic.new', - 'null' => 'language.types.null.php', - 'object' => 'language.types.object.php', - 'operator' => 'language.operators.php', - 'operators' => 'language.operators.php', - 'or' => 'language.operators.logical.php', - 'php.ini' => 'configuration.file.php', - 'php-mysql.dll' => 'book.mysql.php', - 'php-self' => 'reserved.variables.server.php', - 'query-string' => 'reserved.variables.server.php', - 'redirect' => 'function.header.php', - 'reference' => 'index.php', - 'referer' => 'reserved.variables.server.php', - 'referrer' => 'reserved.variables.server.php', - 'remote-addr' => 'reserved.variables.server.php', - 'request' => 'reserved.variables.request.php', - 'session' => 'features.sessions.php', - 'smtp' => 'book.mail.php', - 'ssl' => 'book.openssl.php', - 'static' => 'language.oop5.static.php', - 'stdin' => 'wrappers.php.php', - 'string' => 'language.types.string.php', - 'superglobal' => 'language.variables.superglobals.php', - 'superglobals' => 'language.variables.superglobals.php', - 'switch' => 'control-structures.switch.php', - 'timestamp' => 'function.time.php', - 'try' => 'language.exceptions.php', - 'upload' => 'features.file-upload.php', - ]; - - return $terms[$term] ?? null; +function is_known_term(string $term): ?string { + $terms = [ + '<>' => 'language.operators.comparison.php', + '<=>' => 'language.operators.comparison.php', + 'spaceship' => 'language.operators.comparison.php', + '==' => 'language.operators.comparison.php', + '===' => 'language.operators.comparison.php', + '@' => 'language.operators.errorcontrol.php', + '__halt_compiler' => 'function.halt-compiler.php', + '__PHP_Incomplete_Class' => 'function.unserialize.php', + 'and' => 'language.operators.logical.php', + 'apache' => 'install.php', + 'array' => 'language.types.array.php', + 'arrays' => 'language.types.array.php', + 'as' => 'control-structures.foreach.php', + 'case' => 'control-structures.switch.php', + 'catch' => 'language.exceptions.php', + 'checkbox' => 'faq.html.php', + 'class' => 'language.oop5.basic.php', + 'classes' => 'language.oop5.basic.php', + 'closures' => 'functions.anonymous.php', + 'cookie' => 'features.cookies.php', + 'date' => 'function.date.php', + 'default' => 'control-structures.switch.php', + 'do' => 'control-structures.do.while.php', + 'enddeclare' => 'control-structures.declare.php', + 'endfor' => 'control-structures.alternative-syntax.php', + 'endforeach' => 'control-structures.alternative-syntax.php', + 'endif' => 'control-structures.alternative-syntax.php', + 'endswitch' => 'control-structures.alternative-syntax.php', + 'endwhile' => 'control-structures.alternative-syntax.php', + 'exception' => 'language.exceptions.php', + 'extends' => 'language.oop5.basic.php#language.oop5.basic.extends', + 'false' => 'language.types.boolean.php', + 'file' => 'function.file.php', + 'final' => 'language.oop5.final.php', + 'finally' => 'language.exceptions.php', + 'fopen' => 'function.fopen.php', + 'for' => 'control-structures.for.php', + 'foreach' => 'control-structures.foreach.php', + 'form' => 'language.variables.external.php', + 'forms' => 'language.variables.external.php', + 'function' => 'language.functions.php', + 'gd' => 'book.image.php', + 'get' => 'reserved.variables.get.php', + 'global' => 'language.variables.scope.php', + 'globals' => 'language.variables.scope.php', + 'header' => 'function.header.php', + 'heredoc' => 'language.types.string.php#language.types.string.syntax.heredoc', + 'htaccess' => 'configuration.file.php', + 'if' => 'control-structures.if.php', + 'implements' => 'language.oop5.interfaces.php', + 'include' => 'function.include.php', + 'insteadof' => 'language.oop5.traits.php#language.oop5.traits.conflict', + 'int' => 'language.types.integer.php', + 'ip' => 'reserved.variables.server.php', + 'iterable' => 'language.types.iterable.php', + 'juggling' => 'language.types.type-juggling.php', + 'location' => 'function.header.php', + 'mail' => 'function.mail.php', + 'mixed' => 'language.types.mixed.php', + 'modulo' => 'language.operators.arithmetic.php', + 'mysql' => 'mysql.php', + 'never' => 'language.types.never.php', + 'new' => 'language.oop5.basic.php#language.oop5.basic.new', + 'nowdoc' => 'language.types.string.php#language.types.string.syntax.nowdoc', + 'null' => 'language.types.null.php', + 'numeric' => 'reserved.other-reserved-words.php', + 'object' => 'language.types.object.php', + 'operator' => 'language.operators.php', + 'operators' => 'language.operators.php', + 'or' => 'language.operators.logical.php', + 'parent' => 'reserved.classes.php#reserved.classes.special', + 'php.ini' => 'configuration.file.php', + 'php-mysql.dll' => 'book.mysql.php', + 'php-self' => 'reserved.variables.server.php', + 'query-string' => 'reserved.variables.server.php', + 'readonly' => 'language.oop5.properties.php#language.oop5.properties.readonly-properties', + 'redirect' => 'function.header.php', + 'reference' => 'index.php', + 'referer' => 'reserved.variables.server.php', + 'referrer' => 'reserved.variables.server.php', + 'remote-addr' => 'reserved.variables.server.php', + 'request' => 'reserved.variables.request.php', + 'self' => 'reserved.classes.php#reserved.classes.special', + 'session' => 'features.sessions.php', + 'smtp' => 'book.mail.php', + 'ssl' => 'book.openssl.php', + 'static' => 'language.oop5.static.php', + 'stdin' => 'wrappers.php.php', + 'string' => 'language.types.string.php', + 'superglobal' => 'language.variables.superglobals.php', + 'superglobals' => 'language.variables.superglobals.php', + 'switch' => 'control-structures.switch.php', + 'timestamp' => 'function.time.php', + 'true' => 'language.types.boolean.php', + 'try' => 'language.exceptions.php', + 'upload' => 'features.file-upload.php', + 'use' => 'language.namespaces.php', + 'void' => 'language.types.void.php', + 'xor' => 'language.operators.logical.php', + 'yield from' => 'language.generators.syntax.php#control-structures.yield.from', + 'yield' => 'language.generators.syntax.php#control-structures.yield', + + '__COMPILER_HALT_OFFSET__' => 'function.halt-compiler.php', + 'DEFAULT_INCLUDE_PATH' => 'reserved.constants.php', + 'E_ALL' => 'errorfunc.constants.php', + 'E_COMPILE_ERROR' => 'errorfunc.constants.php', + 'E_COMPILE_WARNING' => 'errorfunc.constants.php', + 'E_CORE_ERROR' => 'errorfunc.constants.php', + 'E_CORE_WARNING' => 'errorfunc.constants.php', + 'E_DEPRECATED' => 'errorfunc.constants.php', + 'E_ERROR' => 'errorfunc.constants.php', + 'E_NOTICE' => 'errorfunc.constants.php', + 'E_PARSE' => 'errorfunc.constants.php', + 'E_RECOVERABLE_ERROR' => 'errorfunc.constants.php', + 'E_STRICT' => 'errorfunc.constants.php', + 'E_USER_DEPRECATED' => 'errorfunc.constants.php', + 'E_USER_ERROR' => 'errorfunc.constants.php', + 'E_USER_NOTICE' => 'errorfunc.constants.php', + 'E_USER_WARNING' => 'errorfunc.constants.php', + 'E_WARNING' => 'errorfunc.constants.php', + 'PEAR_EXTENSION_DIR' => 'reserved.constants.php', + 'PEAR_INSTALL_DIR' => 'reserved.constants.php', + 'PHP_BINARY' => 'reserved.constants.php', + 'PHP_BINDIR' => 'reserved.constants.php', + 'PHP_CONFIG_FILE_PATH' => 'reserved.constants.php', + 'PHP_CONFIG_FILE_SCAN_DIR' => 'reserved.constants.php', + 'PHP_DATADIR' => 'reserved.constants.php', + 'PHP_DEBUG' => 'reserved.constants.php', + 'PHP_EOL' => 'reserved.constants.php', + 'PHP_EXTENSION_DIR' => 'reserved.constants.php', + 'PHP_EXTRA_VERSION' => 'reserved.constants.php', + 'PHP_FD_SETSIZE' => 'reserved.constants.php', + 'PHP_FLOAT_DIG' => 'reserved.constants.php', + 'PHP_FLOAT_EPSILON' => 'reserved.constants.php', + 'PHP_FLOAT_MAX' => 'reserved.constants.php', + 'PHP_FLOAT_MIN' => 'reserved.constants.php', + 'PHP_INT_MAX' => 'reserved.constants.php', + 'PHP_INT_MIN' => 'reserved.constants.php', + 'PHP_INT_SIZE' => 'reserved.constants.php', + 'PHP_LIBDIR' => 'reserved.constants.php', + 'PHP_LOCALSTATEDIR' => 'reserved.constants.php', + 'PHP_MAJOR_VERSION' => 'reserved.constants.php', + 'PHP_MANDIR' => 'reserved.constants.php', + 'PHP_MAXPATHLEN' => 'reserved.constants.php', + 'PHP_MINOR_VERSION' => 'reserved.constants.php', + 'PHP_OS_FAMILY' => 'reserved.constants.php', + 'PHP_OS' => 'reserved.constants.php', + 'PHP_PREFIX' => 'reserved.constants.php', + 'PHP_RELEASE_VERSION' => 'reserved.constants.php', + 'PHP_SAPI' => 'reserved.constants.php', + 'PHP_SHLIB_SUFFIX' => 'reserved.constants.php', + 'PHP_SYSCONFDIR' => 'reserved.constants.php', + 'PHP_VERSION_ID' => 'reserved.constants.php', + 'PHP_VERSION' => 'reserved.constants.php', + 'PHP_WINDOWS_EVENT_CTRL_BREAK' => 'reserved.constants.php', + 'PHP_WINDOWS_EVENT_CTRL_C' => 'reserved.constants.php', + 'PHP_ZTS' => 'reserved.constants.php', + ]; + + return $terms[$term] ?? null; } /* Search snippet provider: A dirty proof-of-concept: - This will probably live in sqlite one day, and be more intelligent (tagging?) - This is a 100% hack currently, and let's hope temporary does not become permanent (Hello year 2014!) - And this is English only today... we should add translation support via the manual, generated by PhD + This will probably live in sqlite one day, and be more intelligent (tagging?) + This is a 100% hack currently, and let's hope temporary does not become permanent (Hello year 2014!) + And this is English only today... we should add translation support via the manual, generated by PhD - This really is a proof-of-concept, where the choices below are the most popular searched terms at php.net - It should also take into account vague searches, such as 'global' and 'str'. The search works well enough for, - most terms, so something like $_SERVER isn't really needed but it's defined below anyways... + This really is a proof-of-concept, where the choices below are the most popular searched terms at php.net + It should also take into account vague searches, such as 'global' and 'str'. The search works well enough for, + most terms, so something like $_SERVER isn't really needed but it's defined below anyways... */ function is_known_snippet(string $term): ?string { - $snippets = [ - 'global' => ' + $snippets = [ + 'global' => ' The global keyword is used to manipulate variable scope, and there is also the concept of super globals in PHP, which are special variables with a global scope.', - 'string' => ' + 'string' => ' There is the string type, which is a scalar, and also many string functions.', - 'str' => ' + 'str' => ' Many string functions begin with str, and there is also the string type.', - '_server' => ' + '_server' => ' $_SERVER is a super global, and is home to many predefined variables that are typically provided by a web server', - 'class' => ' + 'class' => ' A class is an OOP (Object Oriented Programming) concept, and PHP is both a procedural and OOP friendly language.', - 'function' => ' + 'function' => ' PHP contains thousands of functions. You might be interested in how a function is defined, or how to read a function prototype. See also the list of PHP extensions', - ]; + ]; - $term = ltrim(strtolower(trim($term)), '$'); - return $snippets[$term] ?? null; + $term = ltrim(strtolower(trim($term)), '$'); + return $snippets[$term] ?? null; } /** @@ -508,11 +580,11 @@ function get_legacy_manual_urls(string $uri): array { $filename = $_SERVER["DOCUMENT_ROOT"] . "/manual/legacyurls.json"; $pages_ids = json_decode(file_get_contents($filename), true); - $page_id = preg_replace_callback('/^manual\/.*\/(.*?)(\.php)?$/', function (array $matches): string { + $page_id = preg_replace_callback('/^manual\/[a-z_A-Z]+\/(.*?)(\.php)?$/', function (array $matches): string { if (count($matches) < 2) { return ''; } - return $matches[1] ; + return $matches[1]; }, $uri); if (!isset($pages_ids[$page_id])) { @@ -534,12 +606,12 @@ function fallback_to_legacy_manuals(array $legacy_urls): void { global $MYSITE; status_header(404); - site_header('404 Not Found', array("noindex")); + site_header('404 Not Found', ["noindex"]); $original_url = htmlspecialchars(substr($MYSITE, 0, -1) . $_SERVER['REQUEST_URI']); $legacy_links = ''; foreach ($legacy_urls as $php_version => $url) { - $legacy_links .= '
      • PHP ' . $php_version . ' legacy manual
      • '; + $legacy_links .= '
      • PHP ' . $php_version . ' legacy manual
      • '; } echo << "; - print $config['spanning-content']; - print "
    "; + echo "
    "; + echo $config['spanning-content']; + echo "
    "; } ?> @@ -59,42 +59,126 @@
    + - +
    "; + echo "
    "; } ?> - - '."\n"; + $path = dirname(__DIR__) . '/js/' . $filename; + echo '' . "\n"; + } +?> +' . "\n"; } ?> To Top +
    + +
    + diff --git a/include/get-download.inc b/include/get-download.inc index f19e3f79e9..2aeb1aa896 100644 --- a/include/get-download.inc +++ b/include/get-download.inc @@ -8,15 +8,15 @@ if (!isset($df)) { } // Could be a normal download or a manual download file -$possible_files = array($df, "manual/$df"); +$possible_files = [$df, "manual/$df"]; -$site_config = array( +$site_config = [ 'current' => 'downloads', - 'css' => array('mirror.css') -); + 'css' => ['mirror.css'], +]; // Find out what is the exact file requested -$file = FALSE; +$file = false; foreach ($possible_files as $name) { if (@file_exists($_SERVER['DOCUMENT_ROOT'] . '/distributions/' . $name)) { $file = $name; @@ -30,7 +30,7 @@ site_header('Get Download', $site_config); echo '
    '; $size = 0; // No downloadable file found -if ($file === FALSE) { +if ($file === false) { $info = "

    The file you requested (" . htmlspecialchars($df, ENT_QUOTES, "UTF-8") . ") is not found on this server ({$MYSITE}).

    "; diff --git a/include/gpg-keys.inc b/include/gpg-keys.inc index 00fcb3dbee..861981e44b 100644 --- a/include/gpg-keys.inc +++ b/include/gpg-keys.inc @@ -1,4 +1,4 @@ -"; - case 'carusogabriel': + case 'bukka': + return + "pub ed25519 2021-04-10 [SC]\n" . + " C28D937575603EB4ABB725861C0779DC5C0A9DE4\n" . + "uid [ultimate] Jakub Zelenka \n" . + "uid [ultimate] Jakub Zelenka \n" . + "uid [ultimate] Jakub Zelenka \n" . + "sub cv25519 2021-04-10 [E]"; + + case "calvinb": + return + "pub ed25519 2024-04-17 [SC]\n" . + " 9D7F 99A0 CB8F 05C8 A695 8D62 56A9 7AF7 600A 39A6\n" . + "uid [ultimate] Calvin Buckley (PHP) \n" . + "sub cv25519 2024-04-17 [E]"; + + case 'carusogabriel-old': return "pub rsa4096 2020-05-09 [SC] [expires: 2024-05-08]\n" . " BFDD D286 4282 4F81 18EF 7790 9B67 A5C1 2229 118F\n" . "uid [ultimate] Gabriel Caruso (Release Manager) \n" . "sub rsa4096 2020-05-09 [E] [expires: 2024-05-08]"; + case 'carusogabriel-new': + return + "pub rsa4096 2022-08-30 [SC] [expires: 2024-08-29]\n" . + " 2C16 C765 DBE5 4A08 8130 F1BC 4B9B 5F60 0B55 F3B4\n" . + "uid [ultimate] Gabriel Caruso \n" . + "sub rsa4096 2022-08-30 [E] [expires: 2024-08-29]"; + case 'cmb': return "pub rsa4096/118BCCB6 2018-06-05 [SC] [expires: 2022-06-04]\n" . " Key fingerprint = CBAF 69F1 73A0 FEA4 B537 F470 D66C 9593 118B CCB6\n" . "uid Christoph M. Becker "; + case 'daniels': + return + "pub rsa4096 2025-06-08 [SCEA]\n" . + " D95C 03BC 702B E951 5344 AE33 74E4 4BC9 0677 01A5\n" . + "uid [ultimate] Daniel Scherzer (for PHP) "; + case 'davey': return "pub 4096R/7BD5DCD0 2016-05-07\n" . @@ -46,6 +75,25 @@ function gpg_key_get(string $rm): ?string { " Key fingerprint = 0B96 609E 270F 565C 1329 2B24 C13C 70B8 7267 B52D\n" . "uid David Soria Parra "; + case 'edorian': + return + "pub ed25519 2025-06-08 [SC]\n" . + " 49D9 AF6B C72A 80D6 6917 19C8 AA23 F5BE 9C70 97D4\n" . + "uid [ultimate] Volker Dusch \n" . + "sub cv25519 2025-06-08 [E]"; + + case 'ericmann': + return + "pub rsa4096 2016-11-25 [SC]\n" . + " AFD8 691F DAED F03B DF6E 4605 63F1 5A9B 7153 76CA\n" . + "uid [ultimate] Eric A Mann \n" . + "uid [ultimate] Eric A Mann \n" . + "uid [ultimate] Eric A Mann \n" . + "uid [ultimate] Eric Mann \n" . + "sub rsa4096 2016-11-25 [S]\n" . + "sub rsa4096 2016-11-25 [E]\n" . + "sub rsa4096 2016-11-25 [A]"; + case 'johannes': return "pub 2048R/FC9C83D7 2012-03-18 [expires: 2017-03-17]\n" . @@ -79,6 +127,13 @@ function gpg_key_get(string $rm): ?string { "uid [ultimate] Peter Kokot \n" . "sub rsa4096 2019-05-29 [E] [expires: 2021-05-28]"; + case 'pierrick': + return + "pub rsa4096 2021-04-01 [SC]\n" . + " 1198 C011 7593 497A 5EC5 C199 286A F1F9 8974 69DC\n" . + "uid [ultimate] Pierrick Charron \n" . + "sub rsa4096 2021-04-01 [E]"; + case 'pollita': return "pub 4096R/70D12172 2017-04-14 [expires: 2024-04-21]\n" . @@ -87,10 +142,10 @@ function gpg_key_get(string $rm): ?string { case 'ramsey': return - "pub rsa4096 2021-04-26 [SC] [expires: 2024-11-26]\n" . + "pub rsa4096 2021-04-26 [SC] [expires: 2025-11-24]\n" . " 39B6 4134 3D8C 104B 2B14 6DC3 F9C3 9DC0 B969 8544\n" . "uid [ultimate] Ben Ramsey \n" . - "sub rsa4096 2021-04-26 [E] [expires: 2024-11-26]"; + "sub rsa4096 2021-04-26 [E] [expires: 2025-11-24]"; case 'remi': return @@ -98,6 +153,22 @@ function gpg_key_get(string $rm): ?string { " Key fingerprint = B1B4 4D8F 021E 4E2D 6021 E995 DC9F F8D3 EE5A F27F\n" . "uid Remi Collet "; + case 'saki': + return + "pub rsa4096 2024-05-20 [SC]\n" . + " 0616 E93D 95AF 4712 43E2 6761 7704 26E1 7EBB B3DD\n" . + "uid [ultimate] Saki Takamachi (for php.net) \n" . + "sub rsa4096 2024-05-20 [E]"; + + case 'sergey': + return + "pub rsa4096 2021-03-26 [SC] [expires: 2030-03-26]\n" . + " E609 13E4 DF20 9907 D8E3 0D96 659A 97C9 CF2A 795A\n" . + "uid [ultimate] Sergey Panteleev \n" . + "uid [ultimate] Sergey Panteleev \n" . + "uid [ultimate] Sergey Panteleev \n" . + "sub rsa4096 2021-03-26 [E] [expires: 2025-03-26]"; + case 'stas': return "pub 2048D/5DA04B5D 2012-03-19\n" . @@ -119,35 +190,37 @@ function gpg_key_get(string $rm): ?string { function gpg_key_get_branches(bool $activeOnly): array { $branches = [ - '8.1' => [ 'krakjoe', 'ramsey', 'patrickallaert' ], - '8.0' => [ 'pollita', 'carusogabriel' ], - '7.4' => [ 'derick', 'petk' ], - '7.3' => [ 'cmb', 'stas' ], - '7.2' => [ 'pollita', 'remi', 'cmb' ], - '7.1' => [ 'davey', 'krakjoe', 'pollita' ], - '7.0' => [ 'ab', 'tyrael' ], - '5.6' => [ 'tyrael', 'jpauli' ], - '5.5' => [ 'jpauli', 'dsp', 'stas' ], - '5.4' => [ 'stas' ], - '5.3' => [ 'dsp', 'johannes' ], + '8.5' => ['pierrick', 'edorian', 'daniels'], + '8.4' => ['ericmann', 'calvinb', 'saki'], + '8.3' => ['pierrick', 'ericmann', 'bukka'], + '8.2' => ['pierrick', 'ramsey', 'sergey'], + '8.1' => ['krakjoe', 'ramsey', 'patrickallaert'], + '8.0' => ['pollita', 'carusogabriel-old', 'carusogabriel-new', 'ramsey'], + '7.4' => ['derick', 'petk'], + '7.3' => ['cmb', 'stas'], + '7.2' => ['pollita', 'remi', 'cmb'], + '7.1' => ['davey', 'krakjoe', 'pollita'], + '7.0' => ['ab', 'tyrael'], + '5.6' => ['tyrael', 'jpauli'], + '5.5' => ['jpauli', 'dsp', 'stas'], + '5.4' => ['stas'], + '5.3' => ['dsp', 'johannes'], ]; if (!$activeOnly) { return $branches; } $active = get_active_branches(); - return array_filter($branches, function($branch) use ($active) { + return array_filter($branches, function ($branch) use ($active) { [$major] = explode('.', $branch, 2); return isset($active[$major][$branch]); }, ARRAY_FILTER_USE_KEY); } function gpg_key_show_keys(bool $activeOnly): void { - $branches = gpg_key_get_branches($activeOnly); - foreach (gpg_key_get_branches($activeOnly) as $branch => $rms) { $keys = array_filter( - array_map(function($rm) { return gpg_key_get($rm); }, $rms), - function($key) { return $key !== null; }); + array_map(function ($rm) { return gpg_key_get($rm); }, $rms), + function ($key) { return $key !== null; }); if (empty($keys)) { continue; } $branch = htmlentities($branch, ENT_QUOTES, 'UTF-8'); diff --git a/include/header.inc b/include/header.inc index 15101bee3f..098f92924d 100644 --- a/include/header.inc +++ b/include/header.inc @@ -1,10 +1,10 @@ ; rel=shorturl"); @@ -32,7 +39,7 @@ if ($config["cache"]) { if (is_numeric($config["cache"])) { $timestamp = $config["cache"]; } else { - $timestamp = filemtime($_SERVER["DOCUMENT_ROOT"] . "/" .$_SERVER["BASE_PAGE"]); + $timestamp = filemtime($_SERVER["DOCUMENT_ROOT"] . "/" . $_SERVER["BASE_PAGE"]); } $tsstring = gmdate("D, d M Y H:i:s ", $timestamp) . "GMT"; @@ -43,7 +50,7 @@ if ($config["cache"]) { header("Last-Modified: " . $tsstring); } if (!isset($config["languages"])) { - $config["languages"] = array(); + $config["languages"] = []; } ?> @@ -54,10 +61,23 @@ if (!isset($config["languages"])) { - PHP: <?php echo $title ?> + + "> + + + <?php echo $title ?> + + $modified): ?> + + - - + + + + + + + @@ -81,23 +101,9 @@ if (!isset($config["languages"])) { - - - - - - - + $modified): ?> + + "> @@ -105,30 +111,205 @@ if (!isset($config["languages"])) { + + + + + - - -
    PAGE_TOOLS; } function manual_language_chooser($currentlang, $currentpage) { - global $ACTIVE_ONLINE_LANGUAGES; + global $LANG; - $links = array(); - - foreach ($ACTIVE_ONLINE_LANGUAGES as $lang => $name) { - $links[] = array("$lang/$currentpage", $name, $lang); - } - - // Print out the form with all the options + // Prepare the form with all the options $othersel = ' selected="selected"'; - $format_options = function (array $links) use ($currentlang, &$othersel) { - $out = ''; - $tab = str_repeat(' ', 6); - foreach ($links as $link) { - list($value, $text, $lang) = $link; - $selected = ''; - if ($lang == $currentlang) { - $selected = ' selected="selected"'; - $othersel = ''; - } - $out .= "$tab\n"; + $out = []; + foreach (Languages::ACTIVE_ONLINE_LANGUAGES as $lang => $text) { + $selected = ''; + if ($lang == $currentlang) { + $selected = ' selected="selected"'; + $othersel = ''; } - return trim($out); - }; + $out[] = ""; + } + $out[] = ""; + $format_options = implode("\n" . str_repeat(' ', 6), $out); + + $changeLanguage = autogen('change_language', $LANG); $r = <<
    - +
    @@ -505,39 +195,115 @@ CHANGE_LANG; return trim($r); } -function manual_header(){} -function manual_footer() { - global $USERNOTES, $__RELATED; +function manual_footer($setup): void { + global $USERNOTES, $__RELATED, $LANG; + + $id = substr($setup['this'][0], 0, -4); + $repo = strtolower($setup["head"][1]); // pt_BR etc. + + $edit_url = "https://github.com/php/doc-{$repo}"; + // If the documentation source information is available (generated using + // doc-base/configure.php and PhD) then try and make a source-specific URL. + if (isset($setup['source'])) { + $source_lang = $setup['source']['lang']; + if ($source_lang === $repo || $source_lang === 'base') { + $edit_url = "https://github.com/php/doc-{$source_lang}/blob/master/{$setup['source']['path']}"; + } + } + + $lastUpdate = ''; + if (isset($setup["history"]['modified']) && $setup["history"]['modified'] !== "") { + $modifiedDateTime = date_create($setup["history"]['modified']); + if ($modifiedDateTime !== false) { + $lastUpdate .= "Last updated on " . date_format($modifiedDateTime,"M d, Y (H:i T)"); + $lastUpdate .= (isset($setup["history"]['contributors'][0]) ? " by " . $setup["history"]['contributors'][0] : "") . "."; + } + } + + $contributors = ''; + if (isset($setup["history"]['contributors']) && count($setup["history"]['contributors']) > 0) { + $contributors = 'All contributors.'; + } + + $improveThisPage = autogen('improve_this_page', $LANG); + $howToImproveThisPage = autogen('how_to_improve_this_page', $LANG); + $contributionGuidlinesOnGithub = autogen('contribution_guidlines_on_github', $LANG); + $submitPullRequest = autogen('submit_a_pull_request', $LANG); + $reportBug = autogen('report_a_bug', $LANG); + echo << +

    $improveThisPage

    +
    + $lastUpdate $contributors +
    + + +CONTRIBUTE; - manual_notes($USERNOTES); - echo "
    "; - $config = array( + $userNoteService = new UserNoteService(); + $userNoteService->display($USERNOTES); + site_footer([ 'related_menu' => $__RELATED['toc'], - 'related_menu_deprecated' => $__RELATED['toc_deprecated'] - ); - site_footer($config); + 'related_menu_deprecated' => $__RELATED['toc_deprecated'], + ]); } -// This function takes a DateTime object and returns a formated string of the time difference relative to now -function relTime(DateTime $date) { - $current = new DateTime; - $diff = $current->diff($date); - $units = array("year" => $diff->format("%y"), - "month" => $diff->format("%m"), - "day" => $diff->format("%d"), - "hour" => $diff->format("%h"), - "minute" => $diff->format("%i"), - "second" => $diff->format("%s"), - ); - $out = "just now..."; - foreach ($units as $unit => $amount) { - if (empty($amount)) { - continue; - } - $out = $amount . " " . ($amount == 1 ? $unit : $unit . "s") . " ago"; - break; +function contributors($setup) { + if (!isset($_GET["contributors"]) + || !isset($setup["history"]["contributors"]) + || count($setup["history"]["contributors"]) < 1) { + return; } - return $out; + + $contributorList = "
  • " . implode("
  • ", $setup["history"]["contributors"]) . "
  • "; + + echo << +

    Output Buffering Control

    + The following have authored commits that contributed to this page: +
      + $contributorList +
    + +CONTRIBUTORS; + manual_footer($setup); + exit; } -/* vim: set et ts=4 sw=4: */ +function autogen(string $text, string $lang) { + static $translations = []; + + $lang = ($lang === "") ? "en" : $lang; + if (isset($translations[$lang])) { + if (isset($translations[$lang][$text]) && $translations[$lang][$text] !== "") { + return $translations[$lang][$text]; + } + if ($lang !== "en") { + // fall back to English if text is not defined for the given language + return autogen($text, "en"); + } + // we didn't find the English text either + throw new \InvalidArgumentException("Cannot autogenerate text for '$text'"); + } + + $translationFile = __DIR__ . \DIRECTORY_SEPARATOR . "ui_translation" . \DIRECTORY_SEPARATOR . $lang . ".ini"; + + if (!\file_exists($translationFile)) { + if ($lang !== "en") { + // fall back to English if translation file is not found + return autogen($text, "en"); + } + // we didn't find the English file either + throw new \Exception("Cannot find translation files"); + } + + $translations[$lang] = \parse_ini_file($translationFile); + + return autogen($text, $lang); +} diff --git a/include/site.inc b/include/site.inc index be8abdec11..aae24537a6 100644 --- a/include/site.inc +++ b/include/site.inc @@ -1,40 +1,41 @@ - array( - "DEU", "MyraCloud", FALSE, - "https://myracloud.com/en/", MIRROR_SPECIAL, TRUE, - "en", MIRROR_OK), -); - -// Define $COUNTRIES array -include __DIR__ . '/countries.inc'; - -// Define $COUNTRIES_ALPHA2 array -include __DIR__ . '/countries-alpha2.inc'; - -// Define $COUNTRY_ALPHA_2_TO_3 array -include __DIR__ . '/countries_alpha_mapping.inc'; - -// Define $LANGUAGES array -include __DIR__ . '/languages.inc'; +const MIRROR_OK = 0; +const MIRROR_NOTACTIVE = 1; +const MIRROR_OUTDATED = 2; +const MIRROR_DOESNOTWORK = 3; + +$MIRRORS = [ + "https://www.php.net/" => [ + "DEU", + "MyraCloud", + false, + "https://myracloud.com/en/", + MIRROR_SPECIAL, + true, + "en", + MIRROR_OK, + ], +]; + +/** + * @var array $COUNTRIES + */ +$COUNTRIES = include __DIR__ . '/countries.inc'; // Returns true if the current (or specified) // site is the primary mirror site -function is_primary_site($site = FALSE) +function is_primary_site($site = false) { global $MYSITE; if (!$site) { $site = $MYSITE; } @@ -43,39 +44,32 @@ function is_primary_site($site = FALSE) // Returns true if the current (or specified) // mirror site is an official mirror site -function is_official_mirror($site = FALSE) +function is_official_mirror($site = false) { return (mirror_type($site) != MIRROR_VIRTUAL); } // Returns the current (or specified) // mirror site's default language -function default_language($site = FALSE) -{ - global $MIRRORS, $MYSITE; - if (!$site) { $site = $MYSITE; } - return (isset($MIRRORS[$site]) ? $MIRRORS[$site][6] : FALSE); -} - -// Returns true if the current (or specified) mirror -// site is registered to have local search support -function have_search($site = FALSE) +function default_language($site = false) { global $MIRRORS, $MYSITE; if (!$site) { $site = $MYSITE; } - return (isset($MIRRORS[$site]) ? $MIRRORS[$site][5] : FALSE); + return (isset($MIRRORS[$site]) ? $MIRRORS[$site][6] : false); } // Returns the current (or specified) // mirror site's provider's name -function mirror_provider($site = FALSE) +function mirror_provider($site = false) { global $MIRRORS, $MYSITE; if (!$site) { $site = $MYSITE; } if (isset($MIRRORS[$site])) { return $MIRRORS[$site][1]; - } elseif (isset($MIRRORS[$_SERVER['SERVER_ADDR']])) { + } + + if (isset($MIRRORS[$_SERVER['SERVER_ADDR']])) { return $MIRRORS[$_SERVER['SERVER_ADDR']][1]; } @@ -84,14 +78,16 @@ function mirror_provider($site = FALSE) // Returns the current (or specified) // mirror site's provider's URL -function mirror_provider_url($site = FALSE) +function mirror_provider_url($site = false) { global $MIRRORS,$MYSITE; if (!$site) { $site = $MYSITE; } if (isset($MIRRORS[$site])) { return $MIRRORS[$site][3]; - } elseif (isset($MIRRORS[$_SERVER['SERVER_ADDR']])) { + } + + if (isset($MIRRORS[$_SERVER['SERVER_ADDR']])) { return $MIRRORS[$_SERVER['SERVER_ADDR']][3]; } @@ -100,14 +96,16 @@ function mirror_provider_url($site = FALSE) // Returns the current (or specified) // mirror site's type (use the constants!) -function mirror_type($site = FALSE) +function mirror_type($site = false) { global $MIRRORS, $MYSITE; if (!$site) { $site = $MYSITE; } if (isset($MIRRORS[$site])) { return $MIRRORS[$site][4]; - } elseif (isset($MIRRORS[$_SERVER['SERVER_ADDR']])) { + } + + if (isset($MIRRORS[$_SERVER['SERVER_ADDR']])) { return $MIRRORS[$_SERVER['SERVER_ADDR']][4]; } @@ -115,7 +113,7 @@ function mirror_type($site = FALSE) } // Redirect to an URI on this mirror site or outside this site -function mirror_redirect($absoluteURI) +function mirror_redirect($absoluteURI): void { global $MYSITE; @@ -142,17 +140,17 @@ function mirror_setcookie($name, $content, $exptime) if (!headers_sent()) { if (is_official_mirror()) { return setcookie($name, $content, time() + $exptime, '/', '.php.net'); - } else { - return setcookie($name, $content, time() + $exptime, '/'); } - } else { - return FALSE; + + return setcookie($name, $content, time() + $exptime, '/'); } + + return false; } // Use this function to write out proper headers on // pages where the content should not be publicly cached -function header_nocache() +function header_nocache(): void { // Only try to send out headers in case // those were not sent already @@ -162,185 +160,39 @@ function header_nocache() } } +function get_available_sqlites() { -// Compatibility function to fetch data from external source -function fetch_contents($url, $headers = false) { - - $terrors_setting = ini_set('track_errors', true); - - // A mysterious and elusive bug on us3 allows this to work, but the other methods do not - // So for now, use Curl first (curl++) - if(function_exists('curl_exec')) { - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_HEADER, (int)$headers); - curl_setopt($ch, CURLOPT_USERAGENT, "php.net"); - - $data = curl_exec($ch); - curl_close($ch); - - if ($headers) { - $array = explode("\n", $data); - foreach($array as $line) { - if (strlen($line)<=2) { - return $header; - } else { - $header[] = $line; - } - } - } - if (!$data) { - return array( - 'ERROR_NOTE' => 'Unable to find a way to retrieve data with curl', - 'ERROR_LAST' => $php_errormsg, - ); - } - - return $data; - } - - if(function_exists('file_get_contents') && ini_get('allow_url_fopen')) { - $context = null; - $opts = array('user_agent' => 'php.net'); - - if (version_compare(PHP_VERSION, '5.1.0', '>')) { - $context = stream_context_get_default(array('http' => $opts)); - } - elseif (version_compare(PHP_VERSION, '5.0.0', '>')) { - $context = stream_context_create(array('http' => $opts)); - } - if ($context) { - $data = @file_get_contents($url, false, $context); - } else { - $data = @file_get_contents($url, false); - } - - if ($headers) { - return $http_response_header; - } - - if (!$data) { - return array( - 'ERROR_NOTE' => 'Unable to find a way to retrieve data with file_get_contents', - 'ERROR_LAST' => $php_errormsg, - 'URL' => $url, - ); - } + $allsqlites = [1 => 'sqlite', 2 => 'sqlite3', 4 => 'pdo_sqlite', 8 => 'pdo_sqlite2']; + $avail = 0; - return $data; + if (function_exists('sqlite_open')) { + $avail += 1; } - - $array = parse_url($url); - if(function_exists('fsockopen') && $fd = @fsockopen($array["host"], 80, $errno, $errstr, 15)) { - $data = ""; - $header = array(); - $body = false; - - $path = $array["path"]; - if (isset($array["query"])) { - $path .= "?" . $array["query"]; - } - fputs($fd,"GET {$path} HTTP/1.0\r\n"); - fputs($fd,"Host: {$array["host"]}\r\n"); - fputs($fd,"User-Agent: php.net\r\n"); - fputs($fd,"Connection: close\r\n\r\n"); - - while($line = fgets($fd)) { - if($body) { - $data .= $line; - } elseif(strlen($line)<=2) { - $body = true; - } else { - $header[] = $line; - } - } - fclose($fd); - - if ($headers) { - return $header; - } - if (!$data) { - return array( - 'ERROR_NOTE' => 'Unable to find a way to retrieve data with fsockopen', - 'ERROR_LAST' => $php_errormsg, - ); - } - - return $data; + if (class_exists('sqlite3')) { + $avail += 2; } - - // TODO: Log if we get here - // Redirect to www.php.net ? - return array( - 'ERROR_NOTE' => 'Unable to find a way to retrieve data', - 'ERROR_LAST' => $php_errormsg, - ); -} - -// Compatibility function to fetch headers from external source -function fetch_header($url, $header) { - $headers = array(); - - if(function_exists("get_headers") && ini_get('allow_url_fopen')) { - $headers = get_headers($url, 1); - } else { - $data = fetch_contents($url, true); - if (isset($data["ERROR_NOTE"])) { - return null; - } - foreach($data as $line) { - if (($pos = strpos($line, ":")) !== false) { - $headers[substr($line, 0, $pos)] = trim(substr($line, $pos+1)); - } else { - $headers[0] = trim($line); + if (method_exists('PDO', 'getavailabledrivers')) { + foreach (PDO::getavailabledrivers() as $driver) { + switch ($driver) { + case 'sqlite': + $avail += 4; + break; + case 'sqlite2': + $avail += 8; + break; } } } - if (!is_array($headers) || empty($headers)) { - return null; - } - if (is_string($header)) { - $header = strtolower($header); - $headers = array_change_key_case($headers, CASE_LOWER); - } - - return isset($headers[$header]) ? $headers[$header] : null; -} - -function get_available_sqlites() { - - $allsqlites = array(1 => 'sqlite', 2 => 'sqlite3', 4 => 'pdo_sqlite', 8 => 'pdo_sqlite2'); - $avail = 0; - - if (function_exists('sqlite_open')) { - $avail += 1; - } - if (class_exists('sqlite3')) { - $avail += 2; - } - if (method_exists('PDO', 'getavailabledrivers')) { - foreach (PDO::getavailabledrivers() as $driver) { - switch ($driver) { - case 'sqlite': - $avail += 4; - break; - case 'sqlite2': - $avail += 8; - break; - } - } - } - return $avail; + return $avail; } // Get all manual prefix search sections function get_manual_search_sections() { - return array( - "", "book.", "ref.", "function.", "class.", + return [ + "", "book.", "ref.", "function.", "class.", "enum.", "features.", "control-structures.", "language.", "about.", "faq.", - ); + ]; } function get_shortname($page) { @@ -359,14 +211,13 @@ function get_shortname($page) { array_shift($sections); // We can atleast remove manual/xx/ - $shorturl = substr($page, strrpos($page, "/")+1); + $shorturl = substr($page, strrpos($page, "/") + 1); - foreach($sections as $section) { + foreach ($sections as $section) { // If we know this section if (strpos($shorturl, $section) === 0) { // We can make it even shorter return substr($shorturl, strlen($section), -4); - break; } } @@ -393,31 +244,30 @@ if (!isset($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] != "on") { $proto = "https"; } -if($_SERVER["SERVER_PORT"] != '80' && $_SERVER["SERVER_PORT"] != 443) { +if ($_SERVER["SERVER_PORT"] != '80' && $_SERVER["SERVER_PORT"] != 443) { $MYSITE = $proto . '://' . $_SERVER["SERVER_NAME"] . ':' . (int)$_SERVER["SERVER_PORT"] . '/'; - $msite = 'http://' . $_SERVER["SERVER_NAME"] . ':' . (int)$_SERVER["SERVER_PORT"] . '/'; + $msite = 'http://' . $_SERVER["SERVER_NAME"] . ':' . (int)$_SERVER["SERVER_PORT"] . '/'; } else { $MYSITE = $proto . '://' . $_SERVER["SERVER_NAME"] . '/'; - $msite = 'https://' . $_SERVER["SERVER_NAME"] . '/'; + $msite = 'https://' . $_SERVER["SERVER_NAME"] . '/'; } - // If the mirror is not registered with this name, provide defaults // (no country code, no search, no stats, English default language ...) if (!isset($MIRRORS[$MYSITE])) { - $MIRRORS[$MYSITE] = array("xx", $MYSITE, FALSE, $MYSITE, MIRROR_VIRTUAL, FALSE, "en", MIRROR_OK); + $MIRRORS[$MYSITE] = ["xx", $MYSITE, false, $MYSITE, MIRROR_VIRTUAL, false, "en", MIRROR_OK]; } // Override mirror language with local preference if (isset($_SERVER['MIRROR_LANGUAGE'])) { - if (isset($LANGUAGES[$_SERVER['MIRROR_LANGUAGE']])) { + if (isset(Languages::LANGUAGES[$_SERVER['MIRROR_LANGUAGE']])) { $MIRRORS[$MYSITE][6] = $_SERVER['MIRROR_LANGUAGE']; } } // Fallback to English in case the language // set is definitely not supported -if (!isset($LANGUAGES[$MIRRORS[$MYSITE][6]])) { +if (!isset(Languages::LANGUAGES[$MIRRORS[$MYSITE][6]])) { $MIRRORS[$MYSITE][6] = "en"; } diff --git a/include/ui_translation/de.ini b/include/ui_translation/de.ini new file mode 100644 index 0000000000..e24fe76b9e --- /dev/null +++ b/include/ui_translation/de.ini @@ -0,0 +1,9 @@ +change_language = "" +improve_this_page = "" +how_to_improve_this_page = "" +contribution_guidlines_on_github = "" +submit_a_pull_request = "" +report_a_bug = "" +add_a_note = "" +user_contributed_notes = "" +no_user_notes = "" diff --git a/include/ui_translation/en.ini b/include/ui_translation/en.ini new file mode 100644 index 0000000000..1a6aa3ecd3 --- /dev/null +++ b/include/ui_translation/en.ini @@ -0,0 +1,9 @@ +change_language = "Change language" +improve_this_page = "Found A Problem?" +how_to_improve_this_page = "Learn How To Improve This Page" +contribution_guidlines_on_github = "This will take you to our contribution guidelines on GitHub" +submit_a_pull_request = "Submit a Pull Request" +report_a_bug = "Report a Bug" +add_a_note = "add a note" +user_contributed_notes = "User Contributed Notes" +no_user_notes = "There are no user contributed notes for this page." diff --git a/include/ui_translation/es.ini b/include/ui_translation/es.ini new file mode 100644 index 0000000000..e24fe76b9e --- /dev/null +++ b/include/ui_translation/es.ini @@ -0,0 +1,9 @@ +change_language = "" +improve_this_page = "" +how_to_improve_this_page = "" +contribution_guidlines_on_github = "" +submit_a_pull_request = "" +report_a_bug = "" +add_a_note = "" +user_contributed_notes = "" +no_user_notes = "" diff --git a/include/ui_translation/fr.ini b/include/ui_translation/fr.ini new file mode 100644 index 0000000000..e24fe76b9e --- /dev/null +++ b/include/ui_translation/fr.ini @@ -0,0 +1,9 @@ +change_language = "" +improve_this_page = "" +how_to_improve_this_page = "" +contribution_guidlines_on_github = "" +submit_a_pull_request = "" +report_a_bug = "" +add_a_note = "" +user_contributed_notes = "" +no_user_notes = "" diff --git a/include/ui_translation/it.ini b/include/ui_translation/it.ini new file mode 100644 index 0000000000..e24fe76b9e --- /dev/null +++ b/include/ui_translation/it.ini @@ -0,0 +1,9 @@ +change_language = "" +improve_this_page = "" +how_to_improve_this_page = "" +contribution_guidlines_on_github = "" +submit_a_pull_request = "" +report_a_bug = "" +add_a_note = "" +user_contributed_notes = "" +no_user_notes = "" diff --git a/include/ui_translation/ja.ini b/include/ui_translation/ja.ini new file mode 100644 index 0000000000..e24fe76b9e --- /dev/null +++ b/include/ui_translation/ja.ini @@ -0,0 +1,9 @@ +change_language = "" +improve_this_page = "" +how_to_improve_this_page = "" +contribution_guidlines_on_github = "" +submit_a_pull_request = "" +report_a_bug = "" +add_a_note = "" +user_contributed_notes = "" +no_user_notes = "" diff --git a/include/ui_translation/pt_br.ini b/include/ui_translation/pt_br.ini new file mode 100644 index 0000000000..b40416d9d2 --- /dev/null +++ b/include/ui_translation/pt_br.ini @@ -0,0 +1,9 @@ +change_language = "Selecione a língua" +improve_this_page = "Melhore Esta Página" +how_to_improve_this_page = "Aprenda Como Melhorar Esta Página" +contribution_guidlines_on_github = "Este atalho te leva ao nosso guia de contribuição no GitHub" +submit_a_pull_request = "Envie uma Solicitação de Modificação" +report_a_bug = "Reporte um Problema" +add_a_note = "adicionar nota" +user_contributed_notes = "Notas de Usuários" +no_user_notes = "Não há notas de usuários para esta página." diff --git a/include/ui_translation/ru.ini b/include/ui_translation/ru.ini new file mode 100644 index 0000000000..b9289b01cf --- /dev/null +++ b/include/ui_translation/ru.ini @@ -0,0 +1,9 @@ +change_language = "Язык" +improve_this_page = "Нашли ошибку?" +how_to_improve_this_page = "Инструкция" +contribution_guidlines_on_github = "Github-инструкция по улучшению страниц" +submit_a_pull_request = "Исправление" +report_a_bug = "Сообщение об ошибке" +add_a_note = "Добавить" +user_contributed_notes = "Примечания пользователей" +no_user_notes = "Пользователи ещё не добавляли примечания для страницы" diff --git a/include/ui_translation/tr.ini b/include/ui_translation/tr.ini new file mode 100644 index 0000000000..e24fe76b9e --- /dev/null +++ b/include/ui_translation/tr.ini @@ -0,0 +1,9 @@ +change_language = "" +improve_this_page = "" +how_to_improve_this_page = "" +contribution_guidlines_on_github = "" +submit_a_pull_request = "" +report_a_bug = "" +add_a_note = "" +user_contributed_notes = "" +no_user_notes = "" diff --git a/include/ui_translation/zh.ini b/include/ui_translation/zh.ini new file mode 100644 index 0000000000..a3dcf842b9 --- /dev/null +++ b/include/ui_translation/zh.ini @@ -0,0 +1,9 @@ +change_language = "切换语言" +improve_this_page = "发现了问题?" +how_to_improve_this_page = "了解如何改进此页面" +contribution_guidlines_on_github = "这将带您前往我们在 GitHub 上的贡献指南" +submit_a_pull_request = "提交拉取请求" +report_a_bug = "报告一个错误" +add_a_note = "添加备注" +user_contributed_notes = "用户贡献的备注" +no_user_notes = "此页面尚无用户贡献的备注。" diff --git a/include/version.inc b/include/version.inc index b729be06dc..924139a126 100644 --- a/include/version.inc +++ b/include/version.inc @@ -1,4 +1,4 @@ - array( @@ -15,42 +15,56 @@ * ), * ); */ -$RELEASES = (function() { +$RELEASES = (function () { $data = []; - /* PHP 8.0 Release */ - $data['8.0'] = [ - 'version' => '8.0.10', - 'date' => '26 Aug 2021', - 'tags' => ['security'], // Set to ['security'] for security releases. + /* PHP 8.5 Release */ + $data['8.5'] = [ + 'version' => '8.5.1', + 'date' => '18 Dec 2025', + 'tags' => ['security'], // Set to ['security'] for security releases. 'sha256' => [ - 'tar.gz' => '4612dca9afe8148801648839175ab588097ace66658c6859e9f283ecdeaf84b3', - 'tar.bz2' => 'c94547271410900845b084ec2bcb3466af363eeca92cb24bd611dcbdc26f1587', - 'tar.xz' => '66dc4d1bc86d9c1bc255b51b79d337ed1a7a035cf71230daabbf9a4ca35795eb', + // WARNING: Order of SHA256 entries here is DIFFERENT from the + // order in the manifest + 'tar.gz' => '915492958081409a5e3ef99df969bcfa5b33bdf9517bd077991747e17fa2c1b7', + 'tar.bz2' => '55f428c426e7241752ea9afff160bb64c32a9321cbd6d17d1c145b8df8823737', + 'tar.xz' => '3f5bf99ce81201f526d25e288eddb2cfa111d068950d1e9a869530054ff98815', ] ]; - /* PHP 7.4 Release */ - $data['7.4'] = [ - 'version' => '7.4.23', - 'date' => '26 Aug 2021', - 'tags' => ['security'], // Set to ['security'] for security releases - 'sha256' => [ - 'tar.gz' => '2aaa481678ad4d2992e7bcf161e0e98c7268f4979f7ca8b3d97dd6de19c205d6', - 'tar.bz2' => 'd1e094fe6e4f832e0a64be9c69464ba5d593fb216f914efa8bbb084e0a7a5727', - 'tar.xz' => 'cea52313fcffe56343bcd3c66dbb23cd5507dc559cc2e3547cf8f5452e88a05d', + /* PHP 8.4 Release */ + $data['8.4'] = [ + 'version' => '8.4.16', + 'date' => '18 Dec 2025', + 'tags' => ['security'], // Set to ['security'] for security releases. + 'sha256' => [ + 'tar.gz' => '8e35d24f148ea7c2a93e9b9bcc329e8bf78b5bb922f3723a727c74c19d184e98', + 'tar.bz2' => '6c48c65eba6a2f7a102925d08772239b1f45110aed2187fdd81b933ed439c692', + 'tar.xz' => 'f66f8f48db34e9e29f7bfd6901178e9cf4a1b163e6e497716dfcb8f88bcfae30', + ] + ]; + + /* PHP 8.3 Release */ + $data['8.3'] = [ + 'version' => '8.3.29', + 'date' => '18 Dec 2025', + 'tags' => ['security'], // Set to ['security'] for security releases. + 'sha256' => [ + 'tar.gz' => '8565fa8733c640b60da5ab4944bf2d4081f859915b39e29b3af26cf23443ed97', + 'tar.bz2' => 'c7337212e655325d499ea8108fa76f69ddde2fff7cb0fad36aa63eed540cb8a5', + 'tar.xz' => 'f7950ca034b15a78f5de9f1b22f4d9bad1dd497114d175cb1672a4ca78077af5', ] ]; - /* PHP 7.3 Release */ - $data['7.3'] = [ - 'version' => '7.3.30', - 'date' => '26 Aug 2021', - 'tags' => ['security'], - 'sha256' => [ - 'tar.gz' => '3810a9b631eb7f236ecf02b9a78bab8d957b6cfdb1646a29e3b34e01d36c0510', - 'tar.bz2' => 'ccc532e660761df9b5509b9b913d2dc049b0a9954108fe212aeeb8bc2556b502', - 'tar.xz' => '0ebfd656df0f3b1ea37ff2887f8f2d1a71cd160fb0292547c0ee0a99e58ffd1b', + /* PHP 8.2 Release */ + $data['8.2'] = [ + 'version' => '8.2.30', + 'date' => '18 Dec 2025', + 'tags' => ['security'], // Set to ['security'] for security releases. + 'sha256' => [ + 'tar.gz' => 'a0fa6673ba4b0c8335fbab08afb7c2e13a3791f2b5a0928c7ad3d7ad872edf26', + 'tar.bz2' => '104820b6c8fc959dde4b3342135f42bdabf246e86918a16381a17d8447c866fa', + 'tar.xz' => 'bc90523e17af4db46157e75d0c9ef0b9d0030b0514e62c26ba7b513b8c4eb015', ] ]; @@ -82,7 +96,7 @@ $RELEASES = (function() { function release_get_latest() { global $RELEASES; - $version = null; + $version = '0.0.0'; $current = null; foreach ($RELEASES as $versions) { foreach ($versions as $ver => $info) { @@ -93,5 +107,59 @@ function release_get_latest() { } } - return [ $version, $current ]; + return [$version, $current]; +} + +function show_source_releases() +{ + global $RELEASES; + + $SHOW_COUNT = 4; + + $current_uri = htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES, 'UTF-8'); + + $i = 0; foreach ($RELEASES as $MAJOR => $major_releases): /* major releases loop start */ + $releases = array_slice($major_releases, 0, $SHOW_COUNT); +?> + + $a): ?> + + + +

    + + PHP + (Changelog) +

    +
    + +
      + +
    • + + + ', $rel['md5'], ''; + if (isset($rel['sha256'])) echo '', $rel['sha256'], ''; + ?> + +

      + Note: + +

      + +
    • + +
    • + + Windows downloads + +
    • +
    + + GPG Keys for PHP +
    + + + '/language.operators.comparison#language.operators.comparison.ternary', - '/??' => '/language.operators.comparison#language.operators.comparison.coalesce', - '/??=' => '/language.operators.assignment#language.operators.assignment.other', + '/?:' => '/language.operators.comparison#language.operators.comparison.ternary', + '/??' => '/language.operators.comparison#language.operators.comparison.coalesce', + '/??=' => '/language.operators.assignment#language.operators.assignment.other', ]; if (isset($shortcuts[$uri])) { header("Location: {$shortcuts[$uri]}"); @@ -13,7 +16,7 @@ })($_SERVER['REQUEST_URI'] ?? ''); // Get the modification date of this PHP file -$timestamps = array(@getlastmod()); +$timestamps = [@getlastmod()]; /* The date of prepend.inc represents the age of ALL @@ -42,36 +45,22 @@ header("HTTP/1.1 304 Not Modified"); exit(); } + // Inform the user agent what is our last modification date -else { - header("Last-Modified: " . $tsstring); -} +header("Last-Modified: " . $tsstring); $_SERVER['BASE_PAGE'] = 'index.php'; include_once 'include/prepend.inc'; include_once 'include/branches.inc'; include_once 'include/pregen-confs.inc'; -include_once 'include/pregen-news.inc'; include_once 'include/version.inc'; -mirror_setcookie("LAST_NEWS", $_SERVER["REQUEST_TIME"], 60*60*24*365); - +mirror_setcookie("LAST_NEWS", $_SERVER["REQUEST_TIME"], 60 * 60 * 24 * 365); $content = "
    "; -$frontpage = array(); -foreach($NEWS_ENTRIES as $entry) { - foreach($entry["category"] as $category) { - if ($category["term"] == "frontpage") { - $frontpage[] = $entry; - if (count($frontpage) >= 25) { - break 2; - } - } - } -} -foreach($frontpage as $entry) { +foreach ((new NewsHandler())->getFrontPageNews() as $entry) { $link = preg_replace('~^(http://php.net/|https://www.php.net/)~', '', $entry["id"]); - $id = parse_url($entry["id"], PHP_URL_FRAGMENT); + $id = parse_url($entry["id"], PHP_URL_FRAGMENT); $date = date_create($entry['updated']); $date_human = date_format($date, 'd M Y'); $date_w3c = date_format($date, DATE_W3C); @@ -93,62 +82,60 @@ $content .= "
    "; $intro = << -
    -

    PHP is a popular general-purpose scripting language that is especially suited to web development.

    -

    Fast, flexible and pragmatic, PHP powers everything from your blog to the most popular websites in the world.

    +
    + +

    A popular general-purpose scripting language that is especially suited to web development.
    Fast, flexible and pragmatic, PHP powers everything from your blog to the most popular websites in the world.

    + -
    -

    Download

    EOF; -$intro .= "
      \n"; +$intro .= "
        \n"; $active_branches = get_active_branches(); krsort($active_branches); foreach ($active_branches as $major => $releases) { krsort($releases); foreach ((array)$releases as $release) { $version = $release['version']; - list($major, $minor, $_) = explode('.', $version); + [$major, $minor, $_] = explode('.', $version); $intro .= " -
      • $version·Release Notes·Upgrading
      • \n"; +
      • $version · Changelog · Upgrading
      • \n"; } } $intro .= "
      \n"; $intro .= <<
    EOF; -// Write out common header -site_header("Hypertext Preprocessor", - array( +site_header(NULL, + [ 'current' => 'home', - 'headtags' => array( + 'headtags' => [ '', '' - ), - 'link' => array( - array( - "rel" => "search", - "type" => "application/opensearchdescription+xml", - "href" => $MYSITE . "phpnetimprovedsearch.src", - "title" => "Add PHP.net search" - ), - array( - "rel" => "alternate", - "type" => "application/atom+xml", - "href" => $MYSITE . "releases/feed.php", - "title" => "PHP Release feed" - ), - - ), - 'css' => array('home.css'), - 'intro' => $intro - ) + "okc(function(){if(document.getElementById){i=document.getElementById('phplogo');i.src='" . $MYSITE . "images/php_konami.gif'}});", + '', + ], + 'link' => [ + [ + "rel" => "search", + "type" => "application/opensearchdescription+xml", + "href" => $MYSITE . "phpnetimprovedsearch.src", + "title" => "Add PHP.net search", + ], + [ + "rel" => "alternate", + "type" => "application/atom+xml", + "href" => $MYSITE . "releases/feed.php", + "title" => "PHP Release feed", + ], + + ], + 'css' => ['home.css'], + 'intro' => $intro, + ], ); // Print body of home page. @@ -156,18 +143,18 @@ // Prepare announcements. if (is_array($CONF_TEASER)) { - $conftype = array( + $conftype = [ 'conference' => 'Upcoming conferences', - 'cfp' => 'Conferences calling for papers', - ); + 'cfp' => 'Conferences calling for papers', + ]; $announcements = ""; - foreach($CONF_TEASER as $category => $entries) { - if ($entries) { + foreach ($CONF_TEASER as $category => $entries) { + if ($entries) { $announcements .= '
    '; - $announcements .= ' ' . $conftype[$category] .''; + $announcements .= ' ' . $conftype[$category] . ''; $announcements .= '
      '; foreach (array_slice($entries, 0, 4) as $url => $title) { - $title = preg_replace("'([A-Za-z0-9])([\s\:\-\,]*?)call for(.*?)$'i", "$1", $title); + $title = preg_replace("'([A-Za-z0-9])([\s:\-,]*?)call for(.*?)$'i", "$1", $title); $announcements .= "
    • $title
    • "; } $announcements .= '
    '; @@ -178,32 +165,49 @@ $announcements = ''; } -$SIDEBAR = <<< SIDEBAR_DATA +$SIDEBAR = << + The PHP Foundation +
    +

    The PHP Foundation is a collective of people and organizations, united in the mission to ensure the long-term prosperity of the PHP language. +

    Donate

    +
    +
    $announcements

    User Group Events

    Special Thanks

    - SIDEBAR_DATA; // Print the common footer. -site_footer( - array( - "atom" => "/feed.atom", // Add a link to the feed at the bottom - 'elephpants' => true, - 'sidebar' => $SIDEBAR - ) -); +site_footer([ + "atom" => "/feed.atom", // Add a link to the feed at the bottom + 'elephpants' => true, + 'sidebar' => $SIDEBAR, +]); diff --git a/js/common.js b/js/common.js index 99c262f0b3..aac5fb05ce 100644 --- a/js/common.js +++ b/js/common.js @@ -1,35 +1,25 @@ /* Plugins, etc, are on top. */ -String.prototype.escapeSelector = function() { - return this.replace(/(.|#)([ #;&,.+*~\':"!^$\[\]\(\)=>|\/])/g, '$1' + '\\\\$2'); +String.prototype.escapeSelector = function () { + return this.replace(/(.|#)([ #;&,.+*~\':"!^$\[\]\(\)=>|\/])/g, '$1' + '\\\\$2'); }; -String.prototype.toInt = function() { - return parseInt(this); +String.prototype.toInt = function () { + return parseInt(this); }; -/** {{{ -* jQuery.ScrollTo - Easy element scrolling using jQuery. -* Copyright (c) 2007-2013 Ariel Flesler - afleslergmailcom | http://flesler.blogspot.com -* Dual licensed under MIT and GPL. -* @author Ariel Flesler -* @version 2.1.2 -*/ -;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1= 0; }; }); + function lookfor(txt) { var retval = $("#layout a:icontains('" + txt + "')"); - $(retval).each(function(k, val) { - $("#goto .results ul").append("
  • " + $(val).text() +"
  • "); + $(retval).each(function (k, val) { + $("#goto .results ul").append("
  • " + $(val).text() + "
  • "); }); } + function localpage(text) { lookfor(text); } -Mousetrap.bind("g s", function(e) { +Mousetrap.bind("g s", function (e) { boogie(e, localpage); }); + function boogie(e, cb) { cb($("#goto .text").text()); $("#goto .results a:first").focus(); $("#goto").slideToggle(); - $("html").on("keydown", function(e) { - switch(e.which || e.keyCode) { - /* Backspace */ + $("html").on("keydown", function (e) { + switch (e.which || e.keyCode) { case 8: + /* Backspace */ var txt = $("#goto .text").text(); txt = txt.substring(0, txt.length - 1); $("#goto .text").text(txt); @@ -178,15 +203,13 @@ function boogie(e, cb) { $("#goto .results a:first").focus(); e.preventDefault(); break; - - /* Enter */ case 13: + /* Enter */ Mousetrap.unpause(); Mousetrap.trigger('esc'); return true; - - /* Tab */ case 9: + /* Tab */ $(document.activeElement).parent().next().first().focus(); break; case 27: @@ -194,7 +217,7 @@ function boogie(e, cb) { Mousetrap.trigger('esc'); } }); - $("html").on("keypress", function(e) { + $("html").on("keypress", function (e) { if (e.which == 13) { return true; } @@ -210,504 +233,638 @@ function boogie(e, cb) { Mousetrap.pause(); } if (!('contains' in String.prototype)) { - String.prototype.contains = function(str, startIndex) { + String.prototype.contains = function (str, startIndex) { return -1 !== String.prototype.indexOf.call(this, str, startIndex); }; } -Mousetrap.bind("g a", function(e) { +Mousetrap.bind("g a", function (e) { boogie(e, globalsearch); }); -function globalsearch(txt) { - var key = "search-en"; - var cache = window.localStorage.getItem(key); - cache = JSON.parse(cache); +function globalsearch(txt) { var term = txt.toLowerCase(); if (term.length < 3) { return; } + + const language = getLanguage() + const key = `search2-${language}`; + let cache = window.localStorage.getItem(key); + cache = JSON.parse(cache); + if (cache) { - for (var type in cache.data) { - console.log(type); - var elms = cache.data[type].elements; - for (var node in elms) { - if (elms[node].description.toLowerCase().contains(term) || elms[node].name.toLowerCase().contains(term)) { - $("#goto .results ul").append("
  • " + elms[node].name + ": " + elms[node].description +"
  • "); - if ($("#goto .results ul li") > 30) { - return; - } + for (const node of cache.data) { + if ( + node.description.toLowerCase().contains(term) || + node.name.toLowerCase().contains(term) + ) { + $("#goto .results ul").append(` +
  • + + ${node.name}: ${node.description} + +
  • `); + if ($("#goto .results ul li") > 30) { + return; } } } } } -Mousetrap.bind("/", function(e) { - if (e.preventDefault) { - e.preventDefault(); - } else { - // internet explorer - e.returnValue = false; - } - $("input[type=search]").focus() -}); + var rotate = 0; -Mousetrap.bind("r o t a t e enter", function(e) { +Mousetrap.bind("r o t a t e enter", function (e) { rotate += 90; if (rotate > 360) { rotate = 0; } - $("html").css("-webkit-transform", "rotate(" + rotate + "deg)"); - $("html").css("-moz-transform", "rotate(" + rotate + "deg)"); - $("html").css("-o-transform", "rotate(" + rotate + "deg)"); - $("html").css("-ms-transform", "rotate(" + rotate + "deg)"); - $("html").css("transform", "rotate(" + rotate + "deg)"); + var htmlNode = $("html"); + htmlNode.css("-webkit-transform", "rotate(" + rotate + "deg)"); + htmlNode.css("-moz-transform", "rotate(" + rotate + "deg)"); + htmlNode.css("-o-transform", "rotate(" + rotate + "deg)"); + htmlNode.css("-ms-transform", "rotate(" + rotate + "deg)"); + htmlNode.css("transform", "rotate(" + rotate + "deg)"); }); var scale = 1; -Mousetrap.bind("m i r r o r enter", function(e) { +Mousetrap.bind("m i r r o r enter", function (e) { scale *= -1; - $("html").css("-webkit-transform", "scaleX(" + scale + ")"); - $("html").css("-moz-transform", "scaleX(" + scale + ")"); - $("html").css("-o-transform", "scaleX(" + scale + ")"); - $("html").css("-ms-transform", "scaleX(" + scale + ")"); - $("html").css("transform", "scaleX(" + scale + ")"); + var htmlNode = $("html"); + htmlNode.css("-webkit-transform", "scaleX(" + scale + ")"); + htmlNode.css("-moz-transform", "scaleX(" + scale + ")"); + htmlNode.css("-o-transform", "scaleX(" + scale + ")"); + htmlNode.css("-ms-transform", "scaleX(" + scale + ")"); + htmlNode.css("transform", "scaleX(" + scale + ")"); }); -Mousetrap.bind("I space h a t e space P H P enter", function(e) { +Mousetrap.bind("I space h a t e space P H P enter", function (e) { window.location = "http://python.org"; }); -Mousetrap.bind("I space l o v e space P H P enter", function(e) { - flashMessage({text: 'Live long and prosper !'}); +Mousetrap.bind("I space l o v e space P H P enter", function (e) { + flashMessage({ + text: 'Live long and prosper !' + }); }); -Mousetrap.bind("l o g o enter", function(e) { +Mousetrap.bind("l o g o enter", function (e) { var time = new Date().getTime(); - $(".brand img").attr("src", "/images/logo.php?refresh&time=" + time); + $(".navbar__brand img").attr("src", "/images/logo.php?refresh&time=" + time); }); -Mousetrap.bind("u n r e a d a b l e enter", function(e) { +Mousetrap.bind("u n r e a d a b l e enter", function (e) { document.cookie = 'MD=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT'; location.reload(true); }); -Mousetrap.bind("r e a d a b l e enter", function(e) { +Mousetrap.bind("r e a d a b l e enter", function (e) { document.cookie = 'MD=1; path=/'; location.reload(true); }); function fixTimeout() { Mousetrap.trigger("m i r r o r enter"); - setTimeout(function() { + setTimeout(function () { Mousetrap.trigger("m i r r o r enter"); }, 200); - setTimeout(function() { fixTimeout(); }, 30000); + setTimeout(function () { + fixTimeout(); + }, 30000); } + function fixEdges(rotate) { + var htmlNode = $("html"); if (rotate > 360) { rotate = 0; - $("html").css("zoom", 1); - $("html").css("-moz-transform", "scale(1)"); - $("html").css("-webkit-transform", "scale(1)"); - setTimeout(function(){fixEdges(36)}, 30000); + htmlNode.css("zoom", 1); + htmlNode.css("-moz-transform", "scale(1)"); + htmlNode.css("-webkit-transform", "scale(1)"); + setTimeout(function () { + fixEdges(36); + }, 30000); } else { - $("html").css("zoom", 0.5); - $("html").css("-moz-transform", "scale(0.5)"); - $("html").css("-webkit-transform", "scale(0.5)"); - setTimeout(function(){fixEdges(rotate+36)}, 100); + htmlNode.css("zoom", 0.5); + htmlNode.css("-moz-transform", "scale(0.5)"); + htmlNode.css("-webkit-transform", "scale(0.5)"); + setTimeout(function () { + fixEdges(rotate + 36); + }, 100); } - $("html").css("-webkit-transform", "rotate(" + rotate + "deg)"); - $("html").css("-moz-transform", "rotate(" + rotate + "deg)"); - $("html").css("-o-transform", "rotate(" + rotate + "deg)"); - $("html").css("-ms-transform", "rotate(" + rotate + "deg)"); - $("html").css("transform", "rotate(" + rotate + "deg)"); + htmlNode.css("-webkit-transform", "rotate(" + rotate + "deg)"); + htmlNode.css("-moz-transform", "rotate(" + rotate + "deg)"); + htmlNode.css("-o-transform", "rotate(" + rotate + "deg)"); + htmlNode.css("-ms-transform", "rotate(" + rotate + "deg)"); + htmlNode.css("transform", "rotate(" + rotate + "deg)"); } -$(document).ready(function() { -/* - if (Math.floor(Math.random()*10) % 2) { - fixTimeout(); - } else { - fixEdges(36); - } -*/ +$(document).ready(function () { + /* + if (Math.floor(Math.random()*10) % 2) { + fixTimeout(); + } else { + fixEdges(36); + } + */ var $docs = $('.docs'); var $refsect1 = $docs.find('.refentry .refsect1'); var $docsDivWithId = $docs.find('div[id]'); - $docsDivWithId.children("h1, h2, h3, h4").each(function(){ + $docsDivWithId.children("h1, h2, h3, h4").each(function () { $(this).append(""); }); - $('.refentry code.parameter').click(function(event) - { - var id = $(this).text().replace(/^&?(\.\.\.)?\$?/g, ''); - var offsetTop = $('.parameters, .options').find('.parameter').filter(function() { - return $(this).text() === id; // https://bugs.php.net/bug.php?id=74493 - }).offset().top - 52; - $.scrollTo({top: offsetTop, left: 0}, 400); - }); + function findParameter(elt) { + var id = $(elt).text().replace(/^&?(\.\.\.)?\$?/g, ''); + return $('.parameters, .options').find('.parameter').filter(function () { + return $(this).text().trim() === id; // https://bugs.php.net/bug.php?id=74493 + }).first(); + } + + $('.refentry code.parameter') + .each(function () { + var param = findParameter(this); + if (param.length) { + $(this).css('cursor', 'pointer'); + } + }) + .click(function () { + var param = findParameter(this); + if (param.length) { + $.scrollTo({ + top: param.offset().top, + left: 0 + }, 400); + } + }); - $('h1[id], h2[id], h3[id], h4[id]').each(function() { + $('h1[id], h2[id], h3[id], h4[id]').each(function () { var $this = $(this); $this.append(""); }); - /* Don't load elephpants on browsers that don't support data: URIs. - * Unfortunately, the Modernizr test is asynchronous, so we have to spin - * until it actually gives us a yes or a no. */ - var initElephpants = function () { - if (typeof Modernizr.datauri !== "undefined") { - var $elephpants = $(".elephpants"); - - if (Modernizr.datauri) { - var $elephpantsImages = $elephpants.find('.images'); - // load the elephpant images if elephpants div is in the dom. - $elephpantsImages.first().each(function (idx, node) { - - // function to fetch and insert images. - var fetchImages = function() { - - // determine how many elephpants are required to fill the - // viewport and subtract for any images we already have. - var count = Math.ceil($(document).width() / 75) - - $elephpantsImages.find("img").length; - - // early exit if we don't need any images. - if (count < 1) { - return; - } + (function () { + var $elephpants = $(".elephpants"); - // do the fetch. - $.ajax({ - url: '/images/elephpants.php?count=' + count, - dataType: 'json', - success: function(data) { - var photo, image; - for (photo in data) { - photo = data[photo]; - link = $(''); - link.attr('href', photo.url); - link.attr('title', photo.title); - image = $(''); - image.attr('src', 'data:image/jpeg;base64,' + photo.data); - $(node).append(link.append(image)); - } - }, - error: function() { - $elephpants.hide(); - } - }); + var $elephpantsImages = $elephpants.find('.images'); + // load the elephpant images if elephpants div is in the dom. + $elephpantsImages.first().each(function (idx, node) { - } + // function to fetch and insert images. + var fetchImages = function () { - // begin by fetching the images we need now. - fetchImages(); + // determine how many elephpants are required to fill the + // viewport and subtract for any images we already have. + var count = Math.ceil($(document).width() / 75) - + $elephpantsImages.find("img").length; - // fetch more if viewport gets larger. - var deferred = null; - $(window).resize(function() { - window.clearTimeout(deferred); - deferred = window.setTimeout(function(){ - fetchImages(); - }, 250); - }); + // early exit if we don't need any images. + if (count < 1) { + return; + } + + // do the fetch. + $.ajax({ + url: '/images/elephpants.php?count=' + count, + dataType: 'json', + success: function (data) { + var photo, image; + for (photo in data) { + photo = data[photo]; + link = $(''); + link.attr('href', photo.url); + link.attr('title', photo.title); + image = $(''); + image.attr('alt', ''); + image.attr('src', 'data:image/jpeg;base64,' + photo.data); + $(node).append(link.append(image)); + } + }, + error: function () { + $elephpants.hide(); + } }); - } else { - $elephpants.hide(); - } - } else { - // Modernizr is still testing; check again in 100 ms. - window.setTimeout(initElephpants, 100); - } - }; - initElephpants(); + }; + + // begin by fetching the images we need now. + fetchImages(); + + // fetch more if viewport gets larger. + var deferred = null; + $(window).resize(function () { + window.clearTimeout(deferred); + deferred = window.setTimeout(function () { + fetchImages(); + }, 250); + }); + }); + })(); // We have

    tags generated with nothing in them and it requires a PHD change, meanwhile this fixes it. - $refsect1.find('p').each(function() { - var $this = $(this), html = $this.html(); - if(html !== null && html.replace(/\s| /g, '').length == 0) { + $refsect1.find('p').each(function () { + var $this = $(this), + html = $this.html(); + if (html !== null && html.replace(/\s| /g, '').length == 0) { $this.remove(); } }); -/*{{{ Scroll to top */ - (function() { + /*{{{ 2024 Navbar */ + const offcanvasElement = document.getElementById("navbar__offcanvas"); + const offcanvasSelectables = + offcanvasElement.querySelectorAll("input, button, a"); + const backdropElement = document.getElementById("navbar__backdrop"); - var settings = { - text: 'To Top', - min: 200, - inDelay: 600, - outDelay: 400, - containerID: 'toTop', - containerHoverID: 'toTopHover', - scrollSpeed: 400, - easingType: 'linear' - }; + const documentWidth = document.documentElement.clientWidth; + const scrollbarWidth = Math.abs(window.innerWidth - documentWidth); - var toTopHidden = true; - var toTop = $('#' + settings.containerID); - - toTop.click(function(e) { - e.preventDefault(); - $.scrollTo(0, settings.scrollSpeed, {easing: settings.easingType}); - }); - - $(window).scroll(function() { - var sd = $(this).scrollTop(); - if (sd > settings.min && toTopHidden) - { - toTop.fadeIn(settings.inDelay); - toTopHidden = false; + const offcanvasFocusTrapHandler = (event) => { + if (event.key != "Tab") { + return; } - else if(sd <= settings.min && ! toTopHidden) - { - toTop.fadeOut(settings.outDelay); - toTopHidden = true; - } - }); - })(); -/*}}}*/ - -/*{{{User Notes*/ - $("#usernotes a.usernotes-voteu, #usernotes a.usernotes-voted").each( - function () { - $(this).click( - function (event) { - event.preventDefault(); - var url = $(this).attr("href"); - var id = url.match(/\?id=(\d+)/)[1]; - var request = $.ajax({ - type: "POST", - url: url, - dataType: "json", - headers: {"X-Json": "On" }, - beforeSend: function() { - $("#Vu"+id).hide(); - $("#Vd"+id).hide(); - $("#V"+id).html("\"Working...\""); - } - }); - request.done(function(data) { - if(data.success != null && data.success == true) { - $("#V"+id).html("

    " + data.update); + const firstElement = offcanvasSelectables[0]; + const lastElement = + offcanvasSelectables[offcanvasSelectables.length - 1]; - flashMessage({text: 'Thank you for voting!'}); + if (event.shiftKey) { + if (document.activeElement === firstElement) { + event.preventDefault(); + lastElement.focus(); } - else { - var responsedata = "Error :("; - if (data.msg != null) { - responsedata = data.msg; - } - $("#V"+id).html("
    "); - - flashMessage({text: 'Unexpected error occured, please try again later!', type: 'error'}); - } - }); - request.fail(function(jqXHR, textStatus) { - $("#Vu"+id).show(); - $("#Vd"+id).show(); - $("#V"+id).html("
    "); - - flashMessage({text: 'Something went wrong :(', type: 'error'}); - }); - request.always(function(data) { - $("#V"+id).fadeIn(500, "linear"); - }); + } else if (document.activeElement === lastElement) { + event.preventDefault(); + firstElement.focus(); } - ); - } - ); -/*}}}*/ - - // Search box autocomplete (for browsers that aren't IE <= 8, anyway). - if (typeof window.brokenIE === "undefined") { - jQuery("#topsearch .search-query").search({ - language: getLanguage(), - limit: 30 - }); - } + }; -/* {{{ Negative user notes fade-out */ - var usernotes = document.getElementById('usernotes'); - if (usernotes != null) { - var mapper = new function() { - this.domain = { - "max": -1, - "min": -5 - }; - this.range = { - "max": 0.75, - "min": 0.35 - }; + const openOffcanvasNav = () => { + offcanvasElement.classList.add("show"); + offcanvasElement.setAttribute("aria-modal", "true"); + offcanvasElement.setAttribute("role", "dialog"); + offcanvasElement.style.visibility = "visible"; + backdropElement.classList.add("show"); + document.body.style.overflow = "hidden"; + // Disable scroll on the html element as well to prevent the offcanvas + // nav from being pushed off screen when the page has horizontal scroll, + // like downloads.php has. + document.documentElement.style.overflow = "hidden"; + document.body.style.paddingRight = `${scrollbarWidth}px`; + offcanvasElement.querySelector(".navbar__link").focus(); + document.addEventListener("keydown", offcanvasFocusTrapHandler); + }; - // This is a generic normalizaion algorithm: - // range.min + (value - domain.min)(range.max - range.min)/(domain.max-domain.min) - // Note that some of this computation is not dependent on the input value, so we - // compute it at object creation time. - var multiplier = (this.range.max - this.range.min)/(this.domain.max - this.domain.min); - this.normalize = function(value) { - value = Math.max(value, this.domain.min); - return (value - this.domain.min) * multiplier + this.range.min; - }; + const closeOffcanvasNav = () => { + offcanvasElement.classList.remove("show"); + offcanvasElement.removeAttribute("aria-modal"); + offcanvasElement.removeAttribute("role"); + backdropElement.classList.remove("show"); + document.removeEventListener("keydown", offcanvasFocusTrapHandler); + offcanvasElement.addEventListener( + "transitionend", + () => { + document.body.style.overflow = "auto"; + document.documentElement.style.overflow = "auto"; + document.body.style.paddingRight = "0px"; + offcanvasElement.style.removeProperty("visibility"); + }, + { once: true }, + ); + }; + + const closeOffCanvasByClickOutside = (event) => { + if (event.target === backdropElement) { + closeOffcanvasNav(); + } }; - $(usernotes).on('mouseenter mouseleave', '.note', function(event) { - var opacity = 1; - var $note = $(this).find('.text'); - if (event.type === 'mouseleave' && $note.data('opacity') !== undefined) { - opacity = $note.data('opacity'); - } - $note.css('opacity', opacity); - }).find('.note').each(function() { - $(this).find('.tally:contains("-")').each(function(){ - var id = this.id.replace('V', 'Hcom'); - var v = mapper.normalize(this.innerHTML.toInt()); - $('#' + id).css('opacity', v).data("opacity", v); - }); + + document.getElementById("navbar__menu-link").setAttribute("hidden", "true"); + + const menuButton = document.getElementById("navbar__menu-button"); + menuButton.removeAttribute("hidden"); + menuButton.addEventListener("click", openOffcanvasNav); + + document + .getElementById("navbar__close-button") + .addEventListener("click", closeOffcanvasNav); + + backdropElement.addEventListener("click", closeOffCanvasByClickOutside); + + /*}}}*/ + + /*{{{ Scroll to top */ + (function () { + var settings = { + text: 'To Top', + min: 200, + inDelay: 600, + outDelay: 400, + containerID: 'toTop', + containerHoverID: 'toTopHover', + scrollSpeed: 400, + easingType: 'linear' + }; + + var toTopHidden = true; + var toTop = $('#' + settings.containerID); + + toTop.click(function (e) { + e.preventDefault(); + $.scrollTo(0, settings.scrollSpeed, { + easing: settings.easingType + }); + }); + + $(window).scroll(function () { + var sd = $(this).scrollTop(); + if (sd > settings.min && toTopHidden) { + toTop.fadeIn(settings.inDelay); + toTopHidden = false; + } else if (sd <= settings.min && !toTopHidden) { + toTop.fadeOut(settings.outDelay); + toTopHidden = true; + } + }); + + })(); + /*}}}*/ + + /*{{{User Notes*/ + $("#usernotes a.usernotes-voteu, #usernotes a.usernotes-voted").each(function () { + $(this).click(function (event) { + event.preventDefault(); + var url = $(this).attr("href"); + var id = url.match(/\?id=(\d+)/)[1]; + var request = $.ajax({ + type: "POST", + url: url, + dataType: "json", + headers: { + "X-Json": "On" + }, + beforeSend: function () { + $("#Vu" + id).hide(); + $("#Vd" + id).hide(); + $("#V" + id).html("\"Working...\""); + } + }); + request.done(function (data) { + if (data.success != null && data.success == true) { + $("#V" + id).html("
    " + data.update); + flashMessage({ + text: 'Thank you for voting!' + }); + } else { + var responsedata = "Error :("; + if (data.msg != null) { + responsedata = data.msg; + } + $("#V" + id).html("
    "); + flashMessage({ + text: 'Unexpected error occured, please try again later!', + type: 'error' + }); + } + }); + request.fail(function (jqXHR, textStatus) { + $("#Vu" + id).show(); + $("#Vd" + id).show(); + $("#V" + id).html("
    "); + flashMessage({ + text: 'Something went wrong :(', + type: 'error' + }); + }); + request.always(function (data) { + $("#V" + id).fadeIn(500, "linear"); + }); + }); }); - } -/* }}} */ + /*}}}*/ -/* {{{ Remove "inline code" style from .parameter */ - // CSS3 can't traverse up the DOM tree - $('code.parameter').closest('em').addClass('reset'); -/* }}} */ + /*{{{Search Modal*/ + const language = getLanguage(); + initSearchModal(); + initPHPSearch(language).then((searchCallback) => { + initSearchUI({language, searchCallback, limit: 30}); + }); + /*}}}*/ + + /* {{{ Negative user notes fade-out */ + var usernotes = document.getElementById('usernotes'); + if (usernotes != null) { + var mapper = new function () { + this.domain = { + "max": -1, + "min": -5 + }; + this.range = { + "max": 0.75, + "min": 0.35 + }; + + // This is a generic normalizaion algorithm: + // range.min + (value - domain.min)(range.max - range.min)/(domain.max-domain.min) + // Note that some of this computation is not dependent on the input value, so we + // compute it at object creation time. + var multiplier = (this.range.max - this.range.min) / (this.domain.max - this.domain.min); + this.normalize = function (value) { + value = Math.max(value, this.domain.min); + return (value - this.domain.min) * multiplier + this.range.min; + }; + }; + $(usernotes).on('mouseenter mouseleave', '.note', function (event) { + var opacity = 1; + var $note = $(this).find('.text'); + if (event.type === 'mouseleave' && $note.data('opacity') !== undefined) { + opacity = $note.data('opacity'); + } + $note.css('opacity', opacity); + }).find('.note').each(function () { + $(this).find('.tally:contains("-")').each(function () { + var id = this.id.replace('V', 'Hcom'); + var v = mapper.normalize(this.innerHTML.toInt()); + $('#' + id).css('opacity', v).data("opacity", v); + }); + }); + } + /* }}} */ -/* {{{ Init template generated flash messages */ - $('#flash-message .message').each(function() - { - flashMessage($(this)); - }); -/* }}} */ + /* {{{ Remove "inline code" style from .parameter */ + // CSS3 can't traverse up the DOM tree + $('code.parameter').closest('em').addClass('reset'); + /* }}} */ + /* {{{ Init template generated flash messages */ + $('#flash-message .message').each(function () { + flashMessage($(this)); + }); + /* }}} */ }); /* {{{ add-user.php animations */ -$(function() { - - if ( ! document.getElementById('add-note-usernotes')) { - return; - } - - $('#usernotes').animate({marginLeft: 0}, 1000); - - $('#usernotes .note').removeAttr('style'); - - var times = [3, 7, 10]; - for (i in times) { - times[i] = times[i] * 1000; - } - - var notes = []; - notes[0] = $('#usernotes .bad'); - notes[1] = $('#usernotes .good'); - notes[2] = $('#usernotes .spam'); - - setTimeout(function() - { - notes[0].find('.usernotes-voted').css('border-top-color', '#001155'); - notes[1].find('.usernotes-voteu').css('border-bottom-color', '#001155'); - - var t = 1000; - var i = 1; - var timer = setInterval(function() - { - if (i * t > times[1] - times[0]) - { - clearTimeout(timer); +$(function () { + if (!document.getElementById('add-note-usernotes')) { return; - } + } - notes[0].find('.tally').html( notes[0].find('.tally').html().toInt() - 1); - notes[1].find('.tally').html( notes[1].find('.tally').html().toInt() + 1); + $('#usernotes').animate({ + marginLeft: 0 + }, 1000); - i++; - }, t); + $('#usernotes .note').removeAttr('style'); - notes[0].find('.text').animate({opacity: 0.3}, (times[1] - times[0])); + var times = [3, 7, 10]; + for (i in times) { + times[i] = times[i] * 1000; + } - }, times[0]); + var notes = []; + notes[0] = $('#usernotes .bad'); + notes[1] = $('#usernotes .good'); + notes[2] = $('#usernotes .spam'); + + setTimeout(function () { + notes[0].find('.usernotes-voted').css('border-top-color', '#001155'); + notes[1].find('.usernotes-voteu').css('border-bottom-color', '#001155'); + + var t = 1000; + var i = 1; + var timer = setInterval(function () { + if (i * t > times[1] - times[0]) { + clearTimeout(timer); + return; + } + + notes[0].find('.tally').html(notes[0].find('.tally').html().toInt() - 1); + notes[1].find('.tally').html(notes[1].find('.tally').html().toInt() + 1); + + i++; + }, t); - setTimeout(function() - { - notes[2].find('.text').html("@BJORI DOESN'T LIKE SPAM").css('background-color', '#F9ECF2'); - }, times[1]); + notes[0].find('.text').animate({ + opacity: 0.3 + }, (times[1] - times[0])); - setTimeout(function() - { - notes[0].fadeOut(); - notes[2].fadeOut(); - $('#usernotes .count').html('1 note'); - }, times[2]); + }, times[0]); + setTimeout(function () { + notes[2].find('.text').html("@BJORI DOESN'T LIKE SPAM").css('background-color', '#F9ECF2'); + }, times[1]); + + setTimeout(function () { + notes[0].fadeOut(); + notes[2].fadeOut(); + $('#usernotes .count').html('1 note'); + }, times[2]); }); /* }}} */ /* {{{ Flash Messenger */ -function flashMessage(o) -{ - var defaults = { - timeout: 6000, - type: 'success', - text: '', - parent: '#flash-message' - }; - - // Options are passed, set defaults and generate message - if ( ! o.jquery) - { - var options = $.extend(defaults, o); - - var id = 'id_' + Math.random().toString().replace('0.', ''); - - var message = $('
    ') - .addClass('message ' + options.type) - .data('type', options.type) - .attr('id', id) - .html(options.text); - - $(options.parent).append(message); - - var o = $('#' + id); - } - // jQuery object is passed, that means the message is pre-generated - // Only timeout is adjustable via data-timeout="" - else - { - options = {timeout: o.data('timeout')}; - } - - var remove = function(o) { - o.slideUp(400, function() { - $(this).remove(); - }); - }; +function flashMessage(o) { + var defaults = { + timeout: 6000, + type: 'success', + text: '', + parent: '#flash-message' + }; - if (options.timeout) - { - setTimeout(function() - { - if ( ! o.length) { - return; - } - remove(o); - }, options.timeout); - } + // Options are passed, set defaults and generate message + if (!o.jquery) { + var options = $.extend(defaults, o); + + var id = 'id_' + Math.random().toString().replace('0.', ''); + + var message = $('
    ') + .addClass('message ' + options.type) + .data('type', options.type) + .attr('id', id) + .html(options.text); + + $(options.parent).append(message); + + var o = $('#' + id); + } + // jQuery object is passed, that means the message is pre-generated + // Only timeout is adjustable via data-timeout="" + else { + options = { + timeout: o.data('timeout') + }; + } + + var remove = function (o) { + o.slideUp(400, function () { + $(this).remove(); + }); + }; + + if (options.timeout) { + setTimeout(function () { + if (!o.length) { + return; + } + remove(o); + }, options.timeout); + } - o.on('click', function() { - remove($(this)); - }); + o.on('click', function () { + remove($(this)); + }); - return true; + return true; } /* }}} */ /** * Determine what language to present to the user. */ -function getLanguage() -{ +function getLanguage() { return document.documentElement.lang; } (function ($) { $('#legacy-links a').each(function () { - let $link = $(this); - $link.attr('href', $link.attr('href') + window.location.hash) + var $link = $(this); + $link.attr('href', $link.attr('href') + window.location.hash); + }); +})(jQuery); + +(function ($) { + /** + * Each th will dynamically set for the corresponding td the attribute of + * "data-label" with the text of the th. + */ + $(document).ready(function () { + $('table').each(function () { + var $columns = $(this).find('td:not(.collapse-phone)'); + var $headers = $(this).find('th'); + $headers.each(function (index) { + $columns.filter(function (counter) { + return index === counter % $headers.length; + }).attr('data-label', $(this).text()); + }); + }); }); })(jQuery); -// vim: set ts=4 sw=4 et: +const savedTheme = localStorage.theme || 'system'; +const prefersDark = matchMedia('(prefers-color-scheme: dark)').matches; +const isDark = savedTheme === 'dark' || (savedTheme === 'system' && prefersDark); + +if (isDark) document.documentElement.classList.add('dark'); + +const themeOrder = ['light', 'dark', 'system']; + +const btn = document.querySelector('button.js-theme-switcher'); + +btn?.addEventListener('click', () => { + const current = localStorage.theme || 'system'; + const nextIndex = (themeOrder.indexOf(current) + 1) % themeOrder.length; + const newTheme = themeOrder[nextIndex]; + localStorage.theme = newTheme; + applyTheme(newTheme); +}); + +function applyTheme(theme) { + const prefersDark = matchMedia('(prefers-color-scheme: dark)').matches; + const isDark = theme === 'dark' || (theme === 'system' && prefersDark); + + document.documentElement.classList.toggle('dark', isDark); + + const icons = [btn?.querySelector('svg:nth-of-type(1)'), btn?.querySelector('svg:nth-of-type(2)'), btn?.querySelector('svg:nth-of-type(3)')]; + icons.forEach((icon, i) => icon?.classList.toggle('hidden', themeOrder[i] !== theme)); +} + +applyTheme(savedTheme) diff --git a/js/ext/FuzzySearch.min.js b/js/ext/FuzzySearch.min.js new file mode 100644 index 0000000000..ac8d3d6c9d --- /dev/null +++ b/js/ext/FuzzySearch.min.js @@ -0,0 +1,10 @@ +/** + * @license FuzzySearch.js + * Autocomplete suggestion engine using approximate string matching + * https://github.com/jeancroy/FuzzySearch + * + * Copyright (c) 2015, Jean Christophe Roy + * Licensed under The MIT License. + * http://opensource.org/licenses/MIT + */ +!function(){"use strict";function a(b){return void 0===b&&(b={}),this instanceof a?void a.setOptions(this,b,a.defaultOptions,F,!0,this._optionsHook):new a(b)}function b(a,b){for(var c in a)a.hasOwnProperty(c)&&(this[c]=b.hasOwnProperty(c)&&void 0!==b[c]?b[c]:a[c])}function c(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])}function d(a,b){for(var c=b.length,d=0,e=-1;++e0?a.substr(d):a}function e(a){var b=a.length;if(!b)return null;for(var c=g(a[0]),d=0;++de?1:e>d?-1:0}function j(a,b,c,d,e,f,g){this.normalized=a,this.words=b,this.tokens_groups=c,this.fused_str=d,this.fused_map=e,this.fused_score=0,this.has_children=f,this.children=g}function k(a,b,c){this.tokens=a,this.map=b,this.gate=c;for(var d=a.length,e=-1,f=new Array(d);++ed&&(e=b[d++],"*"!==e&&""!==e);){if(null==a||!(e in a))return c;a=a[e]}if(null==a)return c;var i=Object.prototype.toString.call(a),j="[object Array]"===i,k="[object Object]"===i;if(d===h)if(j)for(f=-1,g=a.length;++fc;c++)r(f[c],d,e);return d}function r(a,b,c){var d=a.length;0!=d&&(d>=3&&t(a,6,b,c),d>=2&&s(a,4,b,c),u(a[0],b,c))}function s(a,b,c,d){for(var e=Math.min(a.length,b),f=0;e-1>f;f++)for(var g=f+1;e>g;g++)u(a[f]+a[g],c,d);return c}function t(a,b,c,d){for(var e=Math.min(a.length,b),f=0;e-2>f;f++)for(var g=f+1;e-1>g;g++)for(var h=g+1;e>h;h++)u(a[f]+a[g]+a[h],c,d);return c}function u(a,b,c){a in c||(c[a]=!0,b.push(a))}function v(a,b){var c={};if(0==a.length)return[];for(var d=0;de;e++)h[e]={};var i,j=new D(a,h,c,d),k=B(j,0,0).score,l=0;for(e=0;g>e&&(i=h[e][l],i);e++)b[e]=f=i.index,f>-1&&(l|=1<G&&(i=G);var j,k,l,m=f[c],n=0,o=-1,p=h-1>c,q=e[c+1];for(j=0;i>j;j++){var r=1<k))){if(p){l=b|r;var s=l in q?q[l]:B(a,l,c+1);k+=s.score,j=n&&(n=k,o=j)}}p&&(l=b,k=l in q?q[l].score:B(a,l,c+1).score,k>n&&(n=k,o=-1));var t=new C(n,o);return e[c][b]=t,t}function C(a,b){this.score=a,this.index=b}function D(a,b,c,d){this.score_grid=a,this.cache_tree=b,this.score_thresholds=c,this.order_bonus=d}function E(a,b){var c,d,e=a.slice();for(a.length=b,c=0;b>c;c++)a[c]=-1;for(c=0;c-1&&b>d&&(a[d]=c)}a.defaultOptions={minimum_match:1,thresh_include:2,thresh_relative_to_best:.5,field_good_enough:20,bonus_match_start:.5,bonus_token_order:2,bonus_position_decay:.7,score_per_token:!0,score_test_fused:!1,score_acronym:!1,token_sep:" .,-:",score_round:.1,output_limit:0,sorter:i,normalize:x,filter:null,output_map:"item",join_str:", ",token_query_min_length:2,token_field_min_length:3,token_query_max_length:64,token_field_max_length:64,token_fused_max_length:64,token_min_rel_size:.6,token_max_rel_size:10,interactive_debounce:150,interactive_mult:1.2,interactive_burst:3,source:[],keys:[],lazy:!1,token_re:/\s+/g,identify_item:null,use_index_store:!1,store_thresh:.7,store_max_results:1500};var F={keys:[],tags:[],index:[],index_map:{},nb_indexed:0,store:{},tags_re:null,acro_re:null,token_re:null,options:null,dirty:!1,query:null,results:[],start_time:0,search_time:0},G=32;b.update=function(a,b,c){for(var d in c)c.hasOwnProperty(d)&&b.hasOwnProperty(d)&&(a[d]=void 0===c[d]?b[d]:c[d])},a.setOptions=function(a,d,e,f,g,h){g?(c(a,f),a.options=new b(e,d)):b.update(a.options,e,d),h.call(a,d)},c(a.prototype,{setOptions:function(b,c){void 0===c&&(c=b.reset||!1),a.setOptions(this,b,a.defaultOptions,F,c,this._optionsHook)},_optionsHook:function(a){var b=this.options;"output_map"in a&&"string"==typeof a.output_map&&("alias"===b.output_map?b.output_map=this.aliasResult:b.output_map=d(b.output_map,["root","."])),this.source=b.source;var c;if("keys"in a&&void 0!==(c=a.keys)){var h,i,j=Object.prototype.toString.call(c);if(this.tags=null,"[object String]"===j)this.keys=c.length?[c]:[];else if("[object Object]"===j){this.keys=[],this.tags=[],h=0;for(var k in c)c.hasOwnProperty(k)&&(this.tags[h]=k,this.keys[h]=c[k],h++)}else this.keys=c;for(c=this.keys,i=c.length,h=-1;++h0&&e>d&&(e=d),"function"!=typeof b)return a.slice(0,e);for(var f=new Array(e),g=-1;++g0&&d>c&&(d=c),""===b)return a.slice(0,d);var e,f,g=new Array(d);if(-1===b.indexOf("."))for(f=-1;++f=c&&(h[++f]=d);return h},c(a.prototype,{_prepQuery:function(b){var c,d,e,f,g,h,i,k=this.options,l=k.score_per_token,m=k.score_test_fused,n=k.token_fused_max_length,o=k.token_field_min_length,p=k.token_field_max_length,q=this.tags,r=this.tags_re,s=q.length,t=this.token_re;if(l&&s&&r){var u,v=0,w=0,x=new Array(s+1),y=r.exec(b);for(g=null!==y;null!==y;)u=y.index,x[w]=b.substring(v,u),v=u+y[0].length,w=q.indexOf(y[1])+1,y=r.exec(b);x[w]=b.substring(v),f=[];for(var z=-1;++za&&(a=this.fused_score),this.has_children)for(var h=this.children,i=-1,j=h.length;++iG?a.posVector(b):a.bitVector(b,{},0)},a.mapAlphabet=function(b){for(var c=b.length,d=new Array(c),e=-1;++eG?d[e]=a.posVector(f):d[e]=a.bitVector(f,{},0)}return d},a.bitVector=function(a,b,c){for(var d,e=a.length,f=-1,g=c;++fd;){for(var g=[],h={},i=0,j=0;++d=G){c=new k([l],a.posVector(l),4294967295);break}if(m+i>=G){d--;break}g.push(l),a.bitVector(l,h,i),j|=(1<0&&f.push(new k(g,h,j)),c&&(f.push(c),c=null)}return f},a.prototype.score=function(b,c){var d=a.alphabet(b);return a.score_map(b,c,d,this.options)},a.score_map=function(b,c,d,e){var f,g,h=b.length,i=c.length,j=e.bonus_match_start,k=i>h?h:i;if(0===k)return 0;var l=(h+i)/(2*h*i),m=0;if(b===c)m=k;else for(;b[m]===c[m]&&++mG)return g=a.llcs_large(b,c,d,m),l*g*g+j*m;var n,o,p=(1<>1&1431655765,q=(858993459&q)+(q>>2&858993459),g=16843009*(q+(q>>4)&252645135)>>24,g+=m,l*g*g+j*m},a.score_single=function(b,c,d){var e=b.tokens[0],f=e.length,g=c.length;return gd.token_max_rel_size*f?[0]:[a.score_map(e,c,b.map,d)]},a.score_pack=function(b,c,d){var e=b.tokens,f=e.length;if(1==f)return a.score_single(b,c,d);for(var g,h,i=4294967295,j=0|b.gate,k=b.map,l=-1,m=c.length;++lm||m>p*w)q[s]=0,r+=w;else{if(v===c)u=t=w;else{var x=m>w?w:m;for(u=0;v[u]===c[u]&&++u>>r&(1<>>u;y;)y&=y-1,t++}r+=w;var z=(w+m)/(2*w*m);q[s]=z*t*t+n*u}}return q},a.llcs_large=function(a,b,c,d){var e,f,g,h,i,j;void 0===d&&(d=0),g=d?[new l(0,d),new l(1/0,1/0)]:[new l(1/0,1/0)];var k,m,n,o,p,q,r=d,s=g.length,t=b.length;for(q=d;t>q;q++){var u=b[q];if(u in c){k=c[u];var v=new Array(Math.min(2*s,r+2));for(h=-1,m=0,f=k[0],j=-1,o=-1;++of;)f=k[++m];f>=e?v[++h]=n:(f===i?v[h].end++:1===p?(n.start=f,n.end=f+1,v[++h]=n):v[++h]=new l(f,f+1),p>1&&(n.start++,v[++h]=n))}e>f&&(v[++h]=n,r++),g=v,s=++h}}return r},c(a.prototype,{search:function(b){var c=Date.now();this.start_time=c;var d=this.options;this.dirty&&d.lazy&&(this._buildIndexFromSource(),this.dirty=!1);var e=this.query=this._prepQuery(b),f=this.index,g=[];d.use_index_store&&(f=this._storeSearch(e,f)),d.filter&&(f=d.filter.call(this,f));var h=this._searchIndex(e,f,g);g=a.filterGTE(g,"score",h),"function"==typeof d.sorter&&(g=g.sort(d.sorter)),(d.output_map||d.output_limit>0)&&(g="function"==typeof d.output_map?a.map(g,d.output_map,this,d.output_limit):a.mapField(g,d.output_map,d.output_limit));var i=Date.now();return this.search_time=i-c,this.results=g,g},_searchIndex:function(b,c,d){for(var e=this.options,f=e.bonus_position_decay,g=e.field_good_enough,i=e.thresh_relative_to_best,j=e.score_per_token,k=e.score_round,l=e.thresh_include,m=0,n=b.children,o=-1,p=c.length;++oy&&(y=F,z=D)}if(y*=1+v,v*=f,y>s&&(s=y,t=w,u=z,y>g))break}if(j){var H=b.scoreItem();s=.5*s+.5*H}if(s>m){m=s;var I=s*i;I>l&&(l=I)}s>l&&(s=Math.round(s/k)*k,d.push(new h(q.item,r,s,t,u,r[0][0].join(" "))))}return l},_scoreField:function(b,c){var d=c.tokens_groups,e=d.length,f=b.length;if(!e||!f)return 0;for(var g,h,i,j,k,l=0,m=-1,n=this.options,o=n.bonus_token_order,p=n.minimum_match,q=-1;++qh||o>h-g&&k>0&&u[k]<=u[k-1])&&(t[k]=g,u[k]=v);var w=r.score_item;for(k=-1;++kp){var x=u[k],y=x-m,z=o*(1/(1+Math.abs(y)));y>0&&(z*=2),l+=z,g+=z,m=x}g>w[k]&&(w[k]=g)}}if(n.score_test_fused){for(var A=n.score_acronym?f-1:f,B=b[0],C=0;++Cl?D:l,D>c.fused_score&&(c.fused_score=D)}return l}}),c(a.prototype,{_prepItem:function(b,c){for(var d=a.generateFields(b,c),e=d.length,f=-1;++f2*this.options.token_field_min_length&&(k=a.filterSize(k,this.options.token_field_min_length,this.options.token_field_max_length)),this.options.score_acronym&&k.push(j.replace(this.acro_re,"$1")),g[h]=k}return new m(b,d)},add:function(a,b){void 0===b&&(b=!0);var c,d="function"==typeof this.options.identify_item?this.options.identify_item(a):null;null===d?(c=this.nb_indexed,this.nb_indexed++):d in this.index_map?c=this.index_map[d]:(this.index_map[d]=this.nb_indexed,c=this.nb_indexed,this.nb_indexed++);var e=this._prepItem(a,this.keys);this.index[c]=e,b&&(this.source[c]=a),this.options.use_index_store&&this._storeAdd(e,c)},_buildIndexFromSource:function(){var a=this.source.length;this.index=new Array(a),this.index_map={},this.nb_indexed=0;for(var b=-1;++b=b&&(i[++g]=c>e?d:d.substr(0,c));return i},c(a.defaultOptions,{highlight_prefix:!1,highlight_bridge_gap:2,highlight_before:'',highlight_after:""}),a.prototype.highlight=function(b,c){var d,e,f=this.query.normalized;return c&&c.length&&(d=this.tags.indexOf(c))>-1&&(e=this.query.children[d])&&(f+=(f.length?" ":"")+e.normalized),a.highlight(f,b,this.options)},a.highlight=function(b,c,d){if(void 0===d&&(d=a.defaultOptions),!c)return"";var e=d.highlight_before,f=d.highlight_after,g=d.score_per_token,h=d.score_test_fused,i=d.score_acronym,j=d.token_re,k=d.normalize(b),l=d.normalize(c),m=k.split(j),n=l.split(j),o=[],p=[];z(c,j,o,p);var q=[],r=[],s=0,t=0;if(g&&(t=a.matchTokens(n,m,r,d,!1)),(h||!g||i)&&(s=a.score_map(k,l,a.alphabet(k),d)+d.bonus_token_order),0===t&&0===s)return c;(!g||s>t)&&(m=[k],n=[l],o=[c],r=[0]);for(var u=o.length,v=-1;++vB&&q.push(A.substring(B,G)),q.push(e+A.substring(G,H)+f),B=H}q.push(A.substring(B)+p[v])}else q.push(o[v]+p[v])}return q.join("")},a.align=function(b,c,d,e,f){void 0===f&&(f=a.defaultOptions);var g,h,i=100,j=-10,k=-1,l=0,m=1,n=2,o=3,p=f.score_acronym,q=f.token_sep,r=Math.min(b.length+1,f.token_query_max_length),s=Math.min(c.length+1,f.token_field_max_length),t=s>r?r:s,u=0;if(b===c)u=r,r=0;else if(f.highlight_prefix){for(g=0;t>g&&b[g]===c[g];g++)u++;u&&(b=b.substring(u),c=c.substring(u),r-=u,s-=u)}var v=0,w=0,x=0,y=new Array(r*s),z=s-1;if(r>1&&s>1){var A,B,C,D,E=new Array(s),F=new Array(s),G=0;for(h=0;s>h;h++)F[h]=0,E[h]=0,y[h]=l;for(g=1;r>g;g++)for(G=0,A=E[0],z++,y[z]=l,h=1;s>h;h++)switch(D=F[h]=Math.max(F[h]+k,E[h]+j),G=Math.max(G+k,E[h-1]+j),C=p?b[g-1]!==c[h-1]?-(1/0):A+i+(2>g||q.indexOf(b[g-2])>-1?i:0)+(2>h||q.indexOf(c[h-2])>-1?i:0):b[g-1]===c[h-1]?A+i:-(1/0),A=E[h],B=E[h]=Math.max(C,D,G,0),z++,B){case G:y[z]=n;break;case C:y[z]=o,B>v&&(v=B,w=g,x=h);break;case D:y[z]=m;break;default:y[z]=l}}var H=f.highlight_bridge_gap,I=0;if(v>0){g=w,h=x,z=g*s+h,I=x,e.push(x+u);for(var J=!0;J;)switch(y[z]){case m:g--,z-=s;break;case n:h--,z--;break;case o:I-h>H&&(d.push(I+u),e.push(h+u)),h--,g--,I=h,z-=s+1;break;case l:default:J=!1}d.push(I+u)}return u&&(I>0&&H>=I?d[d.length-1]=0:(d.push(0),e.push(u))),d.reverse(),e.reverse(),v+u},a.matchTokens=function(b,c,d,e,f){void 0===e&&(e=a.defaultOptions),void 0===f&&(f=!1);var g,h,i,j,k,l,m,n=e.minimum_match,o=e.thresh_relative_to_best,p=[],q=b.length,r=c.length,s=a.mapAlphabet(b),t=n,u=-1,v=-1,w=0,x=[];for(g=0;q>g;g++)if(i=[],d[g]=-1,t=n,j=b[g],j.length){for(l=s[g],h=0;r>h;h++)k=c[h],k.length?(m=a.score_map(j,k,l,e),i[h]=m,m>n&&w++,m>t&&(t=m,u=g,v=h)):i[h]=0;x[g]=t,p[g]=i}else{for(h=0;r>h;h++)i[h]=0;p[g]=i}if(0===w)return 0;if(1===w)return d[u]=v,f&&E(d,r),t;for(g=0;g=0;u--){s=t[u];if(s&&typeof s=="object"&&e in s){i=s[e];o=true;break}}if(!o){return r?false:""}if(!r&&typeof i=="function"){i=this.lv(i,t,n)}return i},ho:function(e,t,n,r,i){var s=this.c;var o=this.options;o.delimiters=i;var r=e.call(t,r);r=r==null?String(r):r.toString();this.b(s.compile(r,o).render(t,n));return false},b:t?function(e){this.buf.push(e)}:function(e){this.buf+=e},fl:t?function(){var e=this.buf.join("");this.buf=[];return e}:function(){var e=this.buf;this.buf="";return e},ls:function(e,t,n,r,i,s,o){var u=t[t.length-1],a=null;if(!r&&this.c&&e.length>0){return this.ho(e,u,n,this.text.substring(i,s),o)}a=e.call(u);if(typeof a=="function"){if(r){return true}else if(this.c){return this.ho(a,u,n,this.text.substring(i,s),o)}}return a},lv:function(e,t,n){var r=t[t.length-1];var i=e.call(r);if(typeof i=="function"){i=a(i.call(r));if(this.c&&~i.indexOf("{{")){return this.c.compile(i,this.options).render(r,n)}}return a(i)}};var n=/&/g,r=//g,s=/\'/g,o=/\"/g,u=/[&<>\"\']/;var l=Array.isArray||function(e){return Object.prototype.toString.call(e)==="[object Array]"}})(typeof exports!=="undefined"?exports:Hogan);(function(e){function u(e){if(e.n.substr(e.n.length-1)==="}"){e.n=e.n.substring(0,e.n.length-1)}}function a(e){if(e.trim){return e.trim()}return e.replace(/^\s*|\s*$/g,"")}function f(e,t,n){if(t.charAt(n)!=e.charAt(0)){return false}for(var r=1,i=e.length;r0){o=e.shift();if(o.tag=="#"||o.tag=="^"||c(o,r)){n.push(o);o.nodes=l(e,o.tag,n,r);i.push(o)}else if(o.tag=="/"){if(n.length===0){throw new Error("Closing tag without opener: /"+o.n)}s=n.pop();if(o.n!=s.n&&!h(o.n,s.n,r)){throw new Error("Nesting error: "+s.n+" vs. "+o.n)}s.end=o.i;return i}else{i.push(o)}}if(n.length>0){throw new Error("missing closing tag: "+n.pop().n)}return i}function c(e,t){for(var n=0,r=t.length;n"){t+=y(e[n])}else if(i=="{"||i=="&"){t+=b(e[n].n,d(e[n].n))}else if(i=="\n"){t+=E('"\\n"'+(e.length-1==n?"":" + i"))}else if(i=="_v"){t+=w(e[n].n,d(e[n].n))}else if(i===undefined){t+=E('"'+p(e[n])+'"')}}return t}function m(e,t,n,r,i,s){return"if(_.s(_."+n+'("'+p(t)+'",c,p,1),'+"c,p,0,"+r+","+i+',"'+s+'")){'+"_.rs(c,p,"+"function(c,p,_){"+v(e)+"});c.pop();}"}function g(e,t,n){return"if(!_.s(_."+n+'("'+p(t)+'",c,p,1),c,p,1,0,0,"")){'+v(e)+"};"}function y(e){return'_.b(_.rp("'+p(e.n)+'",c,p,"'+(e.indent||"")+'"));'}function b(e,t){return"_.b(_.t(_."+t+'("'+p(e)+'",c,p,0)));'}function w(e,t){return"_.b(_.v(_."+t+'("'+p(e)+'",c,p,0)));'}function E(e){return"_.b("+e+");"}var t=/\S/,n=/\"/g,r=/\n/g,i=/\r/g,s=/\\/g,o={"#":1,"^":2,"/":3,"!":4,">":5,"<":6,"=":7,_v:8,"{":9,"&":10};e.scan=function(n,r){function S(){if(v.length>0){m.push(new String(v));v=""}}function x(){var e=true;for(var n=b;n"){r.indent=m[n].toString()}m.splice(n,1)}}}else if(!t){m.push({tag:"\n"})}g=false;b=m.length}function N(e,t){var n="="+E,r=e.indexOf(n,t),i=a(e.substring(e.indexOf("=",t)+1,r)).split(" ");w=i[0];E=i[1];return r+n.length-1}var i=n.length,s=0,l=1,c=2,h=s,p=null,d=null,v="",m=[],g=false,y=0,b=0,w="{{",E="}}";if(r){r=r.split(" ");w=r[0];E=r[1]}for(y=0;yi";if(g.childNodes.length!==1){var i=z.split("|"),o=i.length,s=RegExp("(^|\\s)("+z+")", -"gi"),t=RegExp("<(/*)("+z+")","gi"),u=RegExp("(^|[^\\n]*?\\s)("+z+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),r=c.createDocumentFragment(),k=c.documentElement;g=k.firstChild;var h=c.createElement("body"),l=c.createElement("style"),f;n(c);n(r);g.insertBefore(l, -g.firstChild);l.media="print";m.attachEvent("onbeforeprint",function(){var d=-1,a=p(c.styleSheets,"all"),e=[],b;for(f=f||c.body;(b=u.exec(a))!=null;)e.push((b[1]+b[2]+b[3]).replace(s,"$1.iepp_$2")+b[4]);for(l.styleSheet.cssText=e.join("\n");++d+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 01;if(queue){duration/=2}settings.offset=both(settings.offset);settings.over=both(settings.over);return this.each(function(){if(target===null){return}var win=isWin(this),elem=win?this.contentWindow||window:this,$elem=$(elem),targ=target,attr={},toff;switch(typeof targ){case 'number':case 'string':if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)){targ=both(targ);break}targ=win?$(targ):$(targ,elem);case 'object':if(targ.length===0){return}if(targ.is||targ.style){toff=(targ=$(targ)).offset()}}var offset=isFunction(settings.offset)&&settings.offset(elem,targ)||settings.offset;$.each(settings.axis.split(''),function(i,axis){var Pos=axis==='x'?'Left':'Top',pos=Pos.toLowerCase(),key='scroll'+Pos,prev=$elem[key](),max=$scrollTo.max(elem,axis);if(toff){attr[key]=toff[pos]+(win?0:prev-$elem.offset()[pos]);if(settings.margin){attr[key]-=parseInt(targ.css('margin'+Pos),10)||0;attr[key]-=parseInt(targ.css('border'+Pos+'Width'),10)||0}attr[key]+=offset[pos]||0;if(settings.over[pos]){attr[key]+=targ[axis==='x'?'width':'height']()*settings.over[pos]}}else{var val=targ[pos];attr[key]=val.slice&&val.slice(-1)==='%'?parseFloat(val)/100*max:val}if(settings.limit&&/^\d+$/.test(attr[key])){attr[key]=attr[key]<=0?0:Math.min(attr[key],max)}if(!i&&settings.axis.length>1){if(prev===attr[key]){attr={}}else if(queue){animate(settings.onAfterFirst);attr={}}}});animate(settings.onAfter);function animate(callback){var opts=$.extend({},settings,{queue:true,duration:duration,complete:callback&&function(){callback.call(elem,targ,settings)}});$elem.animate(attr,opts)}})};$scrollTo.max=function(elem,axis){var Dim=axis==='x'?'Width':'Height',scroll='scroll'+Dim;if(!isWin(elem)){return elem[scroll]-$(elem)[Dim.toLowerCase()]()}var size='client'+Dim,doc=elem.ownerDocument||elem.document,html=doc.documentElement,body=doc.body;return Math.max(html[scroll],body[scroll])-Math.min(html[size],body[size])};function both(val){return isFunction(val)||$.isPlainObject(val)?val:{top:val,left:val}}$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(t){return $(t.elem)[t.prop]()},set:function(t){var curr=this.get(t);if(t.options.interrupt&&t._last&&t._last!==curr){return $(t.elem).stop()}var next=Math.round(t.now);if(curr!==next){$(t.elem)[t.prop](next);t._last=this.get(t)}}};return $scrollTo}); diff --git a/js/ext/jquery.ui.totop.js b/js/ext/jquery.ui.totop.js deleted file mode 100644 index d92ac9dc59..0000000000 --- a/js/ext/jquery.ui.totop.js +++ /dev/null @@ -1,58 +0,0 @@ -/* -|-------------------------------------------------------------------------- -| UItoTop jQuery Plugin 1.1 -| http://www.mattvarone.com/web-design/uitotop-jquery-plugin/ -|-------------------------------------------------------------------------- -*/ - -(function($){ - $.fn.UItoTop = function(options) { - - var defaults = { - text: 'To Top', - min: 200, - inDelay:600, - outDelay:400, - containerID: 'toTop', - containerHoverID: 'toTopHover', - scrollSpeed: 1200, - easingType: 'linear' - }; - - var settings = $.extend(defaults, options); - var containerIDhash = '#' + settings.containerID; - var containerHoverIDHash = '#'+settings.containerHoverID; - - $('body').append(''+settings.text+''); - $(containerIDhash).hide().click(function(){ - $('html, body').animate({scrollTop:0}, settings.scrollSpeed, settings.easingType); - $('#'+settings.containerHoverID, this).stop().animate({'opacity': 0 }, settings.inDelay, settings.easingType); - return false; - }) - .prepend('') - .hover(function() { - $(containerHoverIDHash, this).stop().animate({ - 'opacity': 1 - }, 600, 'linear'); - }, function() { - $(containerHoverIDHash, this).stop().animate({ - 'opacity': 0 - }, 700, 'linear'); - }); - - $(window).scroll(function() { - var sd = $(window).scrollTop(); - if(typeof document.body.style.maxHeight === "undefined") { - $(containerIDhash).css({ - 'position': 'absolute', - 'top': $(window).scrollTop() + $(window).height() - 50 - }); - } - if ( sd > settings.min ) - $(containerIDhash).fadeIn(settings.inDelay); - else - $(containerIDhash).fadeOut(settings.outDelay); - }); - -}; -})(jQuery); diff --git a/js/ext/modernizr.js b/js/ext/modernizr.js deleted file mode 100644 index cdfd0cd33c..0000000000 --- a/js/ext/modernizr.js +++ /dev/null @@ -1,4 +0,0 @@ -/* Modernizr 2.7.1 (Custom Build) | MIT & BSD - * Build: http://modernizr.com/download/#-flexbox-flexboxlegacy-cssclasses-testprop-testallprops-domprefixes-url_data_uri - */ -;window.Modernizr=function(a,b,c){function x(a){j.cssText=a}function y(a,b){return x(prefixes.join(a+";")+(b||""))}function z(a,b){return typeof a===b}function A(a,b){return!!~(""+a).indexOf(b)}function B(a,b){for(var d in a){var e=a[d];if(!A(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function C(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:z(f,"function")?f.bind(d||b):f}return!1}function D(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+n.join(d+" ")+d).split(" ");return z(b,"string")||z(b,"undefined")?B(e,b):(e=(a+" "+o.join(d+" ")+d).split(" "),C(e,b,c))}var d="2.7.1",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m="Webkit Moz O ms",n=m.split(" "),o=m.toLowerCase().split(" "),p={},q={},r={},s=[],t=s.slice,u,v={}.hasOwnProperty,w;!z(v,"undefined")&&!z(v.call,"undefined")?w=function(a,b){return v.call(a,b)}:w=function(a,b){return b in a&&z(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=t.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(t.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(t.call(arguments)))};return e}),p.flexbox=function(){return D("flexWrap")},p.flexboxlegacy=function(){return D("boxDirection")};for(var E in p)w(p,E)&&(u=E.toLowerCase(),e[u]=p[E](),s.push((e[u]?"":"no-")+u));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)w(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},x(""),i=k=null,e._version=d,e._domPrefixes=o,e._cssomPrefixes=n,e.testProp=function(a){return B([a])},e.testAllProps=D,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+s.join(" "):""),e}(this,this.document),function(){var a=new Image;a.onerror=function(){Modernizr.addTest("datauri",function(){return!1})},a.onload=function(){Modernizr.addTest("datauri",function(){return a.width==1&&a.height==1})},a.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="}(); \ No newline at end of file diff --git a/js/ext/mousetrap.min.js b/js/ext/mousetrap.min.js index 5a9943974a..f0b9ca91db 100644 --- a/js/ext/mousetrap.min.js +++ b/js/ext/mousetrap.min.js @@ -1,10 +1,13 @@ -/* mousetrap v1.4.6 craig.is/killing/mice */ -(function(J,r,f){function s(a,b,d){a.addEventListener?a.addEventListener(b,d,!1):a.attachEvent("on"+b,d)}function A(a){if("keypress"==a.type){var b=String.fromCharCode(a.which);a.shiftKey||(b=b.toLowerCase());return b}return h[a.which]?h[a.which]:B[a.which]?B[a.which]:String.fromCharCode(a.which).toLowerCase()}function t(a){a=a||{};var b=!1,d;for(d in n)a[d]?b=!0:n[d]=0;b||(u=!1)}function C(a,b,d,c,e,v){var g,k,f=[],h=d.type;if(!l[a])return[];"keyup"==h&&w(a)&&(b=[a]);for(g=0;gg||h.hasOwnProperty(g)&&(p[h[g]]=g)}e=p[d]?"keydown":"keypress"}"keypress"==e&&f.length&&(e="keydown");return{key:c,modifiers:f,action:e}}function F(a,b,d,c,e){q[a+":"+d]=b;a=a.replace(/\s+/g," ");var f=a.split(" ");1":".","?":"/","|":"\\"},G={option:"alt",command:"meta","return":"enter",escape:"esc",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},p,l={},q={},n={},D,z=!1,I=!1,u=!1;for(f=1;20>f;++f)h[111+f]="f"+f;for(f=0;9>=f;++f)h[f+96]=f;s(r,"keypress",y);s(r,"keydown",y);s(r,"keyup",y);var m={bind:function(a,b,d){a=a instanceof Array?a:[a];for(var c=0;cc||n.hasOwnProperty(c)&&(p[n[c]]=c)}g=p[e]?"keydown":"keypress"}"keypress"==g&&d.length&&(g="keydown");return{key:m,modifiers:d,action:g}}function D(a,b){return null===a||a===u?!1:a===b?!0:D(a.parentNode,b)}function d(a){function b(a){a= +a||{};var b=!1,l;for(l in p)a[l]?b=!0:p[l]=0;b||(x=!1)}function g(a,b,t,f,g,d){var l,E=[],h=t.type;if(!k._callbacks[a])return[];"keyup"==h&&w(a)&&(b=[a]);for(l=0;l":".","?":"/","|":"\\"},B={option:"alt",command:"meta","return":"enter", +escape:"esc",plus:"+",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},p;for(c=1;20>c;++c)n[111+c]="f"+c;for(c=0;9>=c;++c)n[c+96]=c.toString();d.prototype.bind=function(a,b,c){a=a instanceof Array?a:[a];this._bindMultiple.call(this,a,b,c);return this};d.prototype.unbind=function(a,b){return this.bind.call(this,a,function(){},b)};d.prototype.trigger=function(a,b){if(this._directMap[a+":"+b])this._directMap[a+":"+b]({},a);return this};d.prototype.reset=function(){this._callbacks={}; +this._directMap={};return this};d.prototype.stopCallback=function(a,b){if(-1<(" "+b.className+" ").indexOf(" mousetrap ")||D(b,this.target))return!1;if("composedPath"in a&&"function"===typeof a.composedPath){var c=a.composedPath()[0];c!==a.target&&(b=c)}return"INPUT"==b.tagName||"SELECT"==b.tagName||"TEXTAREA"==b.tagName||b.isContentEditable};d.prototype.handleKey=function(){return this._handleKey.apply(this,arguments)};d.addKeycodes=function(a){for(var b in a)a.hasOwnProperty(b)&&(n[b]=a[b]);p=null}; +d.init=function(){var a=d(u),b;for(b in a)"_"!==b.charAt(0)&&(d[b]=function(b){return function(){return a[b].apply(a,arguments)}}(b))};d.init();q.Mousetrap=d;"undefined"!==typeof module&&module.exports&&(module.exports=d);"function"===typeof define&&define.amd&&define(function(){return d})}})("undefined"!==typeof window?window:null,"undefined"!==typeof window?document:null); +/* Pause/unpause extension */ +(function(a){var b=a.prototype.stopCallback;a.prototype.stopCallback=function(a,c,d){return this.paused?!0:b.call(this,a,c,d)};a.prototype.pause=function(){this.paused=!0};a.prototype.unpause=function(){this.paused=!1};a.init()})(Mousetrap); diff --git a/js/ext/prism.js b/js/ext/prism.js new file mode 100644 index 0000000000..9a1553b1ec --- /dev/null +++ b/js/ext/prism.js @@ -0,0 +1,13 @@ +/* PrismJS 1.30.0 +https://prismjs.com/download#themes=prism&languages=markup+bash+markup-templating+php+powershell&plugins=line-numbers+show-language+remove-initial-line-feed+toolbar+copy-to-clipboard */ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(e){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,r={},a={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof i?new i(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=g.reach);A+=w.value.length,w=w.next){var P=w.value;if(n.length>e.length)return;if(!(P instanceof i)){var E,S=1;if(y){if(!(E=l(b,A,e,m))||E.index>=e.length)break;var L=E.index,O=E.index+E[0].length,C=A;for(C+=w.value.length;L>=C;)C+=(w=w.next).value.length;if(A=C-=w.value.length,w.value instanceof i)continue;for(var j=w;j!==n.tail&&(Cg.reach&&(g.reach=W);var I=w.prev;if(_&&(I=u(n,I,_),A+=_.length),c(n,I,S),w=u(n,I,new i(f,p?a.tokenize(N,p):N,k,N)),M&&u(n,w,M),S>1){var T={cause:f+","+d,reach:W};o(e,n,t,w.prev,A,T),g&&T.reach>g.reach&&(g.reach=T.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function c(e,n,t){for(var r=n.next,a=0;a"+i.content+""},!e.document)return e.addEventListener?(a.disableWorkerMessageHandler||e.addEventListener("message",(function(n){var t=JSON.parse(n.data),r=t.language,i=t.code,l=t.immediateClose;e.postMessage(a.highlight(i,a.languages[r],r)),l&&e.close()}),!1),a):a;var g=a.util.currentScript();function f(){a.manual||a.highlightAll()}if(g&&(a.filename=g.src,g.hasAttribute("data-manual")&&(a.manual=!0)),!a.manual){var h=document.readyState;"loading"===h||"interactive"===h&&g&&g.defer?document.addEventListener("DOMContentLoaded",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return a}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); +Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",(function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))})),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var t={"included-cdata":{pattern://i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,(function(){return a})),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml; +!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",a={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},n={bash:a,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:a}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:n},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:n.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:n.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},a.inside=e.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=n.variable[1].inside,i=0;i=o.length);u++){var g=i[u];if("string"==typeof g||g.content&&"string"==typeof g.content){var l=o[r],s=t.tokenStack[l],f="string"==typeof g?g:g.content,p=n(a,l),k=f.indexOf(p);if(k>-1){++r;var m=f.substring(0,k),d=new e.Token(a,e.tokenize(s,t.grammar),"language-"+a,s),h=f.substring(k+p.length),v=[];m&&v.push.apply(v,c([m])),v.push(d),h&&v.push.apply(v,c([h])),"string"==typeof g?i.splice.apply(i,[u,1].concat(v)):g.content=v}}else g.content&&c(g.content)}return i}(t.tokens)}}}})}(Prism); +!function(e){var a=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,t=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],i=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,n=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,s=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:a,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:i,operator:n,punctuation:s};var l={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},r=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:l}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:l}}];e.languages.insertBefore("php","variable",{string:r,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:a,string:r,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,number:i,operator:n,punctuation:s}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(a){/<\?/.test(a.code)&&e.languages["markup-templating"].buildPlaceholders(a,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)})),e.hooks.add("after-tokenize",(function(a){e.languages["markup-templating"].tokenizePlaceholders(a,"php")}))}(Prism); +!function(e){var i=e.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:null},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:false|true)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(^|\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/};i.string[0].inside={function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:i},boolean:i.boolean,variable:i.variable}}(Prism); +!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var e="line-numbers",n=/\n(?!$)/g,t=Prism.plugins.lineNumbers={getLine:function(n,t){if("PRE"===n.tagName&&n.classList.contains(e)){var i=n.querySelector(".line-numbers-rows");if(i){var r=parseInt(n.getAttribute("data-start"),10)||1,s=r+(i.children.length-1);ts&&(t=s);var l=t-r;return i.children[l]}}},resize:function(e){r([e])},assumeViewportIndependence:!0},i=void 0;window.addEventListener("resize",(function(){t.assumeViewportIndependence&&i===window.innerWidth||(i=window.innerWidth,r(Array.prototype.slice.call(document.querySelectorAll("pre.line-numbers"))))})),Prism.hooks.add("complete",(function(t){if(t.code){var i=t.element,s=i.parentNode;if(s&&/pre/i.test(s.nodeName)&&!i.querySelector(".line-numbers-rows")&&Prism.util.isActive(i,e)){i.classList.remove(e),s.classList.add(e);var l,o=t.code.match(n),a=o?o.length+1:1,u=new Array(a+1).join("");(l=document.createElement("span")).setAttribute("aria-hidden","true"),l.className="line-numbers-rows",l.innerHTML=u,s.hasAttribute("data-start")&&(s.style.counterReset="linenumber "+(parseInt(s.getAttribute("data-start"),10)-1)),t.element.appendChild(l),r([s]),Prism.hooks.run("line-numbers",t)}}})),Prism.hooks.add("line-numbers",(function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0}))}function r(e){if(0!=(e=e.filter((function(e){var n,t=(n=e,n?window.getComputedStyle?getComputedStyle(n):n.currentStyle||null:null)["white-space"];return"pre-wrap"===t||"pre-line"===t}))).length){var t=e.map((function(e){var t=e.querySelector("code"),i=e.querySelector(".line-numbers-rows");if(t&&i){var r=e.querySelector(".line-numbers-sizer"),s=t.textContent.split(n);r||((r=document.createElement("span")).className="line-numbers-sizer",t.appendChild(r)),r.innerHTML="0",r.style.display="block";var l=r.getBoundingClientRect().height;return r.innerHTML="",{element:e,lines:s,lineHeights:[],oneLinerHeight:l,sizer:r}}})).filter(Boolean);t.forEach((function(e){var n=e.sizer,t=e.lines,i=e.lineHeights,r=e.oneLinerHeight;i[t.length-1]=void 0,t.forEach((function(e,t){if(e&&e.length>1){var s=n.appendChild(document.createElement("span"));s.style.display="block",s.textContent=e}else i[t]=r}))})),t.forEach((function(e){for(var n=e.sizer,t=e.lineHeights,i=0,r=0;rt?true:false}}}else{n={get:j.noop,set:j.noop,remove:j.noop,clear:j.noop,isExpired:j.noop}}j.mixin(p.prototype,n);return p;function o(){return new Date().getTime()}function q(t){return JSON.stringify(j.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}}();var i=function(){function m(n){j.bindAll(this);n=n||{};this.sizeLimit=n.sizeLimit||10;this.cache={};this.cachedKeysByAge=[]}j.mixin(m.prototype,{get:function(n){return this.cache[n]},set:function(o,p){var n;if(this.cachedKeysByAge.length===this.sizeLimit){n=this.cachedKeysByAge.shift();delete this.cache[n]}this.cache[o]=p;this.cachedKeysByAge.push(o)}});return m}();var d=function(){var n=0,q={},m,s;function t(u){j.bindAll(this);u=j.isString(u)?{url:u}:u;s=s||new i();m=j.isNumber(u.maxParallelRequests)?u.maxParallelRequests:m||6;this.url=u.url;this.wildcard=u.wildcard||"%QUERY";this.filter=u.filter;this.replace=u.replace;this.ajaxSettings={type:"get",cache:u.cache,timeout:u.timeout,dataType:u.dataType||"json",beforeSend:u.beforeSend};this._get=(/^throttle$/i.test(u.rateLimitFn)?j.throttle:j.debounce)(this._get,u.rateLimitWait||300)}j.mixin(t.prototype,{_get:function(w,u){var x=this;if(p()){this._sendRequest(w).done(v)}else{this.onDeckRequestArgs=[].slice.call(arguments,0)}function v(z){var y=x.filter?x.filter(z):z;u&&u(y);s.set(w,z)}},_sendRequest:function(v){var x=this,w=q[v];if(!w){o();w=q[v]=c.ajax(v,this.ajaxSettings).always(u)}return w;function u(){r();q[v]=null;if(x.onDeckRequestArgs){x._get.apply(x,x.onDeckRequestArgs);x.onDeckRequestArgs=null}}},get:function(y,u){var x=this,w=encodeURIComponent(y||""),v,z;u=u||j.noop;v=this.replace?this.replace(this.url,w):this.url.replace(this.wildcard,w);if(z=s.get(v)){j.defer(function(){u(x.filter?x.filter(z):z)})}else{this._get(v,u)}return !!z}});return t;function o(){n++}function r(){n--}function p(){return n"+u[t]+"

    "}}}return q}}();var b=function(){function n(q){var p=this;j.bindAll(this);this.specialKeyCodeMap={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};this.$hint=c(q.hint);this.$input=c(q.input).on("blur.tt",this._handleBlur).on("focus.tt",this._handleFocus).on("keydown.tt",this._handleSpecialKeyEvent);if(!j.isMsie()){this.$input.on("input.tt",this._compareQueryToInputValue)}else{this.$input.on("keydown.tt keypress.tt cut.tt paste.tt",function(r){if(p.specialKeyCodeMap[r.which||r.keyCode]){return}j.defer(p._compareQueryToInputValue)})}this.query=this.$input.val();this.$overflowHelper=o(this.$input)}j.mixin(n.prototype,k,{_handleFocus:function(){this.trigger("focused")},_handleBlur:function(){this.trigger("blured")},_handleSpecialKeyEvent:function(p){var q=this.specialKeyCodeMap[p.which||p.keyCode];q&&this.trigger(q+"Keyed",p)},_compareQueryToInputValue:function(){var p=this.getInputValue(),r=m(this.query,p),q=r?this.query.length!==p.length:false;if(q){this.trigger("whitespaceChanged",{value:this.query})}else{if(!r){this.trigger("queryChanged",{value:this.query=p})}}},destroy:function(){this.$hint.off(".tt");this.$input.off(".tt");this.$hint=this.$input=this.$overflowHelper=null},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(p){this.query=p},getInputValue:function(){return this.$input.val()},setInputValue:function(q,p){this.$input.val(q);!p&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(p){this.$hint.val(p)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){this.$overflowHelper.text(this.getInputValue());return this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var q=this.$input.val().length,r=this.$input[0].selectionStart,p;if(j.isNumber(r)){return r===q}else{if(document.selection){p=document.selection.createRange();p.moveStart("character",-q);return q===p.text.length}}return true}});return n;function o(p){return c("").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:p.css("font-family"),fontSize:p.css("font-size"),fontStyle:p.css("font-style"),fontVariant:p.css("font-variant"),fontWeight:p.css("font-weight"),wordSpacing:p.css("word-spacing"),letterSpacing:p.css("letter-spacing"),textIndent:p.css("text-indent"),textRendering:p.css("text-rendering"),textTransform:p.css("text-transform")}).insertAfter(p)}function m(q,p){q=(q||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ");p=(p||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ");return q===p}}();var f=function(){var o={suggestionsList:''},n={suggestionsList:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"}};function p(q){j.bindAll(this);this.isOpen=false;this.isEmpty=true;this.isMouseOverDropdown=false;this.$menu=c(q.menu).on("mouseenter.tt",this._handleMouseenter).on("mouseleave.tt",this._handleMouseleave).on("click.tt",".tt-suggestion",this._handleSelection).on("mouseover.tt",".tt-suggestion",this._handleMouseover)}j.mixin(p.prototype,k,{_handleMouseenter:function(){this.isMouseOverDropdown=true},_handleMouseleave:function(){this.isMouseOverDropdown=false},_handleMouseover:function(r){var q=c(r.currentTarget);this._getSuggestions().removeClass("tt-is-under-cursor");q.addClass("tt-is-under-cursor")},_handleSelection:function(r){var q=c(r.currentTarget);this.trigger("suggestionSelected",m(q))},_show:function(){this.$menu.css("display","block")},_hide:function(){this.$menu.hide()},_moveCursor:function(s){var u,r,q,t;if(!this.isVisible()){return}u=this._getSuggestions();r=u.filter(".tt-is-under-cursor");r.removeClass("tt-is-under-cursor");q=u.index(r)+s;q=(q+1)%(u.length+1)-1;if(q===-1){this.trigger("cursorRemoved");return}else{if(q<-1){q=u.length-1}}t=u.eq(q).addClass("tt-is-under-cursor");this._ensureVisibility(t);this.trigger("cursorMoved",m(t))},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},_ensureVisibility:function(t){var u=this.$menu.height()+parseInt(this.$menu.css("paddingTop"),10)+parseInt(this.$menu.css("paddingBottom"),10),r=this.$menu.scrollTop(),q=t.position().top,s=q+t.outerHeight(true);if(q<0){this.$menu.scrollTop(r+q)}else{if(u .tt-suggestion").removeClass("tt-is-under-cursor");this.trigger("closed")}},open:function(){if(!this.isOpen){this.isOpen=true;!this.isEmpty&&this._show();this.trigger("opened")}},setLanguageDirection:function(q){var r={left:"0",right:"auto"},s={left:"auto",right:" 0"};q==="ltr"?this.$menu.css(r):this.$menu.css(s)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(+1)},getSuggestionUnderCursor:function(){var q=this._getSuggestions().filter(".tt-is-under-cursor").first();return q.length>0?m(q):null},getFirstSuggestion:function(){var q=this._getSuggestions().first();return q.length>0?m(q):null},renderSuggestions:function(t,u){var q="tt-dataset-"+t.name,r='
    %body
    ',x,w,y=this.$menu.find("."+q),s,v,z;if(y.length===0){w=c(o.suggestionsList).css(n.suggestionsList);y=c("
    ").addClass(q).append(t.header).append(w).append(t.footer).appendTo(this.$menu)}if(u.length>0){this.isEmpty=false;this.isOpen&&this._show();s=document.createElement("div");v=document.createDocumentFragment();j.each(u,function(B,A){A.dataset=t.name;x=t.template(A.datum);s.innerHTML=r.replace("%body",x);z=c(s.firstChild).css(n.suggestion).data("suggestion",A);z.children().each(function(){c(this).css(n.suggestionChild)});v.appendChild(z[0])});y.show().find(".tt-suggestions").html(v)}else{this.clearSuggestions(t.name)}this.trigger("suggestionsRendered")},clearSuggestions:function(s){var q=s?this.$menu.find(".tt-dataset-"+s):this.$menu.find('[class^="tt-dataset-"]'),r=q.find(".tt-suggestions");q.hide();r.empty();if(this._getSuggestions().length===0){this.isEmpty=true;this._hide()}}});return p;function m(q){return q.data("suggestion")}}();var h=function(){var q={wrapper:'',hint:'',dropdown:''},p={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none"},query:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"}};if(j.isMsie()){j.mixin(p.query,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"})}if(j.isMsie()&&j.isMsie()<=7){j.mixin(p.wrapper,{display:"inline",zoom:"1"});j.mixin(p.query,{marginTop:"-1px"})}function n(t){var s,u,r;j.bindAll(this);this.$node=m(t.input);this.datasets=t.datasets;this.dir=null;this.eventBus=t.eventBus;s=this.$node.find(".tt-dropdown-menu");u=this.$node.find(".tt-query");r=this.$node.find(".tt-hint");this.dropdownView=new f({menu:s}).on("suggestionSelected",this._handleSelection).on("cursorMoved",this._clearHint).on("cursorMoved",this._setInputValueToSuggestionUnderCursor).on("cursorRemoved",this._setInputValueToQuery).on("cursorRemoved",this._updateHint).on("suggestionsRendered",this._updateHint).on("opened",this._updateHint).on("closed",this._clearHint).on("opened closed",this._propagateEvent);this.inputView=new b({input:u,hint:r}).on("focused",this._openDropdown).on("blured",this._closeDropdown).on("blured",this._setInputValueToQuery).on("enterKeyed tabKeyed",this._handleSelection).on("queryChanged",this._clearHint).on("queryChanged",this._clearSuggestions).on("queryChanged",this._getSuggestions).on("whitespaceChanged",this._updateHint).on("queryChanged whitespaceChanged",this._openDropdown).on("queryChanged whitespaceChanged",this._setLanguageDirection).on("escKeyed",this._closeDropdown).on("escKeyed",this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed",this._managePreventDefault).on("upKeyed downKeyed",this._moveDropdownCursor).on("upKeyed downKeyed",this._openDropdown).on("tabKeyed leftKeyed rightKeyed",this._autocomplete)}j.mixin(n.prototype,k,{_managePreventDefault:function(u){var t=u.data,v,r,s=false;switch(u.type){case"tabKeyed":v=this.inputView.getHintValue();r=this.inputView.getInputValue();s=v&&v!==r;break;case"upKeyed":case"downKeyed":s=!t.shiftKey&&!t.ctrlKey&&!t.metaKey;break}s&&t.preventDefault()},_setLanguageDirection:function(){var r=this.inputView.getLanguageDirection();if(r!==this.dir){this.dir=r;this.$node.css("direction",r);this.dropdownView.setLanguageDirection(r)}},_updateHint:function(){var u=this.dropdownView.getFirstSuggestion(),t=u?u.value:null,x=this.dropdownView.isVisible(),w=this.inputView.isOverflow(),s,y,z,r,v;if(t&&x&&!w){s=this.inputView.getInputValue();y=s.replace(/\s{2,}/g," ").replace(/^\s+/g,"");z=j.escapeRegExChars(y);r=new RegExp("^(?:"+z+")(.*$)","i");v=r.exec(t);this.inputView.setHintValue(s+(v?v[1]:""))}},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(s){var r=s.data;this.inputView.setInputValue(r.value,true)},_openDropdown:function(){this.dropdownView.open()},_closeDropdown:function(r){this.dropdownView[r.type==="blured"?"closeUnlessMouseIsOverDropdown":"close"]()},_moveDropdownCursor:function(s){var r=s.data;if(!r.shiftKey&&!r.ctrlKey&&!r.metaKey){this.dropdownView[s.type==="upKeyed"?"moveCursorUp":"moveCursorDown"]()}},_handleSelection:function(t){var s=t.type==="suggestionSelected",r=s?t.data:this.dropdownView.getSuggestionUnderCursor();if(r){this.inputView.setInputValue(r.value);s?this.inputView.focus():t.data.preventDefault();s&&j.isMsie()?j.defer(this.dropdownView.close):this.dropdownView.close();this.eventBus.trigger("selected",r.datum,r.dataset)}},_getSuggestions:function(){var r=this,s=this.inputView.getQuery();if(j.isBlankString(s)){return}j.each(this.datasets,function(t,u){u.getSuggestions(s,function(v){if(s===r.inputView.getQuery()){r.dropdownView.renderSuggestions(u,v)}})})},_autocomplete:function(v){var s,r,u,w,t;if(v.type==="rightKeyed"||v.type==="leftKeyed"){s=this.inputView.isCursorAtEnd();r=this.inputView.getLanguageDirection()==="ltr"?v.type==="leftKeyed":v.type==="rightKeyed";if(!s||r){return}}u=this.inputView.getQuery();w=this.inputView.getHintValue();if(w!==""&&u!==w){t=this.dropdownView.getFirstSuggestion();this.inputView.setInputValue(t.value);this.eventBus.trigger("autocompleted",t.datum,t.dataset)}},_propagateEvent:function(r){this.eventBus.trigger(r.type)},destroy:function(){this.inputView.destroy();this.dropdownView.destroy();o(this.$node);this.$node=null},setQuery:function(r){this.inputView.setQuery(r);this.inputView.setInputValue(r);this._clearHint();this._clearSuggestions();this._getSuggestions()}});return n;function m(r){var t=c(q.wrapper),v=c(q.dropdown),w=c(r),s=c(q.hint);t=t.css(p.wrapper);v=v.css(p.dropdown);s.css(p.hint).css({backgroundAttachment:w.css("background-attachment"),backgroundClip:w.css("background-clip"),backgroundColor:w.css("background-color"),backgroundImage:w.css("background-image"),backgroundOrigin:w.css("background-origin"),backgroundPosition:w.css("background-position"),backgroundRepeat:w.css("background-repeat"),backgroundSize:w.css("background-size")});w.data("ttAttrs",{dir:w.attr("dir"),autocomplete:w.attr("autocomplete"),spellcheck:w.attr("spellcheck"),style:w.attr("style")});w.addClass("tt-query").attr({autocomplete:"off",spellcheck:false}).css(p.query);try{!w.attr("dir")&&w.attr("dir","auto")}catch(u){}return w.wrap(t).parent().prepend(s).append(v)}function o(r){var s=r.find(".tt-query");j.each(s.data("ttAttrs"),function(t,u){j.isUndefined(u)?s.removeAttr(t):s.attr(t,u)});s.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter(r);r.remove()}}();(function(){var n={},o="ttView",m;m={initialize:function(r){var q;r=j.isArray(r)?r:[r];if(r.length===0){c.error("no datasets provided")}q=j.map(r,function(t){var s=n[t.name]?n[t.name]:new a(t);if(t.name){n[t.name]=s}return s});return this.each(p);function p(){var u=c(this),t,s=new e({el:u});t=j.map(q,function(v){return v.initialize()});u.data(o,new h({input:u,eventBus:s=new e({el:u}),datasets:q}));c.when.apply(c,t).always(function(){j.defer(function(){s.trigger("initialized")})})}},destroy:function(){return this.each(p);function p(){var r=c(this),q=r.data(o);if(q){q.destroy();r.removeData(o)}}},setQuery:function(p){return this.each(q);function q(){var r=c(this).data(o);r&&r.setQuery(p)}}};jQuery.fn.typeahead=function(p){if(m[p]){return m[p].apply(this,[].slice.call(arguments,1))}else{return m.initialize.apply(this,arguments)}}})()})(window.jQuery); diff --git a/js/interactive-examples.js b/js/interactive-examples.js new file mode 100644 index 0000000000..7f2d41e90c --- /dev/null +++ b/js/interactive-examples.js @@ -0,0 +1,111 @@ +import phpBinary from "/js/php-web.mjs"; + +function generateExampleOutputTitle(phpVersion) { + return "Output of the above example in PHP "+ phpVersion +":"; +} + +function createOutput(output) { + const container = document.createElement("div"); + container.classList.add("screen", "example-contents"); + + if (output != "") { + const title = document.createElement("p"); + title.innerText = generateExampleOutputTitle(PHP.version); + container.appendChild(title); + const div = document.createElement("div"); + div.classList.add("examplescode"); + container.appendChild(div); + const pre = document.createElement("pre"); + pre.classList.add("examplescode"); + pre.innerText = output; + div.appendChild(pre); + return container; + } + + const title = document.createElement("p"); + title.innerText = "This example did not produce any output." + container.appendChild(title); + return container; +} + +class PHP { + static buffer = []; + static runPhp = null; + static version = ''; + static async loadPhp() { + if (PHP.runPhp) { + return PHP.runPhp; + } + let initializing = true; + + const { ccall } = await phpBinary({ + print(data) { + // The initial exec to get PHP version causes empty output we don't want + if (initializing) { + return; + } + PHP.buffer.push(data + "\n"); + }, + }); + + PHP.version = ccall("phpw_exec", "string", ["string"], ["phpversion();"]), + console.log("PHP wasm %s loaded.", PHP.version); + initializing = false; + PHP.runPhp = (code) => ccall("phpw_run", null, ["string"], ["?>" + code]); + return PHP.runPhp; + } +} + +async function main() { + let lastOutput = null; + + document.querySelectorAll(".example .example-contents, .informalexample .example-contents").forEach((example) => { + const button = document.createElement("button"); + button.setAttribute("type", "button"); + const phpcode = example.querySelector(".phpcode.annotation-interactive"); + if (phpcode === null) { + return; + } + + const exampleTitleContainer = example.nextElementSibling; + let exampleTitleParagraphElement = null; + let exampleScreenPreElement = null; + if (exampleTitleContainer !== null) { + if (exampleTitleContainer.tagName === "P") { + exampleTitleParagraphElement = exampleTitleContainer; + } else { + exampleTitleParagraphElement = exampleTitleContainer.querySelector("p") + } + const exampleScreenContainer = exampleTitleContainer.nextElementSibling; + if (exampleScreenContainer !== null) { + exampleScreenPreElement = exampleScreenContainer.querySelector("pre"); + } + } + + const code = phpcode.querySelector("code"); + code.spellcheck = false; + code.setAttribute("contentEditable", true); + + button.innerText = "Run code"; + button.onclick = async function () { + if (lastOutput && lastOutput.parentNode) { + lastOutput.remove(); + } + + const runPhp = await PHP.loadPhp(); + runPhp(phpcode.innerText); + if (exampleScreenPreElement !== null) { + exampleTitleParagraphElement.innerText = generateExampleOutputTitle(PHP.version); + exampleScreenPreElement.innerText = PHP.buffer.join(""); + } else { + lastOutput = createOutput(PHP.buffer.join("")); + phpcode.parentNode.appendChild(lastOutput); + } + PHP.buffer.length = 0; + }; + + phpcode.after(button); + }); +} + +main(); diff --git a/js/php-web-README.md b/js/php-web-README.md new file mode 100644 index 0000000000..125aa7709b --- /dev/null +++ b/js/php-web-README.md @@ -0,0 +1,2 @@ +These files are built by [emcripten](https://github.com/emscripten-core/emscripten) +via https://github.com/derickr/php-wasm-builder diff --git a/js/php-web.mjs b/js/php-web.mjs new file mode 100644 index 0000000000..5b61a33494 --- /dev/null +++ b/js/php-web.mjs @@ -0,0 +1,2 @@ +async function createPhpModule(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var readyPromiseResolve,readyPromiseReject;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();SOCKFS.root=FS.mount(SOCKFS,{},null);PIPEFS.root=FS.mount(PIPEFS,{},null);wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("php-web.wasm")}return new URL("php-web.wasm",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var ___call_sighandler=(fp,sig)=>getWasmTableEntry(fp)(sig);var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>view=>crypto.getRandomValues(view);var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63;i++}}heap[outIdx]=0;return outIdx-startIdx};var intArrayFromString=(stringy,dontAddNull,length)=>{var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var zeroMemory=(ptr,size)=>HEAPU8.fill(0,ptr,ptr+size);var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var mmapAlloc=size=>{size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(ptr)zeroMemory(ptr,size);return ptr};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){if(!MEMFS.doesNotExistError){MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack=""}throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>id;var runDependencies=0;var dependenciesFulfilled=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var LZ4={DIR_MODE:16895,FILE_MODE:33279,CHUNK_SIZE:-1,codec:null,init(){if(LZ4.codec)return;LZ4.codec=(()=>{var MiniLZ4=function(){var exports={};exports.uncompress=function(input,output,sIdx,eIdx){sIdx=sIdx||0;eIdx=eIdx||input.length-sIdx;for(var i=sIdx,n=eIdx,j=0;i>4;if(literals_length>0){var l=literals_length+240;while(l===255){l=input[i++];literals_length+=l}var end=i+literals_length;while(ij)return-(i-2);var match_length=token&15;var l=match_length+240;while(l===255){l=input[i++];match_length+=l}var pos=j-offset;var end=j+match_length+4;while(jmaxInputSize?0:isize+isize/255+16|0};exports.compress=function(src,dst,sIdx,eIdx){hashTable.set(empty);return compressBlock(src,dst,0,sIdx||0,eIdx||dst.length)};function compressBlock(src,dst,pos,sIdx,eIdx){var dpos=sIdx;var dlen=eIdx-sIdx;var anchor=0;if(src.length>=maxInputSize)throw new Error("input too large");if(src.length>mfLimit){var n=exports.compressBound(src.length);if(dlen>>hashShift;var ref=hashTable[hash]-1;hashTable[hash]=pos+1;if(ref<0||pos-ref>>>16>0||((src[ref+3]<<8|src[ref+2])!=sequenceHighBits||(src[ref+1]<<8|src[ref])!=sequenceLowBits)){step=findMatchAttempts++>>skipStrength;pos+=step;continue}findMatchAttempts=(1<=runMask){dst[dpos++]=(runMask<254;len-=255){dst[dpos++]=255}dst[dpos++]=len}else{dst[dpos++]=(literals_length<>8;if(match_length>=mlMask){match_length-=mlMask;while(match_length>=255){match_length-=255;dst[dpos++]=255}dst[dpos++]=match_length}anchor=pos}}if(anchor==0)return 0;literals_length=src.length-anchor;if(literals_length>=runMask){dst[dpos++]=runMask<254;ln-=255){dst[dpos++]=255}dst[dpos++]=ln}else{dst[dpos++]=literals_length<0){assert(compressedSize<=bound);compressed=compressed.subarray(0,compressedSize);compressedChunks.push(compressed);total+=compressedSize;successes.push(1);if(verify){var back=exports.uncompress(compressed,temp);assert(back===chunk.length,[back,chunk.length]);for(var i=0;iremoveRunDependency(dep);var byteArray=FS.readFile(fullname);plugin["handle"](byteArray,fullname).then(finish).catch(finish);break}}}}},createNode(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=LZ4.node_ops;node.stream_ops=LZ4.stream_ops;this.atime=this.mtime=this.ctime=(mtime||new Date).getTime();assert(LZ4.FILE_MODE!==LZ4.DIR_MODE);if(mode===LZ4.FILE_MODE){node.size=contents.end-contents.start;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr(node){return{dev:1,ino:node.id,mode:node.mode,nlink:1,uid:0,gid:0,rdev:0,size:node.size,atime:new Date(node.atime),mtime:new Date(node.mtime),ctime:new Date(node.ctime),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]){node[key]=attr[key]}}},lookup(parent,name){throw new FS.ErrnoError(44)},mknod(parent,name,mode,dev){throw new FS.ErrnoError(63)},rename(oldNode,newDir,newName){throw new FS.ErrnoError(63)},unlink(parent,name){throw new FS.ErrnoError(63)},rmdir(parent,name){throw new FS.ErrnoError(63)},readdir(node){throw new FS.ErrnoError(63)},symlink(parent,newName,oldPath){throw new FS.ErrnoError(63)}},stream_ops:{read(stream,buffer,offset,length,position){length=Math.min(length,stream.node.size-position);if(length<=0)return 0;var contents=stream.node.contents;var compressedData=contents.compressedData;var written=0;while(written=0){currChunk=compressedData["cachedChunks"][found]}else{compressedData["cachedIndexes"].pop();compressedData["cachedIndexes"].unshift(chunkIndex);currChunk=compressedData["cachedChunks"].pop();compressedData["cachedChunks"].unshift(currChunk);if(compressedData["debug"]){out("decompressing chunk "+chunkIndex);Module["decompressedChunks"]=(Module["decompressedChunks"]||0)+1}var compressed=compressedData["data"].subarray(compressedStart,compressedStart+compressedSize);var originalSize=LZ4.codec.uncompress(compressed,currChunk);if(chunkIndex!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);for(var[hash,current]of Object.entries(FS.nameTable)){while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}}node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}if(Module["logReadFiles"]&&!(flags&1)){if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){abort(`Invalid encoding type "${opts.encoding}"`)}var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){data=new Uint8Array(intArrayFromString(data,true))}if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{abort("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,llseek:()=>0});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)abort("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)abort("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")abort("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};for(const[key,fn]of Object.entries(node.stream_ops)){stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}}function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):"";var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+"/"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;HEAPU32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAPU32[buf+12>>2]=stat.uid;HEAPU32[buf+16>>2]=stat.gid;HEAPU32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;HEAPU32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;HEAPU32[buf+64>>2]=stats.flags;HEAPU32[buf+56>>2]=stats.namelen},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};var ___syscall__newselect=function(nfds,readfds,writefds,exceptfds,timeout){try{var total=0;var srcReadLow=readfds?HEAP32[readfds>>2]:0,srcReadHigh=readfds?HEAP32[readfds+4>>2]:0;var srcWriteLow=writefds?HEAP32[writefds>>2]:0,srcWriteHigh=writefds?HEAP32[writefds+4>>2]:0;var srcExceptLow=exceptfds?HEAP32[exceptfds>>2]:0,srcExceptHigh=exceptfds?HEAP32[exceptfds+4>>2]:0;var dstReadLow=0,dstReadHigh=0;var dstWriteLow=0,dstWriteHigh=0;var dstExceptLow=0,dstExceptHigh=0;var allLow=(readfds?HEAP32[readfds>>2]:0)|(writefds?HEAP32[writefds>>2]:0)|(exceptfds?HEAP32[exceptfds>>2]:0);var allHigh=(readfds?HEAP32[readfds+4>>2]:0)|(writefds?HEAP32[writefds+4>>2]:0)|(exceptfds?HEAP32[exceptfds+4>>2]:0);var check=(fd,low,high,val)=>fd<32?low&val:high&val;for(var fd=0;fd>2]:0,tv_usec=readfds?HEAP32[timeout+4>>2]:0;timeoutInMillis=(tv_sec+tv_usec/1e6)*1e3}flags=stream.stream_ops.poll(stream,timeoutInMillis)}if(flags&1&&check(fd,srcReadLow,srcReadHigh,mask)){fd<32?dstReadLow=dstReadLow|mask:dstReadHigh=dstReadHigh|mask;total++}if(flags&4&&check(fd,srcWriteLow,srcWriteHigh,mask)){fd<32?dstWriteLow=dstWriteLow|mask:dstWriteHigh=dstWriteHigh|mask;total++}if(flags&2&&check(fd,srcExceptLow,srcExceptHigh,mask)){fd<32?dstExceptLow=dstExceptLow|mask:dstExceptHigh=dstExceptHigh|mask;total++}}if(readfds){HEAP32[readfds>>2]=dstReadLow;HEAP32[readfds+4>>2]=dstReadHigh}if(writefds){HEAP32[writefds>>2]=dstWriteLow;HEAP32[writefds+4>>2]=dstWriteHigh}if(exceptfds){HEAP32[exceptfds>>2]=dstExceptLow;HEAP32[exceptfds+4>>2]=dstExceptHigh}return total}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}};var SOCKFS={websocketArgs:{},callbacks:{},on(event,callback){SOCKFS.callbacks[event]=callback},emit(event,param){SOCKFS.callbacks[event]?.(param)},mount(mount){SOCKFS.websocketArgs=Module["websocket"]||{};(Module["websocket"]??={})["on"]=SOCKFS.on;return FS.createNode(null,"/",16895,0)},createSocket(family,type,protocol){if(family!=2){throw new FS.ErrnoError(5)}type&=~526336;if(type!=1&&type!=2){throw new FS.ErrnoError(28)}var streaming=type==1;if(streaming&&protocol&&protocol!=6){throw new FS.ErrnoError(66)}var sock={family,type,protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return`socket[${SOCKFS.nextname.current++}]`},websocket_sock_ops:{createPeer(sock,addr,port){var ws;if(typeof addr=="object"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);if(!result){throw new Error("WebSocket URL must be in the format ws(s)://address:port")}addr=result[1];port=parseInt(result[2],10)}}else{try{var url="ws://".replace("#","//");var subProtocols="binary";var opts=undefined;if(SOCKFS.websocketArgs["url"]){url=SOCKFS.websocketArgs["url"]}if(SOCKFS.websocketArgs["subprotocol"]){subProtocols=SOCKFS.websocketArgs["subprotocol"]}else if(SOCKFS.websocketArgs["subprotocol"]===null){subProtocols="null"}if(url==="ws://"||url==="wss://"){var parts=addr.split("/");url=url+parts[0]+":"+port+"/"+parts.slice(1).join("/")}if(subProtocols!=="null"){subProtocols=subProtocols.replace(/^ +| +$/g,"").split(/ *, */);opts=subProtocols}var WebSocketConstructor;{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr,port,socket:ws,msg_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!="undefined"){peer.msg_send_queue.push(new Uint8Array([255,255,255,255,"p".charCodeAt(0),"o".charCodeAt(0),"r".charCodeAt(0),"t".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer(sock,addr,port){return sock.peers[addr+":"+port]},addPeer(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer},removePeer(sock,peer){delete sock.peers[peer.addr+":"+peer.port]},handlePeerEvents(sock,peer){var first=true;var handleOpen=function(){sock.connecting=false;SOCKFS.emit("open",sock.stream.fd);try{var queued=peer.msg_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.msg_send_queue.shift()}}catch(e){peer.socket.close()}};function handleMessage(data){if(typeof data=="string"){var encoder=new TextEncoder;data=encoder.encode(data)}else{if(data.byteLength==0){return}data=new Uint8Array(data)}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data});SOCKFS.emit("message",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",function(data,isBinary){if(!isBinary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on("close",function(){SOCKFS.emit("close",sock.stream.fd)});peer.socket.on("error",function(error){sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])})}else{peer.socket.onopen=handleOpen;peer.socket.onclose=function(){SOCKFS.emit("close",sock.stream.fd)};peer.socket.onmessage=function peer_socket_onmessage(event){handleMessage(event.data)};peer.socket.onerror=function(error){sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])}}},poll(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){if(sock.connecting){mask|=4}else{mask|=16}}return mask},ioctl(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;return 0;case 21537:var on=HEAP32[arg>>2];if(on){sock.stream.flags|=2048}else{sock.stream.flags&=~2048}return 0;default:return 28}},close(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}for(var peer of Object.values(sock.peers)){try{peer.socket.close()}catch(e){}SOCKFS.websocket_sock_ops.removePeer(sock,peer)}return 0},bind(sock,addr,port){if(typeof sock.saddr!="undefined"||typeof sock.sport!="undefined"){throw new FS.ErrnoError(28)}sock.saddr=addr;sock.sport=port;if(sock.type===2){if(sock.server){sock.server.close();sock.server=null}try{sock.sock_ops.listen(sock,0)}catch(e){if(!(e.name==="ErrnoError"))throw e;if(e.errno!==138)throw e}}},connect(sock,addr,port){if(sock.server){throw new FS.ErrnoError(138)}if(typeof sock.daddr!="undefined"&&typeof sock.dport!="undefined"){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(dest){if(dest.socket.readyState===dest.socket.CONNECTING){throw new FS.ErrnoError(7)}else{throw new FS.ErrnoError(30)}}}var peer=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port);sock.daddr=peer.addr;sock.dport=peer.port;sock.connecting=true},listen(sock,backlog){if(!ENVIRONMENT_IS_NODE){throw new FS.ErrnoError(138)}},accept(listensock){if(!listensock.server||!listensock.pending.length){throw new FS.ErrnoError(28)}var newsock=listensock.pending.shift();newsock.stream.flags=listensock.stream.flags;return newsock},getname(sock,peer){var addr,port;if(peer){if(sock.daddr===undefined||sock.dport===undefined){throw new FS.ErrnoError(53)}addr=sock.daddr;port=sock.dport}else{addr=sock.saddr||0;port=sock.sport||0}return{addr,port}},sendmsg(sock,buffer,offset,length,addr,port){if(sock.type===2){if(addr===undefined||port===undefined){addr=sock.daddr;port=sock.dport}if(addr===undefined||port===undefined){throw new FS.ErrnoError(17)}}else{addr=sock.daddr;port=sock.dport}var dest=SOCKFS.websocket_sock_ops.getPeer(sock,addr,port);if(sock.type===1){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){throw new FS.ErrnoError(53)}}if(ArrayBuffer.isView(buffer)){offset+=buffer.byteOffset;buffer=buffer.buffer}var data=buffer.slice(offset,offset+length);if(!dest||dest.socket.readyState!==dest.socket.OPEN){if(sock.type===2){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){dest=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port)}}dest.msg_send_queue.push(data);return length}try{dest.socket.send(data);return length}catch(e){throw new FS.ErrnoError(28)}},recvmsg(sock,length){if(sock.type===1&&sock.server){throw new FS.ErrnoError(53)}var queued=sock.recv_queue.shift();if(!queued){if(sock.type===1){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(!dest){throw new FS.ErrnoError(53)}if(dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){return null}throw new FS.ErrnoError(6)}throw new FS.ErrnoError(6)}var queuedLength=queued.data.byteLength||queued.data.length;var queuedOffset=queued.data.byteOffset||0;var queuedBuffer=queued.data.buffer||queued.data;var bytesRead=Math.min(length,queuedLength);var res={buffer:new Uint8Array(queuedBuffer,queuedOffset,bytesRead),addr:queued.addr,port:queued.port};if(sock.type===1&&bytesRead{var socket=SOCKFS.getSocket(fd);if(!socket)throw new FS.ErrnoError(8);return socket};var inetPton4=str=>{var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0};var inetPton6=str=>{var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.startsWith("::")){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=Number(words[words.length-4])+Number(words[words.length-3])*256;words[words.length-3]=Number(words[words.length-2])+Number(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;w{switch(family){case 2:addr=inetPton4(addr);zeroMemory(sa,16);if(addrlen){HEAP32[addrlen>>2]=16}HEAP16[sa>>1]=family;HEAP32[sa+4>>2]=addr;HEAP16[sa+2>>1]=_htons(port);break;case 10:addr=inetPton6(addr);zeroMemory(sa,28);if(addrlen){HEAP32[addrlen>>2]=28}HEAP32[sa>>2]=family;HEAP32[sa+8>>2]=addr[0];HEAP32[sa+12>>2]=addr[1];HEAP32[sa+16>>2]=addr[2];HEAP32[sa+20>>2]=addr[3];HEAP16[sa+2>>1]=_htons(port);break;default:return 5}return 0};var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;addr="172.29."+(id&255)+"."+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};function ___syscall_accept4(fd,addr,addrlen,flags,d1,d2){try{var sock=getSocketFromFD(fd);var newsock=sock.sock_ops.accept(sock);if(addr){var errno=writeSockaddr(addr,newsock.family,DNS.lookup_name(newsock.daddr),newsock.dport,addrlen)}return newsock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var inetNtop4=addr=>(addr&255)+"."+(addr>>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255);var inetNtop6=ints=>{var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(parts[5]===0){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word{var family=HEAP16[sa>>1];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family,addr,port}};var getSocketAddress=(addrp,addrlen)=>{var info=readSockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info};function ___syscall_bind(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.bind(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_chmod(path,mode){try{path=SYSCALLS.getStr(path);FS.chmod(path,mode);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_connect(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.connect(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_dup(fd){try{var old=SYSCALLS.getStreamFromFD(fd);return FS.dupStream(old).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fchmod(fd,mode){try{FS.fchmod(fd,mode);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fchownat(dirfd,path,owner,group,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;flags=flags&~256;path=SYSCALLS.calculateAt(dirfd,path);(nofollow?FS.lchown:FS.chown)(path,owner,group);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var syscallGetVarargI=()=>{var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fdatasync(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fstat64(fd,buf){try{return SYSCALLS.writeStat(buf,FS.fstat(fd))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function ___syscall_ftruncate64(fd,length){length=bigintToI53Checked(length);try{if(isNaN(length))return-61;FS.ftruncate(fd,length);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size>3]=BigInt(id);HEAP64[dirp+pos+8>>3]=BigInt((idx+1)*struct_size);HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_getpeername(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);if(!sock.daddr){return-53}var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(sock.daddr),sock.dport,addrlen);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_getsockname(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(sock.saddr||"0.0.0.0"),sock.sport,addrlen);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_getsockopt(fd,level,optname,optval,optlen,d1){try{var sock=getSocketFromFD(fd);if(level===1){if(optname===4){HEAP32[optval>>2]=sock.error;HEAP32[optlen>>2]=4;sock.error=null;return 0}}return-50}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>2]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21537:case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_listen(fd,backlog){try{var sock=getSocketFromFD(fd);sock.sock_ops.listen(sock,backlog);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.lstat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.writeStat(buf,nofollow?FS.lstat(path):FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var PIPEFS={BUCKET_BUFFER_SIZE:8192,mount(mount){return FS.createNode(null,"/",16384|511,0)},createPipe(){var pipe={buckets:[],refcnt:2,timestamp:new Date};pipe.buckets.push({buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:0,roffset:0});var rName=PIPEFS.nextname();var wName=PIPEFS.nextname();var rNode=FS.createNode(PIPEFS.root,rName,4096,0);var wNode=FS.createNode(PIPEFS.root,wName,4096,0);rNode.pipe=pipe;wNode.pipe=pipe;var readableStream=FS.createStream({path:rName,node:rNode,flags:0,seekable:false,stream_ops:PIPEFS.stream_ops});rNode.stream=readableStream;var writableStream=FS.createStream({path:wName,node:wNode,flags:1,seekable:false,stream_ops:PIPEFS.stream_ops});wNode.stream=writableStream;return{readable_fd:readableStream.fd,writable_fd:writableStream.fd}},stream_ops:{getattr(stream){var node=stream.node;var timestamp=node.pipe.timestamp;return{dev:14,ino:node.id,mode:4480,nlink:1,uid:0,gid:0,rdev:0,size:0,atime:timestamp,mtime:timestamp,ctime:timestamp,blksize:4096,blocks:0}},poll(stream){var pipe=stream.node.pipe;if((stream.flags&2097155)===1){return 256|4}for(var bucket of pipe.buckets){if(bucket.offset-bucket.roffset>0){return 64|1}}return 0},dup(stream){stream.node.pipe.refcnt++},ioctl(stream,request,varargs){return 28},fsync(stream){return 28},read(stream,buffer,offset,length,position){var pipe=stream.node.pipe;var currentLength=0;for(var bucket of pipe.buckets){currentLength+=bucket.offset-bucket.roffset}var data=buffer.subarray(offset,offset+length);if(length<=0){return 0}if(currentLength==0){throw new FS.ErrnoError(6)}var toRead=Math.min(currentLength,length);var totalRead=toRead;var toRemove=0;for(var bucket of pipe.buckets){var bucketSize=bucket.offset-bucket.roffset;if(toRead<=bucketSize){var tmpSlice=bucket.buffer.subarray(bucket.roffset,bucket.offset);if(toRead=dataLen){currBucket.buffer.set(data,currBucket.offset);currBucket.offset+=dataLen;return dataLen}else if(freeBytesInCurrBuffer>0){currBucket.buffer.set(data.subarray(0,freeBytesInCurrBuffer),currBucket.offset);currBucket.offset+=freeBytesInCurrBuffer;data=data.subarray(freeBytesInCurrBuffer,data.byteLength)}var numBuckets=data.byteLength/PIPEFS.BUCKET_BUFFER_SIZE|0;var remElements=data.byteLength%PIPEFS.BUCKET_BUFFER_SIZE;for(var i=0;i0){var newBucket={buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:data.byteLength,roffset:0};pipe.buckets.push(newBucket);newBucket.buffer.set(data)}return dataLen},close(stream){var pipe=stream.node.pipe;pipe.refcnt--;if(pipe.refcnt===0){pipe.buckets=null}}},nextname(){if(!PIPEFS.nextname.current){PIPEFS.nextname.current=0}return"pipe["+PIPEFS.nextname.current+++"]"}};function ___syscall_pipe(fdPtr){try{if(fdPtr==0){throw new FS.ErrnoError(21)}var res=PIPEFS.createPipe();HEAP32[fdPtr>>2]=res.readable_fd;HEAP32[fdPtr+4>>2]=res.writable_fd;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_poll(fds,nfds,timeout){try{var nonzero=0;for(var i=0;i>2];var events=HEAP16[pollfd+4>>1];var mask=32;var stream=FS.getStream(fd);if(stream){mask=SYSCALLS.DEFAULT_POLLMASK;if(stream.stream_ops.poll){mask=stream.stream_ops.poll(stream,-1)}}mask&=events|8|16;if(mask)nonzero++;HEAP16[pollfd+6>>1]=mask}return nonzero}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_readlinkat(dirfd,path,buf,bufsize){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_recvfrom(fd,buf,len,flags,addr,addrlen){try{var sock=getSocketFromFD(fd);var msg=sock.sock_ops.recvmsg(sock,len);if(!msg)return 0;if(addr){var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(msg.addr),msg.port,addrlen)}HEAPU8.set(msg.buffer,buf);return msg.buffer.byteLength}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_renameat(olddirfd,oldpath,newdirfd,newpath){try{oldpath=SYSCALLS.getStr(oldpath);newpath=SYSCALLS.getStr(newpath);oldpath=SYSCALLS.calculateAt(olddirfd,oldpath);newpath=SYSCALLS.calculateAt(newdirfd,newpath);FS.rename(oldpath,newpath);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_sendto(fd,message,length,flags,addr,addr_len){try{var sock=getSocketFromFD(fd);if(!addr){return FS.write(sock.stream,HEAP8,message,length)}var dest=getSocketAddress(addr,addr_len);return sock.sock_ops.sendmsg(sock,HEAP8,message,length,dest.addr,dest.port)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_socket(domain,type,protocol){try{var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_statfs64(path,size,buf){try{SYSCALLS.writeStatFs(buf,FS.statfs(SYSCALLS.getStr(path)));return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_symlinkat(target,dirfd,linkpath){try{target=SYSCALLS.getStr(target);linkpath=SYSCALLS.getStr(linkpath);linkpath=SYSCALLS.calculateAt(dirfd,linkpath);FS.symlink(target,linkpath);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(!flags){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{return-28}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var readI53FromI64=ptr=>HEAPU32[ptr>>2]+HEAP32[ptr+4>>2]*4294967296;function ___syscall_utimensat(dirfd,path,times,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path,true);var now=Date.now(),atime,mtime;if(!times){atime=now;mtime=now}else{var seconds=readI53FromI64(times);var nanoseconds=HEAP32[times+8>>2];if(nanoseconds==1073741823){atime=now}else if(nanoseconds==1073741822){atime=null}else{atime=seconds*1e3+nanoseconds/(1e3*1e3)}times+=16;seconds=readI53FromI64(times);nanoseconds=HEAP32[times+8>>2];if(nanoseconds==1073741823){mtime=now}else if(nanoseconds==1073741822){mtime=null}else{mtime=seconds*1e3+nanoseconds/(1e3*1e3)}}if((mtime??atime)!==null){FS.utime(path,atime,mtime)}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>abort("");var __emscripten_fs_load_embedded_files=ptr=>{do{var name_addr=HEAPU32[ptr>>2];ptr+=4;var len=HEAPU32[ptr>>2];ptr+=4;var content=HEAPU32[ptr>>2];ptr+=4;var name=UTF8ToString(name_addr);FS.createPath("/",PATH.dirname(name),true,true);FS.createDataFile(name,null,HEAP8.subarray(content,content+len),true,true,true)}while(HEAPU32[ptr>>2])};var __emscripten_lookup_name=name=>{var nameString=UTF8ToString(name);return inetPton4(DNS.lookup_name(nameString))};var runtimeKeepaliveCounter=0;var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};var __emscripten_throw_longjmp=()=>{throw Infinity};function __gmtime_js(time,tmPtr){time=bigintToI53Checked(time);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getUTCSeconds();HEAP32[tmPtr+4>>2]=date.getUTCMinutes();HEAP32[tmPtr+8>>2]=date.getUTCHours();HEAP32[tmPtr+12>>2]=date.getUTCDate();HEAP32[tmPtr+16>>2]=date.getUTCMonth();HEAP32[tmPtr+20>>2]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getUTCDay();var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday}var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};function __localtime_js(time,tmPtr){time=bigintToI53Checked(time);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst}var __mktime_js=function(tmPtr){var ret=(()=>{var date=new Date(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var dst=HEAP32[tmPtr+32>>2];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){HEAP32[tmPtr+32>>2]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getYear();var timeMs=date.getTime();if(isNaN(timeMs)){return-1}return timeMs/1e3})();return BigInt(ret)};function __mmap_js(len,prot,flags,fd,offset,allocated,addr){offset=bigintToI53Checked(offset);try{var stream=SYSCALLS.getStreamFromFD(fd);var res=FS.mmap(stream,len,offset,prot,flags);var ptr=res.ptr;HEAP32[allocated>>2]=res.allocated;HEAPU32[addr>>2]=ptr;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function __munmap_js(addr,len,prot,flags,fd,offset){offset=bigintToI53Checked(offset);try{var stream=SYSCALLS.getStreamFromFD(fd);if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var timers={};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var _emscripten_get_now=()=>performance.now();var __setitimer_js=(which,timeout_ms)=>{if(timers[which]){clearTimeout(timers[which].id);delete timers[which]}if(!timeout_ms)return 0;var id=setTimeout(()=>{delete timers[which];callUserCallback(()=>__emscripten_timeout(which,_emscripten_get_now()))},timeout_ms);timers[which]={id,timeout_ms};return 0};var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffsetDate.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var getHeapMax=()=>HEAPU8.length;var _emscripten_get_heap_max=()=>getHeapMax();var abortOnCannotGrowMemory=requestedSize=>{abort("OOM")};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;abortOnCannotGrowMemory(requestedSize)};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.language||"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_fdstat_get(fd,pbuf){try{var rightsBase=0;var rightsInheriting=0;var flags=0;{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4}HEAP8[pbuf]=type;HEAP16[pbuf+2>>1]=flags;HEAP64[pbuf+8>>3]=BigInt(rightsBase);HEAP64[pbuf+16>>3]=BigInt(rightsInheriting);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_sync(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);if(stream.stream_ops?.fsync){return stream.stream_ops.fsync(stream)}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var _getaddrinfo=(node,service,hint,out)=>{var addr=0;var port=0;var flags=0;var family=0;var type=0;var proto=0;var ai;function allocaddrinfo(family,type,proto,canon,addr,port){var sa,salen,ai;var errno;salen=family===10?28:16;addr=family===10?inetNtop6(addr):inetNtop4(addr);sa=_malloc(salen);errno=writeSockaddr(sa,family,addr,port);ai=_malloc(32);HEAP32[ai+4>>2]=family;HEAP32[ai+8>>2]=type;HEAP32[ai+12>>2]=proto;HEAPU32[ai+24>>2]=canon;HEAPU32[ai+20>>2]=sa;if(family===10){HEAP32[ai+16>>2]=28}else{HEAP32[ai+16>>2]=16}HEAP32[ai+28>>2]=0;return ai}if(hint){flags=HEAP32[hint>>2];family=HEAP32[hint+4>>2];type=HEAP32[hint+8>>2];proto=HEAP32[hint+12>>2]}if(type&&!proto){proto=type===2?17:6}if(!type&&proto){type=proto===17?2:1}if(proto===0){proto=6}if(type===0){type=1}if(!node&&!service){return-2}if(flags&~(1|2|4|1024|8|16|32)){return-1}if(hint!==0&&HEAP32[hint>>2]&2&&!node){return-1}if(flags&32){return-2}if(type!==0&&type!==1&&type!==2){return-7}if(family!==0&&family!==2&&family!==10){return-6}if(service){service=UTF8ToString(service);port=parseInt(service,10);if(isNaN(port)){if(flags&1024){return-2}return-8}}if(!node){if(family===0){family=2}if((flags&1)===0){if(family===2){addr=_htonl(2130706433)}else{addr=[0,0,0,_htonl(1)]}}ai=allocaddrinfo(family,type,proto,null,addr,port);HEAPU32[out>>2]=ai;return 0}node=UTF8ToString(node);addr=inetPton4(node);if(addr!==null){if(family===0||family===2){family=2}else if(family===10&&flags&8){addr=[0,0,_htonl(65535),addr];family=10}else{return-2}}else{addr=inetPton6(node);if(addr!==null){if(family===0||family===10){family=10}else{return-2}}}if(addr!=null){ai=allocaddrinfo(family,type,proto,node,addr,port);HEAPU32[out>>2]=ai;return 0}if(flags&4){return-2}node=DNS.lookup_name(node);addr=inetPton4(node);if(family===0){family=2}else if(family===10){addr=[0,0,_htonl(65535),addr]}ai=allocaddrinfo(family,type,proto,null,addr,port);HEAPU32[out>>2]=ai;return 0};function _getcontext(...args){abort("missing function: getcontext")}_getcontext.stub=true;function _getdtablesize(...args){abort("missing function: getdtablesize")}_getdtablesize.stub=true;var _getnameinfo=(sa,salen,node,nodelen,serv,servlen,flags)=>{var info=readSockaddr(sa,salen);if(info.errno){return-6}var port=info.port;var addr=info.addr;var overflowed=false;if(node&&nodelen){var lookup;if(flags&1||!(lookup=DNS.lookup_addr(addr))){if(flags&8){return-2}}else{addr=lookup}var numBytesWrittenExclNull=stringToUTF8(addr,node,nodelen);if(numBytesWrittenExclNull+1>=nodelen){overflowed=true}}if(serv&&servlen){port=""+port;var numBytesWrittenExclNull=stringToUTF8(port,serv,servlen);if(numBytesWrittenExclNull+1>=servlen){overflowed=true}}if(overflowed){return-12}return 0};var Protocols={list:[],map:{}};var stringToAscii=(str,buffer)=>{for(var i=0;i{function allocprotoent(name,proto,aliases){var nameBuf=_malloc(name.length+1);stringToAscii(name,nameBuf);var j=0;var length=aliases.length;var aliasListBuf=_malloc((length+1)*4);for(var i=0;i>2]=aliasBuf}HEAPU32[aliasListBuf+j>>2]=0;var pe=_malloc(12);HEAPU32[pe>>2]=nameBuf;HEAPU32[pe+4>>2]=aliasListBuf;HEAP32[pe+8>>2]=proto;return pe}var list=Protocols.list;var map=Protocols.map;if(list.length===0){var entry=allocprotoent("tcp",6,["TCP"]);list.push(entry);map["tcp"]=map["6"]=entry;entry=allocprotoent("udp",17,["UDP"]);list.push(entry);map["udp"]=map["17"]=entry}_setprotoent.index=0};var _getprotobyname=name=>{name=UTF8ToString(name);_setprotoent(true);var result=Protocols.map[name];return result};var _getprotobynumber=number=>{_setprotoent(true);var result=Protocols.map[number];return result};function _initgroups(...args){abort("missing function: initgroups")}_initgroups.stub=true;function _makecontext(...args){abort("missing function: makecontext")}_makecontext.stub=true;function _posix_spawnp(...args){abort("missing function: posix_spawnp")}_posix_spawnp.stub=true;var arraySum=(array,index)=>{var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum};var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];var addDays=(date,days)=>{var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate};var _strptime=(buf,format,tm)=>{var pattern=UTF8ToString(format);var SPECIAL_CHARS="\\!@#$^&*()+=-[]/{}|:<>?,.";for(var i=0,ii=SPECIAL_CHARS.length;iEQUIVALENT_MATCHERS[c]||m).replace(/%(.)/g,(_,c)=>{let pat=DATE_PATTERNS[c];if(pat){capture.push(c);return`(${pat})`}else{return c}}).replace(/\s+/g,"\\s*");var matches=new RegExp("^"+pattern_out,"i").exec(UTF8ToString(buf));function initDate(){function fixup(value,min,max){return typeof value!="number"||isNaN(value)?min:value>=min?value<=max?value:max:min}return{year:fixup(HEAP32[tm+20>>2]+1900,1970,9999),month:fixup(HEAP32[tm+16>>2],0,11),day:fixup(HEAP32[tm+12>>2],1,31),hour:fixup(HEAP32[tm+8>>2],0,23),min:fixup(HEAP32[tm+4>>2],0,59),sec:fixup(HEAP32[tm>>2],0,59),gmtoff:0}}if(matches){var date=initDate();var value;var getMatch=symbol=>{var pos=capture.indexOf(symbol);if(pos>=0){return matches[pos+1]}return};if(value=getMatch("S")){date.sec=Number(value)}if(value=getMatch("M")){date.min=Number(value)}if(value=getMatch("H")){date.hour=Number(value)}else if(value=getMatch("I")){var hour=Number(value);if(value=getMatch("p")){hour+=value.toUpperCase()[0]==="P"?12:0}date.hour=hour}if(value=getMatch("Y")){date.year=Number(value)}else if(value=getMatch("y")){var year=Number(value);if(value=getMatch("C")){year+=Number(value)*100}else{year+=year<69?2e3:1900}date.year=year}if(value=getMatch("m")){date.month=Number(value)-1}else if(value=getMatch("b")){date.month=MONTH_NUMBERS[value.substring(0,3).toUpperCase()]||0}if(value=getMatch("d")){date.day=Number(value)}else if(value=getMatch("j")){var day=Number(value);var leapYear=isLeapYear(date.year);for(var month=0;month<12;++month){var daysUntilMonth=arraySum(leapYear?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,month-1);if(day<=daysUntilMonth+(leapYear?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[month]){date.day=day-daysUntilMonth}}}else if(value=getMatch("a")){var weekDay=value.substring(0,3).toUpperCase();if(value=getMatch("U")){var weekDayNumber=DAY_NUMBERS_SUN_FIRST[weekDay];var weekNumber=Number(value);var janFirst=new Date(date.year,0,1);var endDate;if(janFirst.getDay()===0){endDate=addDays(janFirst,weekDayNumber+7*(weekNumber-1))}else{endDate=addDays(janFirst,7-janFirst.getDay()+weekDayNumber+7*(weekNumber-1))}date.day=endDate.getDate();date.month=endDate.getMonth()}else if(value=getMatch("W")){var weekDayNumber=DAY_NUMBERS_MON_FIRST[weekDay];var weekNumber=Number(value);var janFirst=new Date(date.year,0,1);var endDate;if(janFirst.getDay()===1){endDate=addDays(janFirst,weekDayNumber+7*(weekNumber-1))}else{endDate=addDays(janFirst,7-janFirst.getDay()+1+weekDayNumber+7*(weekNumber-1))}date.day=endDate.getDate();date.month=endDate.getMonth()}}if(value=getMatch("z")){if(value.toLowerCase()==="z"){date.gmtoff=0}else{var match=value.match(/^((?:\-|\+)\d\d):?(\d\d)?/);date.gmtoff=match[1]*3600;if(match[2]){date.gmtoff+=date.gmtoff>0?match[2]*60:-match[2]*60}}}var fullDate=new Date(date.year,date.month,date.day,date.hour,date.min,date.sec,0);HEAP32[tm>>2]=fullDate.getSeconds();HEAP32[tm+4>>2]=fullDate.getMinutes();HEAP32[tm+8>>2]=fullDate.getHours();HEAP32[tm+12>>2]=fullDate.getDate();HEAP32[tm+16>>2]=fullDate.getMonth();HEAP32[tm+20>>2]=fullDate.getFullYear()-1900;HEAP32[tm+24>>2]=fullDate.getDay();HEAP32[tm+28>>2]=arraySum(isLeapYear(fullDate.getFullYear())?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,fullDate.getMonth()-1)+fullDate.getDate()-1;HEAP32[tm+32>>2]=0;HEAP32[tm+36>>2]=date.gmtoff;return buf+lengthBytesUTF8(matches[0])}return 0};function _swapcontext(...args){abort("missing function: swapcontext")}_swapcontext.stub=true;var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;iFS.createPath(...args);var FS_unlink=(...args)=>FS.unlink(...args);var FS_createLazyFile=(...args)=>FS.createLazyFile(...args);var FS_createDevice=(...args)=>FS.createDevice(...args);FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["ccall"]=ccall;Module["UTF8ToString"]=UTF8ToString;Module["lengthBytesUTF8"]=lengthBytesUTF8;Module["FS_preloadFile"]=FS_preloadFile;Module["FS_unlink"]=FS_unlink;Module["FS_createPath"]=FS_createPath;Module["FS_createDevice"]=FS_createDevice;Module["FS"]=FS;Module["FS_createDataFile"]=FS_createDataFile;Module["FS_createLazyFile"]=FS_createLazyFile;Module["LZ4"]=LZ4;var _php_embed_init,_php_embed_shutdown,_phpw_flush,_phpw_exec,_setenv,_zend_eval_string,_phpw_run,_phpw,_chdir,_malloc,_htonl,_ntohs,_htons,_emscripten_builtin_memalign,__emscripten_timeout,_setThrew,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current,memory,__indirect_function_table,wasmMemory,wasmTable;function assignWasmExports(wasmExports){_php_embed_init=Module["_php_embed_init"]=wasmExports["php_embed_init"];_php_embed_shutdown=Module["_php_embed_shutdown"]=wasmExports["php_embed_shutdown"];_phpw_flush=Module["_phpw_flush"]=wasmExports["phpw_flush"];_phpw_exec=Module["_phpw_exec"]=wasmExports["phpw_exec"];_setenv=Module["_setenv"]=wasmExports["setenv"];_zend_eval_string=Module["_zend_eval_string"]=wasmExports["zend_eval_string"];_phpw_run=Module["_phpw_run"]=wasmExports["phpw_run"];_phpw=Module["_phpw"]=wasmExports["phpw"];_chdir=Module["_chdir"]=wasmExports["chdir"];_malloc=wasmExports["malloc"];_htonl=wasmExports["htonl"];_ntohs=wasmExports["ntohs"];_htons=wasmExports["htons"];_emscripten_builtin_memalign=wasmExports["emscripten_builtin_memalign"];__emscripten_timeout=wasmExports["_emscripten_timeout"];_setThrew=wasmExports["setThrew"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmTable=wasmExports["__indirect_function_table"]}var wasmImports={__call_sighandler:___call_sighandler,__syscall__newselect:___syscall__newselect,__syscall_accept4:___syscall_accept4,__syscall_bind:___syscall_bind,__syscall_chdir:___syscall_chdir,__syscall_chmod:___syscall_chmod,__syscall_connect:___syscall_connect,__syscall_dup:___syscall_dup,__syscall_faccessat:___syscall_faccessat,__syscall_fchmod:___syscall_fchmod,__syscall_fchownat:___syscall_fchownat,__syscall_fcntl64:___syscall_fcntl64,__syscall_fdatasync:___syscall_fdatasync,__syscall_fstat64:___syscall_fstat64,__syscall_ftruncate64:___syscall_ftruncate64,__syscall_getcwd:___syscall_getcwd,__syscall_getdents64:___syscall_getdents64,__syscall_getpeername:___syscall_getpeername,__syscall_getsockname:___syscall_getsockname,__syscall_getsockopt:___syscall_getsockopt,__syscall_ioctl:___syscall_ioctl,__syscall_listen:___syscall_listen,__syscall_lstat64:___syscall_lstat64,__syscall_mkdirat:___syscall_mkdirat,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_pipe:___syscall_pipe,__syscall_poll:___syscall_poll,__syscall_readlinkat:___syscall_readlinkat,__syscall_recvfrom:___syscall_recvfrom,__syscall_renameat:___syscall_renameat,__syscall_rmdir:___syscall_rmdir,__syscall_sendto:___syscall_sendto,__syscall_socket:___syscall_socket,__syscall_stat64:___syscall_stat64,__syscall_statfs64:___syscall_statfs64,__syscall_symlinkat:___syscall_symlinkat,__syscall_unlinkat:___syscall_unlinkat,__syscall_utimensat:___syscall_utimensat,_abort_js:__abort_js,_emscripten_fs_load_embedded_files:__emscripten_fs_load_embedded_files,_emscripten_lookup_name:__emscripten_lookup_name,_emscripten_runtime_keepalive_clear:__emscripten_runtime_keepalive_clear,_emscripten_throw_longjmp:__emscripten_throw_longjmp,_gmtime_js:__gmtime_js,_localtime_js:__localtime_js,_mktime_js:__mktime_js,_mmap_js:__mmap_js,_munmap_js:__munmap_js,_setitimer_js:__setitimer_js,_tzset_js:__tzset_js,clock_time_get:_clock_time_get,emscripten_date_now:_emscripten_date_now,emscripten_get_heap_max:_emscripten_get_heap_max,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fd_close:_fd_close,fd_fdstat_get:_fd_fdstat_get,fd_read:_fd_read,fd_seek:_fd_seek,fd_sync:_fd_sync,fd_write:_fd_write,getaddrinfo:_getaddrinfo,getcontext:_getcontext,getdtablesize:_getdtablesize,getnameinfo:_getnameinfo,getprotobyname:_getprotobyname,getprotobynumber:_getprotobynumber,initgroups:_initgroups,invoke_i,invoke_ii,invoke_iii,invoke_iiidii,invoke_iiii,invoke_iiiii,invoke_iiiiii,invoke_iiiiiii,invoke_iiiiiiiiii,invoke_jii,invoke_v,invoke_vi,invoke_vii,invoke_viii,invoke_viiii,invoke_viiiii,invoke_viiiiii,makecontext:_makecontext,posix_spawnp:_posix_spawnp,proc_exit:_proc_exit,strptime:_strptime,swapcontext:_swapcontext};function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_v(index){var sp=stackSave();try{getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_i(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiidii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_jii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0);return 0n}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})} +;return moduleRtn}export default createPhpModule; diff --git a/js/php-web.wasm b/js/php-web.wasm new file mode 100755 index 0000000000..7e755ca890 Binary files /dev/null and b/js/php-web.wasm differ diff --git a/js/search-index.php b/js/search-index.php index 1381861309..cfee19d506 100644 --- a/js/search-index.php +++ b/js/search-index.php @@ -1,40 +1,19 @@ */ - $index[$item[1]] = array($item[0], "", $item[2]); - } -} - -$s = file_get_contents($descfile); -$js = json_decode($s, true); - -foreach($js as $k => $item) { - if ($item && isset($index[$k])) { - $index[$k][1] = $item; - } -} - - -echo json_encode($index); +readfile($combinedIndex); diff --git a/js/search.js b/js/search.js index cd0f2c8218..5fdd21d8df 100644 --- a/js/search.js +++ b/js/search.js @@ -1,405 +1,445 @@ /** - * A jQuery plugin to add typeahead search functionality to the navbar search - * box. This requires Hogan for templating and typeahead.js for the actual - * typeahead functionality. + * Initialize the PHP search functionality with a given language. + * Loads the search index, sets up FuzzySearch, and returns a search function. + * + * @param {string} language The language for which the search index should be + * loaded. + * @returns {Promise<(query: string) => Array>} A function that takes a query + * and performs a search using the loaded index. */ -(function ($) { +const initPHPSearch = async (language) => { + const MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000; + const CACHE_DAYS = 14; + /** - * A backend, which encapsulates a set of completions, such as a list of - * functions or classes. + * Looks up the search index cached in localStorage. * - * @constructor - * @param {String} label The label to show the user. + * @returns {Array|null} */ - var Backend = function (label) { - this.label = label; - this.elements = {}; + const lookupIndexCache = () => { + const key = `search2-${language}`; + const cache = window.localStorage.getItem(key); + + if ((!cache) || (language === 'local')) { + return null; + } + + const { data, time: cachedDate } = JSON.parse(cache); + + const expireDate = cachedDate + CACHE_DAYS * MILLISECONDS_PER_DAY; + + // Reject old format indexes + if ( + (typeof data[0] !== 'object') + || Array.isArray(data[0]) + ) { + return null; + } + if (Date.now() > expireDate) { + return null; + } + + return data; }; /** - * Adds an item to the backend. + * Fetch the search index. * - * @param {String} id The item ID. It would help if this was unique. - * @param {String} name The item name to use as a label. - * @param {Array} tokens An array of tokens that should match this item. + * @returns {Promise} The search index. */ - Backend.prototype.addItem = function (id, name, description, tokens) { - this.elements[id] = { - tokens: tokens, - id: id, - name: name, - description: description - }; + const fetchIndex = async () => { + const key = `search2-${language}`; + let items; + if (language === 'local') { + items = localSearchIndexes; + } else { + const response = await fetch(`/js/search-index.php?lang=${language}`); + items = await response.json(); + + try { + // Note: These indexes are also used by globalsearch in common.js + localStorage.setItem( + key, + JSON.stringify({ + data: items, + time: Date.now(), + }), + ); + } catch (e) { + // Local storage might be full, or other error. + // Just continue without caching. + console.error("Failed to cache search index", e); + } + } + + return items; }; /** - * Returns the backend contents formatted as an array that typeahead.js can - * digest as a local data source. + * Loads the search index, using cache if available. * - * @return {Array} + * @returns {Promise} */ - Backend.prototype.toTypeaheadArray = function () { - var array = []; - - $.each(this.elements, function (_, element) { - array.push(element); - }); + const loadIndex = async () => { + const cached = lookupIndexCache(); + return cached || fetchIndex(); + }; - /* This is a rather convoluted sorting function, but the idea is to - * make the results as useful as possible, since only a few are shown - * at any one time. In general, we favour shorter names over longer - * ones, and favour regular functions over methods when sorting - * functions. Ideally, this would actually sort based on function - * popularity, but this is a simpler algorithmic approach for now that - * seems to result in generally useful results. */ - array.sort(function (a, b) { - var a = a.name; - var b = b.name; - - var aIsMethod = (a.indexOf("::") != -1); - var bIsMethod = (b.indexOf("::") != -1); - - // Methods are always after regular functions. - if (aIsMethod && !bIsMethod) { - return 1; - } else if (bIsMethod && !aIsMethod) { - return -1; + /** + * Load the language index, falling back to English on error. + * + * @returns {Promise} + */ + const loadIndexWithFallback = async () => { + try { + return await loadIndex(); + } catch (error) { + if ((language !== "en") && (language !== "local")) { + language = "en"; + return loadIndexWithFallback(); } + throw error; + } + }; - /* If one function name is the exact prefix of the other, we want - * to sort the shorter version first (mostly for things like date() - * versus date_format()). */ - if (a.length > b.length) { - if (a.indexOf(b) == 0) { - return 1; - } - } else { - if (b.indexOf(a) == 0) { - return -1; + /** + * Perform a search using the given query and a FuzzySearch instance. + * + * @param {string} query The search query. + * @param {object} fuzzyhound The FuzzySearch instance to use for searching. + * @returns {Array} An array of search results. + */ + const search = (query, fuzzyhound) => { + return fuzzyhound + .search(query) + .map((result) => { + // Boost Language Reference matches. + if (result.item.id.startsWith("language")) { + result.score += 10; } - } + return result; + }) + .sort((a, b) => b.score - a.score); + }; - // Otherwise, sort normally. - if (a > b) { - return 1; - } else if (a < b) { - return -1; + const searchIndex = await loadIndexWithFallback(); + if (!searchIndex) { + throw new Error("Failed to load search index"); + } + + fuzzyhound = new FuzzySearch({ + source: searchIndex, + token_sep: " \t.,-_", + score_test_fused: true, + keys: ["name", "methodName", "description"], + thresh_include: 5.0, + thresh_relative_to_best: 0.7, + bonus_match_start: 0.7, + bonus_token_order: 1.0, + bonus_position_decay: 0.3, + token_query_min_length: 1, + token_field_min_length: 2, + output_map: "root", + }); + + return (query) => search(query, fuzzyhound); +}; + +/** + * Initialize the search modal, handling focus trap and modal transitions. + */ +const initSearchModal = () => { + const backdropElement = document.getElementById("search-modal__backdrop"); + const modalElement = document.getElementById("search-modal"); + const resultsElement = document.getElementById("search-modal__results"); + const inputElement = document.getElementById("search-modal__input"); + + const focusTrapHandler = (event) => { + if (event.key !== "Tab") { + return; + } + + const selectable = modalElement.querySelectorAll("input, button, a"); + const lastElement = selectable[selectable.length - 1]; + + if (event.shiftKey) { + if (document.activeElement === inputElement) { + event.preventDefault(); + lastElement.focus(); } + } else if (document.activeElement === lastElement) { + event.preventDefault(); + inputElement.focus(); + } + }; - return 0; + const onModalTransitionEnd = (handler) => { + backdropElement.addEventListener("transitionend", handler, { + once: true, }); - return array; }; + const documentWidth = document.documentElement.clientWidth; + const scrollbarWidth = Math.abs(window.innerWidth - documentWidth); + + const show = function () { + if ( + backdropElement.classList.contains("show") || + backdropElement.classList.contains("showing") + ) { + return; + } + + document.body.style.overflow = "hidden"; + document.documentElement.style.overflow = "hidden"; + resultsElement.innerHTML = ""; + document.body.style.paddingRight = `${scrollbarWidth}px`; + + backdropElement.setAttribute("aria-modal", "true"); + backdropElement.setAttribute("role", "dialog"); + backdropElement.classList.add("showing"); + inputElement.focus(); + inputElement.value = ""; + document.addEventListener("keydown", focusTrapHandler); + + onModalTransitionEnd(() => { + backdropElement.classList.remove("showing"); + backdropElement.classList.add("show"); + }); + }; + + const hide = function () { + if (!backdropElement.classList.contains("show")) { + return; + } + + backdropElement.classList.add("hiding"); + backdropElement.classList.remove("show"); + backdropElement.removeAttribute("aria-modal"); + backdropElement.removeAttribute("role"); + onModalTransitionEnd(() => { + document.body.style.overflow = "auto"; + document.documentElement.style.overflow = "auto"; + document.body.style.paddingRight = "0px"; + backdropElement.classList.remove("hiding"); + document.removeEventListener("keydown", focusTrapHandler); + }); + }; + + const searchLink = document.getElementById("navbar__search-link"); + const searchButtonMobile = document.getElementById( + "navbar__search-button-mobile", + ); + const searchButton = document.getElementById("navbar__search-button"); + let buttons = [searchButton]; + + // Enhance mobile search + if (searchLink !== null) { + searchLink.setAttribute("hidden", "true"); + searchButtonMobile.removeAttribute("hidden"); + buttons.push(searchButtonMobile); + } + + // Enhance desktop search + const searchForm = document + .querySelector(".navbar__search-form"); + if (searchForm !== null) { + searchForm.setAttribute("hidden", "true"); + } + searchButton.removeAttribute("hidden"); + + // Open when the search button is clicked + buttons.forEach((button) => + button.addEventListener("click", show), + ); + + // Open when / is pressed + document.addEventListener("keydown", (event) => { + const target = event.target; + + if ( + target.contentEditable === "true" || + target.tagName === "INPUT" || + target.tagName === "TEXTAREA" + ) { + return; + } + + if (event.key === "/") { + show(); + event.preventDefault(); + } + }); + + // Close when the close button is clicked + document + .querySelector(".search-modal__close") + .addEventListener("click", hide); + + // Close when the escape key is pressed + document.addEventListener("keydown", (event) => { + if (event.key === "Escape") { + hide(); + } + }); + + // Close when the user clicks outside of it + backdropElement.addEventListener("click", (event) => { + if (event.target === backdropElement) { + hide(); + } + }); +}; + +/** + * Initialize the search modal UI, setting up search result rendering and + * input handling. + * + * @param {object} options An object containing the search callback, language, + * and result limit. + */ +const initSearchUI = ({ searchCallback, language, limit = 30 }) => { + const DEBOUNCE_DELAY = 200; + // https://pictogrammers.com/library/mdi/icon/code-braces/ + const BRACES_ICON = + ''; + // https://pictogrammers.com/library/mdi/icon/file-document-outline/ + const DOCUMENT_ICON = + ''; + + const resultsElement = document.getElementById("search-modal__results"); + const inputElement = document.getElementById("search-modal__input"); + let selectedIndex = -1; + /** - * The actual search plugin. Should be applied to the input that needs - * typeahead functionality. - * - * @param {Object} options The options object. This should include - * "language": the language to try to load, - * "limit": the maximum number of results + * Update the selected result in the results container. */ - $.fn.search = function (options) { - var element = this; - - options.language = options.language || "en"; - options.limit = options.limit || 30; - - /** - * Utility function to check if the user's browser supports local - * storage and native JSON, in which case we'll use it to cache the - * search JSON. - * - * @return {Boolean} - */ - var canCache = function () { - try { - return ('localStorage' in window && window['localStorage'] !== null && "JSON" in window && window["JSON"] !== null); - } catch (e) { - return false; + const updateSelectedResult = () => { + const results = resultsElement.querySelectorAll( + ".search-modal__result", + ); + results.forEach((result, index) => { + const isSelected = index === selectedIndex; + result.setAttribute("aria-selected", isSelected ? "true" : "false"); + if (!isSelected) { + result.classList.remove("selected"); + return; } - }; - - /** - * Processes a data structure in the format of our search-index.php - * files and returns an object containing multiple Backend objects. - * - * @param {Object} index - * @return {Object} - */ - var processIndex = function (index) { - // The search types we want to support. - var backends = { - "function": new Backend("Functions"), - "variable": new Backend("Variables"), - "class": new Backend("Classes"), - "exception": new Backend("Exceptions"), - "extension": new Backend("Extensions"), - "general": new Backend("Other Matches") - }; - - $.each(index, function (id, item) { - /* If the item has a name, then we should figure out what type - * of data this is, and hence which backend this should go - * into. */ - if (item[0]) { - var tokens = [item[0]]; - var type = null; - - if (item[0].indexOf("_") != -1) { - tokens.push(item[0].replace("_", "")); - } - if (item[0].indexOf("::") != -1) { - /* We'll add tokens to make the autocompletion more - * useful: users can search for method names and can - * specify that they only want method names by - * prefixing their search with ::. */ - tokens.push(item[0].split("::")[1]); - tokens.push("::" + item[0].split("::")[1]); - } - - switch(item[2]) { - case "phpdoc:varentry": - type = "variable"; - break; - - case "refentry": - type = "function"; - break; - - case "phpdoc:exceptionref": - type = "exception"; - break; - - case "phpdoc:classref": - type = "class"; - break; - - case "set": - case "book": - case "reference": - type = "extension"; - break; - - case "section": - case "chapter": - case "appendix": - case "article": - default: - type = "general"; - } - - if (type) { - backends[type].addItem(id, item[0], item[1], tokens); - } - } + result.classList.add("selected"); + result.scrollIntoView({ + behavior: "smooth", + block: "nearest", }); + }); + }; - return backends; + /** + * Render the search results. + * + * @param {Array} results The search results. + */ + const renderResults = (results) => { + const escape = (html) => { + const div = document.createElement("div"); + const node = document.createTextNode(html); + div.appendChild(node); + return div.innerHTML; }; - /** - * Attempt to asynchronously load the search JSON for a given language. - * - * @param {String} language The language to search for. - * @param {Function} success Success handler, which will be given an - * object containing multiple Backend - * objects on success. - * @param {Function} failure An optional failure handler. - */ - var loadLanguage = function (language, success, failure) { - var key = "search-" + language; - - // Check if the cache has a recent enough search index. - if (canCache()) { - var cache = window.localStorage.getItem(key); - - if (cache) { - var since = new Date(); - - // Parse the stored JSON. - cache = JSON.parse(cache); - - // We'll use anything that's less than two weeks old. - since.setDate(since.getDate() - 14); - if (cache.time > since.getTime()) { - success($.map(cache.data, function (dataset, name) { - // Rehydrate the Backend objects. - var backend = new Backend(dataset.label); - backend.elements = dataset.elements; - - return backend; - })); - return; - } - } + let resultsHtml = ""; + results.forEach(({ item }, i) => { + const icon = ["General", "Extension"].includes(item.type) + ? DOCUMENT_ICON + : BRACES_ICON; + let link = `/manual/${encodeURIComponent(language)}/${encodeURIComponent(item.id)}.php`; + if (language === 'local') { + link = encodeURIComponent(item.id) + '.html'; } - // OK, nothing cached. - $.ajax({ - dataType: "json", - error: failure, - success: function (data) { - // Transform the data into something useful. - var backends = processIndex(data); - // Cache the data if we can. - if (canCache()) { - /* This may fail in IE 8 due to exceeding the local - * storage limit. If so, squash the exception: this - * isn't a required part of the system. */ - try { - window.localStorage.setItem(key, - JSON.stringify({ - data: backends, - time: new Date().getTime() - }) - ); - } catch (e) { - // Derp. - } - } - success(backends); - }, - url: "/https/github.com/js/search-index.php?lang=" + language - }); - }; - - /** - * Actually enables the typeahead on the DOM element. - * - * @param {Object} backends An array-like object containing backends. - */ - var enableSearchTypeahead = function (backends) { - var template = "

    {{ name }}

    " + - "{{ description }}"; - - // Build the typeahead options array. - var typeaheadOptions = $.map(backends, function (backend, name) { - var local = backend instanceof Backend ? backend.toTypeaheadArray() : backend; - - return { - name: name, - local: backend.toTypeaheadArray(), - header: '

    ' + backend.label + '

    ', - limit: options.limit, - valueKey: "name", - engine: Hogan, - template: template - }; - }); - - /* Construct a global that we can use to track the total number of - * results from each backend. */ - var results = {}; - - // Set up the typeahead and the various listeners we need. - var searchTypeahead = $(element).typeahead(typeaheadOptions); - - // Delegate click events to result-heading collapsible icons, and trigger the accordion action - $('.tt-dropdown-menu').delegate('.result-heading .collapsible', 'click', function() { - var el = $(this), suggestions = el.parent().parent().find('.tt-suggestions'); - suggestions.stop(); - if(!el.hasClass('closed')) { - suggestions.slideUp(); - el.addClass('closed'); - } else { - suggestions.slideDown(); - el.removeClass('closed'); - } - - }); - - // If the user has selected an autocomplete item and hits enter, we should take them straight to the page. - searchTypeahead.on("typeahead:selected", function (_, item) { - window.location = "/manual/" + options.language + "/" + item.id; - }); - - searchTypeahead.on("keyup", (function () { - /* typeahead.js doesn't give us a reliable event for the - * dropdown entries having been updated, so we'll hook into the - * input element's keyup instead. The aim here is to put in - * fake entries so that the user has a discoverable way to - * perform different searches based on what he or she has - * entered. */ - - // Precompile the templates we need for the fake entries. - var moreTemplate = Hogan.compile("» {{ num }} more result{{ plural }}"); - var searchTemplate = Hogan.compile("» Search php.net for {{ pattern }}"); - - /* Now we'll return the actual function that should be invoked - * when the user has typed something into the search box after - * typeahead.js has done its thing. */ - return function () { - // Add result totals to each section heading. - $.each(results, function (name, numResults) { - var container = $(".tt-dataset-" + name, $(element).parent()), - resultHeading = container.find('.result-heading'), - resultCount = container.find('.result-count'); - - // Does a result count already exist in this resultHeading? - if(resultCount.length == 0) { - var results = $("").text(numResults); - resultHeading.append(results); - } else { - resultCount.text(numResults); - } - - - }); - - // Grab what the user entered. - var pattern = $(element).val(); - - /* Add a global search option. Note that, as above, the - * link is only displayed if more than 2 characters have - * been entered: this is due to our search functionality - * requiring at least 3 characters in the pattern. */ - $(".tt-dropdown-menu .search", $(element).parent()).remove(); - if (pattern.length > 2) { - var dropdown = $(".tt-dropdown-menu", $(element).parent()); - - dropdown.append(searchTemplate.render({ - pattern: pattern, - url: "/https/github.com/search.php?pattern=" + escape(pattern) - })); - - /* If the dropdown is hidden (because there are no - * results), show it anyway. */ - dropdown.show(); - } - }; - })()); - - /* Override the dataset._getLocalSuggestions() method to grab the - * number of results each dataset returns when a search occurs. */ - $.each($(element).data().ttView.datasets, function (_, dataset) { - var originalGetLocal = dataset._getLocalSuggestions; - - dataset._getLocalSuggestions = function () { - var suggestions = originalGetLocal.apply(dataset, arguments); - - results[dataset.name] = suggestions.length; - return suggestions; - }; - }); + const description = + item.type !== "General" + ? `${item.type} • ${item.description}` + : item.description; + + resultsHtml += ` + +
    ${icon}
    +
    +
    + ${escape(item.name)} +
    +
    + ${escape(description)} +
    +
    +
    + `; + }); - /* typeahead.js adds another input element as part of its DOM - * manipulation, which breaks the auto-submit functionality we - * previously relied upon for enter keypresses in the input box to - * work. Adding a hidden submit button re-enables it. */ - $("").insertAfter(element); + resultsElement.innerHTML = resultsHtml; + }; - // Fix for a styling issue on the created input element. - $(".tt-hint", $(element).parent()).addClass("search-query"); + const debounce = (func, delay) => { + let timeoutId; + return (...args) => { + clearTimeout(timeoutId); + timeoutId = setTimeout(() => func(...args), delay); }; + }; - // Look for the user's language, then fall back to English. - loadLanguage(options.language, enableSearchTypeahead, function () { - loadLanguage("en", enableSearchTypeahead); - }); + const handleKeyDown = (event) => { + const resultsElements = resultsElement.querySelectorAll( + ".search-modal__result", + ); + + switch (event.key) { + case "ArrowDown": + event.preventDefault(); + selectedIndex = Math.min( + selectedIndex + 1, + resultsElements.length - 1, + ); + updateSelectedResult(); + break; + case "ArrowUp": + event.preventDefault(); + selectedIndex = Math.max(selectedIndex - 1, -1); + updateSelectedResult(); + break; + case "Enter": + if (selectedIndex !== -1) { + event.preventDefault(); + resultsElements[selectedIndex].click(); + } else if (language !== 'local') { + window.location.href = `/search.php?lang=${language}&q=${encodeURIComponent(inputElement.value)}`; + } + break; + case "Escape": + selectedIndex = -1; + break; + } + }; - return this; + const handleInput = (event) => { + const results = searchCallback(event.target.value); + renderResults(results.slice(0, limit), language, resultsElement); + selectedIndex = -1; }; -})(jQuery); + const debouncedHandleInput = debounce(handleInput, DEBOUNCE_DELAY); -// vim: set ts=4 sw=4 et: + inputElement.addEventListener("input", debouncedHandleInput); + inputElement.addEventListener("keydown", handleKeyDown); +}; diff --git a/js/usernotes.js b/js/usernotes.js index de12547c65..a305d058b7 100644 --- a/js/usernotes.js +++ b/js/usernotes.js @@ -26,13 +26,13 @@ $(document).ready(function() { if (data.msg != null) { responsedata = data.msg; } - $("#V"+id).html("
    "); + $("#V"+id).html("
    "); } }); request.fail(function(jqXHR, textStatus) { $("#Vu"+id).show(); $("#Vd"+id).show(); - $("#V"+id).html("
    "); + $("#V"+id).html("
    "); }); request.always(function(data) { $("#V"+id).fadeIn(500, "linear"); diff --git a/license/ZendGrant/PHPAssociation.pdf b/license/ZendGrant/PHPAssociation.pdf new file mode 100755 index 0000000000..4cd86ff673 Binary files /dev/null and b/license/ZendGrant/PHPAssociation.pdf differ diff --git a/license/ZendGrant/ZendGrant.pdf b/license/ZendGrant/ZendGrant.pdf new file mode 100644 index 0000000000..d50a350336 Binary files /dev/null and b/license/ZendGrant/ZendGrant.pdf differ diff --git a/license/ZendGrant/index.html b/license/ZendGrant/index.html index 27dab3e803..00022718fe 100644 --- a/license/ZendGrant/index.html +++ b/license/ZendGrant/index.html @@ -1,19 +1,10 @@ - - -Zend Grant - - -

    Zend Grant

    -Page 1 -Page 2 - -

    Zend Open Source License

    -Page 1 -Page 2 - -

    PHP Open Source License

    -Page 1 -Page 2 - - + + + + Zend Grant + + +

    This page has moved

    +

    If you are not redirected within 5 seconds, please click here.

    + diff --git a/license/ZendGrant/index.php b/license/ZendGrant/index.php new file mode 100644 index 0000000000..ed38e8468e --- /dev/null +++ b/license/ZendGrant/index.php @@ -0,0 +1,158 @@ + +

    Exhibit 1

    + + + +

    Exhibit 2

    + + + +

    Exhibit 3

    + + + +

    Resources

    + + + +EOF; + +site_header("Zend Grant", ["current" => "help"]); +?> + +

    Zend Grant

    + +

    + Zend Technologies, Ltd.
    + Jabotinski 35, Ramat Gan
    + Israel +

    + +

    May 22, 2000

    + +

    + PHP Association
    + Nebraska +

    + +

    Re: Zend Engine

    + +

    + As you know, Zend Technologies, Ltd. ("Zend") remains deeply committed to the advancement and + proliferation of PHP as an open source web scripting language. Zend currently makes its Zend Engine + software available, as a standalone product, under the open-source agreement that may be found at + http://www.zend.com/license/ZendLicense.txt (the "Zend Open Source License", a copy of which is + attached as Exhibit 1). Since Zend Engine is a crucial component of PHP, Zend hereby makes the following + commitments and assurances to The PHP Association (the "Association"): +

    + +
      +
    • +

      + Zend will continue to make Zend Engine available as an open source product under the Zend + Open Source License. If Zend changes the terms of the Zend Open Source License, the new + license will be consistent with the Open Source Definition of the Open Source Initiative (see + http://www.opensource.org/osd.html, a copy of which is attached as Exhibit 2). +

      +
    • +
    • +

      + Without limitation of the license to Zend Engine granted to all users under the Zend Open + Source License, the PHP Association is hereby authorized to market, distribute and sublicense + Zend Engine, in source and object code forms, as an integrated component of PHP, to end users + who agree to be bound by the PHP open-source license, version 2.02, in the form attached + hereto as Exhibit 3 (the "PHP Open Source License"). However, if Zend Engine is either + modified or separated from the rest of PHP, the use of the modified or separated Zend Engine + shall not be governed by the PHP Open Source License, but instead shall be governed by the + Zend Open Source License. +

      +
    • +
    + +

    The following additional terms shall apply:

    + +

    + 1. Ownership. As between Zend and the Association, Zend shall retain all rights, title and interest in + and to the Zend Engine, including but not limited to, all patents, copyrights, trade secret rights, and any + other intellectual property rights inherent therein or appurtenant thereto. The Association will not delete or + alter any intellectual property rights or license notices appearing on the Zend Engine and will reproduce and + display such notices on each copy it makes of the Zend Engine. The Association's rights in and to the Zend + Engine are limited to those expressly granted in this Letter. All other rights are reserved by Zend. +

    + +

    + 2. Trademarks. The Association may display Zend's trademarks and trade names in connection with + the marketing and distribution of PHP (as integrated with the Zend Engine), subject to Zend's then-current + trademark policies. Without limitation of the foregoing, the advertisement or other marketing material used + by the Association shall not misrepresent any of the technical features or capabilities of the Zend Engine. +

    + +

    + 3. DISCLAIMER OF WARRANTY. THE ASSOCIATION ACKNOWLEDGES THAT THE ZEND ENGINE IS BEING LICENSED HEREUNDER ON + AN "AS-IS" BASIS WITH NO WARRANTY WHATSOEVER. THE ASSOCIATION ACKNOWLEDGES THAT ITS USE AND DISTRIBUTION OF THE ZEND + ENGINE AND THE INTEGRATED PRODUCT IS AT ITS OWN RISK. ZEND AND ITS LICENSORS MAKE, AND THE ASSOCIATION RECEIVES, NO + WARRANTIES, EXPRESS, IMPLIED, OR OTHERWISE. ZEND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT: ZEND DOES NOT WARRANT THAT THE OPERATION OF THE ZEND ENGINE + OR THE INTEGRATED PRODUCT SHALL BE OPERABLE, UNINTERRUPTED OR ERROR FREE OR THAT IT WILL FUNCTION OR OPERATE IN + CONJUNCTION WITH ANY OTHER PRODUCT, INCLUDING, WITHOUT LIMITATION, PHP OR ANY VERSION THEREOF. +

    + +

    + 4. LIMITATIONS OF LIABILITY. IN NO EVENT WILL ZEND BE LIABLE TO THE ASSOCIATION, END USERS OF PHP OR ANY + OTHER PARTY FOR ANY SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO THIS LETTER, WHETHER + BASED ON BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE), PRODUCT LIABILITY, OR OTHERWISE, AND WHETHER OR NOT ZEND + HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. WITHOUT LIMITATION OF THE FOREGOING, UNDER NO CIRCUMSTANCES + SHALL ZEND'S TOTAL AGGREGATE LIABILITY UNDER THIS LETTER TO ALL PARTIES, IN THE AGGREGATE, EXCEED ONE HUNDRED + DOLLARS ($100). The parties have agreed that the limitations specified in this Section will survive and apply even + if any limited remedy specified in this Letter is found to have failed of its essential purpose. +

    + +

    + 5. GENERAL. The Association may not assign this Letter, by operation of law or otherwise in whole + or in part, without Zend's written consent. Any attempt to assign this Letter without such consent will be + null and void. This Letter will bind and inure to the benefit of each party's permitted successors and assigns. + This Letter will be governed by and construed in accordance with the laws of the State of New York. Any + suit hereunder will be brought solely in the federal or state courts in New York State, New York County and + both parties hereby submit to the personal jurisdiction thereof. If any provision of this Letter is found + invalid or unenforceable, that provision will be enforced to the maximum extent permissible, and the other + provisions of this Letter will remain in force. All notices under this Letter will be deemed given when + delivered personally, sent by confirmed facsimile transmission, or sent by certified or registered U.S. mail or + nationally-recognized express courier, return receipt requested, to the address shown above or as may + otherwise be specified by either party to the other in accordance with this section. The parties to this Letter + are independent contractors. There is no relationship of partnership, joint venture, employment, franchise, + or agency between the parties. Neither party will have the power to bind the other or incur obligations on + the other's behalf without the other's prior written consent. No failure of either party to exercise or enforce + any of its rights under this Letter will act as a waiver of such rights. This Letter and its attachment are the + complete and exclusive agreement between the parties with respect to the subject matter hereof, superseding + and replacing any and all prior agreements, communications, and understandings (both written and oral) + regarding such subject matter. This Letter may only be modified, or any rights under it waived, by a written + document executed by both parties. +

    + +

    + If the foregoing is acceptable to you, please sign this and the duplicate original of this Letter where + indicated below and return it to me at the above address. +

    + +

    + Sincerely,
    + ZEND TECHNOLOGIES, LTD. +

    + + $SIDEBAR_DATA]); diff --git a/license/contrib-guidelines-code.php b/license/contrib-guidelines-code.php index 10ab5db7ea..1374f7d087 100644 --- a/license/contrib-guidelines-code.php +++ b/license/contrib-guidelines-code.php @@ -1,7 +1,7 @@ "help")); +site_header("License Information", ["current" => "help"]); ?>

    PHP Contributor Guidelines for Code Developers

    @@ -38,7 +38,6 @@ "help")); +site_header("License Information", ["current" => "help"]); ?>

    PHP Distribution Guidelines

    diff --git a/license/index.php b/license/index.php index 4ba9a47907..a9bbb5df31 100644 --- a/license/index.php +++ b/license/index.php @@ -17,7 +17,7 @@ EOF; -site_header("License Information", array("current" => "help")); +site_header("License Information", ["current" => "help"]); ?>

    PHP Licensing

    @@ -64,7 +64,7 @@ copyright (c) the PHP Documentation Group
  • Summary in human-readable form
  • -
  • Practical Information: Documentation HOWTO
  • +
  • Practical Information: Contribution Guide
  • @@ -150,7 +150,6 @@ - $SIDEBAR_DATA)); + $SIDEBAR_DATA]); diff --git a/lookup-form.php b/lookup-form.php new file mode 100644 index 0000000000..affb77980c --- /dev/null +++ b/lookup-form.php @@ -0,0 +1,34 @@ + + +

    PHP.net Manual Lookup

    + +
    + +
    + + +
    +
    + + Find the PEAR - lists, the PECL - lists, and the PHP-GTK + lists and the PECL lists on their own pages. -

    +

    Local Mailing Lists and Newsgroups

    @@ -39,7 +38,7 @@ '; -site_header("Mailing Lists", array("current" => "help")); +site_header("Mailing Lists", ["current" => "help"]); // Some mailing list is selected for [un]subscription if (isset($_POST['action'])) { @@ -55,7 +54,7 @@ } // Check if any mailing list was selected - else if (empty($_POST['maillist'])) { + elseif (empty($_POST['maillist'])) { $error = "You need to select at least one mailing list to subscribe to." . "
    Please go back and try again."; } @@ -73,13 +72,13 @@ // Get in contact with main server to [un]subscribe the user $result = posttohost( "https://main.php.net/entry/subscribe.php", - array( - "request" => $request, - "email" => $_POST['email'], + [ + "request" => $request, + "email" => $_POST['email'], "maillist" => $_POST['maillist'], "remoteip" => $remote_addr, - "referer" => $MYSITE . "mailing-lists.php" - ) + "referer" => $MYSITE . "mailing-lists.php", + ], ); // Provide error if unable to [un]subscribe @@ -119,18 +118,11 @@

    There is an experimental web interface for the news server at - http://news.php.net/, and + https://news-web.php.net/, and there are also other archives provided by Marc.

    -

    Twitter

    -

    - The PHP team maintains an official PHP.net account on twitter, - @official_php, for those - interested in following news and other announcements from the PHP project. -

    -

    Mailing List Posting guidelines

    @@ -183,149 +175,135 @@ + $internals_mailing_lists = [ + + 'PHP and Zend Engine internals lists', + [ + 'internals', 'Internals list', + 'A medium volume list for those who want to help out with the development of PHP', + false, 'php-internals', true, "php.internals", + ], + [ + 'internals-win', 'Windows Internals list', + 'A low volume list for those who want to help out with the development of PHP on Windows', + false, false, true, "php.internals.win", + ], + [ + 'php-cvs', 'Git commit list', + 'All commits to internals (php-src) and the Zend Engine are posted to this list automatically', + true, true, false, "php.cvs", + ], + [ + 'git-pulls', 'Git pull requests', + 'Pull requests from Github', + false, false, false, "php.git-pulls", + ], + [ + 'php-qa', 'Quality Assurance list', + 'List for the members of the PHP-QA Team', + false, true, false, "php.qa", + ], + [ + 'php-bugs', 'General bugs', + 'General bug activity are posted here', + false, false, false, "php.bugs", + ], + [ + 'standards', 'PHP Standardization and interoperability list', + 'Development of language standards', + false, false, false, "php.standards", + ], + + 'PHP internal website mailing lists', + [ + 'php-webmaster', 'PHP php.net internal infrastructure discussion', + 'List for discussing and maintaining the php.net web infrastructure.
    For general PHP support questions, see "General Mailing Lists" or the support page', - FALSE, FALSE, FALSE, "php.webmaster" - ), - - 'PHP documentation mailing lists', - array ( - 'phpdoc', 'Documentation discussion', - 'List for discussing the PHP documentation', - FALSE, TRUE, FALSE, "php.doc" - ), - array ( - 'doc-cvs', 'Documentation changes and commits', - 'Changes to the documentation are posted here', - TRUE, "php-doc-cvs", FALSE, "php.doc.cvs" - ), - array ( - 'doc-bugs', 'Documentation bugs', - 'Documentation bug activity (translations, sources, and build system) are posted here', - TRUE, 'php-doc-bugs', FALSE, "php.doc.bugs" - ), - ); + false, false, false, "php.webmaster", + ], + + 'PHP documentation mailing lists', + [ + 'phpdoc', 'Documentation discussion', + 'List for discussing the PHP documentation', + false, true, false, "php.doc", + ], + [ + 'doc-cvs', 'Documentation changes and commits', + 'Changes to the documentation are posted here', + true, "php-doc-cvs", false, "php.doc.cvs", + ], + [ + 'doc-bugs', 'Documentation bugs', + 'Documentation bug activity (translations, sources, and build system) are posted here', + true, 'php-doc-bugs', false, "php.doc.bugs", + ], + ]; // Print out a table for a given list array -function output_lists_table($mailing_lists) +function output_lists_table($mailing_lists): void { echo '', "\n"; foreach ($mailing_lists as $listinfo) { if (!is_array($listinfo)) { echo "" . - "\n"; + "\n"; } else { echo ''; - echo ''; + echo ''; echo ''; // Let the list name defined with a string, if the // list is archived under a different name then php.net // uses for it (for backward compatibilty for example) - if ($listinfo[4] !== FALSE) { - $larchive = ($listinfo[4] === TRUE ? $listinfo[0] : $listinfo[4]); - } else { $larchive = FALSE; } + if ($listinfo[4] !== false) { + $larchive = ($listinfo[4] === true ? $listinfo[0] : $listinfo[4]); + } else { $larchive = false; } echo ''; - echo ''; + echo ''; echo ''; - echo ''; + echo ''; + echo ''; echo "\n"; } } @@ -372,23 +350,58 @@ function output_lists_table($mailing_lists)

    If you experience trouble subscribing via the form above, you may also - subscribe by sending an email to the list server. - To subscribe to any mailing list, send an email to - listname-subscribe@lists.php.net - (substituting the name of the list for listname - — for example, php-general-subscribe@lists.php.net). + subscribe by sending an email to the list server. To subscribe to any + mailing list, send an email to + listname+subscribe@lists.php.net (substituting the + name of the list for listname—for example, + php-general+subscribe@lists.php.net).

    Mailing list options

    - All of the mailing lists hosted at lists.php.net are managed using the ezmlm-idx mailing list software. - There are a variety of commands you can use to modify your subscription. - Either send a message to php-whatever-help@lists.php.net (as in, - php-general-help@lists.php.net) or you can view the commands for - ezmlm here. + All the mailing lists hosted at news-web.php.net + are managed using the mlmmj mailing list + software. There are a variety of commands you may use to modify your + subscription. For a full overview, send a message to + listname+help@lists.php.net (as in, + php-general+help@lists.php.net). +

    + +

    Subscribing

    + +
      +
    • The normal mailing list, where you receive every message separately:
      + Email: listname+subscribe@lists.php.net
    • +
    • The daily digest list, where you receive a daily email with every message for the whole day:
      + Email: listname+subscribe-digest@lists.php.net
    • +
    • The "no email" list, where you receive no emails from the list, but you have permission to post to it:
      + Email: listname+subscribe-nomail@lists.php.net
    • +
    + +

    Unsubscribing

    + +

    + To unsubscribe from a mailing list, send an email to + listname+unsubscribe@lists.php.net, where + listname is the name of the list you wish to unsubscribe from. + For example, to unsubscribe from the php-announce mailing list, + send an email to + php-announce+unsubscribe@lists.php.net. +

    + +

    + Please note, you must send the email from the address you want to unsubscribe.

    +

    Help

    + +
      +
    • For mailing list FAQs (Frequently Asked Questions):
      + Email: listname+help@lists.php.net
    • +
    • To reach an administrator:
      + Email: listname+owner@lists.php.net
    • +
    + + diff --git a/manual-lookup.php b/manual-lookup.php index f20d4a44e2..855267ba23 100644 --- a/manual-lookup.php +++ b/manual-lookup.php @@ -1,4 +1,5 @@ diff --git a/manual/add-note.php b/manual/add-note.php index 6403e65c89..522c4b509e 100644 --- a/manual/add-note.php +++ b/manual/add-note.php @@ -5,24 +5,34 @@ include_once __DIR__ . '/../include/prepend.inc'; include_once __DIR__ . '/../include/posttohost.inc'; include_once __DIR__ . '/../include/shared-manual.inc'; -include __DIR__ . '/spam_challenge.php'; +include __DIR__ . '/spam_challenge.php'; -site_header("Add Manual Note", array( 'css' => 'add-note.css')); +use phpweb\UserNotes\UserNote; +use phpweb\UserNotes\UserNoteService; -// Copy over "sect" and "redirect" from GET to POST +site_header("Add Manual Note", ['css' => 'add-note.css']); + +// Copy over "sect", "redirect" and "repo" from GET to POST if (empty($_POST['sect']) && isset($_GET['sect'])) { $_POST['sect'] = $_GET['sect']; } if (empty($_POST['redirect']) && isset($_GET['redirect'])) { $_POST['redirect'] = $_GET['redirect']; } +if (empty($_POST['repo']) && isset($_GET['repo'])) { + $_POST['repo'] = $_GET['repo']; +} +// Assume English if we didn't get a language +if (empty($_POST['repo'])) { + $_POST['repo'] = 'en'; +} // Decide on whether all vars are present for processing -$process = TRUE; -$needed_vars = array('note', 'user', 'sect', 'redirect', 'action', 'func', 'arga', 'argb', 'answer'); +$process = true; +$needed_vars = ['note', 'user', 'sect', 'redirect', 'action', 'func', 'arga', 'argb', 'answer']; foreach ($needed_vars as $varname) { if (empty($_POST[$varname])) { - $process = FALSE; + $process = false; break; } } @@ -36,17 +46,16 @@ // Convert all line-endings to unix format, // and don't allow out-of-control blank lines - $note = str_replace("\r\n", "\n", $note); - $note = str_replace("\r", "\n", $note); + $note = str_replace(["\r\n", "\r"], "\n", $note); $note = preg_replace("/\n{2,}/", "\n\n", $note); // Don't pass through example username - if ($user == "user@example.com") { + if ($user === "user@example.com") { $user = "Anonymous"; } // We don't know of any error now - $error = FALSE; + $error = false; // No note specified if (strlen($note) == 0) { @@ -86,35 +95,34 @@ } // No error was found, and the submit action is required - if (!$error && strtolower($_POST['action']) != "preview") { + if (!$error && strtolower($_POST['action']) !== "preview") { - $redirip = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? - $_SERVER['HTTP_X_FORWARDED_FOR'] : - (isset($_SERVER['HTTP_VIA']) ? $_SERVER['HTTP_VIA'] : ''); + $redirip = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? + ($_SERVER['HTTP_VIA'] ?? ''); // Post the variables to the central user note script $result = posttohost( "https://main.php.net/entry/user-note.php", - array( - 'user' => $user, - 'note' => $note, - 'sect' => $_POST['sect'], - 'ip' => $_SERVER['REMOTE_ADDR'], - 'redirip' => $redirip - ) + [ + 'user' => $user, + 'note' => $note, + 'sect' => $_POST['sect'], + 'ip' => $_SERVER['REMOTE_ADDR'], + 'redirip' => $redirip, + ], ); // If there is any non-header result, then it is an error if ($result) { - if (strpos($result, '[TOO MANY NOTES]') !== FALSE) { - print "

    As a security precaution, we only allow a certain number of notes to be submitted per minute. At this time, this number has been exceeded. Please re-submit your note in about a minute.

    "; - } else if (($pos = strpos($result, '[SPAMMER]')) !== FALSE) { - $ip = trim(substr($result, $pos+9)); + if (strpos($result, '[TOO MANY NOTES]') !== false) { + echo "

    As a security precaution, we only allow a certain number of notes to be submitted per minute. At this time, this number has been exceeded. Please re-submit your note in about a minute.

    "; + } elseif (($pos = strpos($result, '[SPAMMER]')) !== false) { + $ip = trim(substr($result, $pos + 9)); $spam_url = $ip_spam_lookup_url . $ip; - print '

    Your IP is listed in one of the spammers lists we use, which aren\'t controlled by us. More information is available at '.$spam_url.'.

    '; - } else if (strpos($result, '[SPAM WORD]') !== FALSE) { + echo '

    Your IP is listed in one of the spammers lists we use, which aren\'t controlled by us. More information is available at ' . $spam_url . '.

    '; + } elseif (strpos($result, '[SPAM WORD]') !== false) { echo '

    Your note contains a prohibited (usually SPAM) word. Please remove it and try again.

    '; - } else if (strpos($result, '[CLOSED]') !== FALSE) { + } elseif (strpos($result, '[CLOSED]') !== false) { echo '

    Due to some technical problems this service isn\'t currently working. Please try again later. Sorry for any inconvenience.

    '; } else { echo ""; @@ -125,9 +133,8 @@ // There was no error returned else { echo '

    Your submission was successful -- thanks for contributing! Note ', - 'that it will not show up for up to a few hours on some of the mirrors, but it will find its way to all of ', - 'our mirrors in due time.

    '; + 'that it will not show up for up to a few hours, ', + 'but it will eventually find its way.

    '; } // Print out common footer, and end page @@ -136,17 +143,15 @@ } // There was an error, or a preview is needed - else { - - // If there was an error, print out - if ($error) { echo "

    $error

    \n"; } - - // Print out preview of note - echo '

    This is what your entry will look like, roughly:

    '; - echo '
    '; - manual_note_display(time(), $user, $note, FALSE); - echo '


    '; - } + // If there was an error, print out + if ($error) { echo "

    $error

    \n"; } + + // Print out preview of note + $userNoteService = new UserNoteService(); + echo '

    This is what your entry will look like, roughly:

    '; + echo '
    '; + $userNoteService->displaySingle(new UserNote('', '', '', time(), $user, $note)); + echo '


    '; } // Any needed variable was missing => display instructions @@ -194,11 +199,7 @@
    - - -

    eval() is the best for all sorts of things

    -
    -
    + eval() is the best for all sorts of things
    @@ -224,11 +225,7 @@
    - - -

    If eval() is the answer, you're almost certainly asking the wrong question.

    -
    -
    + If eval() is the answer, you're almost certainly asking the wrong question.
    @@ -254,11 +251,7 @@
    - - -

    egg bacon sausage spam spam baked beans

    -
    -
    + egg bacon sausage spam spam baked beans
    @@ -274,8 +267,8 @@
    • Bug reports & Missing documentation - Instead report a bug - for this manual page to the bug database. + Instead report an issue + for this manual page.
    • Support questions or request for help See the support page for available options. In other words, do not ask questions within the user notes.
    • References to other notes or authors This is not a forum; we do not encourage nor permit discussions here. Further, if a note is referenced directly and is later removed or modified it causes confusion. @@ -346,7 +339,7 @@ if (empty($_POST['user'])) { $_POST['user'] = "user@example.com"; } // There is no section to add note to -if (!isset($_POST['sect']) || !isset($_POST['redirect'])) { +if (!isset($_POST['sect'], $_POST['redirect'])) { echo '

      To add a note, you must click on the "Add Note" button (the plus sign) ', 'on the bottom of a manual page so we know where to add the note!

      '; } @@ -363,28 +356,27 @@
    - - + + - - + - - - + - +
    {$listinfo}ModeratedArchiveNewsgroupNormalDigest
    NewsgroupNormalDigestList name
    ' . $listinfo[1] . ' <' . $listinfo[0] . '@lists.php.net>
    '. $listinfo[2] . '
    ' . $listinfo[1] . ' <' . $listinfo[0] . '@lists.php.net>
    ' . $listinfo[2] . '
    ' . ($listinfo[3] ? 'yes' : 'no') . '' . ($larchive ? "yes" : 'n/a') . '' . ($listinfo[6] ? "yes http" : 'n/a') . '' . ($listinfo[6] ? "yes http" : 'n/a') . '' . ($listinfo[5] ? '' : 'n/a' ) . '' . ($listinfo[5] ? '' : 'n/a') . '' . $listinfo[0] . '
    Click here to go to the support pages.
    - Click here to submit a bug report.
    - Click here to request a feature.
    - (Again, please note, if you ask a question, report a bug, or request a feature, + Click here to submit an issue about the documentation.
    + Click here to submit an issue about PHP itself.
    + (Again, please note, if you ask a question, report an issue, or request a feature, your note will be deleted.)
    Your email address (or name)::
    Your notes: + :
    Answer to this simple question (SPAM challenge):
    +
    :
    ?
    (Example: nine) (Example: nine)
    diff --git a/manual/change.php b/manual/change.php index 5ce3e6700a..f1d376eec7 100644 --- a/manual/change.php +++ b/manual/change.php @@ -1,8 +1,9 @@ "","\n"=>"")); +$page = strtr($page, ["\r" => "", "\n" => ""]); // Redirect to new manual page mirror_redirect("/manual/" . $page); diff --git a/manual/en/book.var.php b/manual/en/book.var.php index b3405143a3..d5ee10a55f 100644 --- a/manual/en/book.var.php +++ b/manual/en/book.var.php @@ -48,37 +48,62 @@ $setup["parents"] = $PARENTS; manual_setup($setup); -manual_header(); ?>

    Variable handling

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    + + + diff --git a/manual/en/class.exception.php b/manual/en/class.exception.php index 1d65b45aba..8fdf15bf3d 100644 --- a/manual/en/class.exception.php +++ b/manual/en/class.exception.php @@ -48,7 +48,6 @@ $setup["parents"] = $PARENTS; manual_setup($setup); -manual_header(); ?>

    Exception

    @@ -206,87 +205,18 @@
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Table of Contents

    +

    Table of Contents

    + - + diff --git a/manual/en/context.http.php b/manual/en/context.http.php index e51ae98950..23a8238226 100644 --- a/manual/en/context.http.php +++ b/manual/en/context.http.php @@ -42,7 +42,6 @@ $setup["parents"] = $PARENTS; manual_setup($setup); -manual_header(); ?>
    @@ -439,4 +438,4 @@
    -
    + diff --git a/manual/en/funcref.php b/manual/en/funcref.php index 98f15002b8..41c4146795 100644 --- a/manual/en/funcref.php +++ b/manual/en/funcref.php @@ -48,7 +48,6 @@ $setup["parents"] = $PARENTS; manual_setup($setup); -manual_header(); ?>

    Function Reference

    @@ -64,55 +63,331 @@
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + diff --git a/manual/en/function.rtrim.php b/manual/en/function.rtrim.php new file mode 100644 index 0000000000..a6fae9449d --- /dev/null +++ b/manual/en/function.rtrim.php @@ -0,0 +1,190 @@ + + array ( + 0 => 'index.php', + 1 => 'PHP Manual', + ), + 'head' => + array ( + 0 => 'UTF-8', + 1 => 'en', + ), + 'this' => + array ( + 0 => 'function.rtrim.php', + 1 => 'rtrim', + ), + 'up' => + array ( + 0 => 'ref.strings.php', + 1 => 'String Functions', + ), + 'prev' => + array ( + 0 => 'function.strpos.php', + 1 => 'strpos', + ), + 'alternatives' => + array ( + ), +); +$setup["toc"] = $TOC; +$setup["parents"] = $PARENTS; +manual_setup($setup); + +?> +
    +
    +

    rtrim

    +

    (PHP 4, PHP 5, PHP 7, PHP 8)

    rtrimStrip whitespace (or other characters) from the end of a string

    + +
    + +
    +

    Description

    +
    + rtrim(string $string, string $characters = " \n\r\t\v\x00"): string
    + +

    + This function returns a string with whitespace (or other characters) stripped from the + end of string. +

    +

    + Without the second parameter, + rtrim() will strip these characters: +

    + +
      +
    • + + " ": ASCII SP character + 0x20, an ordinary space. + +
    • +
    • + + "\t": ASCII HT character + 0x09, a tab. + +
    • +
    • + + "\n": ASCII LF character + 0x0A, a new line (line feed). + +
    • +
    • + + "\r": ASCII CR character + 0x0D, a carriage return. + +
    • +
    • + + "\0": ASCII NUL character + 0x00, the NUL-byte. + +
    • +
    • + + "\v": ASCII VT + character 0x0B, a vertical tab. + +
    • +
    + +
    + + +
    +

    Parameters

    +
    + +
    string
    +
    + + The input string. + +
    + + +
    characters
    +
    + + + Optionally, the stripped characters can also be specified using + the characters parameter. + Simply list all characters that need to be stripped. + With .. it is possible to specify an incrementing range of characters. + + +
    + +
    +
    + + +
    +

    Return Values

    +

    + Returns the modified string. +

    +
    + + +
    +

    Examples

    +
    +

    Example #1 Usage example of rtrim()

    +
    +
    <?php

    $text
    = "\t\tThese are a few words :) ... ";
    $binary = "\x09Example string\x0A";
    $hello = "Hello World";
    var_dump($text, $binary, $hello);

    print
    "\n";

    $trimmed = rtrim($text);
    var_dump($trimmed);

    $trimmed = rtrim($text, " \t.");
    var_dump($trimmed);

    $trimmed = rtrim($hello, "Hdle");
    var_dump($trimmed);

    // trim the ASCII control characters at the end of $binary
    // (from 0 to 31 inclusive)
    $clean = rtrim($binary, "\x00..\x1F");
    var_dump($clean);

    ?>
    +
    + +

    The above example will output:

    +
    +
    string(32) "        These are a few words :) ...  "
    +string(16) "    Example string
    +"
    +string(11) "Hello World"
    +
    +string(30) "        These are a few words :) ..."
    +string(26) "        These are a few words :)"
    +string(9) "Hello Wor"
    +string(15) "    Example string"
    +
    +
    +
    +
    +

    Example #1 similar_text() argument swapping example

    +

    + This example shows that swapping the string1 and + string2 argument may yield different results. +

    +
    +
    <?php
    $sim
    = similar_text('bafoobar', 'barfoo', $perc);
    echo
    "similarity: $sim ($perc %)\n";
    $sim = similar_text('barfoo', 'bafoobar', $perc);
    echo
    "similarity: $sim ($perc %)\n";
    +
    + +

    The above example will output + something similar to:

    +
    +
    similarity: 5 (71.428571428571 %)
    +similarity: 3 (42.857142857143 %)
    +
    +
    +
    +
    + + +
    +

    See Also

    +
      +
    • trim() - Strip whitespace (or other characters) from the beginning and end of a string
    • +
    • ltrim() - Strip whitespace (or other characters) from the beginning of a string
    • +
    +
    +
    diff --git a/manual/en/function.strpos.php b/manual/en/function.strpos.php index 97f5bb641c..00b1ebdbb8 100644 --- a/manual/en/function.strpos.php +++ b/manual/en/function.strpos.php @@ -26,13 +26,13 @@ ), 'prev' => array ( - 0 => 'function.strpbrk.php', - 1 => 'strpbrk', + 0 => 'ref.strings.php', + 1 => 'String Functions', ), 'next' => array ( - 0 => 'function.strrchr.php', - 1 => 'strrchr', + 0 => 'function.rtrim.php', + 1 => 'rtrim', ), 'alternatives' => array ( @@ -42,7 +42,6 @@ $setup["parents"] = $PARENTS; manual_setup($setup); -manual_header(); ?>
    @@ -198,4 +197,4 @@ function.

    - + diff --git a/manual/en/index.php b/manual/en/index.php index c8d167d26e..74d7e4ba57 100644 --- a/manual/en/index.php +++ b/manual/en/index.php @@ -48,7 +48,6 @@ $setup["parents"] = $PARENTS; manual_setup($setup); -manual_header(); ?>

    PHP Manual

    @@ -144,29 +143,191 @@
    - - - - - - - - - - - - - - - - - - - - - - - - - - + + + diff --git a/manual/en/language.exceptions.php b/manual/en/language.exceptions.php index 261d9a6b4d..114194b952 100644 --- a/manual/en/language.exceptions.php +++ b/manual/en/language.exceptions.php @@ -48,7 +48,6 @@ $setup["parents"] = $PARENTS; manual_setup($setup); -manual_header(); ?>

    Exceptions

    @@ -162,4 +161,4 @@ class or a subclass of Exception
    - + diff --git a/manual/en/refs.basic.vartype.php b/manual/en/refs.basic.vartype.php index df3937a8b3..9617220eae 100644 --- a/manual/en/refs.basic.vartype.php +++ b/manual/en/refs.basic.vartype.php @@ -48,88 +48,118 @@ $setup["parents"] = $PARENTS; manual_setup($setup); -manual_header(); ?>
    -

    Variable and Type Related Extensions

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +

    Variable and Type Related Extensions

    + + diff --git a/manual/en/search-combined.json b/manual/en/search-combined.json new file mode 100644 index 0000000000..4104ff1918 --- /dev/null +++ b/manual/en/search-combined.json @@ -0,0 +1 @@ +[{"id":"copyright","name":"Copyright","description":"PHP Manual","tag":"legalnotice","type":"General","methodName":"Copyright"},{"id":"preface","name":"Preface","description":"About this manual","tag":"preface","type":"General","methodName":"Preface"},{"id":"introduction","name":"Introduction","description":"What is PHP and what can it do?","tag":"chapter","type":"General","methodName":"Introduction"},{"id":"tutorial.firstpage","name":"Your first PHP-enabled page","description":"Getting Started","tag":"section","type":"General","methodName":"Your first PHP-enabled page"},{"id":"tutorial.useful","name":"Something Useful","description":"Getting Started","tag":"section","type":"General","methodName":"Something Useful"},{"id":"tutorial.forms","name":"Dealing with Forms","description":"Getting Started","tag":"section","type":"General","methodName":"Dealing with Forms"},{"id":"tutorial.whatsnext","name":"What's next?","description":"Getting Started","tag":"section","type":"General","methodName":"What's next?"},{"id":"tutorial","name":"A simple tutorial","description":"Getting Started","tag":"chapter","type":"General","methodName":"A simple tutorial"},{"id":"getting-started","name":"Getting Started","description":"PHP Manual","tag":"book","type":"Extension","methodName":"Getting Started"},{"id":"install.general","name":"General Installation Considerations","description":"Installation and Configuration","tag":"chapter","type":"General","methodName":"General Installation Considerations"},{"id":"install.unix.debian","name":"Installing from packages on Debian GNU\/Linux and related distributions","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Installing from packages on Debian GNU\/Linux and related distributions"},{"id":"install.unix.dnf","name":"Installing from packages on GNU\/Linux distributions that use DNF","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Installing from packages on GNU\/Linux distributions that use DNF"},{"id":"install.unix.openbsd","name":"Installing from packages or ports on OpenBSD","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Installing from packages or ports on OpenBSD"},{"id":"install.unix.source","name":"Installing from source on Unix and macOS systems","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Installing from source on Unix and macOS systems"},{"id":"install.unix.commandline","name":"CGI and command line setups","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"CGI and command line setups"},{"id":"install.unix.apache2","name":"Apache 2.x on Unix systems","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Apache 2.x on Unix systems"},{"id":"install.unix.nginx","name":"Nginx 1.4.x on Unix systems","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Nginx 1.4.x on Unix systems"},{"id":"install.unix.lighttpd-14","name":"Lighttpd 1.4 on Unix systems","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Lighttpd 1.4 on Unix systems"},{"id":"install.unix.litespeed","name":"LiteSpeed Web Server\/OpenLiteSpeed Web Server on Unix systems","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"LiteSpeed Web Server\/OpenLiteSpeed Web Server on Unix systems"},{"id":"install.unix.solaris","name":"Solaris specific installation tips","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Solaris specific installation tips"},{"id":"install.unix","name":"Installation on Unix systems","description":"Installation and Configuration","tag":"chapter","type":"General","methodName":"Installation on Unix systems"},{"id":"install.macosx.packages","name":"Installation on macOS using third-party packages","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Installation on macOS using third-party packages"},{"id":"install.macosx.compile","name":"Compiling PHP on macOS","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Compiling PHP on macOS"},{"id":"install.macosx.bundled","name":"Using the bundled PHP prior to macOS Monterey","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Using the bundled PHP prior to macOS Monterey"},{"id":"install.macosx","name":"Installation on macOS","description":"Installation and Configuration","tag":"chapter","type":"General","methodName":"Installation on macOS"},{"id":"install.windows.recommended","name":"Recommended configuration on Windows systems","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Recommended configuration on Windows systems"},{"id":"install.windows.manual","name":"Manual installation of pre-built binaries","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Manual installation of pre-built binaries"},{"id":"install.windows.apache2","name":"Installation for Apache 2.x on Windows systems","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Installation for Apache 2.x on Windows systems"},{"id":"install.windows.iis","name":"Installation with IIS for Windows","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Installation with IIS for Windows"},{"id":"install.windows.tools","name":"Third-party tools for installing PHP","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Third-party tools for installing PHP"},{"id":"install.windows.building","name":"Building from source","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Building from source"},{"id":"install.windows.commandline","name":"Running PHP on the command line on Windows systems","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Running PHP on the command line on Windows systems"},{"id":"install.windows","name":"Installation on Windows systems","description":"Installation and Configuration","tag":"chapter","type":"General","methodName":"Installation on Windows systems"},{"id":"install.cloud.azure","name":"Azure App Services","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Azure App Services"},{"id":"install.cloud.ec2","name":"Amazon EC2","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Amazon EC2"},{"id":"install.cloud.digitalocean","name":"DigitalOcean","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"DigitalOcean"},{"id":"install.cloud","name":"Installation on Cloud Computing platforms","description":"Installation and Configuration","tag":"chapter","type":"General","methodName":"Installation on Cloud Computing platforms"},{"id":"install.fpm.install","name":"Installation","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Installation"},{"id":"install.fpm.configuration","name":"Configuration","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Configuration"},{"id":"install.fpm","name":"FastCGI Process Manager (FPM)","description":"Installation and Configuration","tag":"chapter","type":"General","methodName":"FastCGI Process Manager (FPM)"},{"id":"install.pecl.intro","name":"Introduction to PECL Installations","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Introduction to PECL Installations"},{"id":"install.pecl.downloads","name":"Downloading PECL extensions","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Downloading PECL extensions"},{"id":"install.pecl.windows","name":"Installing a PHP extension on Windows","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Installing a PHP extension on Windows"},{"id":"install.pecl.pear","name":"Compiling shared PECL extensions with the pecl command","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Compiling shared PECL extensions with the pecl command"},{"id":"install.pecl.phpize","name":"Compiling shared PECL extensions with phpize","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Compiling shared PECL extensions with phpize"},{"id":"install.pecl.php-config","name":"php-config","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"php-config"},{"id":"install.pecl.static","name":"Compiling PECL extensions statically into PHP","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Compiling PECL extensions statically into PHP"},{"id":"install.pecl","name":"Installation of PECL extensions","description":"Installation and Configuration","tag":"chapter","type":"General","methodName":"Installation of PECL extensions"},{"id":"install.composer.intro","name":"Introduction to Composer","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Introduction to Composer"},{"id":"install.pie.intro","name":"Introduction to PIE","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Introduction to PIE"},{"id":"configuration.file","name":"The configuration file","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"The configuration file"},{"id":"configuration.file.per-user","name":".user.ini files","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":".user.ini files"},{"id":"configuration.changes.modes","name":"Where a configuration setting may be set","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"Where a configuration setting may be set"},{"id":"configuration.changes","name":"How to change configuration settings","description":"Installation and Configuration","tag":"sect1","type":"General","methodName":"How to change configuration settings"},{"id":"configuration","name":"Runtime Configuration","description":"Installation and Configuration","tag":"chapter","type":"General","methodName":"Runtime Configuration"},{"id":"install","name":"Installation and Configuration","description":"PHP Manual","tag":"book","type":"Extension","methodName":"Installation and Configuration"},{"id":"language.basic-syntax.phptags","name":"PHP tags","description":"Language Reference","tag":"sect1","type":"General","methodName":"PHP tags"},{"id":"language.basic-syntax.phpmode","name":"Escaping from HTML","description":"Language Reference","tag":"sect1","type":"General","methodName":"Escaping from HTML"},{"id":"language.basic-syntax.instruction-separation","name":"Instruction separation","description":"Language Reference","tag":"sect1","type":"General","methodName":"Instruction separation"},{"id":"language.basic-syntax.comments","name":"Comments","description":"Language Reference","tag":"sect1","type":"General","methodName":"Comments"},{"id":"language.basic-syntax","name":"Basic syntax","description":"Language Reference","tag":"chapter","type":"General","methodName":"Basic syntax"},{"id":"language.types.intro","name":"Introduction","description":"Language Reference","tag":"sect1","type":"General","methodName":"Introduction"},{"id":"language.types.type-system","name":"Type System","description":"Language Reference","tag":"sect1","type":"General","methodName":"Type System"},{"id":"language.types.null","name":"NULL","description":"Language Reference","tag":"sect1","type":"General","methodName":"NULL"},{"id":"language.types.boolean","name":"Booleans","description":"Language Reference","tag":"sect1","type":"General","methodName":"Booleans"},{"id":"language.types.integer","name":"Integers","description":"Language Reference","tag":"sect1","type":"General","methodName":"Integers"},{"id":"language.types.float","name":"Floating point numbers","description":"Language Reference","tag":"sect1","type":"General","methodName":"Floating point numbers"},{"id":"language.types.string","name":"Strings","description":"Language Reference","tag":"sect1","type":"General","methodName":"Strings"},{"id":"language.types.numeric-strings","name":"Numeric strings","description":"Language Reference","tag":"sect1","type":"General","methodName":"Numeric strings"},{"id":"language.types.array","name":"Arrays","description":"Language Reference","tag":"sect1","type":"General","methodName":"Arrays"},{"id":"language.types.object","name":"Objects","description":"Language Reference","tag":"sect1","type":"General","methodName":"Objects"},{"id":"language.types.enumerations","name":"Enumerations","description":"Language Reference","tag":"sect1","type":"General","methodName":"Enumerations"},{"id":"language.types.resource","name":"Resources","description":"Language Reference","tag":"sect1","type":"General","methodName":"Resources"},{"id":"language.types.callable","name":"Callables","description":"Language Reference","tag":"sect1","type":"General","methodName":"Callables"},{"id":"language.types.mixed","name":"Mixed","description":"Language Reference","tag":"sect1","type":"General","methodName":"Mixed"},{"id":"language.types.void","name":"Void","description":"Language Reference","tag":"sect1","type":"General","methodName":"Void"},{"id":"language.types.never","name":"Never","description":"Language Reference","tag":"sect1","type":"General","methodName":"Never"},{"id":"language.types.relative-class-types","name":"Relative class types","description":"Language Reference","tag":"sect1","type":"General","methodName":"Relative class types"},{"id":"language.types.singleton","name":"Singleton types","description":"Language Reference","tag":"sect1","type":"General","methodName":"Singleton types"},{"id":"language.types.iterable","name":"Iterables","description":"Language Reference","tag":"sect1","type":"General","methodName":"Iterables"},{"id":"language.types.declarations","name":"Type declarations","description":"Language Reference","tag":"sect1","type":"General","methodName":"Type declarations"},{"id":"language.types.type-juggling","name":"Type Juggling","description":"Language Reference","tag":"sect1","type":"General","methodName":"Type Juggling"},{"id":"language.types","name":"Types","description":"Language Reference","tag":"chapter","type":"General","methodName":"Types"},{"id":"language.variables.basics","name":"Basics","description":"Language Reference","tag":"sect1","type":"General","methodName":"Basics"},{"id":"language.variables.predefined","name":"Predefined Variables","description":"Language Reference","tag":"sect1","type":"General","methodName":"Predefined Variables"},{"id":"language.variables.scope","name":"Variable scope","description":"Language Reference","tag":"sect1","type":"General","methodName":"Variable scope"},{"id":"language.variables.variable","name":"Variable variables","description":"Language Reference","tag":"sect1","type":"General","methodName":"Variable variables"},{"id":"language.variables.external","name":"Variables From External Sources","description":"Language Reference","tag":"sect1","type":"General","methodName":"Variables From External Sources"},{"id":"language.variables","name":"Variables","description":"Language Reference","tag":"chapter","type":"General","methodName":"Variables"},{"id":"language.constants.syntax","name":"Syntax","description":"Language Reference","tag":"sect1","type":"General","methodName":"Syntax"},{"id":"language.constants.predefined","name":"Predefined constants","description":"Language Reference","tag":"sect1","type":"General","methodName":"Predefined constants"},{"id":"language.constants.magic","name":"Magic constants","description":"Language Reference","tag":"sect1","type":"General","methodName":"Magic constants"},{"id":"language.constants","name":"Constants","description":"Language Reference","tag":"chapter","type":"General","methodName":"Constants"},{"id":"language.expressions","name":"Expressions","description":"Language Reference","tag":"chapter","type":"General","methodName":"Expressions"},{"id":"language.operators.precedence","name":"Operator Precedence","description":"Operator Precedence","tag":"sect1","type":"General","methodName":"Operator Precedence"},{"id":"language.operators.arithmetic","name":"Arithmetic","description":"Arithmetic Operators","tag":"sect1","type":"General","methodName":"Arithmetic"},{"id":"language.operators.increment","name":"Increment and Decrement","description":"Incrementing\/Decrementing Operators","tag":"sect1","type":"General","methodName":"Increment and Decrement"},{"id":"language.operators.assignment","name":"Assignment","description":"Assignment Operators","tag":"sect1","type":"General","methodName":"Assignment"},{"id":"language.operators.bitwise","name":"Bitwise","description":"Bitwise Operators","tag":"sect1","type":"General","methodName":"Bitwise"},{"id":"language.operators.comparison","name":"Comparison","description":"Comparison Operators","tag":"sect1","type":"General","methodName":"Comparison"},{"id":"language.operators.errorcontrol","name":"Error Control","description":"Error Control Operators","tag":"sect1","type":"General","methodName":"Error Control"},{"id":"language.operators.execution","name":"Execution","description":"Execution Operators","tag":"sect1","type":"General","methodName":"Execution"},{"id":"language.operators.logical","name":"Logic","description":"Logical Operators","tag":"sect1","type":"General","methodName":"Logic"},{"id":"language.operators.string","name":"String","description":"String Operators","tag":"sect1","type":"General","methodName":"String"},{"id":"language.operators.array","name":"Array","description":"Array Operators","tag":"sect1","type":"General","methodName":"Array"},{"id":"language.operators.type","name":"Type","description":"Type Operators","tag":"sect1","type":"General","methodName":"Type"},{"id":"language.operators.functional","name":"Functional","description":"Functional Operators","tag":"sect1","type":"General","methodName":"Functional"},{"id":"language.operators","name":"Operators","description":"Language Reference","tag":"chapter","type":"General","methodName":"Operators"},{"id":"control-structures.intro","name":"Introduction","description":"Language Reference","tag":"sect1","type":"General","methodName":"Introduction"},{"id":"control-structures.if","name":"if","description":"Language Reference","tag":"sect1","type":"General","methodName":"if"},{"id":"control-structures.else","name":"else","description":"Language Reference","tag":"sect1","type":"General","methodName":"else"},{"id":"control-structures.elseif","name":"elseif\/else if","description":"Language Reference","tag":"sect1","type":"General","methodName":"elseif\/else if"},{"id":"control-structures.alternative-syntax","name":"Alternative syntax for control structures","description":"Language Reference","tag":"sect1","type":"General","methodName":"Alternative syntax for control structures"},{"id":"control-structures.while","name":"while","description":"Language Reference","tag":"sect1","type":"General","methodName":"while"},{"id":"control-structures.do.while","name":"do-while","description":"Language Reference","tag":"sect1","type":"General","methodName":"do-while"},{"id":"control-structures.for","name":"for","description":"Language Reference","tag":"sect1","type":"General","methodName":"for"},{"id":"control-structures.foreach","name":"foreach","description":"Language Reference","tag":"sect1","type":"General","methodName":"foreach"},{"id":"control-structures.break","name":"break","description":"Language Reference","tag":"sect1","type":"General","methodName":"break"},{"id":"control-structures.continue","name":"continue","description":"Language Reference","tag":"sect1","type":"General","methodName":"continue"},{"id":"control-structures.switch","name":"switch","description":"Language Reference","tag":"sect1","type":"General","methodName":"switch"},{"id":"control-structures.match","name":"match","description":"Language Reference","tag":"sect1","type":"General","methodName":"match"},{"id":"control-structures.declare","name":"declare","description":"Language Reference","tag":"sect1","type":"General","methodName":"declare"},{"id":"function.return","name":"return","description":"Language Reference","tag":"sect1","type":"General","methodName":"return"},{"id":"function.require","name":"require","description":"Language Reference","tag":"sect1","type":"General","methodName":"require"},{"id":"function.include","name":"include","description":"Language Reference","tag":"sect1","type":"General","methodName":"include"},{"id":"function.require-once","name":"require_once","description":"Language Reference","tag":"sect1","type":"General","methodName":"require_once"},{"id":"function.include-once","name":"include_once","description":"Language Reference","tag":"sect1","type":"General","methodName":"include_once"},{"id":"control-structures.goto","name":"goto","description":"Language Reference","tag":"sect1","type":"General","methodName":"goto"},{"id":"language.control-structures","name":"Control Structures","description":"Language Reference","tag":"chapter","type":"General","methodName":"Control Structures"},{"id":"functions.user-defined","name":"User-defined functions","description":"Language Reference","tag":"sect1","type":"General","methodName":"User-defined functions"},{"id":"functions.arguments","name":"Function parameters and arguments","description":"Language Reference","tag":"sect1","type":"General","methodName":"Function parameters and arguments"},{"id":"functions.returning-values","name":"Returning values","description":"Language Reference","tag":"sect1","type":"General","methodName":"Returning values"},{"id":"functions.variable-functions","name":"Variable functions","description":"Language Reference","tag":"sect1","type":"General","methodName":"Variable functions"},{"id":"functions.internal","name":"Internal (built-in) functions","description":"Language Reference","tag":"sect1","type":"General","methodName":"Internal (built-in) functions"},{"id":"functions.anonymous","name":"Anonymous functions","description":"Language Reference","tag":"sect1","type":"General","methodName":"Anonymous functions"},{"id":"functions.arrow","name":"Arrow Functions","description":"Language Reference","tag":"sect1","type":"General","methodName":"Arrow Functions"},{"id":"functions.first_class_callable_syntax","name":"First class callable syntax","description":"Language Reference","tag":"sect1","type":"General","methodName":"First class callable syntax"},{"id":"language.functions","name":"Functions","description":"Language Reference","tag":"chapter","type":"General","methodName":"Functions"},{"id":"oop5.intro","name":"Introduction","description":"Language Reference","tag":"sect1","type":"General","methodName":"Introduction"},{"id":"language.oop5.basic","name":"The Basics","description":"Language Reference","tag":"sect1","type":"General","methodName":"The Basics"},{"id":"language.oop5.properties","name":"Properties","description":"Language Reference","tag":"sect1","type":"General","methodName":"Properties"},{"id":"language.oop5.property-hooks","name":"Property Hooks","description":"Language Reference","tag":"sect1","type":"General","methodName":"Property Hooks"},{"id":"language.oop5.constants","name":"Class Constants","description":"Language Reference","tag":"sect1","type":"General","methodName":"Class Constants"},{"id":"language.oop5.autoload","name":"Autoloading Classes","description":"Language Reference","tag":"sect1","type":"General","methodName":"Autoloading Classes"},{"id":"language.oop5.decon","name":"Constructors and Destructors","description":"Language Reference","tag":"sect1","type":"General","methodName":"Constructors and Destructors"},{"id":"language.oop5.visibility","name":"Visibility","description":"Language Reference","tag":"sect1","type":"General","methodName":"Visibility"},{"id":"language.oop5.inheritance","name":"Object Inheritance","description":"Language Reference","tag":"sect1","type":"General","methodName":"Object Inheritance"},{"id":"language.oop5.paamayim-nekudotayim","name":"Scope Resolution Operator (::)","description":"Language Reference","tag":"sect1","type":"General","methodName":")"},{"id":"language.oop5.static","name":"Static Keyword","description":"Language Reference","tag":"sect1","type":"General","methodName":"Static Keyword"},{"id":"language.oop5.abstract","name":"Class Abstraction","description":"Language Reference","tag":"sect1","type":"General","methodName":"Class Abstraction"},{"id":"language.oop5.interfaces","name":"Object Interfaces","description":"Language Reference","tag":"sect1","type":"General","methodName":"Object Interfaces"},{"id":"language.oop5.traits","name":"Traits","description":"Language Reference","tag":"sect1","type":"General","methodName":"Traits"},{"id":"language.oop5.anonymous","name":"Anonymous classes","description":"Language Reference","tag":"sect1","type":"General","methodName":"Anonymous classes"},{"id":"language.oop5.overloading","name":"Overloading","description":"Language Reference","tag":"sect1","type":"General","methodName":"Overloading"},{"id":"language.oop5.iterations","name":"Object Iteration","description":"Language Reference","tag":"sect1","type":"General","methodName":"Object Iteration"},{"id":"language.oop5.magic","name":"Magic Methods","description":"Language Reference","tag":"sect1","type":"General","methodName":"Magic Methods"},{"id":"language.oop5.final","name":"Final Keyword","description":"Language Reference","tag":"sect1","type":"General","methodName":"Final Keyword"},{"id":"language.oop5.cloning","name":"Object Cloning","description":"Language Reference","tag":"sect1","type":"General","methodName":"Object Cloning"},{"id":"language.oop5.object-comparison","name":"Comparing Objects","description":"Language Reference","tag":"sect1","type":"General","methodName":"Comparing Objects"},{"id":"language.oop5.late-static-bindings","name":"Late Static Bindings","description":"Language Reference","tag":"sect1","type":"General","methodName":"Late Static Bindings"},{"id":"language.oop5.references","name":"Objects and references","description":"Language Reference","tag":"sect1","type":"General","methodName":"Objects and references"},{"id":"language.oop5.serialization","name":"Object Serialization","description":"Serializing objects - objects in sessions","tag":"sect1","type":"General","methodName":"Object Serialization"},{"id":"language.oop5.variance","name":"Covariance and Contravariance","description":"Language Reference","tag":"sect1","type":"General","methodName":"Covariance and Contravariance"},{"id":"language.oop5.lazy-objects","name":"Lazy Objects","description":"Language Reference","tag":"sect1","type":"General","methodName":"Lazy Objects"},{"id":"language.oop5.changelog","name":"OOP Changelog","description":"Language Reference","tag":"sect1","type":"General","methodName":"OOP Changelog"},{"id":"language.oop5","name":"Classes and Objects","description":"Language Reference","tag":"chapter","type":"General","methodName":"Classes and Objects"},{"id":"language.namespaces.rationale","name":"Overview","description":"Namespaces overview","tag":"sect1","type":"General","methodName":"Overview"},{"id":"language.namespaces.definition","name":"Namespaces","description":"Defining namespaces","tag":"sect1","type":"General","methodName":"Namespaces"},{"id":"language.namespaces.nested","name":"Sub-namespaces","description":"Declaring sub-namespaces","tag":"sect1","type":"General","methodName":"Sub-namespaces"},{"id":"language.namespaces.definitionmultiple","name":"Defining multiple namespaces in the same file","description":"Defining multiple namespaces in the same file","tag":"sect1","type":"General","methodName":"Defining multiple namespaces in the same file"},{"id":"language.namespaces.basics","name":"Basics","description":"Using namespaces: Basics","tag":"sect1","type":"General","methodName":"Basics"},{"id":"language.namespaces.dynamic","name":"Namespaces and dynamic language features","description":"Namespaces and dynamic language features","tag":"sect1","type":"General","methodName":"Namespaces and dynamic language features"},{"id":"language.namespaces.nsconstants","name":"namespace keyword and __NAMESPACE__","description":"The namespace keyword and __NAMESPACE__ magic constant","tag":"sect1","type":"General","methodName":"namespace keyword and __NAMESPACE__"},{"id":"language.namespaces.importing","name":"Aliasing and Importing","description":"Using namespaces: Aliasing\/Importing","tag":"sect1","type":"General","methodName":"Aliasing and Importing"},{"id":"language.namespaces.global","name":"Global space","description":"Global space","tag":"sect1","type":"General","methodName":"Global space"},{"id":"language.namespaces.fallback","name":"Fallback to global space","description":"Using namespaces: fallback to the global space for functions and constants","tag":"sect1","type":"General","methodName":"Fallback to global space"},{"id":"language.namespaces.rules","name":"Name resolution rules","description":"Name resolution rules","tag":"sect1","type":"General","methodName":"Name resolution rules"},{"id":"language.namespaces.faq","name":"FAQ","description":"FAQ: things you need to know about namespaces","tag":"sect1","type":"General","methodName":"FAQ"},{"id":"language.namespaces","name":"Namespaces","description":"Language Reference","tag":"chapter","type":"General","methodName":"Namespaces"},{"id":"language.enumerations.overview","name":"Enumerations overview","description":"Language Reference","tag":"sect1","type":"General","methodName":"Enumerations overview"},{"id":"language.enumerations.basics","name":"Basic enumerations","description":"Language Reference","tag":"sect1","type":"General","methodName":"Basic enumerations"},{"id":"language.enumerations.backed","name":"Backed enumerations","description":"Language Reference","tag":"sect1","type":"General","methodName":"Backed enumerations"},{"id":"language.enumerations.methods","name":"Enumeration methods","description":"Language Reference","tag":"sect1","type":"General","methodName":"Enumeration methods"},{"id":"language.enumerations.static-methods","name":"Enumeration static methods","description":"Language Reference","tag":"sect1","type":"General","methodName":"Enumeration static methods"},{"id":"language.enumerations.constants","name":"Enumeration constants","description":"Language Reference","tag":"sect1","type":"General","methodName":"Enumeration constants"},{"id":"language.enumerations.traits","name":"Traits","description":"Language Reference","tag":"sect1","type":"General","methodName":"Traits"},{"id":"language.enumerations.expressions","name":"Enum values in constant expressions","description":"Language Reference","tag":"sect1","type":"General","methodName":"Enum values in constant expressions"},{"id":"language.enumerations.object-differences","name":"Differences from objects","description":"Language Reference","tag":"sect1","type":"General","methodName":"Differences from objects"},{"id":"language.enumerations.listing","name":"Value listing","description":"Language Reference","tag":"sect1","type":"General","methodName":"Value listing"},{"id":"language.enumerations.serialization","name":"Serialization","description":"Language Reference","tag":"sect1","type":"General","methodName":"Serialization"},{"id":"language.enumerations.object-differences.inheritance","name":"Why enums aren't extendable","description":"Language Reference","tag":"sect1","type":"General","methodName":"Why enums aren't extendable"},{"id":"language.enumerations.examples","name":"Examples","description":"Language Reference","tag":"sect1","type":"General","methodName":"Examples"},{"id":"language.enumerations","name":"Enumerations","description":"Language Reference","tag":"chapter","type":"General","methodName":"Enumerations"},{"id":"language.errors.basics","name":"Basics","description":"Language Reference","tag":"sect1","type":"General","methodName":"Basics"},{"id":"language.errors.php7","name":"Errors in PHP 7","description":"Language Reference","tag":"sect1","type":"General","methodName":"Errors in PHP 7"},{"id":"language.errors","name":"Errors","description":"Language Reference","tag":"chapter","type":"General","methodName":"Errors"},{"id":"language.exceptions.extending","name":"Extending Exceptions","description":"Language Reference","tag":"sect1","type":"General","methodName":"Extending Exceptions"},{"id":"language.exceptions","name":"Exceptions","description":"Language Reference","tag":"chapter","type":"General","methodName":"Exceptions"},{"id":"language.fibers","name":"Fibers","description":"Language Reference","tag":"chapter","type":"General","methodName":"Fibers"},{"id":"language.generators.overview","name":"Generators overview","description":"Language Reference","tag":"sect1","type":"General","methodName":"Generators overview"},{"id":"language.generators.syntax","name":"Generator syntax","description":"Language Reference","tag":"sect1","type":"General","methodName":"Generator syntax"},{"id":"language.generators.comparison","name":"Comparing generators with Iterator objects","description":"Language Reference","tag":"sect1","type":"General","methodName":"Comparing generators with Iterator objects"},{"id":"language.generators","name":"Generators","description":"Language Reference","tag":"chapter","type":"General","methodName":"Generators"},{"id":"language.attributes.overview","name":"Attributes overview","description":"Language Reference","tag":"sect1","type":"General","methodName":"Attributes overview"},{"id":"language.attributes.syntax","name":"Attribute syntax","description":"Language Reference","tag":"sect1","type":"General","methodName":"Attribute syntax"},{"id":"language.attributes.reflection","name":"Reading Attributes with the Reflection API","description":"Language Reference","tag":"sect1","type":"General","methodName":"Reading Attributes with the Reflection API"},{"id":"language.attributes.classes","name":"Declaring Attribute Classes","description":"Language Reference","tag":"sect1","type":"General","methodName":"Declaring Attribute Classes"},{"id":"language.attributes","name":"Attributes","description":"Language Reference","tag":"chapter","type":"General","methodName":"Attributes"},{"id":"language.references.whatare","name":"What References Are","description":"Language Reference","tag":"sect1","type":"General","methodName":"What References Are"},{"id":"language.references.whatdo","name":"What References Do","description":"Language Reference","tag":"sect1","type":"General","methodName":"What References Do"},{"id":"language.references.arent","name":"What References Are Not","description":"Language Reference","tag":"sect1","type":"General","methodName":"What References Are Not"},{"id":"language.references.pass","name":"Passing by Reference","description":"Language Reference","tag":"sect1","type":"General","methodName":"Passing by Reference"},{"id":"language.references.return","name":"Returning References","description":"Language Reference","tag":"sect1","type":"General","methodName":"Returning References"},{"id":"language.references.unset","name":"Unsetting References","description":"Language Reference","tag":"sect1","type":"General","methodName":"Unsetting References"},{"id":"language.references.spot","name":"Spotting References","description":"Language Reference","tag":"sect1","type":"General","methodName":"Spotting References"},{"id":"language.references","name":"References Explained","description":"Language Reference","tag":"chapter","type":"General","methodName":"References Explained"},{"id":"language.variables.superglobals","name":"Superglobals","description":"Built-in variables that are always available in all scopes","tag":"phpdoc:varentry","type":"Variable","methodName":"Superglobals"},{"id":"reserved.variables.globals","name":"$GLOBALS","description":"References all variables available in global scope","tag":"phpdoc:varentry","type":"Variable","methodName":"$GLOBALS"},{"id":"reserved.variables.server","name":"$_SERVER","description":"Server and execution environment information","tag":"phpdoc:varentry","type":"Variable","methodName":"$_SERVER"},{"id":"reserved.variables.get","name":"$_GET","description":"Query string variables","tag":"phpdoc:varentry","type":"Variable","methodName":"$_GET"},{"id":"reserved.variables.post","name":"$_POST","description":"Form data from HTTP POST requests","tag":"phpdoc:varentry","type":"Variable","methodName":"$_POST"},{"id":"reserved.variables.files","name":"$_FILES","description":"HTTP File Upload variables","tag":"phpdoc:varentry","type":"Variable","methodName":"$_FILES"},{"id":"reserved.variables.request","name":"$_REQUEST","description":"HTTP Request variables","tag":"phpdoc:varentry","type":"Variable","methodName":"$_REQUEST"},{"id":"reserved.variables.session","name":"$_SESSION","description":"Session variables","tag":"phpdoc:varentry","type":"Variable","methodName":"$_SESSION"},{"id":"reserved.variables.environment","name":"$_ENV","description":"Environment variables","tag":"phpdoc:varentry","type":"Variable","methodName":"$_ENV"},{"id":"reserved.variables.cookies","name":"$_COOKIE","description":"HTTP Cookies","tag":"phpdoc:varentry","type":"Variable","methodName":"$_COOKIE"},{"id":"reserved.variables.phperrormsg","name":"$php_errormsg","description":"The previous error message","tag":"phpdoc:varentry","type":"Variable","methodName":"$php_errormsg"},{"id":"reserved.variables.httpresponseheader","name":"$http_response_header","description":"HTTP response headers","tag":"phpdoc:varentry","type":"Variable","methodName":"$http_response_header"},{"id":"reserved.variables.argc","name":"$argc","description":"The number of arguments passed to script","tag":"phpdoc:varentry","type":"Variable","methodName":"$argc"},{"id":"reserved.variables.argv","name":"$argv","description":"Array of arguments passed to script","tag":"phpdoc:varentry","type":"Variable","methodName":"$argv"},{"id":"reserved.variables","name":"Predefined Variables","description":"Language Reference","tag":"reference","type":"Extension","methodName":"Predefined Variables"},{"id":"exception.construct","name":"Exception::__construct","description":"Construct the exception","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"exception.getmessage","name":"Exception::getMessage","description":"Gets the Exception message","tag":"refentry","type":"Function","methodName":"getMessage"},{"id":"exception.getprevious","name":"Exception::getPrevious","description":"Returns previous Throwable","tag":"refentry","type":"Function","methodName":"getPrevious"},{"id":"exception.getcode","name":"Exception::getCode","description":"Gets the Exception code","tag":"refentry","type":"Function","methodName":"getCode"},{"id":"exception.getfile","name":"Exception::getFile","description":"Gets the file in which the exception was created","tag":"refentry","type":"Function","methodName":"getFile"},{"id":"exception.getline","name":"Exception::getLine","description":"Gets the line in which the exception was created","tag":"refentry","type":"Function","methodName":"getLine"},{"id":"exception.gettrace","name":"Exception::getTrace","description":"Gets the stack trace","tag":"refentry","type":"Function","methodName":"getTrace"},{"id":"exception.gettraceasstring","name":"Exception::getTraceAsString","description":"Gets the stack trace as a string","tag":"refentry","type":"Function","methodName":"getTraceAsString"},{"id":"exception.tostring","name":"Exception::__toString","description":"String representation of the exception","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"exception.clone","name":"Exception::__clone","description":"Clone the exception","tag":"refentry","type":"Function","methodName":"__clone"},{"id":"class.exception","name":"Exception","description":"Exception","tag":"phpdoc:exceptionref","type":"Exception","methodName":"Exception"},{"id":"errorexception.construct","name":"ErrorException::__construct","description":"Constructs the exception","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"errorexception.getseverity","name":"ErrorException::getSeverity","description":"Gets the exception severity","tag":"refentry","type":"Function","methodName":"getSeverity"},{"id":"class.errorexception","name":"ErrorException","description":"ErrorException","tag":"phpdoc:exceptionref","type":"Exception","methodName":"ErrorException"},{"id":"class.closedgeneratorexception","name":"ClosedGeneratorException","description":"The ClosedGeneratorException class","tag":"phpdoc:classref","type":"Class","methodName":"ClosedGeneratorException"},{"id":"error.construct","name":"Error::__construct","description":"Construct the error object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"error.getmessage","name":"Error::getMessage","description":"Gets the error message","tag":"refentry","type":"Function","methodName":"getMessage"},{"id":"error.getprevious","name":"Error::getPrevious","description":"Returns previous Throwable","tag":"refentry","type":"Function","methodName":"getPrevious"},{"id":"error.getcode","name":"Error::getCode","description":"Gets the error code","tag":"refentry","type":"Function","methodName":"getCode"},{"id":"error.getfile","name":"Error::getFile","description":"Gets the file in which the error occurred","tag":"refentry","type":"Function","methodName":"getFile"},{"id":"error.getline","name":"Error::getLine","description":"Gets the line in which the error occurred","tag":"refentry","type":"Function","methodName":"getLine"},{"id":"error.gettrace","name":"Error::getTrace","description":"Gets the stack trace","tag":"refentry","type":"Function","methodName":"getTrace"},{"id":"error.gettraceasstring","name":"Error::getTraceAsString","description":"Gets the stack trace as a string","tag":"refentry","type":"Function","methodName":"getTraceAsString"},{"id":"error.tostring","name":"Error::__toString","description":"String representation of the error","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"error.clone","name":"Error::__clone","description":"Clone the error","tag":"refentry","type":"Function","methodName":"__clone"},{"id":"class.error","name":"Error","description":"Error","tag":"phpdoc:classref","type":"Class","methodName":"Error"},{"id":"class.argumentcounterror","name":"ArgumentCountError","description":"ArgumentCountError","tag":"phpdoc:exceptionref","type":"Exception","methodName":"ArgumentCountError"},{"id":"class.arithmeticerror","name":"ArithmeticError","description":"ArithmeticError","tag":"phpdoc:exceptionref","type":"Exception","methodName":"ArithmeticError"},{"id":"class.assertionerror","name":"AssertionError","description":"AssertionError","tag":"phpdoc:exceptionref","type":"Exception","methodName":"AssertionError"},{"id":"class.divisionbyzeroerror","name":"DivisionByZeroError","description":"DivisionByZeroError","tag":"phpdoc:exceptionref","type":"Exception","methodName":"DivisionByZeroError"},{"id":"class.compileerror","name":"CompileError","description":"CompileError","tag":"phpdoc:exceptionref","type":"Exception","methodName":"CompileError"},{"id":"class.parseerror","name":"ParseError","description":"ParseError","tag":"phpdoc:exceptionref","type":"Exception","methodName":"ParseError"},{"id":"class.typeerror","name":"TypeError","description":"TypeError","tag":"phpdoc:exceptionref","type":"Exception","methodName":"TypeError"},{"id":"class.valueerror","name":"ValueError","description":"ValueError","tag":"phpdoc:exceptionref","type":"Exception","methodName":"ValueError"},{"id":"class.unhandledmatcherror","name":"UnhandledMatchError","description":"UnhandledMatchError","tag":"phpdoc:exceptionref","type":"Exception","methodName":"UnhandledMatchError"},{"id":"fibererror.construct","name":"FiberError::__construct","description":"Constructor to disallow direct instantiation","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.fibererror","name":"FiberError","description":"FiberError","tag":"phpdoc:exceptionref","type":"Exception","methodName":"FiberError"},{"id":"class.requestparsebodyexception","name":"RequestParseBodyException","description":"RequestParseBodyException","tag":"phpdoc:exceptionref","type":"Exception","methodName":"RequestParseBodyException"},{"id":"reserved.exceptions","name":"Predefined Exceptions","description":"Language Reference","tag":"part","type":"General","methodName":"Predefined Exceptions"},{"id":"class.traversable","name":"Traversable","description":"The Traversable interface","tag":"phpdoc:classref","type":"Class","methodName":"Traversable"},{"id":"iterator.current","name":"Iterator::current","description":"Return the current element","tag":"refentry","type":"Function","methodName":"current"},{"id":"iterator.key","name":"Iterator::key","description":"Return the key of the current element","tag":"refentry","type":"Function","methodName":"key"},{"id":"iterator.next","name":"Iterator::next","description":"Move forward to next element","tag":"refentry","type":"Function","methodName":"next"},{"id":"iterator.rewind","name":"Iterator::rewind","description":"Rewind the Iterator to the first element","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"iterator.valid","name":"Iterator::valid","description":"Checks if current position is valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.iterator","name":"Iterator","description":"The Iterator interface","tag":"phpdoc:classref","type":"Class","methodName":"Iterator"},{"id":"iteratoraggregate.getiterator","name":"IteratorAggregate::getIterator","description":"Retrieve an external iterator or traversable","tag":"refentry","type":"Function","methodName":"getIterator"},{"id":"class.iteratoraggregate","name":"IteratorAggregate","description":"The IteratorAggregate interface","tag":"phpdoc:classref","type":"Class","methodName":"IteratorAggregate"},{"id":"internaliterator.construct","name":"InternalIterator::__construct","description":"Private constructor to disallow direct instantiation","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"internaliterator.current","name":"InternalIterator::current","description":"Return the current element","tag":"refentry","type":"Function","methodName":"current"},{"id":"internaliterator.key","name":"InternalIterator::key","description":"Return the key of the current element","tag":"refentry","type":"Function","methodName":"key"},{"id":"internaliterator.next","name":"InternalIterator::next","description":"Move forward to next element","tag":"refentry","type":"Function","methodName":"next"},{"id":"internaliterator.rewind","name":"InternalIterator::rewind","description":"Rewind the Iterator to the first element","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"internaliterator.valid","name":"InternalIterator::valid","description":"Check if current position is valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.internaliterator","name":"InternalIterator","description":"The InternalIterator class","tag":"phpdoc:classref","type":"Class","methodName":"InternalIterator"},{"id":"throwable.getmessage","name":"Throwable::getMessage","description":"Gets the message","tag":"refentry","type":"Function","methodName":"getMessage"},{"id":"throwable.getcode","name":"Throwable::getCode","description":"Gets the exception code","tag":"refentry","type":"Function","methodName":"getCode"},{"id":"throwable.getfile","name":"Throwable::getFile","description":"Gets the file in which the object was created","tag":"refentry","type":"Function","methodName":"getFile"},{"id":"throwable.getline","name":"Throwable::getLine","description":"Gets the line on which the object was instantiated","tag":"refentry","type":"Function","methodName":"getLine"},{"id":"throwable.gettrace","name":"Throwable::getTrace","description":"Gets the stack trace","tag":"refentry","type":"Function","methodName":"getTrace"},{"id":"throwable.gettraceasstring","name":"Throwable::getTraceAsString","description":"Gets the stack trace as a string","tag":"refentry","type":"Function","methodName":"getTraceAsString"},{"id":"throwable.getprevious","name":"Throwable::getPrevious","description":"Returns the previous Throwable","tag":"refentry","type":"Function","methodName":"getPrevious"},{"id":"throwable.tostring","name":"Throwable::__toString","description":"Gets a string representation of the thrown object","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.throwable","name":"Throwable","description":"Throwable","tag":"phpdoc:classref","type":"Class","methodName":"Throwable"},{"id":"countable.count","name":"Countable::count","description":"Count elements of an object","tag":"refentry","type":"Function","methodName":"count"},{"id":"class.countable","name":"Countable","description":"The Countable interface","tag":"phpdoc:classref","type":"Class","methodName":"Countable"},{"id":"arrayaccess.offsetexists","name":"ArrayAccess::offsetExists","description":"Whether an offset exists","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"arrayaccess.offsetget","name":"ArrayAccess::offsetGet","description":"Offset to retrieve","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"arrayaccess.offsetset","name":"ArrayAccess::offsetSet","description":"Assign a value to the specified offset","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"arrayaccess.offsetunset","name":"ArrayAccess::offsetUnset","description":"Unset an offset","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"class.arrayaccess","name":"ArrayAccess","description":"The ArrayAccess interface","tag":"phpdoc:classref","type":"Class","methodName":"ArrayAccess"},{"id":"serializable.serialize","name":"Serializable::serialize","description":"String representation of object","tag":"refentry","type":"Function","methodName":"serialize"},{"id":"serializable.unserialize","name":"Serializable::unserialize","description":"Constructs the object","tag":"refentry","type":"Function","methodName":"unserialize"},{"id":"class.serializable","name":"Serializable","description":"The Serializable interface","tag":"phpdoc:classref","type":"Class","methodName":"Serializable"},{"id":"closure.construct","name":"Closure::__construct","description":"Constructor that disallows instantiation","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"closure.bind","name":"Closure::bind","description":"Duplicates a closure with a specific bound object and class scope","tag":"refentry","type":"Function","methodName":"bind"},{"id":"closure.bindto","name":"Closure::bindTo","description":"Duplicates the closure with a new bound object and class scope","tag":"refentry","type":"Function","methodName":"bindTo"},{"id":"closure.call","name":"Closure::call","description":"Binds and calls the closure","tag":"refentry","type":"Function","methodName":"call"},{"id":"closure.fromcallable","name":"Closure::fromCallable","description":"Converts a callable into a closure","tag":"refentry","type":"Function","methodName":"fromCallable"},{"id":"class.closure","name":"Closure","description":"The Closure class","tag":"phpdoc:classref","type":"Class","methodName":"Closure"},{"id":"class.stdclass","name":"stdClass","description":"The stdClass class","tag":"phpdoc:classref","type":"Class","methodName":"stdClass"},{"id":"generator.current","name":"Generator::current","description":"Get the yielded value","tag":"refentry","type":"Function","methodName":"current"},{"id":"generator.getreturn","name":"Generator::getReturn","description":"Get the return value of a generator","tag":"refentry","type":"Function","methodName":"getReturn"},{"id":"generator.key","name":"Generator::key","description":"Get the yielded key","tag":"refentry","type":"Function","methodName":"key"},{"id":"generator.next","name":"Generator::next","description":"Resume execution of the generator","tag":"refentry","type":"Function","methodName":"next"},{"id":"generator.rewind","name":"Generator::rewind","description":"Rewind the generator to the first yield","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"generator.send","name":"Generator::send","description":"Send a value to the generator","tag":"refentry","type":"Function","methodName":"send"},{"id":"generator.throw","name":"Generator::throw","description":"Throw an exception into the generator","tag":"refentry","type":"Function","methodName":"throw"},{"id":"generator.valid","name":"Generator::valid","description":"Check if the iterator has been closed","tag":"refentry","type":"Function","methodName":"valid"},{"id":"generator.wakeup","name":"Generator::__wakeup","description":"Serialize callback","tag":"refentry","type":"Function","methodName":"__wakeup"},{"id":"class.generator","name":"Generator","description":"The Generator class","tag":"phpdoc:classref","type":"Class","methodName":"Generator"},{"id":"fiber.construct","name":"Fiber::__construct","description":"Creates a new Fiber instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"fiber.start","name":"Fiber::start","description":"Start execution of the fiber","tag":"refentry","type":"Function","methodName":"start"},{"id":"fiber.resume","name":"Fiber::resume","description":"Resumes execution of the fiber with a value","tag":"refentry","type":"Function","methodName":"resume"},{"id":"fiber.throw","name":"Fiber::throw","description":"Resumes execution of the fiber with an exception","tag":"refentry","type":"Function","methodName":"throw"},{"id":"fiber.getreturn","name":"Fiber::getReturn","description":"Gets the value returned by the Fiber","tag":"refentry","type":"Function","methodName":"getReturn"},{"id":"fiber.isstarted","name":"Fiber::isStarted","description":"Determines if the fiber has started","tag":"refentry","type":"Function","methodName":"isStarted"},{"id":"fiber.issuspended","name":"Fiber::isSuspended","description":"Determines if the fiber is suspended","tag":"refentry","type":"Function","methodName":"isSuspended"},{"id":"fiber.isrunning","name":"Fiber::isRunning","description":"Determines if the fiber is running","tag":"refentry","type":"Function","methodName":"isRunning"},{"id":"fiber.isterminated","name":"Fiber::isTerminated","description":"Determines if the fiber has terminated","tag":"refentry","type":"Function","methodName":"isTerminated"},{"id":"fiber.suspend","name":"Fiber::suspend","description":"Suspends execution of the current fiber","tag":"refentry","type":"Function","methodName":"suspend"},{"id":"fiber.getcurrent","name":"Fiber::getCurrent","description":"Gets the currently executing Fiber instance","tag":"refentry","type":"Function","methodName":"getCurrent"},{"id":"class.fiber","name":"Fiber","description":"The Fiber class","tag":"phpdoc:classref","type":"Class","methodName":"Fiber"},{"id":"weakreference.construct","name":"WeakReference::__construct","description":"Constructor that disallows instantiation","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"weakreference.create","name":"WeakReference::create","description":"Create a new weak reference","tag":"refentry","type":"Function","methodName":"create"},{"id":"weakreference.get","name":"WeakReference::get","description":"Get a weakly referenced Object","tag":"refentry","type":"Function","methodName":"get"},{"id":"class.weakreference","name":"WeakReference","description":"The WeakReference class","tag":"phpdoc:classref","type":"Class","methodName":"WeakReference"},{"id":"weakmap.count","name":"WeakMap::count","description":"Counts the number of live entries in the map","tag":"refentry","type":"Function","methodName":"count"},{"id":"weakmap.getiterator","name":"WeakMap::getIterator","description":"Retrieve an external iterator","tag":"refentry","type":"Function","methodName":"getIterator"},{"id":"weakmap.offsetexists","name":"WeakMap::offsetExists","description":"Checks whether a certain object is in the map","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"weakmap.offsetget","name":"WeakMap::offsetGet","description":"Returns the value pointed to by a certain object","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"weakmap.offsetset","name":"WeakMap::offsetSet","description":"Updates the map with a new key-value pair","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"weakmap.offsetunset","name":"WeakMap::offsetUnset","description":"Removes an entry from the map","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"class.weakmap","name":"WeakMap","description":"The WeakMap class","tag":"phpdoc:classref","type":"Class","methodName":"WeakMap"},{"id":"stringable.tostring","name":"Stringable::__toString","description":"Gets a string representation of the object","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.stringable","name":"Stringable","description":"The Stringable interface","tag":"phpdoc:classref","type":"Class","methodName":"Stringable"},{"id":"unitenum.cases","name":"UnitEnum::cases","description":"Generates a list of cases on an enum","tag":"refentry","type":"Function","methodName":"cases"},{"id":"class.unitenum","name":"UnitEnum","description":"The UnitEnum interface","tag":"phpdoc:classref","type":"Class","methodName":"UnitEnum"},{"id":"backedenum.from","name":"BackedEnum::from","description":"Maps a scalar to an enum instance","tag":"refentry","type":"Function","methodName":"from"},{"id":"backedenum.tryfrom","name":"BackedEnum::tryFrom","description":"Maps a scalar to an enum instance or null","tag":"refentry","type":"Function","methodName":"tryFrom"},{"id":"class.backedenum","name":"BackedEnum","description":"The BackedEnum interface","tag":"phpdoc:classref","type":"Class","methodName":"BackedEnum"},{"id":"sensitiveparametervalue.construct","name":"SensitiveParameterValue::__construct","description":"Constructs a new SensitiveParameterValue object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"sensitiveparametervalue.debuginfo","name":"SensitiveParameterValue::__debugInfo","description":"Protects the sensitive value against accidental exposure","tag":"refentry","type":"Function","methodName":"__debugInfo"},{"id":"sensitiveparametervalue.getvalue","name":"SensitiveParameterValue::getValue","description":"Returns the sensitive value","tag":"refentry","type":"Function","methodName":"getValue"},{"id":"class.sensitiveparametervalue","name":"SensitiveParameterValue","description":"The SensitiveParameterValue class","tag":"phpdoc:classref","type":"Class","methodName":"SensitiveParameterValue"},{"id":"class.php-incomplete-class","name":"__PHP_Incomplete_Class","description":"The __PHP_Incomplete_Class class","tag":"phpdoc:classref","type":"Class","methodName":"__PHP_Incomplete_Class"},{"id":"reserved.interfaces","name":"Predefined Interfaces and Classes","description":"Language Reference","tag":"part","type":"General","methodName":"Predefined Interfaces and Classes"},{"id":"attribute.construct","name":"Attribute::__construct","description":"Construct a new Attribute instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.attribute","name":"Attribute","description":"The Attribute attribute","tag":"phpdoc:classref","type":"Class","methodName":"Attribute"},{"id":"allowdynamicproperties.construct","name":"AllowDynamicProperties::__construct","description":"Construct a new AllowDynamicProperties attribute instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.allowdynamicproperties","name":"AllowDynamicProperties","description":"The AllowDynamicProperties attribute","tag":"phpdoc:classref","type":"Class","methodName":"AllowDynamicProperties"},{"id":"deprecated.construct","name":"Deprecated::__construct","description":"Construct a new Deprecated attribute instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.deprecated","name":"Deprecated","description":"The Deprecated attribute","tag":"phpdoc:classref","type":"Class","methodName":"Deprecated"},{"id":"override.construct","name":"Override::__construct","description":"Construct a new Override attribute instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.override","name":"Override","description":"The Override attribute","tag":"phpdoc:classref","type":"Class","methodName":"Override"},{"id":"returntypewillchange.construct","name":"ReturnTypeWillChange::__construct","description":"Construct a new ReturnTypeWillChange attribute instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.returntypewillchange","name":"ReturnTypeWillChange","description":"The ReturnTypeWillChange attribute","tag":"phpdoc:classref","type":"Class","methodName":"ReturnTypeWillChange"},{"id":"sensitiveparameter.construct","name":"SensitiveParameter::__construct","description":"Construct a new SensitiveParameter attribute instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.sensitiveparameter","name":"SensitiveParameter","description":"The SensitiveParameter attribute","tag":"phpdoc:classref","type":"Class","methodName":"SensitiveParameter"},{"id":"reserved.attributes","name":"Predefined Attributes","description":"Language Reference","tag":"part","type":"General","methodName":"Predefined Attributes"},{"id":"context.socket","name":"Socket context options","description":"Socket context option listing","tag":"stream_context_option","type":"General","methodName":"Socket context options"},{"id":"context.http","name":"HTTP context options","description":"HTTP context option listing","tag":"stream_context_option","type":"General","methodName":"HTTP context options"},{"id":"context.ftp","name":"FTP context options","description":"FTP context option listing","tag":"stream_context_option","type":"General","methodName":"FTP context options"},{"id":"context.ssl","name":"SSL context options","description":"SSL context option listing","tag":"stream_context_option","type":"General","methodName":"SSL context options"},{"id":"context.phar","name":"Phar context options","description":"Phar context option listing","tag":"stream_context_option","type":"General","methodName":"Phar context options"},{"id":"context.params","name":"Context parameters","description":"Context parameter listing","tag":"stream_context_option","type":"General","methodName":"Context parameters"},{"id":"context.zip","name":"Zip context options","description":"Zip context option listing","tag":"stream_context_option","type":"General","methodName":"Zip context options"},{"id":"context.zlib","name":"Zlib context options","description":"Zlib context option listing","tag":"stream_context_option","type":"General","methodName":"Zlib context options"},{"id":"context","name":"Context options and parameters","description":"Language Reference","tag":"reference","type":"Extension","methodName":"Context options and parameters"},{"id":"wrappers.file","name":"file:\/\/","description":"Accessing local filesystem","tag":"stream_wrapper","type":"General","methodName":"file:\/\/"},{"id":"wrappers.http","name":"https:\/\/","description":"Accessing HTTP(s) URLs","tag":"stream_wrapper","type":"General","methodName":"https:\/\/"},{"id":"wrappers.http","name":"http:\/\/","description":"Accessing HTTP(s) URLs","tag":"stream_wrapper","type":"General","methodName":"http:\/\/"},{"id":"wrappers.ftp","name":"ftps:\/\/","description":"Accessing FTP(s) URLs","tag":"stream_wrapper","type":"General","methodName":"ftps:\/\/"},{"id":"wrappers.ftp","name":"ftp:\/\/","description":"Accessing FTP(s) URLs","tag":"stream_wrapper","type":"General","methodName":"ftp:\/\/"},{"id":"wrappers.php","name":"php:\/\/","description":"Accessing various I\/O streams","tag":"stream_wrapper","type":"General","methodName":"php:\/\/"},{"id":"wrappers.compression","name":"zip:\/\/","description":"Compression Streams","tag":"stream_wrapper","type":"General","methodName":"zip:\/\/"},{"id":"wrappers.compression","name":"bzip2:\/\/","description":"Compression Streams","tag":"stream_wrapper","type":"General","methodName":"bzip2:\/\/"},{"id":"wrappers.compression","name":"zlib:\/\/","description":"Compression Streams","tag":"stream_wrapper","type":"General","methodName":"zlib:\/\/"},{"id":"wrappers.data","name":"data:\/\/","description":"Data (RFC 2397)","tag":"stream_wrapper","type":"General","methodName":"data:\/\/"},{"id":"wrappers.glob","name":"glob:\/\/","description":"Find pathnames matching pattern","tag":"stream_wrapper","type":"General","methodName":"glob:\/\/"},{"id":"wrappers.phar","name":"phar:\/\/","description":"PHP Archive","tag":"stream_wrapper","type":"General","methodName":"phar:\/\/"},{"id":"wrappers.ssh2","name":"ssh2:\/\/","description":"Secure Shell 2","tag":"stream_wrapper","type":"General","methodName":"ssh2:\/\/"},{"id":"wrappers.rar","name":"rar:\/\/","description":"RAR","tag":"stream_wrapper","type":"General","methodName":"rar:\/\/"},{"id":"wrappers.audio","name":"ogg:\/\/","description":"Audio streams","tag":"stream_wrapper","type":"General","methodName":"ogg:\/\/"},{"id":"wrappers.expect","name":"expect:\/\/","description":"Process Interaction Streams","tag":"stream_wrapper","type":"General","methodName":"expect:\/\/"},{"id":"wrappers","name":"Supported Protocols and Wrappers","description":"Language Reference","tag":"reference","type":"Extension","methodName":"Supported Protocols and Wrappers"},{"id":"langref","name":"Language Reference","description":"PHP Manual","tag":"book","type":"Extension","methodName":"Language Reference"},{"id":"security.intro","name":"Introduction","description":"Security","tag":"chapter","type":"General","methodName":"Introduction"},{"id":"security.general","name":"General considerations","description":"Security","tag":"chapter","type":"General","methodName":"General considerations"},{"id":"security.cgi-bin.attacks","name":"Possible attacks","description":"Security","tag":"sect1","type":"General","methodName":"Possible attacks"},{"id":"security.cgi-bin.default","name":"Case 1: only public files served","description":"Security","tag":"sect1","type":"General","methodName":"Case 1: only public files served"},{"id":"security.cgi-bin.force-redirect","name":"Case 2: using cgi.force_redirect","description":"Security","tag":"sect1","type":"General","methodName":"Case 2: using cgi.force_redirect"},{"id":"security.cgi-bin.doc-root","name":"Case 3: setting doc_root or user_dir","description":"Security","tag":"sect1","type":"General","methodName":"Case 3: setting doc_root or user_dir"},{"id":"security.cgi-bin.shell","name":"Case 4: PHP parser outside of web tree","description":"Security","tag":"sect1","type":"General","methodName":"Case 4: PHP parser outside of web tree"},{"id":"security.cgi-bin","name":"Installed as CGI binary","description":"Security","tag":"chapter","type":"General","methodName":"Installed as CGI binary"},{"id":"security.apache","name":"Installed as an Apache module","description":"Security","tag":"chapter","type":"General","methodName":"Installed as an Apache module"},{"id":"security.sessions","name":"Session Security","description":"Security","tag":"chapter","type":"General","methodName":"Session Security"},{"id":"security.filesystem.nullbytes","name":"Null bytes related issues","description":"Security","tag":"sect1","type":"General","methodName":"Null bytes related issues"},{"id":"security.filesystem","name":"Filesystem Security","description":"Security","tag":"chapter","type":"General","methodName":"Filesystem Security"},{"id":"security.database.design","name":"Designing Databases","description":"Security","tag":"sect1","type":"General","methodName":"Designing Databases"},{"id":"security.database.connection","name":"Connecting to Database","description":"Security","tag":"sect1","type":"General","methodName":"Connecting to Database"},{"id":"security.database.storage","name":"Encrypted Storage Model","description":"Security","tag":"sect1","type":"General","methodName":"Encrypted Storage Model"},{"id":"security.database.sql-injection","name":"SQL Injection","description":"Security","tag":"sect1","type":"General","methodName":"SQL Injection"},{"id":"security.database","name":"Database Security","description":"Security","tag":"chapter","type":"General","methodName":"Database Security"},{"id":"security.errors","name":"Error Reporting","description":"Security","tag":"chapter","type":"General","methodName":"Error Reporting"},{"id":"security.variables","name":"User Submitted Data","description":"Security","tag":"chapter","type":"General","methodName":"User Submitted Data"},{"id":"security.hiding","name":"Hiding PHP","description":"Security","tag":"chapter","type":"General","methodName":"Hiding PHP"},{"id":"security.current","name":"Keeping Current","description":"Security","tag":"chapter","type":"General","methodName":"Keeping Current"},{"id":"security","name":"Security","description":"PHP Manual","tag":"book","type":"Extension","methodName":"Security"},{"id":"features.http-auth","name":"HTTP authentication with PHP","description":"Features","tag":"chapter","type":"General","methodName":"HTTP authentication with PHP"},{"id":"features.cookies","name":"Cookies","description":"Features","tag":"chapter","type":"General","methodName":"Cookies"},{"id":"features.sessions","name":"Sessions","description":"Features","tag":"chapter","type":"General","methodName":"Sessions"},{"id":"features.file-upload.post-method","name":"POST method uploads","description":"Features","tag":"sect1","type":"General","methodName":"POST method uploads"},{"id":"features.file-upload.errors","name":"Error Messages Explained","description":"Features","tag":"sect1","type":"General","methodName":"Error Messages Explained"},{"id":"features.file-upload.common-pitfalls","name":"Common Pitfalls","description":"Features","tag":"sect1","type":"General","methodName":"Common Pitfalls"},{"id":"features.file-upload.multiple","name":"Uploading multiple files","description":"Features","tag":"sect1","type":"General","methodName":"Uploading multiple files"},{"id":"features.file-upload.put-method","name":"PUT method support","description":"Features","tag":"sect1","type":"General","methodName":"PUT method support"},{"id":"features.file-upload.errors.seealso","name":"See Also","description":"Features","tag":"sect1","type":"General","methodName":"See Also"},{"id":"features.file-upload","name":"Handling file uploads","description":"Features","tag":"chapter","type":"General","methodName":"Handling file uploads"},{"id":"features.remote-files","name":"Using remote files","description":"Features","tag":"chapter","type":"General","methodName":"Using remote files"},{"id":"features.connection-handling","name":"Connection handling","description":"Features","tag":"chapter","type":"General","methodName":"Connection handling"},{"id":"features.persistent-connections","name":"Persistent Database Connections","description":"Features","tag":"chapter","type":"General","methodName":"Persistent Database Connections"},{"id":"features.commandline.differences","name":"Differences to other SAPIs","description":"Features","tag":"section","type":"General","methodName":"Differences to other SAPIs"},{"id":"features.commandline.options","name":"Options","description":"Command line options","tag":"section","type":"General","methodName":"Options"},{"id":"features.commandline.usage","name":"Usage","description":"Executing PHP files","tag":"section","type":"General","methodName":"Usage"},{"id":"features.commandline.io-streams","name":"I\/O streams","description":"Input\/output streams","tag":"section","type":"General","methodName":"I\/O streams"},{"id":"features.commandline.interactive","name":"Interactive shell","description":"Features","tag":"section","type":"General","methodName":"Interactive shell"},{"id":"features.commandline.webserver","name":"Built-in web server","description":"Features","tag":"section","type":"General","methodName":"Built-in web server"},{"id":"features.commandline.ini","name":"INI settings","description":"Features","tag":"section","type":"General","methodName":"INI settings"},{"id":"features.commandline","name":"Command line usage","description":"Using PHP from the command line","tag":"chapter","type":"General","methodName":"Command line usage"},{"id":"features.gc.refcounting-basics","name":"Reference Counting Basics","description":"Features","tag":"sect1","type":"General","methodName":"Reference Counting Basics"},{"id":"features.gc.collecting-cycles","name":"Collecting Cycles","description":"Features","tag":"sect1","type":"General","methodName":"Collecting Cycles"},{"id":"features.gc.performance-considerations","name":"Performance Considerations","description":"Features","tag":"sect1","type":"General","methodName":"Performance Considerations"},{"id":"features.gc","name":"Garbage Collection","description":"Features","tag":"chapter","type":"General","methodName":"Garbage Collection"},{"id":"features.dtrace.introduction","name":"Introduction to PHP and DTrace","description":"Features","tag":"sect1","type":"General","methodName":"Introduction to PHP and DTrace"},{"id":"features.dtrace.dtrace","name":"Using PHP and DTrace","description":"Features","tag":"sect1","type":"General","methodName":"Using PHP and DTrace"},{"id":"features.dtrace.systemtap","name":"Using SystemTap with PHP DTrace Static Probes","description":"Features","tag":"sect1","type":"General","methodName":"Using SystemTap with PHP DTrace Static Probes"},{"id":"features.dtrace","name":"DTrace Dynamic Tracing","description":"Features","tag":"chapter","type":"General","methodName":"DTrace Dynamic Tracing"},{"id":"features","name":"Features","description":"PHP Manual","tag":"book","type":"Extension","methodName":"Features"},{"id":"intro.apcu","name":"Introduction","description":"APC User Cache","tag":"preface","type":"General","methodName":"Introduction"},{"id":"apcu.installation","name":"Installation","description":"APC User Cache","tag":"section","type":"General","methodName":"Installation"},{"id":"apcu.configuration","name":"Runtime Configuration","description":"APC User Cache","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"apcu.setup","name":"Installing\/Configuring","description":"APC User Cache","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"apcu.constants","name":"Predefined Constants","description":"APC User Cache","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.apcu-add","name":"apcu_add","description":"Cache a new variable in the data store","tag":"refentry","type":"Function","methodName":"apcu_add"},{"id":"function.apcu-cache-info","name":"apcu_cache_info","description":"Retrieves cached information from APCu's data store","tag":"refentry","type":"Function","methodName":"apcu_cache_info"},{"id":"function.apcu-cas","name":"apcu_cas","description":"Updates an old value with a new value","tag":"refentry","type":"Function","methodName":"apcu_cas"},{"id":"function.apcu-clear-cache","name":"apcu_clear_cache","description":"Clears the APCu cache","tag":"refentry","type":"Function","methodName":"apcu_clear_cache"},{"id":"function.apcu-dec","name":"apcu_dec","description":"Decrease a stored number","tag":"refentry","type":"Function","methodName":"apcu_dec"},{"id":"function.apcu-delete","name":"apcu_delete","description":"Removes a stored variable from the cache","tag":"refentry","type":"Function","methodName":"apcu_delete"},{"id":"function.apcu-enabled","name":"apcu_enabled","description":"Whether APCu is usable in the current environment","tag":"refentry","type":"Function","methodName":"apcu_enabled"},{"id":"function.apcu-entry","name":"apcu_entry","description":"Atomically fetch or generate a cache entry","tag":"refentry","type":"Function","methodName":"apcu_entry"},{"id":"function.apcu-exists","name":"apcu_exists","description":"Checks if entry exists","tag":"refentry","type":"Function","methodName":"apcu_exists"},{"id":"function.apcu-fetch","name":"apcu_fetch","description":"Fetch a stored variable from the cache","tag":"refentry","type":"Function","methodName":"apcu_fetch"},{"id":"function.apcu-inc","name":"apcu_inc","description":"Increase a stored number","tag":"refentry","type":"Function","methodName":"apcu_inc"},{"id":"function.apcu-key-info","name":"apcu_key_info","description":"Get detailed information about the cache key","tag":"refentry","type":"Function","methodName":"apcu_key_info"},{"id":"function.apcu-sma-info","name":"apcu_sma_info","description":"Retrieves APCu Shared Memory Allocation information","tag":"refentry","type":"Function","methodName":"apcu_sma_info"},{"id":"function.apcu-store","name":"apcu_store","description":"Cache a variable in the data store","tag":"refentry","type":"Function","methodName":"apcu_store"},{"id":"ref.apcu","name":"APCu Functions","description":"APC User Cache","tag":"reference","type":"Extension","methodName":"APCu Functions"},{"id":"apcuiterator.construct","name":"APCUIterator::__construct","description":"Constructs an APCUIterator iterator object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"apcuiterator.current","name":"APCUIterator::current","description":"Get current item","tag":"refentry","type":"Function","methodName":"current"},{"id":"apcuiterator.gettotalcount","name":"APCUIterator::getTotalCount","description":"Get total count","tag":"refentry","type":"Function","methodName":"getTotalCount"},{"id":"apcuiterator.gettotalhits","name":"APCUIterator::getTotalHits","description":"Get total cache hits","tag":"refentry","type":"Function","methodName":"getTotalHits"},{"id":"apcuiterator.gettotalsize","name":"APCUIterator::getTotalSize","description":"Get total cache size","tag":"refentry","type":"Function","methodName":"getTotalSize"},{"id":"apcuiterator.key","name":"APCUIterator::key","description":"Get iterator key","tag":"refentry","type":"Function","methodName":"key"},{"id":"apcuiterator.next","name":"APCUIterator::next","description":"Move pointer to next item","tag":"refentry","type":"Function","methodName":"next"},{"id":"apcuiterator.rewind","name":"APCUIterator::rewind","description":"Rewinds iterator","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"apcuiterator.valid","name":"APCUIterator::valid","description":"Checks if current position is valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.apcuiterator","name":"APCUIterator","description":"The APCUIterator class","tag":"phpdoc:classref","type":"Class","methodName":"APCUIterator"},{"id":"book.apcu","name":"APCu","description":"APC User Cache","tag":"book","type":"Extension","methodName":"APCu"},{"id":"intro.componere","name":"Introduction","description":"Componere","tag":"preface","type":"General","methodName":"Introduction"},{"id":"componere.requirements","name":"Requirements","description":"Componere","tag":"section","type":"General","methodName":"Requirements"},{"id":"componere.installation","name":"Installation","description":"Componere","tag":"section","type":"General","methodName":"Installation"},{"id":"componere.setup","name":"Installing\/Configuring","description":"Componere","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"componere-abstract-definition.addinterface","name":"Componere\\Abstract\\Definition::addInterface","description":"Add Interface","tag":"refentry","type":"Function","methodName":"addInterface"},{"id":"componere-abstract-definition.addmethod","name":"Componere\\Abstract\\Definition::addMethod","description":"Add Method","tag":"refentry","type":"Function","methodName":"addMethod"},{"id":"componere-abstract-definition.addtrait","name":"Componere\\Abstract\\Definition::addTrait","description":"Add Trait","tag":"refentry","type":"Function","methodName":"addTrait"},{"id":"componere-abstract-definition.getreflector","name":"Componere\\Abstract\\Definition::getReflector","description":"Reflection","tag":"refentry","type":"Function","methodName":"getReflector"},{"id":"class.componere-abstract-definition","name":"Componere\\Abstract\\Definition","description":"The Componere\\Abstract\\Definition class","tag":"phpdoc:classref","type":"Class","methodName":"Componere\\Abstract\\Definition"},{"id":"componere-definition.construct","name":"Componere\\Definition::__construct","description":"Definition Construction","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"componere-definition.addconstant","name":"Componere\\Definition::addConstant","description":"Add Constant","tag":"refentry","type":"Function","methodName":"addConstant"},{"id":"componere-definition.addproperty","name":"Componere\\Definition::addProperty","description":"Add Property","tag":"refentry","type":"Function","methodName":"addProperty"},{"id":"componere-definition.register","name":"Componere\\Definition::register","description":"Registration","tag":"refentry","type":"Function","methodName":"register"},{"id":"componere-definition.isregistered","name":"Componere\\Definition::isRegistered","description":"State Detection","tag":"refentry","type":"Function","methodName":"isRegistered"},{"id":"componere-definition.getclosure","name":"Componere\\Definition::getClosure","description":"Get Closure","tag":"refentry","type":"Function","methodName":"getClosure"},{"id":"componere-definition.getclosures","name":"Componere\\Definition::getClosures","description":"Get Closures","tag":"refentry","type":"Function","methodName":"getClosures"},{"id":"class.componere-definition","name":"Componere\\Definition","description":"The Componere\\Definition class","tag":"phpdoc:classref","type":"Class","methodName":"Componere\\Definition"},{"id":"componere-patch.construct","name":"Componere\\Patch::__construct","description":"Patch Construction","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"componere-patch.apply","name":"Componere\\Patch::apply","description":"Application","tag":"refentry","type":"Function","methodName":"apply"},{"id":"componere-patch.revert","name":"Componere\\Patch::revert","description":"Reversal","tag":"refentry","type":"Function","methodName":"revert"},{"id":"componere-patch.isapplied","name":"Componere\\Patch::isApplied","description":"State Detection","tag":"refentry","type":"Function","methodName":"isApplied"},{"id":"componere-patch.derive","name":"Componere\\Patch::derive","description":"Patch Derivation","tag":"refentry","type":"Function","methodName":"derive"},{"id":"componere-patch.getclosure","name":"Componere\\Patch::getClosure","description":"Get Closure","tag":"refentry","type":"Function","methodName":"getClosure"},{"id":"componere-patch.getclosures","name":"Componere\\Patch::getClosures","description":"Get Closures","tag":"refentry","type":"Function","methodName":"getClosures"},{"id":"class.componere-patch","name":"Componere\\Patch","description":"The Componere\\Patch class","tag":"phpdoc:classref","type":"Class","methodName":"Componere\\Patch"},{"id":"componere-method.construct","name":"Componere\\Method::__construct","description":"Method Construction","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"componere-method.setprivate","name":"Componere\\Method::setPrivate","description":"Accessibility Modification","tag":"refentry","type":"Function","methodName":"setPrivate"},{"id":"componere-method.setprotected","name":"Componere\\Method::setProtected","description":"Accessibility Modification","tag":"refentry","type":"Function","methodName":"setProtected"},{"id":"componere-method.setstatic","name":"Componere\\Method::setStatic","description":"Accessibility Modification","tag":"refentry","type":"Function","methodName":"setStatic"},{"id":"componere-method.getreflector","name":"Componere\\Method::getReflector","description":"Reflection","tag":"refentry","type":"Function","methodName":"getReflector"},{"id":"class.componere-method","name":"Componere\\Method","description":"The Componere\\Method class","tag":"phpdoc:classref","type":"Class","methodName":"Componere\\Method"},{"id":"componere-value.construct","name":"Componere\\Value::__construct","description":"Value Construction","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"componere-value.setprivate","name":"Componere\\Value::setPrivate","description":"Accessibility Modification","tag":"refentry","type":"Function","methodName":"setPrivate"},{"id":"componere-value.setprotected","name":"Componere\\Value::setProtected","description":"Accessibility Modification","tag":"refentry","type":"Function","methodName":"setProtected"},{"id":"componere-value.setstatic","name":"Componere\\Value::setStatic","description":"Accessibility Modification","tag":"refentry","type":"Function","methodName":"setStatic"},{"id":"componere-value.isprivate","name":"Componere\\Value::isPrivate","description":"Accessibility Detection","tag":"refentry","type":"Function","methodName":"isPrivate"},{"id":"componere-value.isprotected","name":"Componere\\Value::isProtected","description":"Accessibility Detection","tag":"refentry","type":"Function","methodName":"isProtected"},{"id":"componere-value.isstatic","name":"Componere\\Value::isStatic","description":"Accessibility Detection","tag":"refentry","type":"Function","methodName":"isStatic"},{"id":"componere-value.hasdefault","name":"Componere\\Value::hasDefault","description":"Value Interaction","tag":"refentry","type":"Function","methodName":"hasDefault"},{"id":"class.componere-value","name":"Componere\\Value","description":"The Componere\\Value class","tag":"phpdoc:classref","type":"Class","methodName":"Componere\\Value"},{"id":"componere.cast","name":"Componere\\cast","description":"Casting","tag":"refentry","type":"Function","methodName":"Componere\\cast"},{"id":"componere.cast_by_ref","name":"Componere\\cast_by_ref","description":"Casting","tag":"refentry","type":"Function","methodName":"Componere\\cast_by_ref"},{"id":"reference.componere","name":"Componere Functions","description":"Componere","tag":"reference","type":"Extension","methodName":"Componere Functions"},{"id":"book.componere","name":"Componere","description":"Componere","tag":"book","type":"Extension","methodName":"Componere"},{"id":"intro.errorfunc","name":"Introduction","description":"Error Handling and Logging","tag":"preface","type":"General","methodName":"Introduction"},{"id":"errorfunc.configuration","name":"Runtime Configuration","description":"Error Handling and Logging","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"errorfunc.setup","name":"Installing\/Configuring","description":"Error Handling and Logging","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"errorfunc.constants","name":"Predefined Constants","description":"Error Handling and Logging","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"errorfunc.examples","name":"Examples","description":"Error Handling and Logging","tag":"appendix","type":"General","methodName":"Examples"},{"id":"function.debug-backtrace","name":"debug_backtrace","description":"Generates a backtrace","tag":"refentry","type":"Function","methodName":"debug_backtrace"},{"id":"function.debug-print-backtrace","name":"debug_print_backtrace","description":"Prints a backtrace","tag":"refentry","type":"Function","methodName":"debug_print_backtrace"},{"id":"function.error-clear-last","name":"error_clear_last","description":"Clear the most recent error","tag":"refentry","type":"Function","methodName":"error_clear_last"},{"id":"function.error-get-last","name":"error_get_last","description":"Get the last occurred error","tag":"refentry","type":"Function","methodName":"error_get_last"},{"id":"function.error-log","name":"error_log","description":"Send an error message to the defined error handling routines","tag":"refentry","type":"Function","methodName":"error_log"},{"id":"function.error-reporting","name":"error_reporting","description":"Sets which PHP errors are reported","tag":"refentry","type":"Function","methodName":"error_reporting"},{"id":"function.get-error-handler","name":"get_error_handler","description":"Gets the user-defined error handler function","tag":"refentry","type":"Function","methodName":"get_error_handler"},{"id":"function.get-exception-handler","name":"get_exception_handler","description":"Gets the user-defined exception handler function","tag":"refentry","type":"Function","methodName":"get_exception_handler"},{"id":"function.restore-error-handler","name":"restore_error_handler","description":"Restores the previous error handler function","tag":"refentry","type":"Function","methodName":"restore_error_handler"},{"id":"function.restore-exception-handler","name":"restore_exception_handler","description":"Restores the previously defined exception handler function","tag":"refentry","type":"Function","methodName":"restore_exception_handler"},{"id":"function.set-error-handler","name":"set_error_handler","description":"Sets a user-defined error handler function","tag":"refentry","type":"Function","methodName":"set_error_handler"},{"id":"function.set-exception-handler","name":"set_exception_handler","description":"Sets a user-defined exception handler function","tag":"refentry","type":"Function","methodName":"set_exception_handler"},{"id":"function.trigger-error","name":"trigger_error","description":"Generates a user-level error\/warning\/notice message","tag":"refentry","type":"Function","methodName":"trigger_error"},{"id":"function.user-error","name":"user_error","description":"Alias of trigger_error","tag":"refentry","type":"Function","methodName":"user_error"},{"id":"ref.errorfunc","name":"Error Handling Functions","description":"Error Handling and Logging","tag":"reference","type":"Extension","methodName":"Error Handling Functions"},{"id":"book.errorfunc","name":"Error Handling","description":"Error Handling and Logging","tag":"book","type":"Extension","methodName":"Error Handling"},{"id":"intro.ffi","name":"Introduction","description":"Foreign Function Interface","tag":"preface","type":"General","methodName":"Introduction"},{"id":"ffi.requirements","name":"Requirements","description":"Foreign Function Interface","tag":"section","type":"General","methodName":"Requirements"},{"id":"ffi.installation","name":"Installation","description":"Foreign Function Interface","tag":"section","type":"General","methodName":"Installation"},{"id":"ffi.configuration","name":"Runtime Configuration","description":"Foreign Function Interface","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"ffi.setup","name":"Installing\/Configuring","description":"Foreign Function Interface","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"ffi.examples-basic","name":"Basic FFI usage","description":"Foreign Function Interface","tag":"section","type":"General","methodName":"Basic FFI usage"},{"id":"ffi.examples-callback","name":"PHP Callbacks","description":"Foreign Function Interface","tag":"section","type":"General","methodName":"PHP Callbacks"},{"id":"ffi.examples-complete","name":"A Complete PHP\/FFI\/preloading Example","description":"Foreign Function Interface","tag":"section","type":"General","methodName":"A Complete PHP\/FFI\/preloading Example"},{"id":"ffi.examples","name":"Examples","description":"Foreign Function Interface","tag":"chapter","type":"General","methodName":"Examples"},{"id":"ffi.addr","name":"FFI::addr","description":"Creates an unmanaged pointer to C data","tag":"refentry","type":"Function","methodName":"addr"},{"id":"ffi.alignof","name":"FFI::alignof","description":"Gets the alignment","tag":"refentry","type":"Function","methodName":"alignof"},{"id":"ffi.arraytype","name":"FFI::arrayType","description":"Dynamically constructs a new C array type","tag":"refentry","type":"Function","methodName":"arrayType"},{"id":"ffi.cast","name":"FFI::cast","description":"Performs a C type cast","tag":"refentry","type":"Function","methodName":"cast"},{"id":"ffi.cdef","name":"FFI::cdef","description":"Creates a new FFI object","tag":"refentry","type":"Function","methodName":"cdef"},{"id":"ffi.free","name":"FFI::free","description":"Releases an unmanaged data structure","tag":"refentry","type":"Function","methodName":"free"},{"id":"ffi.isnull","name":"FFI::isNull","description":"Checks whether a FFI\\CData is a null pointer","tag":"refentry","type":"Function","methodName":"isNull"},{"id":"ffi.load","name":"FFI::load","description":"Loads C declarations from a C header file","tag":"refentry","type":"Function","methodName":"load"},{"id":"ffi.memcmp","name":"FFI::memcmp","description":"Compares memory areas","tag":"refentry","type":"Function","methodName":"memcmp"},{"id":"ffi.memcpy","name":"FFI::memcpy","description":"Copies one memory area to another","tag":"refentry","type":"Function","methodName":"memcpy"},{"id":"ffi.memset","name":"FFI::memset","description":"Fills a memory area","tag":"refentry","type":"Function","methodName":"memset"},{"id":"ffi.new","name":"FFI::new","description":"Creates a C data structure","tag":"refentry","type":"Function","methodName":"new"},{"id":"ffi.scope","name":"FFI::scope","description":"Instantiates an FFI object with C declarations parsed during preloading","tag":"refentry","type":"Function","methodName":"scope"},{"id":"ffi.sizeof","name":"FFI::sizeof","description":"Gets the size of C data or types","tag":"refentry","type":"Function","methodName":"sizeof"},{"id":"ffi.string","name":"FFI::string","description":"Creates a PHP string from a memory area","tag":"refentry","type":"Function","methodName":"string"},{"id":"ffi.type","name":"FFI::type","description":"Creates an FFI\\CType object from a C declaration","tag":"refentry","type":"Function","methodName":"type"},{"id":"ffi.typeof","name":"FFI::typeof","description":"Gets the FFI\\CType of FFI\\CData","tag":"refentry","type":"Function","methodName":"typeof"},{"id":"class.ffi","name":"FFI","description":"Main interface to C code and data","tag":"phpdoc:classref","type":"Class","methodName":"FFI"},{"id":"class.ffi-cdata","name":"FFI\\CData","description":"C Data Handles","tag":"phpdoc:classref","type":"Class","methodName":"FFI\\CData"},{"id":"ffi-ctype.getalignment","name":"FFI\\CType::getAlignment","description":"Description","tag":"refentry","type":"Function","methodName":"getAlignment"},{"id":"ffi-ctype.getarrayelementtype","name":"FFI\\CType::getArrayElementType","description":"Description","tag":"refentry","type":"Function","methodName":"getArrayElementType"},{"id":"ffi-ctype.getarraylength","name":"FFI\\CType::getArrayLength","description":"Description","tag":"refentry","type":"Function","methodName":"getArrayLength"},{"id":"ffi-ctype.getattributes","name":"FFI\\CType::getAttributes","description":"Description","tag":"refentry","type":"Function","methodName":"getAttributes"},{"id":"ffi-ctype.getenumkind","name":"FFI\\CType::getEnumKind","description":"Description","tag":"refentry","type":"Function","methodName":"getEnumKind"},{"id":"ffi-ctype.getfuncabi","name":"FFI\\CType::getFuncABI","description":"Description","tag":"refentry","type":"Function","methodName":"getFuncABI"},{"id":"ffi-ctype.getfuncparametercount","name":"FFI\\CType::getFuncParameterCount","description":"Retrieve the count of parameters of a function type","tag":"refentry","type":"Function","methodName":"getFuncParameterCount"},{"id":"ffi-ctype.getfuncparametertype","name":"FFI\\CType::getFuncParameterType","description":"Retrieve the type of a function parameter","tag":"refentry","type":"Function","methodName":"getFuncParameterType"},{"id":"ffi-ctype.getfuncreturntype","name":"FFI\\CType::getFuncReturnType","description":"Description","tag":"refentry","type":"Function","methodName":"getFuncReturnType"},{"id":"ffi-ctype.getkind","name":"FFI\\CType::getKind","description":"Description","tag":"refentry","type":"Function","methodName":"getKind"},{"id":"ffi-ctype.getname","name":"FFI\\CType::getName","description":"Description","tag":"refentry","type":"Function","methodName":"getName"},{"id":"ffi-ctype.getpointertype","name":"FFI\\CType::getPointerType","description":"Description","tag":"refentry","type":"Function","methodName":"getPointerType"},{"id":"ffi-ctype.getsize","name":"FFI\\CType::getSize","description":"Description","tag":"refentry","type":"Function","methodName":"getSize"},{"id":"ffi-ctype.getstructfieldnames","name":"FFI\\CType::getStructFieldNames","description":"Description","tag":"refentry","type":"Function","methodName":"getStructFieldNames"},{"id":"ffi-ctype.getstructfieldoffset","name":"FFI\\CType::getStructFieldOffset","description":"Description","tag":"refentry","type":"Function","methodName":"getStructFieldOffset"},{"id":"ffi-ctype.getstructfieldtype","name":"FFI\\CType::getStructFieldType","description":"Description","tag":"refentry","type":"Function","methodName":"getStructFieldType"},{"id":"class.ffi-ctype","name":"FFI\\CType","description":"C Type Handles","tag":"phpdoc:classref","type":"Class","methodName":"FFI\\CType"},{"id":"class.ffi-exception","name":"FFI\\Exception","description":"FFI Exceptions","tag":"phpdoc:classref","type":"Class","methodName":"FFI\\Exception"},{"id":"class.ffi-parserexception","name":"FFI\\ParserException","description":"FFI Parser Exceptions","tag":"phpdoc:classref","type":"Class","methodName":"FFI\\ParserException"},{"id":"book.ffi","name":"FFI","description":"Foreign Function Interface","tag":"book","type":"Extension","methodName":"FFI"},{"id":"intro.opcache","name":"Introduction","description":"OPcache","tag":"preface","type":"General","methodName":"Introduction"},{"id":"opcache.installation","name":"Installation","description":"OPcache","tag":"sect1","type":"General","methodName":"Installation"},{"id":"opcache.configuration","name":"Runtime Configuration","description":"OPcache","tag":"sect1","type":"General","methodName":"Runtime Configuration"},{"id":"opcache.setup","name":"Installing\/Configuring","description":"OPcache","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"opcache.preloading","name":"Preloading","description":"OPcache","tag":"chapter","type":"General","methodName":"Preloading"},{"id":"function.opcache-compile-file","name":"opcache_compile_file","description":"Compiles and caches a PHP script without executing it","tag":"refentry","type":"Function","methodName":"opcache_compile_file"},{"id":"function.opcache-get-configuration","name":"opcache_get_configuration","description":"Get configuration information about the cache","tag":"refentry","type":"Function","methodName":"opcache_get_configuration"},{"id":"function.opcache-get-status","name":"opcache_get_status","description":"Get status information about the cache","tag":"refentry","type":"Function","methodName":"opcache_get_status"},{"id":"function.opcache-invalidate","name":"opcache_invalidate","description":"Invalidates a cached script","tag":"refentry","type":"Function","methodName":"opcache_invalidate"},{"id":"function.opcache-is-script-cached","name":"opcache_is_script_cached","description":"Tells whether a script is cached in OPCache","tag":"refentry","type":"Function","methodName":"opcache_is_script_cached"},{"id":"function.opcache-reset","name":"opcache_reset","description":"Resets the contents of the opcode cache","tag":"refentry","type":"Function","methodName":"opcache_reset"},{"id":"ref.opcache","name":"OPcache Functions","description":"OPcache","tag":"reference","type":"Extension","methodName":"OPcache Functions"},{"id":"book.opcache","name":"OPcache","description":"Affecting PHP's Behaviour","tag":"book","type":"Extension","methodName":"OPcache"},{"id":"intro.outcontrol","name":"Introduction","description":"Output Buffering Control","tag":"preface","type":"General","methodName":"Introduction"},{"id":"outcontrol.configuration","name":"Runtime Configuration","description":"Output Buffering Control","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"outcontrol.setup","name":"Installing\/Configuring","description":"Output Buffering Control","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"outcontrol.constants","name":"Predefined Constants","description":"Output Buffering Control","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"outcontrol.output-buffering","name":"Output Buffering","description":"Output Buffering Control","tag":"chapter","type":"General","methodName":"Output Buffering"},{"id":"outcontrol.flushing-system-buffers","name":"Flushing System Buffers","description":"Output Buffering Control","tag":"chapter","type":"General","methodName":"Flushing System Buffers"},{"id":"outcontrol.what-output-is-buffered","name":"What Output Is Buffered?","description":"Output Buffering Control","tag":"section","type":"General","methodName":"What Output Is Buffered?"},{"id":"outcontrol.nesting-output-buffers","name":"Nesting Output Buffers","description":"Output Buffering Control","tag":"section","type":"General","methodName":"Nesting Output Buffers"},{"id":"outcontrol.buffer-size","name":"Buffer Size","description":"Output Buffering Control","tag":"section","type":"General","methodName":"Buffer Size"},{"id":"outcontrol.operations-on-buffers","name":"Operations Allowed On Buffers","description":"Output Buffering Control","tag":"section","type":"General","methodName":"Operations Allowed On Buffers"},{"id":"outcontrol.output-handlers","name":"Output Handlers","description":"Output Buffering Control","tag":"section","type":"General","methodName":"Output Handlers"},{"id":"outcontrol.working-with-output-handlers","name":"Working With Output Handlers","description":"Output Buffering Control","tag":"section","type":"General","methodName":"Working With Output Handlers"},{"id":"outcontrol.flags-passed-to-output-handlers","name":"Flags Passed To Output Handlers","description":"Output Buffering Control","tag":"section","type":"General","methodName":"Flags Passed To Output Handlers"},{"id":"outcontrol.output-handler-return-values","name":"Output Handler Return Values","description":"Output Buffering Control","tag":"section","type":"General","methodName":"Output Handler Return Values"},{"id":"outcontrol.user-level-output-buffers","name":"User-Level Output Buffers","description":"Output Buffering Control","tag":"chapter","type":"General","methodName":"User-Level Output Buffers"},{"id":"outcontrol.examples.basic","name":"Basic usage","description":"Output Buffering Control","tag":"section","type":"General","methodName":"Basic usage"},{"id":"outcontrol.examples.rewrite","name":"Output rewrite usage","description":"Output Buffering Control","tag":"section","type":"General","methodName":"Output rewrite usage"},{"id":"outcontrol.examples","name":"Examples","description":"Output Buffering Control","tag":"appendix","type":"General","methodName":"Examples"},{"id":"function.flush","name":"flush","description":"Flush system output buffer","tag":"refentry","type":"Function","methodName":"flush"},{"id":"function.ob-clean","name":"ob_clean","description":"Clean (erase) the contents of the active output buffer","tag":"refentry","type":"Function","methodName":"ob_clean"},{"id":"function.ob-end-clean","name":"ob_end_clean","description":"Clean (erase) the contents of the active output buffer and turn it off","tag":"refentry","type":"Function","methodName":"ob_end_clean"},{"id":"function.ob-end-flush","name":"ob_end_flush","description":"Flush (send) the return value of the active output handler\n and turn the active output buffer off","tag":"refentry","type":"Function","methodName":"ob_end_flush"},{"id":"function.ob-flush","name":"ob_flush","description":"Flush (send) the return value of the active output handler","tag":"refentry","type":"Function","methodName":"ob_flush"},{"id":"function.ob-get-clean","name":"ob_get_clean","description":"Get the contents of the active output buffer and turn it off","tag":"refentry","type":"Function","methodName":"ob_get_clean"},{"id":"function.ob-get-contents","name":"ob_get_contents","description":"Return the contents of the output buffer","tag":"refentry","type":"Function","methodName":"ob_get_contents"},{"id":"function.ob-get-flush","name":"ob_get_flush","description":"Flush (send) the return value of the active output handler,\n return the contents of the active output buffer and turn it off","tag":"refentry","type":"Function","methodName":"ob_get_flush"},{"id":"function.ob-get-length","name":"ob_get_length","description":"Return the length of the output buffer","tag":"refentry","type":"Function","methodName":"ob_get_length"},{"id":"function.ob-get-level","name":"ob_get_level","description":"Return the nesting level of the output buffering mechanism","tag":"refentry","type":"Function","methodName":"ob_get_level"},{"id":"function.ob-get-status","name":"ob_get_status","description":"Get status of output buffers","tag":"refentry","type":"Function","methodName":"ob_get_status"},{"id":"function.ob-implicit-flush","name":"ob_implicit_flush","description":"Turn implicit flush on\/off","tag":"refentry","type":"Function","methodName":"ob_implicit_flush"},{"id":"function.ob-list-handlers","name":"ob_list_handlers","description":"List all output handlers in use","tag":"refentry","type":"Function","methodName":"ob_list_handlers"},{"id":"function.ob-start","name":"ob_start","description":"Turn on output buffering","tag":"refentry","type":"Function","methodName":"ob_start"},{"id":"function.output-add-rewrite-var","name":"output_add_rewrite_var","description":"Add URL rewriter values","tag":"refentry","type":"Function","methodName":"output_add_rewrite_var"},{"id":"function.output-reset-rewrite-vars","name":"output_reset_rewrite_vars","description":"Reset URL rewriter values","tag":"refentry","type":"Function","methodName":"output_reset_rewrite_vars"},{"id":"ref.outcontrol","name":"Output Control Functions","description":"Output Buffering Control","tag":"reference","type":"Extension","methodName":"Output Control Functions"},{"id":"book.outcontrol","name":"Output Control","description":"Output Buffering Control","tag":"book","type":"Extension","methodName":"Output Control"},{"id":"intro.info","name":"Introduction","description":"PHP Options and Information","tag":"preface","type":"General","methodName":"Introduction"},{"id":"info.configuration","name":"Runtime Configuration","description":"PHP Options and Information","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"info.setup","name":"Installing\/Configuring","description":"PHP Options and Information","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"info.constants","name":"Predefined Constants","description":"PHP Options and Information","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.assert","name":"assert","description":"Checks an assertion","tag":"refentry","type":"Function","methodName":"assert"},{"id":"function.assert-options","name":"assert_options","description":"Set\/get the various assert flags","tag":"refentry","type":"Function","methodName":"assert_options"},{"id":"function.cli-get-process-title","name":"cli_get_process_title","description":"Returns the current process title","tag":"refentry","type":"Function","methodName":"cli_get_process_title"},{"id":"function.cli-set-process-title","name":"cli_set_process_title","description":"Sets the process title","tag":"refentry","type":"Function","methodName":"cli_set_process_title"},{"id":"function.dl","name":"dl","description":"Loads a PHP extension at runtime","tag":"refentry","type":"Function","methodName":"dl"},{"id":"function.extension-loaded","name":"extension_loaded","description":"Find out whether an extension is loaded","tag":"refentry","type":"Function","methodName":"extension_loaded"},{"id":"function.gc-collect-cycles","name":"gc_collect_cycles","description":"Forces collection of any existing garbage cycles","tag":"refentry","type":"Function","methodName":"gc_collect_cycles"},{"id":"function.gc-disable","name":"gc_disable","description":"Deactivates the circular reference collector","tag":"refentry","type":"Function","methodName":"gc_disable"},{"id":"function.gc-enable","name":"gc_enable","description":"Activates the circular reference collector","tag":"refentry","type":"Function","methodName":"gc_enable"},{"id":"function.gc-enabled","name":"gc_enabled","description":"Returns status of the circular reference collector","tag":"refentry","type":"Function","methodName":"gc_enabled"},{"id":"function.gc-mem-caches","name":"gc_mem_caches","description":"Reclaims memory used by the Zend Engine memory manager","tag":"refentry","type":"Function","methodName":"gc_mem_caches"},{"id":"function.gc-status","name":"gc_status","description":"Gets information about the garbage collector","tag":"refentry","type":"Function","methodName":"gc_status"},{"id":"function.get-cfg-var","name":"get_cfg_var","description":"Gets the value of a PHP configuration option","tag":"refentry","type":"Function","methodName":"get_cfg_var"},{"id":"function.get-current-user","name":"get_current_user","description":"Gets the name of the owner of the current PHP script","tag":"refentry","type":"Function","methodName":"get_current_user"},{"id":"function.get-defined-constants","name":"get_defined_constants","description":"Returns an associative array with the names of all the constants and their values","tag":"refentry","type":"Function","methodName":"get_defined_constants"},{"id":"function.get-extension-funcs","name":"get_extension_funcs","description":"Returns an array with the names of the functions of a module","tag":"refentry","type":"Function","methodName":"get_extension_funcs"},{"id":"function.get-include-path","name":"get_include_path","description":"Gets the current include_path configuration option","tag":"refentry","type":"Function","methodName":"get_include_path"},{"id":"function.get-included-files","name":"get_included_files","description":"Returns an array with the names of included or required files","tag":"refentry","type":"Function","methodName":"get_included_files"},{"id":"function.get-loaded-extensions","name":"get_loaded_extensions","description":"Returns an array with the names of all modules compiled and loaded","tag":"refentry","type":"Function","methodName":"get_loaded_extensions"},{"id":"function.get-magic-quotes-gpc","name":"get_magic_quotes_gpc","description":"Gets the current configuration setting of magic_quotes_gpc","tag":"refentry","type":"Function","methodName":"get_magic_quotes_gpc"},{"id":"function.get-magic-quotes-runtime","name":"get_magic_quotes_runtime","description":"Gets the current active configuration setting of magic_quotes_runtime","tag":"refentry","type":"Function","methodName":"get_magic_quotes_runtime"},{"id":"function.get-required-files","name":"get_required_files","description":"Alias of get_included_files","tag":"refentry","type":"Function","methodName":"get_required_files"},{"id":"function.get-resources","name":"get_resources","description":"Returns active resources","tag":"refentry","type":"Function","methodName":"get_resources"},{"id":"function.getenv","name":"getenv","description":"Gets the value of a single or all environment variables","tag":"refentry","type":"Function","methodName":"getenv"},{"id":"function.getlastmod","name":"getlastmod","description":"Gets time of last page modification","tag":"refentry","type":"Function","methodName":"getlastmod"},{"id":"function.getmygid","name":"getmygid","description":"Get PHP script owner's GID","tag":"refentry","type":"Function","methodName":"getmygid"},{"id":"function.getmyinode","name":"getmyinode","description":"Gets the inode of the current script","tag":"refentry","type":"Function","methodName":"getmyinode"},{"id":"function.getmypid","name":"getmypid","description":"Gets PHP's process ID","tag":"refentry","type":"Function","methodName":"getmypid"},{"id":"function.getmyuid","name":"getmyuid","description":"Gets PHP script owner's UID","tag":"refentry","type":"Function","methodName":"getmyuid"},{"id":"function.getopt","name":"getopt","description":"Gets options from the command line argument list","tag":"refentry","type":"Function","methodName":"getopt"},{"id":"function.getrusage","name":"getrusage","description":"Gets the current resource usages","tag":"refentry","type":"Function","methodName":"getrusage"},{"id":"function.ini-alter","name":"ini_alter","description":"Alias of ini_set","tag":"refentry","type":"Function","methodName":"ini_alter"},{"id":"function.ini-get","name":"ini_get","description":"Gets the value of a configuration option","tag":"refentry","type":"Function","methodName":"ini_get"},{"id":"function.ini-get-all","name":"ini_get_all","description":"Gets all configuration options","tag":"refentry","type":"Function","methodName":"ini_get_all"},{"id":"function.ini-parse-quantity","name":"ini_parse_quantity","description":"Get interpreted size from ini shorthand syntax","tag":"refentry","type":"Function","methodName":"ini_parse_quantity"},{"id":"function.ini-restore","name":"ini_restore","description":"Restores the value of a configuration option","tag":"refentry","type":"Function","methodName":"ini_restore"},{"id":"function.ini-set","name":"ini_set","description":"Sets the value of a configuration option","tag":"refentry","type":"Function","methodName":"ini_set"},{"id":"function.memory-get-peak-usage","name":"memory_get_peak_usage","description":"Returns the peak of memory allocated by PHP","tag":"refentry","type":"Function","methodName":"memory_get_peak_usage"},{"id":"function.memory-get-usage","name":"memory_get_usage","description":"Returns the amount of memory allocated to PHP","tag":"refentry","type":"Function","methodName":"memory_get_usage"},{"id":"function.memory-reset-peak-usage","name":"memory_reset_peak_usage","description":"Reset the peak memory usage","tag":"refentry","type":"Function","methodName":"memory_reset_peak_usage"},{"id":"function.php-ini-loaded-file","name":"php_ini_loaded_file","description":"Retrieve a path to the loaded php.ini file","tag":"refentry","type":"Function","methodName":"php_ini_loaded_file"},{"id":"function.php-ini-scanned-files","name":"php_ini_scanned_files","description":"Return a list of .ini files parsed from the additional ini dir","tag":"refentry","type":"Function","methodName":"php_ini_scanned_files"},{"id":"function.php-sapi-name","name":"php_sapi_name","description":"Returns the type of interface between web server and PHP","tag":"refentry","type":"Function","methodName":"php_sapi_name"},{"id":"function.php-uname","name":"php_uname","description":"Returns information about the operating system PHP is running on","tag":"refentry","type":"Function","methodName":"php_uname"},{"id":"function.phpcredits","name":"phpcredits","description":"Prints out the credits for PHP","tag":"refentry","type":"Function","methodName":"phpcredits"},{"id":"function.phpinfo","name":"phpinfo","description":"Outputs information about PHP's configuration","tag":"refentry","type":"Function","methodName":"phpinfo"},{"id":"function.phpversion","name":"phpversion","description":"Gets the current PHP version","tag":"refentry","type":"Function","methodName":"phpversion"},{"id":"function.putenv","name":"putenv","description":"Sets the value of an environment variable","tag":"refentry","type":"Function","methodName":"putenv"},{"id":"function.restore-include-path","name":"restore_include_path","description":"Restores the value of the include_path configuration option","tag":"refentry","type":"Function","methodName":"restore_include_path"},{"id":"function.set-include-path","name":"set_include_path","description":"Sets the include_path configuration option","tag":"refentry","type":"Function","methodName":"set_include_path"},{"id":"function.set-time-limit","name":"set_time_limit","description":"Limits the maximum execution time","tag":"refentry","type":"Function","methodName":"set_time_limit"},{"id":"function.sys-get-temp-dir","name":"sys_get_temp_dir","description":"Returns directory path used for temporary files","tag":"refentry","type":"Function","methodName":"sys_get_temp_dir"},{"id":"function.version-compare","name":"version_compare","description":"Compares two \"PHP-standardized\" version number strings","tag":"refentry","type":"Function","methodName":"version_compare"},{"id":"function.zend-thread-id","name":"zend_thread_id","description":"Returns a unique identifier for the current thread","tag":"refentry","type":"Function","methodName":"zend_thread_id"},{"id":"function.zend-version","name":"zend_version","description":"Gets the version of the current Zend engine","tag":"refentry","type":"Function","methodName":"zend_version"},{"id":"ref.info","name":"PHP Options\/Info Functions","description":"PHP Options and Information","tag":"reference","type":"Extension","methodName":"PHP Options\/Info Functions"},{"id":"book.info","name":"PHP Options\/Info","description":"PHP Options and Information","tag":"book","type":"Extension","methodName":"PHP Options\/Info"},{"id":"intro.phpdbg","name":"Introduction","description":"Interactive PHP Debugger","tag":"preface","type":"General","methodName":"Introduction"},{"id":"phpdbg.configuration","name":"Runtime Configuration","description":"Interactive PHP Debugger","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"phpdbg.setup","name":"Installing\/Configuring","description":"Interactive PHP Debugger","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"phpdbg.constants","name":"Predefined Constants","description":"Interactive PHP Debugger","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.phpdbg-break-file","name":"phpdbg_break_file","description":"Inserts a breakpoint at a line in a file","tag":"refentry","type":"Function","methodName":"phpdbg_break_file"},{"id":"function.phpdbg-break-function","name":"phpdbg_break_function","description":"Inserts a breakpoint at entry to a function","tag":"refentry","type":"Function","methodName":"phpdbg_break_function"},{"id":"function.phpdbg-break-method","name":"phpdbg_break_method","description":"Inserts a breakpoint at entry to a method","tag":"refentry","type":"Function","methodName":"phpdbg_break_method"},{"id":"function.phpdbg-break-next","name":"phpdbg_break_next","description":"Inserts a breakpoint at the next opcode","tag":"refentry","type":"Function","methodName":"phpdbg_break_next"},{"id":"function.phpdbg-clear","name":"phpdbg_clear","description":"Clears all breakpoints","tag":"refentry","type":"Function","methodName":"phpdbg_clear"},{"id":"function.phpdbg-color","name":"phpdbg_color","description":"Sets the color of certain elements","tag":"refentry","type":"Function","methodName":"phpdbg_color"},{"id":"function.phpdbg-end-oplog","name":"phpdbg_end_oplog","description":"Ends an oplog","tag":"refentry","type":"Function","methodName":"phpdbg_end_oplog"},{"id":"function.phpdbg-exec","name":"phpdbg_exec","description":"Attempts to set the execution context","tag":"refentry","type":"Function","methodName":"phpdbg_exec"},{"id":"function.phpdbg-get-executable","name":"phpdbg_get_executable","description":"Gets executable","tag":"refentry","type":"Function","methodName":"phpdbg_get_executable"},{"id":"function.phpdbg-prompt","name":"phpdbg_prompt","description":"Sets the command prompt","tag":"refentry","type":"Function","methodName":"phpdbg_prompt"},{"id":"function.phpdbg-start-oplog","name":"phpdbg_start_oplog","description":"Starts an oplog","tag":"refentry","type":"Function","methodName":"phpdbg_start_oplog"},{"id":"ref.phpdbg","name":"phpdbg Functions","description":"Interactive PHP Debugger","tag":"reference","type":"Extension","methodName":"phpdbg Functions"},{"id":"book.phpdbg","name":"phpdbg","description":"Interactive PHP Debugger","tag":"book","type":"Extension","methodName":"phpdbg"},{"id":"intro.runkit7","name":"Introduction","description":"runkit7","tag":"preface","type":"General","methodName":"Introduction"},{"id":"runkit7.requirements","name":"Requirements","description":"runkit7","tag":"section","type":"General","methodName":"Requirements"},{"id":"runkit7.installation","name":"Installation","description":"runkit7","tag":"section","type":"General","methodName":"Installation"},{"id":"runkit7.configuration","name":"Runtime Configuration","description":"runkit7","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"runkit7.setup","name":"Installing\/Configuring","description":"runkit7","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"runkit7.constants","name":"Predefined Constants","description":"runkit7","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.runkit7-constant-add","name":"runkit7_constant_add","description":"Similar to define(), but allows defining in class definitions as well","tag":"refentry","type":"Function","methodName":"runkit7_constant_add"},{"id":"function.runkit7-constant-redefine","name":"runkit7_constant_redefine","description":"Redefine an already defined constant","tag":"refentry","type":"Function","methodName":"runkit7_constant_redefine"},{"id":"function.runkit7-constant-remove","name":"runkit7_constant_remove","description":"Remove\/Delete an already defined constant","tag":"refentry","type":"Function","methodName":"runkit7_constant_remove"},{"id":"function.runkit7-function-add","name":"runkit7_function_add","description":"Add a new function, similar to create_function","tag":"refentry","type":"Function","methodName":"runkit7_function_add"},{"id":"function.runkit7-function-copy","name":"runkit7_function_copy","description":"Copy a function to a new function name","tag":"refentry","type":"Function","methodName":"runkit7_function_copy"},{"id":"function.runkit7-function-redefine","name":"runkit7_function_redefine","description":"Replace a function definition with a new implementation","tag":"refentry","type":"Function","methodName":"runkit7_function_redefine"},{"id":"function.runkit7-function-remove","name":"runkit7_function_remove","description":"Remove a function definition","tag":"refentry","type":"Function","methodName":"runkit7_function_remove"},{"id":"function.runkit7-function-rename","name":"runkit7_function_rename","description":"Change a function's name","tag":"refentry","type":"Function","methodName":"runkit7_function_rename"},{"id":"function.runkit7-import","name":"runkit7_import","description":"Process a PHP file importing function and class definitions, overwriting where appropriate","tag":"refentry","type":"Function","methodName":"runkit7_import"},{"id":"function.runkit7-method-add","name":"runkit7_method_add","description":"Dynamically adds a new method to a given class","tag":"refentry","type":"Function","methodName":"runkit7_method_add"},{"id":"function.runkit7-method-copy","name":"runkit7_method_copy","description":"Copies a method from class to another","tag":"refentry","type":"Function","methodName":"runkit7_method_copy"},{"id":"function.runkit7-method-redefine","name":"runkit7_method_redefine","description":"Dynamically changes the code of the given method","tag":"refentry","type":"Function","methodName":"runkit7_method_redefine"},{"id":"function.runkit7-method-remove","name":"runkit7_method_remove","description":"Dynamically removes the given method","tag":"refentry","type":"Function","methodName":"runkit7_method_remove"},{"id":"function.runkit7-method-rename","name":"runkit7_method_rename","description":"Dynamically changes the name of the given method","tag":"refentry","type":"Function","methodName":"runkit7_method_rename"},{"id":"function.runkit7-object-id","name":"runkit7_object_id","description":"Return the integer object handle for given object","tag":"refentry","type":"Function","methodName":"runkit7_object_id"},{"id":"function.runkit7-superglobals","name":"runkit7_superglobals","description":"Return numerically indexed array of registered superglobals","tag":"refentry","type":"Function","methodName":"runkit7_superglobals"},{"id":"function.runkit7-zval-inspect","name":"runkit7_zval_inspect","description":"Returns information about the passed in value with data types, reference counts, etc","tag":"refentry","type":"Function","methodName":"runkit7_zval_inspect"},{"id":"ref.runkit7","name":"runkit7 Functions","description":"runkit7","tag":"reference","type":"Extension","methodName":"runkit7 Functions"},{"id":"book.runkit7","name":"runkit7","description":"runkit7","tag":"book","type":"Extension","methodName":"runkit7"},{"id":"intro.uopz","name":"Introduction","description":"User Operations for Zend","tag":"preface","type":"General","methodName":"Introduction"},{"id":"uopz.requirements","name":"Requirements","description":"User Operations for Zend","tag":"section","type":"General","methodName":"Requirements"},{"id":"uopz.installation","name":"Installation","description":"User Operations for Zend","tag":"section","type":"General","methodName":"Installation"},{"id":"uopz.configuration","name":"Runtime Configuration","description":"User Operations for Zend","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"uopz.setup","name":"Installing\/Configuring","description":"User Operations for Zend","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"uopz.constants","name":"Predefined Constants","description":"User Operations for Zend","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.uopz-add-function","name":"uopz_add_function","description":"Adds non-existent function or method","tag":"refentry","type":"Function","methodName":"uopz_add_function"},{"id":"function.uopz-allow-exit","name":"uopz_allow_exit","description":"Allows control over disabled exit opcode","tag":"refentry","type":"Function","methodName":"uopz_allow_exit"},{"id":"function.uopz-backup","name":"uopz_backup","description":"Backup a function","tag":"refentry","type":"Function","methodName":"uopz_backup"},{"id":"function.uopz-compose","name":"uopz_compose","description":"Compose a class","tag":"refentry","type":"Function","methodName":"uopz_compose"},{"id":"function.uopz-copy","name":"uopz_copy","description":"Copy a function","tag":"refentry","type":"Function","methodName":"uopz_copy"},{"id":"function.uopz-del-function","name":"uopz_del_function","description":"Deletes previously added function or method","tag":"refentry","type":"Function","methodName":"uopz_del_function"},{"id":"function.uopz-delete","name":"uopz_delete","description":"Delete a function","tag":"refentry","type":"Function","methodName":"uopz_delete"},{"id":"function.uopz-extend","name":"uopz_extend","description":"Extend a class at runtime","tag":"refentry","type":"Function","methodName":"uopz_extend"},{"id":"function.uopz-flags","name":"uopz_flags","description":"Get or set flags on function or class","tag":"refentry","type":"Function","methodName":"uopz_flags"},{"id":"function.uopz-function","name":"uopz_function","description":"Creates a function at runtime","tag":"refentry","type":"Function","methodName":"uopz_function"},{"id":"function.uopz-get-exit-status","name":"uopz_get_exit_status","description":"Retrieve the last set exit status","tag":"refentry","type":"Function","methodName":"uopz_get_exit_status"},{"id":"function.uopz-get-hook","name":"uopz_get_hook","description":"Gets previously set hook on function or method","tag":"refentry","type":"Function","methodName":"uopz_get_hook"},{"id":"function.uopz-get-mock","name":"uopz_get_mock","description":"Get the current mock for a class","tag":"refentry","type":"Function","methodName":"uopz_get_mock"},{"id":"function.uopz-get-property","name":"uopz_get_property","description":"Gets value of class or instance property","tag":"refentry","type":"Function","methodName":"uopz_get_property"},{"id":"function.uopz-get-return","name":"uopz_get_return","description":"Gets a previous set return value for a function","tag":"refentry","type":"Function","methodName":"uopz_get_return"},{"id":"function.uopz-get-static","name":"uopz_get_static","description":"Gets the static variables from function or method scope","tag":"refentry","type":"Function","methodName":"uopz_get_static"},{"id":"function.uopz-implement","name":"uopz_implement","description":"Implements an interface at runtime","tag":"refentry","type":"Function","methodName":"uopz_implement"},{"id":"function.uopz-overload","name":"uopz_overload","description":"Overload a VM opcode","tag":"refentry","type":"Function","methodName":"uopz_overload"},{"id":"function.uopz-redefine","name":"uopz_redefine","description":"Redefine a constant","tag":"refentry","type":"Function","methodName":"uopz_redefine"},{"id":"function.uopz-rename","name":"uopz_rename","description":"Rename a function at runtime","tag":"refentry","type":"Function","methodName":"uopz_rename"},{"id":"function.uopz-restore","name":"uopz_restore","description":"Restore a previously backed up function","tag":"refentry","type":"Function","methodName":"uopz_restore"},{"id":"function.uopz-set-hook","name":"uopz_set_hook","description":"Sets hook to execute when entering a function or method","tag":"refentry","type":"Function","methodName":"uopz_set_hook"},{"id":"function.uopz-set-mock","name":"uopz_set_mock","description":"Use mock instead of class for new objects","tag":"refentry","type":"Function","methodName":"uopz_set_mock"},{"id":"function.uopz-set-property","name":"uopz_set_property","description":"Sets value of existing class or instance property","tag":"refentry","type":"Function","methodName":"uopz_set_property"},{"id":"function.uopz-set-return","name":"uopz_set_return","description":"Provide a return value for an existing function","tag":"refentry","type":"Function","methodName":"uopz_set_return"},{"id":"function.uopz-set-static","name":"uopz_set_static","description":"Sets the static variables in function or method scope","tag":"refentry","type":"Function","methodName":"uopz_set_static"},{"id":"function.uopz-undefine","name":"uopz_undefine","description":"Undefine a constant","tag":"refentry","type":"Function","methodName":"uopz_undefine"},{"id":"function.uopz-unset-hook","name":"uopz_unset_hook","description":"Removes previously set hook on function or method","tag":"refentry","type":"Function","methodName":"uopz_unset_hook"},{"id":"function.uopz-unset-mock","name":"uopz_unset_mock","description":"Unset previously set mock","tag":"refentry","type":"Function","methodName":"uopz_unset_mock"},{"id":"function.uopz-unset-return","name":"uopz_unset_return","description":"Unsets a previously set return value for a function","tag":"refentry","type":"Function","methodName":"uopz_unset_return"},{"id":"ref.uopz","name":"Uopz Functions","description":"User Operations for Zend","tag":"reference","type":"Extension","methodName":"Uopz Functions"},{"id":"book.uopz","name":"uopz","description":"User Operations for Zend","tag":"book","type":"Extension","methodName":"uopz"},{"id":"intro.wincache","name":"Introduction","description":"Windows Cache for PHP","tag":"preface","type":"General","methodName":"Introduction"},{"id":"wincache.requirements","name":"Requirements","description":"Windows Cache for PHP","tag":"section","type":"General","methodName":"Requirements"},{"id":"wincache.installation","name":"Installation","description":"Windows Cache for PHP","tag":"section","type":"General","methodName":"Installation"},{"id":"wincache.configuration","name":"Runtime Configuration","description":"Windows Cache for PHP","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"wincache.stats","name":"WinCache Statistics Script","description":"Windows Cache for PHP","tag":"section","type":"General","methodName":"WinCache Statistics Script"},{"id":"wincache.sessionhandler","name":"WinCache Session Handler","description":"Windows Cache for PHP","tag":"section","type":"General","methodName":"WinCache Session Handler"},{"id":"wincache.reroutes","name":"WinCache Functions Reroutes","description":"Windows Cache for PHP","tag":"section","type":"General","methodName":"WinCache Functions Reroutes"},{"id":"wincache.setup","name":"Installing\/Configuring","description":"Windows Cache for PHP","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.wincache-fcache-fileinfo","name":"wincache_fcache_fileinfo","description":"Retrieves information about files cached in the file cache","tag":"refentry","type":"Function","methodName":"wincache_fcache_fileinfo"},{"id":"function.wincache-fcache-meminfo","name":"wincache_fcache_meminfo","description":"Retrieves information about file cache memory usage","tag":"refentry","type":"Function","methodName":"wincache_fcache_meminfo"},{"id":"function.wincache-lock","name":"wincache_lock","description":"Acquires an exclusive lock on a given key","tag":"refentry","type":"Function","methodName":"wincache_lock"},{"id":"function.wincache-ocache-fileinfo","name":"wincache_ocache_fileinfo","description":"Retrieves information about files cached in the opcode cache","tag":"refentry","type":"Function","methodName":"wincache_ocache_fileinfo"},{"id":"function.wincache-ocache-meminfo","name":"wincache_ocache_meminfo","description":"Retrieves information about opcode cache memory usage","tag":"refentry","type":"Function","methodName":"wincache_ocache_meminfo"},{"id":"function.wincache-refresh-if-changed","name":"wincache_refresh_if_changed","description":"Refreshes the cache entries for the cached files","tag":"refentry","type":"Function","methodName":"wincache_refresh_if_changed"},{"id":"function.wincache-rplist-fileinfo","name":"wincache_rplist_fileinfo","description":"Retrieves information about resolve file path cache","tag":"refentry","type":"Function","methodName":"wincache_rplist_fileinfo"},{"id":"function.wincache-rplist-meminfo","name":"wincache_rplist_meminfo","description":"Retrieves information about memory usage by the resolve file path cache","tag":"refentry","type":"Function","methodName":"wincache_rplist_meminfo"},{"id":"function.wincache-scache-info","name":"wincache_scache_info","description":"Retrieves information about files cached in the session cache","tag":"refentry","type":"Function","methodName":"wincache_scache_info"},{"id":"function.wincache-scache-meminfo","name":"wincache_scache_meminfo","description":"Retrieves information about session cache memory usage","tag":"refentry","type":"Function","methodName":"wincache_scache_meminfo"},{"id":"function.wincache-ucache-add","name":"wincache_ucache_add","description":"Adds a variable in user cache only if variable does not already exist in the cache","tag":"refentry","type":"Function","methodName":"wincache_ucache_add"},{"id":"function.wincache-ucache-cas","name":"wincache_ucache_cas","description":"Compares the variable with old value and assigns new value to it","tag":"refentry","type":"Function","methodName":"wincache_ucache_cas"},{"id":"function.wincache-ucache-clear","name":"wincache_ucache_clear","description":"Deletes entire content of the user cache","tag":"refentry","type":"Function","methodName":"wincache_ucache_clear"},{"id":"function.wincache-ucache-dec","name":"wincache_ucache_dec","description":"Decrements the value associated with the key","tag":"refentry","type":"Function","methodName":"wincache_ucache_dec"},{"id":"function.wincache-ucache-delete","name":"wincache_ucache_delete","description":"Deletes variables from the user cache","tag":"refentry","type":"Function","methodName":"wincache_ucache_delete"},{"id":"function.wincache-ucache-exists","name":"wincache_ucache_exists","description":"Checks if a variable exists in the user cache","tag":"refentry","type":"Function","methodName":"wincache_ucache_exists"},{"id":"function.wincache-ucache-get","name":"wincache_ucache_get","description":"Gets a variable stored in the user cache","tag":"refentry","type":"Function","methodName":"wincache_ucache_get"},{"id":"function.wincache-ucache-inc","name":"wincache_ucache_inc","description":"Increments the value associated with the key","tag":"refentry","type":"Function","methodName":"wincache_ucache_inc"},{"id":"function.wincache-ucache-info","name":"wincache_ucache_info","description":"Retrieves information about data stored in the user cache","tag":"refentry","type":"Function","methodName":"wincache_ucache_info"},{"id":"function.wincache-ucache-meminfo","name":"wincache_ucache_meminfo","description":"Retrieves information about user cache memory usage","tag":"refentry","type":"Function","methodName":"wincache_ucache_meminfo"},{"id":"function.wincache-ucache-set","name":"wincache_ucache_set","description":"Adds a variable in user cache and overwrites a variable if it already exists in the cache","tag":"refentry","type":"Function","methodName":"wincache_ucache_set"},{"id":"function.wincache-unlock","name":"wincache_unlock","description":"Releases an exclusive lock on a given key","tag":"refentry","type":"Function","methodName":"wincache_unlock"},{"id":"ref.wincache","name":"WinCache Functions","description":"Windows Cache for PHP","tag":"reference","type":"Extension","methodName":"WinCache Functions"},{"id":"wincache.win32build.prereq","name":"Prerequisites","description":"Windows Cache for PHP","tag":"section","type":"General","methodName":"Prerequisites"},{"id":"wincache.win32build.building","name":"Compiling and building","description":"Windows Cache for PHP","tag":"section","type":"General","methodName":"Compiling and building"},{"id":"wincache.win32build.verify","name":"Verifying the build","description":"Windows Cache for PHP","tag":"section","type":"General","methodName":"Verifying the build"},{"id":"wincache.win32build","name":"Building for Windows","description":"Windows Cache for PHP","tag":"appendix","type":"General","methodName":"Building for Windows"},{"id":"book.wincache","name":"WinCache","description":"Windows Cache for PHP","tag":"book","type":"Extension","methodName":"WinCache"},{"id":"intro.xhprof","name":"Introduction","description":"Hierarchical Profiler","tag":"preface","type":"General","methodName":"Introduction"},{"id":"xhprof.requirements","name":"Requirements","description":"Hierarchical Profiler","tag":"section","type":"General","methodName":"Requirements"},{"id":"xhprof.installation","name":"Installation","description":"Hierarchical Profiler","tag":"section","type":"General","methodName":"Installation"},{"id":"xhprof.configuration","name":"Runtime Configuration","description":"Hierarchical Profiler","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"xhprof.setup","name":"Installing\/Configuring","description":"Hierarchical Profiler","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"xhprof.constants","name":"Predefined Constants","description":"Hierarchical Profiler","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"xhprof.examples","name":"Examples","description":"Hierarchical Profiler","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.xhprof-disable","name":"xhprof_disable","description":"Stops xhprof profiler","tag":"refentry","type":"Function","methodName":"xhprof_disable"},{"id":"function.xhprof-enable","name":"xhprof_enable","description":"Start xhprof profiler","tag":"refentry","type":"Function","methodName":"xhprof_enable"},{"id":"function.xhprof-sample-disable","name":"xhprof_sample_disable","description":"Stops xhprof sample profiler","tag":"refentry","type":"Function","methodName":"xhprof_sample_disable"},{"id":"function.xhprof-sample-enable","name":"xhprof_sample_enable","description":"Start XHProf profiling in sampling mode","tag":"refentry","type":"Function","methodName":"xhprof_sample_enable"},{"id":"ref.xhprof","name":"Xhprof Functions","description":"Hierarchical Profiler","tag":"reference","type":"Extension","methodName":"Xhprof Functions"},{"id":"book.xhprof","name":"Xhprof","description":"Hierarchical Profiler","tag":"book","type":"Extension","methodName":"Xhprof"},{"id":"intro.yac","name":"Introduction","description":"Yac","tag":"preface","type":"General","methodName":"Introduction"},{"id":"yac.requirements","name":"Requirements","description":"Yac","tag":"section","type":"General","methodName":"Requirements"},{"id":"yac.installation","name":"Installation","description":"Yac","tag":"section","type":"General","methodName":"Installation"},{"id":"yac.configuration","name":"Runtime Configuration","description":"Yac","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"yac.resources","name":"Resource Types","description":"Yac","tag":"section","type":"General","methodName":"Resource Types"},{"id":"yac.setup","name":"Installing\/Configuring","description":"Yac","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"yac.constants","name":"Predefined Constants","description":"Yac","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"yac.add","name":"Yac::add","description":"Store into cache","tag":"refentry","type":"Function","methodName":"add"},{"id":"yac.construct","name":"Yac::__construct","description":"Constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yac.delete","name":"Yac::delete","description":"Remove items from cache","tag":"refentry","type":"Function","methodName":"delete"},{"id":"yac.dump","name":"Yac::dump","description":"Dump cache","tag":"refentry","type":"Function","methodName":"dump"},{"id":"yac.flush","name":"Yac::flush","description":"Flush the cache","tag":"refentry","type":"Function","methodName":"flush"},{"id":"yac.get","name":"Yac::get","description":"Retrieve values from cache","tag":"refentry","type":"Function","methodName":"get"},{"id":"yac.getter","name":"Yac::__get","description":"Getter","tag":"refentry","type":"Function","methodName":"__get"},{"id":"yac.info","name":"Yac::info","description":"Status of cache","tag":"refentry","type":"Function","methodName":"info"},{"id":"yac.set","name":"Yac::set","description":"Store into cache","tag":"refentry","type":"Function","methodName":"set"},{"id":"yac.setter","name":"Yac::__set","description":"Setter","tag":"refentry","type":"Function","methodName":"__set"},{"id":"class.yac","name":"Yac","description":"The Yac class","tag":"phpdoc:classref","type":"Class","methodName":"Yac"},{"id":"book.yac","name":"Yac","description":"Yac","tag":"book","type":"Extension","methodName":"Yac"},{"id":"refs.basic.php","name":"Affecting PHP's Behaviour","description":"Function Reference","tag":"set","type":"Extension","methodName":"Affecting PHP's Behaviour"},{"id":"intro.openal","name":"Introduction","description":"OpenAL Audio Bindings","tag":"preface","type":"General","methodName":"Introduction"},{"id":"openal.installation","name":"Installation","description":"OpenAL Audio Bindings","tag":"section","type":"General","methodName":"Installation"},{"id":"openal.resources","name":"Resource Types","description":"OpenAL Audio Bindings","tag":"section","type":"General","methodName":"Resource Types"},{"id":"openal.setup","name":"Installing\/Configuring","description":"OpenAL Audio Bindings","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"openal.constants","name":"Predefined Constants","description":"OpenAL Audio Bindings","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.openal-buffer-create","name":"openal_buffer_create","description":"Generate OpenAL buffer","tag":"refentry","type":"Function","methodName":"openal_buffer_create"},{"id":"function.openal-buffer-data","name":"openal_buffer_data","description":"Load a buffer with data","tag":"refentry","type":"Function","methodName":"openal_buffer_data"},{"id":"function.openal-buffer-destroy","name":"openal_buffer_destroy","description":"Destroys an OpenAL buffer","tag":"refentry","type":"Function","methodName":"openal_buffer_destroy"},{"id":"function.openal-buffer-get","name":"openal_buffer_get","description":"Retrieve an OpenAL buffer property","tag":"refentry","type":"Function","methodName":"openal_buffer_get"},{"id":"function.openal-buffer-loadwav","name":"openal_buffer_loadwav","description":"Load a .wav file into a buffer","tag":"refentry","type":"Function","methodName":"openal_buffer_loadwav"},{"id":"function.openal-context-create","name":"openal_context_create","description":"Create an audio processing context","tag":"refentry","type":"Function","methodName":"openal_context_create"},{"id":"function.openal-context-current","name":"openal_context_current","description":"Make the specified context current","tag":"refentry","type":"Function","methodName":"openal_context_current"},{"id":"function.openal-context-destroy","name":"openal_context_destroy","description":"Destroys a context","tag":"refentry","type":"Function","methodName":"openal_context_destroy"},{"id":"function.openal-context-process","name":"openal_context_process","description":"Process the specified context","tag":"refentry","type":"Function","methodName":"openal_context_process"},{"id":"function.openal-context-suspend","name":"openal_context_suspend","description":"Suspend the specified context","tag":"refentry","type":"Function","methodName":"openal_context_suspend"},{"id":"function.openal-device-close","name":"openal_device_close","description":"Close an OpenAL device","tag":"refentry","type":"Function","methodName":"openal_device_close"},{"id":"function.openal-device-open","name":"openal_device_open","description":"Initialize the OpenAL audio layer","tag":"refentry","type":"Function","methodName":"openal_device_open"},{"id":"function.openal-listener-get","name":"openal_listener_get","description":"Retrieve a listener property","tag":"refentry","type":"Function","methodName":"openal_listener_get"},{"id":"function.openal-listener-set","name":"openal_listener_set","description":"Set a listener property","tag":"refentry","type":"Function","methodName":"openal_listener_set"},{"id":"function.openal-source-create","name":"openal_source_create","description":"Generate a source resource","tag":"refentry","type":"Function","methodName":"openal_source_create"},{"id":"function.openal-source-destroy","name":"openal_source_destroy","description":"Destroy a source resource","tag":"refentry","type":"Function","methodName":"openal_source_destroy"},{"id":"function.openal-source-get","name":"openal_source_get","description":"Retrieve an OpenAL source property","tag":"refentry","type":"Function","methodName":"openal_source_get"},{"id":"function.openal-source-pause","name":"openal_source_pause","description":"Pause the source","tag":"refentry","type":"Function","methodName":"openal_source_pause"},{"id":"function.openal-source-play","name":"openal_source_play","description":"Start playing the source","tag":"refentry","type":"Function","methodName":"openal_source_play"},{"id":"function.openal-source-rewind","name":"openal_source_rewind","description":"Rewind the source","tag":"refentry","type":"Function","methodName":"openal_source_rewind"},{"id":"function.openal-source-set","name":"openal_source_set","description":"Set source property","tag":"refentry","type":"Function","methodName":"openal_source_set"},{"id":"function.openal-source-stop","name":"openal_source_stop","description":"Stop playing the source","tag":"refentry","type":"Function","methodName":"openal_source_stop"},{"id":"function.openal-stream","name":"openal_stream","description":"Begin streaming on a source","tag":"refentry","type":"Function","methodName":"openal_stream"},{"id":"ref.openal","name":"OpenAL Functions","description":"OpenAL Audio Bindings","tag":"reference","type":"Extension","methodName":"OpenAL Functions"},{"id":"book.openal","name":"OpenAL","description":"OpenAL Audio Bindings","tag":"book","type":"Extension","methodName":"OpenAL"},{"id":"refs.utilspec.audio","name":"Audio Formats Manipulation","description":"Function Reference","tag":"set","type":"Extension","methodName":"Audio Formats Manipulation"},{"id":"intro.radius","name":"Introduction","description":"Radius","tag":"preface","type":"General","methodName":"Introduction"},{"id":"radius.installation","name":"Installation","description":"Radius","tag":"section","type":"General","methodName":"Installation"},{"id":"radius.setup","name":"Installing\/Configuring","description":"Radius","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"radius.constants.options","name":"RADIUS Options","description":"Radius","tag":"section","type":"General","methodName":"RADIUS Options"},{"id":"radius.constants.packets","name":"RADIUS Packet Types","description":"Radius","tag":"section","type":"General","methodName":"RADIUS Packet Types"},{"id":"radius.constants.attributes","name":"RADIUS Attribute Types","description":"Radius","tag":"section","type":"General","methodName":"RADIUS Attribute Types"},{"id":"radius.constants.vendor-specific","name":"RADIUS Vendor Specific Attribute Types","description":"Radius","tag":"section","type":"General","methodName":"RADIUS Vendor Specific Attribute Types"},{"id":"radius.constants","name":"Predefined Constants","description":"Radius","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"radius.examples","name":"Examples","description":"Radius","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.radius-acct-open","name":"radius_acct_open","description":"Creates a Radius handle for accounting","tag":"refentry","type":"Function","methodName":"radius_acct_open"},{"id":"function.radius-add-server","name":"radius_add_server","description":"Adds a server","tag":"refentry","type":"Function","methodName":"radius_add_server"},{"id":"function.radius-auth-open","name":"radius_auth_open","description":"Creates a Radius handle for authentication","tag":"refentry","type":"Function","methodName":"radius_auth_open"},{"id":"function.radius-close","name":"radius_close","description":"Frees all ressources","tag":"refentry","type":"Function","methodName":"radius_close"},{"id":"function.radius-config","name":"radius_config","description":"Causes the library to read the given configuration file","tag":"refentry","type":"Function","methodName":"radius_config"},{"id":"function.radius-create-request","name":"radius_create_request","description":"Create accounting or authentication request","tag":"refentry","type":"Function","methodName":"radius_create_request"},{"id":"function.radius-cvt-addr","name":"radius_cvt_addr","description":"Converts raw data to IP-Address","tag":"refentry","type":"Function","methodName":"radius_cvt_addr"},{"id":"function.radius-cvt-int","name":"radius_cvt_int","description":"Converts raw data to integer","tag":"refentry","type":"Function","methodName":"radius_cvt_int"},{"id":"function.radius-cvt-string","name":"radius_cvt_string","description":"Converts raw data to string","tag":"refentry","type":"Function","methodName":"radius_cvt_string"},{"id":"function.radius-demangle","name":"radius_demangle","description":"Demangles data","tag":"refentry","type":"Function","methodName":"radius_demangle"},{"id":"function.radius-demangle-mppe-key","name":"radius_demangle_mppe_key","description":"Derives mppe-keys from mangled data","tag":"refentry","type":"Function","methodName":"radius_demangle_mppe_key"},{"id":"function.radius-get-attr","name":"radius_get_attr","description":"Extracts an attribute","tag":"refentry","type":"Function","methodName":"radius_get_attr"},{"id":"function.radius-get-tagged-attr-data","name":"radius_get_tagged_attr_data","description":"Extracts the data from a tagged attribute","tag":"refentry","type":"Function","methodName":"radius_get_tagged_attr_data"},{"id":"function.radius-get-tagged-attr-tag","name":"radius_get_tagged_attr_tag","description":"Extracts the tag from a tagged attribute","tag":"refentry","type":"Function","methodName":"radius_get_tagged_attr_tag"},{"id":"function.radius-get-vendor-attr","name":"radius_get_vendor_attr","description":"Extracts a vendor specific attribute","tag":"refentry","type":"Function","methodName":"radius_get_vendor_attr"},{"id":"function.radius-put-addr","name":"radius_put_addr","description":"Attaches an IP address attribute","tag":"refentry","type":"Function","methodName":"radius_put_addr"},{"id":"function.radius-put-attr","name":"radius_put_attr","description":"Attaches a binary attribute","tag":"refentry","type":"Function","methodName":"radius_put_attr"},{"id":"function.radius-put-int","name":"radius_put_int","description":"Attaches an integer attribute","tag":"refentry","type":"Function","methodName":"radius_put_int"},{"id":"function.radius-put-string","name":"radius_put_string","description":"Attaches a string attribute","tag":"refentry","type":"Function","methodName":"radius_put_string"},{"id":"function.radius-put-vendor-addr","name":"radius_put_vendor_addr","description":"Attaches a vendor specific IP address attribute","tag":"refentry","type":"Function","methodName":"radius_put_vendor_addr"},{"id":"function.radius-put-vendor-attr","name":"radius_put_vendor_attr","description":"Attaches a vendor specific binary attribute","tag":"refentry","type":"Function","methodName":"radius_put_vendor_attr"},{"id":"function.radius-put-vendor-int","name":"radius_put_vendor_int","description":"Attaches a vendor specific integer attribute","tag":"refentry","type":"Function","methodName":"radius_put_vendor_int"},{"id":"function.radius-put-vendor-string","name":"radius_put_vendor_string","description":"Attaches a vendor specific string attribute","tag":"refentry","type":"Function","methodName":"radius_put_vendor_string"},{"id":"function.radius-request-authenticator","name":"radius_request_authenticator","description":"Returns the request authenticator","tag":"refentry","type":"Function","methodName":"radius_request_authenticator"},{"id":"function.radius-salt-encrypt-attr","name":"radius_salt_encrypt_attr","description":"Salt-encrypts a value","tag":"refentry","type":"Function","methodName":"radius_salt_encrypt_attr"},{"id":"function.radius-send-request","name":"radius_send_request","description":"Sends the request and waits for a reply","tag":"refentry","type":"Function","methodName":"radius_send_request"},{"id":"function.radius-server-secret","name":"radius_server_secret","description":"Returns the shared secret","tag":"refentry","type":"Function","methodName":"radius_server_secret"},{"id":"function.radius-strerror","name":"radius_strerror","description":"Returns an error message","tag":"refentry","type":"Function","methodName":"radius_strerror"},{"id":"ref.radius","name":"Radius Functions","description":"Radius","tag":"reference","type":"Extension","methodName":"Radius Functions"},{"id":"book.radius","name":"Radius","description":"Authentication Services","tag":"book","type":"Extension","methodName":"Radius"},{"id":"refs.remote.auth","name":"Authentication Services","description":"Function Reference","tag":"set","type":"Extension","methodName":"Authentication Services"},{"id":"intro.readline","name":"Introduction","description":"GNU Readline","tag":"preface","type":"General","methodName":"Introduction"},{"id":"readline.requirements","name":"Requirements","description":"GNU Readline","tag":"section","type":"General","methodName":"Requirements"},{"id":"readline.installation","name":"Installation","description":"GNU Readline","tag":"section","type":"General","methodName":"Installation"},{"id":"readline.configuration","name":"Runtime Configuration","description":"GNU Readline","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"readline.setup","name":"Installing\/Configuring","description":"GNU Readline","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"readline.constants","name":"Predefined Constants","description":"GNU Readline","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.readline","name":"readline","description":"Reads a line","tag":"refentry","type":"Function","methodName":"readline"},{"id":"function.readline-add-history","name":"readline_add_history","description":"Adds a line to the history","tag":"refentry","type":"Function","methodName":"readline_add_history"},{"id":"function.readline-callback-handler-install","name":"readline_callback_handler_install","description":"Initializes the readline callback interface and terminal, prints the prompt and returns immediately","tag":"refentry","type":"Function","methodName":"readline_callback_handler_install"},{"id":"function.readline-callback-handler-remove","name":"readline_callback_handler_remove","description":"Removes a previously installed callback handler and restores terminal settings","tag":"refentry","type":"Function","methodName":"readline_callback_handler_remove"},{"id":"function.readline-callback-read-char","name":"readline_callback_read_char","description":"Reads a character and informs the readline callback interface when a line is received","tag":"refentry","type":"Function","methodName":"readline_callback_read_char"},{"id":"function.readline-clear-history","name":"readline_clear_history","description":"Clears the history","tag":"refentry","type":"Function","methodName":"readline_clear_history"},{"id":"function.readline-completion-function","name":"readline_completion_function","description":"Registers a completion function","tag":"refentry","type":"Function","methodName":"readline_completion_function"},{"id":"function.readline-info","name":"readline_info","description":"Gets\/sets various internal readline variables","tag":"refentry","type":"Function","methodName":"readline_info"},{"id":"function.readline-list-history","name":"readline_list_history","description":"Lists the history","tag":"refentry","type":"Function","methodName":"readline_list_history"},{"id":"function.readline-on-new-line","name":"readline_on_new_line","description":"Inform readline that the cursor has moved to a new line","tag":"refentry","type":"Function","methodName":"readline_on_new_line"},{"id":"function.readline-read-history","name":"readline_read_history","description":"Reads the history","tag":"refentry","type":"Function","methodName":"readline_read_history"},{"id":"function.readline-redisplay","name":"readline_redisplay","description":"Redraws the display","tag":"refentry","type":"Function","methodName":"readline_redisplay"},{"id":"function.readline-write-history","name":"readline_write_history","description":"Writes the history","tag":"refentry","type":"Function","methodName":"readline_write_history"},{"id":"ref.readline","name":"Readline Functions","description":"GNU Readline","tag":"reference","type":"Extension","methodName":"Readline Functions"},{"id":"book.readline","name":"Readline","description":"GNU Readline","tag":"book","type":"Extension","methodName":"Readline"},{"id":"refs.utilspec.cmdline","name":"Command Line Specific Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"Command Line Specific Extensions"},{"id":"intro.bzip2","name":"Introduction","description":"Bzip2","tag":"preface","type":"General","methodName":"Introduction"},{"id":"bzip2.requirements","name":"Requirements","description":"Bzip2","tag":"section","type":"General","methodName":"Requirements"},{"id":"bzip2.installation","name":"Installation","description":"Bzip2","tag":"section","type":"General","methodName":"Installation"},{"id":"bzip2.resources","name":"Resource Types","description":"Bzip2","tag":"section","type":"General","methodName":"Resource Types"},{"id":"bzip2.setup","name":"Installing\/Configuring","description":"Bzip2","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"bzip2.examples","name":"Examples","description":"Bzip2","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.bzclose","name":"bzclose","description":"Close a bzip2 file","tag":"refentry","type":"Function","methodName":"bzclose"},{"id":"function.bzcompress","name":"bzcompress","description":"Compress a string into bzip2 encoded data","tag":"refentry","type":"Function","methodName":"bzcompress"},{"id":"function.bzdecompress","name":"bzdecompress","description":"Decompresses bzip2 encoded data","tag":"refentry","type":"Function","methodName":"bzdecompress"},{"id":"function.bzerrno","name":"bzerrno","description":"Returns a bzip2 error number","tag":"refentry","type":"Function","methodName":"bzerrno"},{"id":"function.bzerror","name":"bzerror","description":"Returns the bzip2 error number and error string in an array","tag":"refentry","type":"Function","methodName":"bzerror"},{"id":"function.bzerrstr","name":"bzerrstr","description":"Returns a bzip2 error string","tag":"refentry","type":"Function","methodName":"bzerrstr"},{"id":"function.bzflush","name":"bzflush","description":"Do nothing","tag":"refentry","type":"Function","methodName":"bzflush"},{"id":"function.bzopen","name":"bzopen","description":"Opens a bzip2 compressed file","tag":"refentry","type":"Function","methodName":"bzopen"},{"id":"function.bzread","name":"bzread","description":"Binary safe bzip2 file read","tag":"refentry","type":"Function","methodName":"bzread"},{"id":"function.bzwrite","name":"bzwrite","description":"Binary safe bzip2 file write","tag":"refentry","type":"Function","methodName":"bzwrite"},{"id":"ref.bzip2","name":"Bzip2 Functions","description":"Bzip2","tag":"reference","type":"Extension","methodName":"Bzip2 Functions"},{"id":"book.bzip2","name":"Bzip2","description":"Compression and Archive Extensions","tag":"book","type":"Extension","methodName":"Bzip2"},{"id":"intro.lzf","name":"Introduction","description":"LZF","tag":"preface","type":"General","methodName":"Introduction"},{"id":"lzf.installation","name":"Installation","description":"LZF","tag":"section","type":"General","methodName":"Installation"},{"id":"lzf.setup","name":"Installing\/Configuring","description":"LZF","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.lzf-compress","name":"lzf_compress","description":"LZF compression","tag":"refentry","type":"Function","methodName":"lzf_compress"},{"id":"function.lzf-decompress","name":"lzf_decompress","description":"LZF decompression","tag":"refentry","type":"Function","methodName":"lzf_decompress"},{"id":"function.lzf-optimized-for","name":"lzf_optimized_for","description":"Determines what LZF extension was optimized for","tag":"refentry","type":"Function","methodName":"lzf_optimized_for"},{"id":"ref.lzf","name":"LZF Functions","description":"LZF","tag":"reference","type":"Extension","methodName":"LZF Functions"},{"id":"book.lzf","name":"LZF","description":"LZF","tag":"book","type":"Extension","methodName":"LZF"},{"id":"intro.phar","name":"Introduction","description":"Phar","tag":"preface","type":"General","methodName":"Introduction"},{"id":"phar.requirements","name":"Requirements","description":"Phar","tag":"section","type":"General","methodName":"Requirements"},{"id":"phar.installation","name":"Installation","description":"Phar","tag":"section","type":"General","methodName":"Installation"},{"id":"phar.configuration","name":"Runtime Configuration","description":"Phar","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"phar.resources","name":"Resource Types","description":"Phar","tag":"section","type":"General","methodName":"Resource Types"},{"id":"phar.setup","name":"Installing\/Configuring","description":"Phar","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"phar.constants","name":"Predefined Constants","description":"Phar","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"phar.using.intro","name":"Using Phar Archives: Introduction","description":"Phar","tag":"section","type":"General","methodName":"Using Phar Archives: Introduction"},{"id":"phar.using.stream","name":"Using Phar Archives: the phar stream wrapper","description":"Phar","tag":"section","type":"General","methodName":"Using Phar Archives: the phar stream wrapper"},{"id":"phar.using.object","name":"Using Phar Archives: the Phar and PharData class","description":"Phar","tag":"section","type":"General","methodName":"Using Phar Archives: the Phar and PharData class"},{"id":"phar.using","name":"Using Phar Archives","description":"Phar","tag":"chapter","type":"General","methodName":"Using Phar Archives"},{"id":"phar.creating.intro","name":"Creating Phar Archives: Introduction","description":"Phar","tag":"section","type":"General","methodName":"Creating Phar Archives: Introduction"},{"id":"phar.creating","name":"Creating Phar Archives","description":"Phar","tag":"chapter","type":"General","methodName":"Creating Phar Archives"},{"id":"phar.fileformat.ingredients","name":"Ingredients of all Phar archives, independent of file format","description":"Phar","tag":"section","type":"General","methodName":"Ingredients of all Phar archives, independent of file format"},{"id":"phar.fileformat.stub","name":"Phar file stub","description":"Phar","tag":"section","type":"General","methodName":"Phar file stub"},{"id":"phar.fileformat.comparison","name":"Head-to-head comparison of Phar, Tar and Zip","description":"Phar","tag":"section","type":"General","methodName":"Head-to-head comparison of Phar, Tar and Zip"},{"id":"phar.fileformat.tar","name":"Tar-based phars","description":"Phar","tag":"section","type":"General","methodName":"Tar-based phars"},{"id":"phar.fileformat.zip","name":"Zip-based phars","description":"Phar","tag":"section","type":"General","methodName":"Zip-based phars"},{"id":"phar.fileformat.phar","name":"Phar File Format","description":"Phar","tag":"section","type":"General","methodName":"Phar File Format"},{"id":"phar.fileformat.flags","name":"Global Phar bitmapped flags","description":"Phar","tag":"section","type":"General","methodName":"Global Phar bitmapped flags"},{"id":"phar.fileformat.manifestfile","name":"Phar manifest file entry definition","description":"Phar","tag":"section","type":"General","methodName":"Phar manifest file entry definition"},{"id":"phar.fileformat.signature","name":"Phar Signature format","description":"Phar","tag":"section","type":"General","methodName":"Phar Signature format"},{"id":"phar.fileformat","name":"What makes a phar a phar and not a tar or a zip?","description":"Phar","tag":"chapter","type":"General","methodName":"What makes a phar a phar and not a tar or a zip?"},{"id":"phar.addemptydir","name":"Phar::addEmptyDir","description":"Add an empty directory to the phar archive","tag":"refentry","type":"Function","methodName":"addEmptyDir"},{"id":"phar.addfile","name":"Phar::addFile","description":"Add a file from the filesystem to the phar archive","tag":"refentry","type":"Function","methodName":"addFile"},{"id":"phar.addfromstring","name":"Phar::addFromString","description":"Add a file from a string to the phar archive","tag":"refentry","type":"Function","methodName":"addFromString"},{"id":"phar.apiversion","name":"Phar::apiVersion","description":"Returns the api version","tag":"refentry","type":"Function","methodName":"apiVersion"},{"id":"phar.buildfromdirectory","name":"Phar::buildFromDirectory","description":"Construct a phar archive from the files within a directory","tag":"refentry","type":"Function","methodName":"buildFromDirectory"},{"id":"phar.buildfromiterator","name":"Phar::buildFromIterator","description":"Construct a phar archive from an iterator","tag":"refentry","type":"Function","methodName":"buildFromIterator"},{"id":"phar.cancompress","name":"Phar::canCompress","description":"Returns whether phar extension supports compression using either zlib or bzip2","tag":"refentry","type":"Function","methodName":"canCompress"},{"id":"phar.canwrite","name":"Phar::canWrite","description":"Returns whether phar extension supports writing and creating phars","tag":"refentry","type":"Function","methodName":"canWrite"},{"id":"phar.compress","name":"Phar::compress","description":"Compresses the entire Phar archive using Gzip or Bzip2 compression","tag":"refentry","type":"Function","methodName":"compress"},{"id":"phar.compressfiles","name":"Phar::compressFiles","description":"Compresses all files in the current Phar archive","tag":"refentry","type":"Function","methodName":"compressFiles"},{"id":"phar.construct","name":"Phar::__construct","description":"Construct a Phar archive object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"phar.converttodata","name":"Phar::convertToData","description":"Convert a phar archive to a non-executable tar or zip file","tag":"refentry","type":"Function","methodName":"convertToData"},{"id":"phar.converttoexecutable","name":"Phar::convertToExecutable","description":"Convert a phar archive to another executable phar archive file format","tag":"refentry","type":"Function","methodName":"convertToExecutable"},{"id":"phar.copy","name":"Phar::copy","description":"Copy a file internal to the phar archive to another new file within the phar","tag":"refentry","type":"Function","methodName":"copy"},{"id":"phar.count","name":"Phar::count","description":"Returns the number of entries (files) in the Phar archive","tag":"refentry","type":"Function","methodName":"count"},{"id":"phar.createdefaultstub","name":"Phar::createDefaultStub","description":"Create a phar-file format specific stub","tag":"refentry","type":"Function","methodName":"createDefaultStub"},{"id":"phar.decompress","name":"Phar::decompress","description":"Decompresses the entire Phar archive","tag":"refentry","type":"Function","methodName":"decompress"},{"id":"phar.decompressfiles","name":"Phar::decompressFiles","description":"Decompresses all files in the current Phar archive","tag":"refentry","type":"Function","methodName":"decompressFiles"},{"id":"phar.delmetadata","name":"Phar::delMetadata","description":"Deletes the global metadata of the phar","tag":"refentry","type":"Function","methodName":"delMetadata"},{"id":"phar.delete","name":"Phar::delete","description":"Delete a file within a phar archive","tag":"refentry","type":"Function","methodName":"delete"},{"id":"phar.destruct","name":"Phar::__destruct","description":"Destructs a Phar archive object","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"phar.extractto","name":"Phar::extractTo","description":"Extract the contents of a phar archive to a directory","tag":"refentry","type":"Function","methodName":"extractTo"},{"id":"phar.getalias","name":"Phar::getAlias","description":"Get the alias for Phar","tag":"refentry","type":"Function","methodName":"getAlias"},{"id":"phar.getmetadata","name":"Phar::getMetadata","description":"Returns phar archive meta-data","tag":"refentry","type":"Function","methodName":"getMetadata"},{"id":"phar.getmodified","name":"Phar::getModified","description":"Return whether phar was modified","tag":"refentry","type":"Function","methodName":"getModified"},{"id":"phar.getpath","name":"Phar::getPath","description":"Get the real path to the Phar archive on disk","tag":"refentry","type":"Function","methodName":"getPath"},{"id":"phar.getsignature","name":"Phar::getSignature","description":"Return MD5\/SHA1\/SHA256\/SHA512\/OpenSSL signature of a Phar archive","tag":"refentry","type":"Function","methodName":"getSignature"},{"id":"phar.getstub","name":"Phar::getStub","description":"Return the PHP loader or bootstrap stub of a Phar archive","tag":"refentry","type":"Function","methodName":"getStub"},{"id":"phar.getsupportedcompression","name":"Phar::getSupportedCompression","description":"Return array of supported compression algorithms","tag":"refentry","type":"Function","methodName":"getSupportedCompression"},{"id":"phar.getsupportedsignatures","name":"Phar::getSupportedSignatures","description":"Return array of supported signature types","tag":"refentry","type":"Function","methodName":"getSupportedSignatures"},{"id":"phar.getversion","name":"Phar::getVersion","description":"Return version info of Phar archive","tag":"refentry","type":"Function","methodName":"getVersion"},{"id":"phar.hasmetadata","name":"Phar::hasMetadata","description":"Returns whether phar has global meta-data","tag":"refentry","type":"Function","methodName":"hasMetadata"},{"id":"phar.interceptfilefuncs","name":"Phar::interceptFileFuncs","description":"Instructs phar to intercept fopen, file_get_contents, opendir, and all of the stat-related functions","tag":"refentry","type":"Function","methodName":"interceptFileFuncs"},{"id":"phar.isbuffering","name":"Phar::isBuffering","description":"Used to determine whether Phar write operations are being buffered, or are flushing directly to disk","tag":"refentry","type":"Function","methodName":"isBuffering"},{"id":"phar.iscompressed","name":"Phar::isCompressed","description":"Returns Phar::GZ or PHAR::BZ2 if the entire phar archive is compressed (.tar.gz\/tar.bz and so on)","tag":"refentry","type":"Function","methodName":"isCompressed"},{"id":"phar.isfileformat","name":"Phar::isFileFormat","description":"Returns true if the phar archive is based on the tar\/phar\/zip file format depending on the parameter","tag":"refentry","type":"Function","methodName":"isFileFormat"},{"id":"phar.isvalidpharfilename","name":"Phar::isValidPharFilename","description":"Returns whether the given filename is a valid phar filename","tag":"refentry","type":"Function","methodName":"isValidPharFilename"},{"id":"phar.iswritable","name":"Phar::isWritable","description":"Returns true if the phar archive can be modified","tag":"refentry","type":"Function","methodName":"isWritable"},{"id":"phar.loadphar","name":"Phar::loadPhar","description":"Loads any phar archive with an alias","tag":"refentry","type":"Function","methodName":"loadPhar"},{"id":"phar.mapphar","name":"Phar::mapPhar","description":"Reads the currently executed file (a phar) and registers its manifest","tag":"refentry","type":"Function","methodName":"mapPhar"},{"id":"phar.mount","name":"Phar::mount","description":"Mount an external path or file to a virtual location within the phar archive","tag":"refentry","type":"Function","methodName":"mount"},{"id":"phar.mungserver","name":"Phar::mungServer","description":"Defines a list of up to 4 $_SERVER variables that should be modified for execution","tag":"refentry","type":"Function","methodName":"mungServer"},{"id":"phar.offsetexists","name":"Phar::offsetExists","description":"Determines whether a file exists in the phar","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"phar.offsetget","name":"Phar::offsetGet","description":"Gets a PharFileInfo object for a specific file","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"phar.offsetset","name":"Phar::offsetSet","description":"Set the contents of an internal file to those of an external file","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"phar.offsetunset","name":"Phar::offsetUnset","description":"Remove a file from a phar","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"phar.running","name":"Phar::running","description":"Returns the full path on disk or full phar URL to the currently executing Phar archive","tag":"refentry","type":"Function","methodName":"running"},{"id":"phar.setalias","name":"Phar::setAlias","description":"Set the alias for the Phar archive","tag":"refentry","type":"Function","methodName":"setAlias"},{"id":"phar.setdefaultstub","name":"Phar::setDefaultStub","description":"Used to set the PHP loader or bootstrap stub of a Phar archive to the default loader","tag":"refentry","type":"Function","methodName":"setDefaultStub"},{"id":"phar.setmetadata","name":"Phar::setMetadata","description":"Sets phar archive meta-data","tag":"refentry","type":"Function","methodName":"setMetadata"},{"id":"phar.setsignaturealgorithm","name":"Phar::setSignatureAlgorithm","description":"Set the signature algorithm for a phar and apply it","tag":"refentry","type":"Function","methodName":"setSignatureAlgorithm"},{"id":"phar.setstub","name":"Phar::setStub","description":"Used to set the PHP loader or bootstrap stub of a Phar archive","tag":"refentry","type":"Function","methodName":"setStub"},{"id":"phar.startbuffering","name":"Phar::startBuffering","description":"Start buffering Phar write operations, do not modify the Phar object on disk","tag":"refentry","type":"Function","methodName":"startBuffering"},{"id":"phar.stopbuffering","name":"Phar::stopBuffering","description":"Stop buffering write requests to the Phar archive, and save changes to disk","tag":"refentry","type":"Function","methodName":"stopBuffering"},{"id":"phar.unlinkarchive","name":"Phar::unlinkArchive","description":"Completely remove a phar archive from disk and from memory","tag":"refentry","type":"Function","methodName":"unlinkArchive"},{"id":"phar.webphar","name":"Phar::webPhar","description":"Routes a request from a web browser to an internal file within the phar archive","tag":"refentry","type":"Function","methodName":"webPhar"},{"id":"class.phar","name":"Phar","description":"The Phar class","tag":"phpdoc:classref","type":"Class","methodName":"Phar"},{"id":"phardata.addemptydir","name":"PharData::addEmptyDir","description":"Add an empty directory to the tar\/zip archive","tag":"refentry","type":"Function","methodName":"addEmptyDir"},{"id":"phardata.addfile","name":"PharData::addFile","description":"Add a file from the filesystem to the tar\/zip archive","tag":"refentry","type":"Function","methodName":"addFile"},{"id":"phardata.addfromstring","name":"PharData::addFromString","description":"Add a file from a string to the tar\/zip archive","tag":"refentry","type":"Function","methodName":"addFromString"},{"id":"phardata.buildfromdirectory","name":"PharData::buildFromDirectory","description":"Construct a tar\/zip archive from the files within a directory","tag":"refentry","type":"Function","methodName":"buildFromDirectory"},{"id":"phardata.buildfromiterator","name":"PharData::buildFromIterator","description":"Construct a tar or zip archive from an iterator","tag":"refentry","type":"Function","methodName":"buildFromIterator"},{"id":"phardata.compress","name":"PharData::compress","description":"Compresses the entire tar\/zip archive using Gzip or Bzip2 compression","tag":"refentry","type":"Function","methodName":"compress"},{"id":"phardata.compressfiles","name":"PharData::compressFiles","description":"Compresses all files in the current tar\/zip archive","tag":"refentry","type":"Function","methodName":"compressFiles"},{"id":"phardata.construct","name":"PharData::__construct","description":"Construct a non-executable tar or zip archive object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"phardata.converttodata","name":"PharData::convertToData","description":"Convert a phar archive to a non-executable tar or zip file","tag":"refentry","type":"Function","methodName":"convertToData"},{"id":"phardata.converttoexecutable","name":"PharData::convertToExecutable","description":"Convert a non-executable tar\/zip archive to an executable phar archive","tag":"refentry","type":"Function","methodName":"convertToExecutable"},{"id":"phardata.copy","name":"PharData::copy","description":"Copy a file internal to the tar\/zip archive to another new file within the same archive","tag":"refentry","type":"Function","methodName":"copy"},{"id":"phardata.decompress","name":"PharData::decompress","description":"Decompresses the entire Phar archive","tag":"refentry","type":"Function","methodName":"decompress"},{"id":"phardata.decompressfiles","name":"PharData::decompressFiles","description":"Decompresses all files in the current zip archive","tag":"refentry","type":"Function","methodName":"decompressFiles"},{"id":"phardata.delmetadata","name":"PharData::delMetadata","description":"Deletes the global metadata of a zip archive","tag":"refentry","type":"Function","methodName":"delMetadata"},{"id":"phardata.delete","name":"PharData::delete","description":"Delete a file within a tar\/zip archive","tag":"refentry","type":"Function","methodName":"delete"},{"id":"phardata.destruct","name":"PharData::__destruct","description":"Destructs a non-executable tar or zip archive object","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"phardata.extractto","name":"PharData::extractTo","description":"Extract the contents of a tar\/zip archive to a directory","tag":"refentry","type":"Function","methodName":"extractTo"},{"id":"phardata.iswritable","name":"PharData::isWritable","description":"Returns true if the tar\/zip archive can be modified","tag":"refentry","type":"Function","methodName":"isWritable"},{"id":"phardata.offsetset","name":"PharData::offsetSet","description":"Set the contents of a file within the tar\/zip to those of an external file or string","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"phardata.offsetunset","name":"PharData::offsetUnset","description":"Remove a file from a tar\/zip archive","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"phardata.setalias","name":"PharData::setAlias","description":"Dummy function (Phar::setAlias is not valid for PharData)","tag":"refentry","type":"Function","methodName":"setAlias"},{"id":"phardata.setdefaultstub","name":"PharData::setDefaultStub","description":"Dummy function (Phar::setDefaultStub is not valid for PharData)","tag":"refentry","type":"Function","methodName":"setDefaultStub"},{"id":"phardata.setmetadata","name":"PharData::setMetadata","description":"Sets phar archive meta-data","tag":"refentry","type":"Function","methodName":"setMetadata"},{"id":"phardata.setsignaturealgorithm","name":"PharData::setSignatureAlgorithm","description":"Set the signature algorithm for a phar and apply it","tag":"refentry","type":"Function","methodName":"setSignatureAlgorithm"},{"id":"phardata.setstub","name":"PharData::setStub","description":"Dummy function (Phar::setStub is not valid for PharData)","tag":"refentry","type":"Function","methodName":"setStub"},{"id":"class.phardata","name":"PharData","description":"The PharData class","tag":"phpdoc:classref","type":"Class","methodName":"PharData"},{"id":"pharfileinfo.chmod","name":"PharFileInfo::chmod","description":"Sets file-specific permission bits","tag":"refentry","type":"Function","methodName":"chmod"},{"id":"pharfileinfo.compress","name":"PharFileInfo::compress","description":"Compresses the current Phar entry with either zlib or bzip2 compression","tag":"refentry","type":"Function","methodName":"compress"},{"id":"pharfileinfo.construct","name":"PharFileInfo::__construct","description":"Construct a Phar entry object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"pharfileinfo.decompress","name":"PharFileInfo::decompress","description":"Decompresses the current Phar entry within the phar","tag":"refentry","type":"Function","methodName":"decompress"},{"id":"pharfileinfo.delmetadata","name":"PharFileInfo::delMetadata","description":"Deletes the metadata of the entry","tag":"refentry","type":"Function","methodName":"delMetadata"},{"id":"pharfileinfo.destruct","name":"PharFileInfo::__destruct","description":"Destructs a Phar entry object","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"pharfileinfo.getcrc32","name":"PharFileInfo::getCRC32","description":"Returns CRC32 code or throws an exception if CRC has not been verified","tag":"refentry","type":"Function","methodName":"getCRC32"},{"id":"pharfileinfo.getcompressedsize","name":"PharFileInfo::getCompressedSize","description":"Returns the actual size of the file (with compression) inside the Phar archive","tag":"refentry","type":"Function","methodName":"getCompressedSize"},{"id":"pharfileinfo.getcontent","name":"PharFileInfo::getContent","description":"Get the complete file contents of the entry","tag":"refentry","type":"Function","methodName":"getContent"},{"id":"pharfileinfo.getmetadata","name":"PharFileInfo::getMetadata","description":"Returns file-specific meta-data saved with a file","tag":"refentry","type":"Function","methodName":"getMetadata"},{"id":"pharfileinfo.getpharflags","name":"PharFileInfo::getPharFlags","description":"Returns the Phar file entry flags","tag":"refentry","type":"Function","methodName":"getPharFlags"},{"id":"pharfileinfo.hasmetadata","name":"PharFileInfo::hasMetadata","description":"Returns the metadata of the entry","tag":"refentry","type":"Function","methodName":"hasMetadata"},{"id":"pharfileinfo.iscrcchecked","name":"PharFileInfo::isCRCChecked","description":"Returns whether file entry has had its CRC verified","tag":"refentry","type":"Function","methodName":"isCRCChecked"},{"id":"pharfileinfo.iscompressed","name":"PharFileInfo::isCompressed","description":"Returns whether the entry is compressed","tag":"refentry","type":"Function","methodName":"isCompressed"},{"id":"pharfileinfo.setmetadata","name":"PharFileInfo::setMetadata","description":"Sets file-specific meta-data saved with a file","tag":"refentry","type":"Function","methodName":"setMetadata"},{"id":"class.pharfileinfo","name":"PharFileInfo","description":"The PharFileInfo class","tag":"phpdoc:classref","type":"Class","methodName":"PharFileInfo"},{"id":"class.pharexception","name":"PharException","description":"The PharException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"PharException"},{"id":"book.phar","name":"Phar","description":"Compression and Archive Extensions","tag":"book","type":"Extension","methodName":"Phar"},{"id":"intro.rar","name":"Introduction","description":"Rar Archiving","tag":"preface","type":"General","methodName":"Introduction"},{"id":"rar.installation","name":"Installation","description":"Rar Archiving","tag":"section","type":"General","methodName":"Installation"},{"id":"rar.resources","name":"Resource Types","description":"Rar Archiving","tag":"section","type":"General","methodName":"Resource Types"},{"id":"rar.setup","name":"Installing\/Configuring","description":"Rar Archiving","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"rar.constants","name":"Predefined Constants","description":"Rar Archiving","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"rar.examples","name":"Examples","description":"Rar Archiving","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.rar-wrapper-cache-stats","name":"rar_wrapper_cache_stats","description":"Cache hits and misses for the URL wrapper","tag":"refentry","type":"Function","methodName":"rar_wrapper_cache_stats"},{"id":"ref.rar","name":"Rar Functions","description":"Rar Archiving","tag":"reference","type":"Extension","methodName":"Rar Functions"},{"id":"rararchive.close","name":"rar_close","description":"Close RAR archive and free all resources","tag":"refentry","type":"Function","methodName":"rar_close"},{"id":"rararchive.close","name":"RarArchive::close","description":"Close RAR archive and free all resources","tag":"refentry","type":"Function","methodName":"close"},{"id":"rararchive.getcomment","name":"rar_comment_get","description":"Get comment text from the RAR archive","tag":"refentry","type":"Function","methodName":"rar_comment_get"},{"id":"rararchive.getcomment","name":"RarArchive::getComment","description":"Get comment text from the RAR archive","tag":"refentry","type":"Function","methodName":"getComment"},{"id":"rararchive.getentries","name":"rar_list","description":"Get full list of entries from the RAR archive","tag":"refentry","type":"Function","methodName":"rar_list"},{"id":"rararchive.getentries","name":"RarArchive::getEntries","description":"Get full list of entries from the RAR archive","tag":"refentry","type":"Function","methodName":"getEntries"},{"id":"rararchive.getentry","name":"rar_entry_get","description":"Get entry object from the RAR archive","tag":"refentry","type":"Function","methodName":"rar_entry_get"},{"id":"rararchive.getentry","name":"RarArchive::getEntry","description":"Get entry object from the RAR archive","tag":"refentry","type":"Function","methodName":"getEntry"},{"id":"rararchive.isbroken","name":"rar_broken_is","description":"Test whether an archive is broken (incomplete)","tag":"refentry","type":"Function","methodName":"rar_broken_is"},{"id":"rararchive.isbroken","name":"RarArchive::isBroken","description":"Test whether an archive is broken (incomplete)","tag":"refentry","type":"Function","methodName":"isBroken"},{"id":"rararchive.issolid","name":"rar_solid_is","description":"Check whether the RAR archive is solid","tag":"refentry","type":"Function","methodName":"rar_solid_is"},{"id":"rararchive.issolid","name":"RarArchive::isSolid","description":"Check whether the RAR archive is solid","tag":"refentry","type":"Function","methodName":"isSolid"},{"id":"rararchive.open","name":"rar_open","description":"Open RAR archive","tag":"refentry","type":"Function","methodName":"rar_open"},{"id":"rararchive.open","name":"RarArchive::open","description":"Open RAR archive","tag":"refentry","type":"Function","methodName":"open"},{"id":"rararchive.setallowbroken","name":"RarArchive::setAllowBroken","description":"Whether opening broken archives is allowed","tag":"refentry","type":"Function","methodName":"setAllowBroken"},{"id":"rararchive.tostring","name":"RarArchive::__toString","description":"Get text representation","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.rararchive","name":"RarArchive","description":"The RarArchive class","tag":"phpdoc:classref","type":"Class","methodName":"RarArchive"},{"id":"rarentry.extract","name":"RarEntry::extract","description":"Extract entry from the archive","tag":"refentry","type":"Function","methodName":"extract"},{"id":"rarentry.getattr","name":"RarEntry::getAttr","description":"Get attributes of the entry","tag":"refentry","type":"Function","methodName":"getAttr"},{"id":"rarentry.getcrc","name":"RarEntry::getCrc","description":"Get CRC of the entry","tag":"refentry","type":"Function","methodName":"getCrc"},{"id":"rarentry.getfiletime","name":"RarEntry::getFileTime","description":"Get entry last modification time","tag":"refentry","type":"Function","methodName":"getFileTime"},{"id":"rarentry.gethostos","name":"RarEntry::getHostOs","description":"Get entry host OS","tag":"refentry","type":"Function","methodName":"getHostOs"},{"id":"rarentry.getmethod","name":"RarEntry::getMethod","description":"Get pack method of the entry","tag":"refentry","type":"Function","methodName":"getMethod"},{"id":"rarentry.getname","name":"RarEntry::getName","description":"Get name of the entry","tag":"refentry","type":"Function","methodName":"getName"},{"id":"rarentry.getpackedsize","name":"RarEntry::getPackedSize","description":"Get packed size of the entry","tag":"refentry","type":"Function","methodName":"getPackedSize"},{"id":"rarentry.getstream","name":"RarEntry::getStream","description":"Get file handler for entry","tag":"refentry","type":"Function","methodName":"getStream"},{"id":"rarentry.getunpackedsize","name":"RarEntry::getUnpackedSize","description":"Get unpacked size of the entry","tag":"refentry","type":"Function","methodName":"getUnpackedSize"},{"id":"rarentry.getversion","name":"RarEntry::getVersion","description":"Get minimum version of RAR program required to unpack the entry","tag":"refentry","type":"Function","methodName":"getVersion"},{"id":"rarentry.isdirectory","name":"RarEntry::isDirectory","description":"Test whether an entry represents a directory","tag":"refentry","type":"Function","methodName":"isDirectory"},{"id":"rarentry.isencrypted","name":"RarEntry::isEncrypted","description":"Test whether an entry is encrypted","tag":"refentry","type":"Function","methodName":"isEncrypted"},{"id":"rarentry.tostring","name":"RarEntry::__toString","description":"Get text representation of entry","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.rarentry","name":"RarEntry","description":"The RarEntry class","tag":"phpdoc:classref","type":"Class","methodName":"RarEntry"},{"id":"rarexception.isusingexceptions","name":"RarException::isUsingExceptions","description":"Check whether error handling with exceptions is in use","tag":"refentry","type":"Function","methodName":"isUsingExceptions"},{"id":"rarexception.setusingexceptions","name":"RarException::setUsingExceptions","description":"Activate and deactivate error handling with exceptions","tag":"refentry","type":"Function","methodName":"setUsingExceptions"},{"id":"class.rarexception","name":"RarException","description":"The RarException class","tag":"phpdoc:classref","type":"Class","methodName":"RarException"},{"id":"book.rar","name":"Rar","description":"Rar Archiving","tag":"book","type":"Extension","methodName":"Rar"},{"id":"intro.zip","name":"Introduction","description":"Zip","tag":"preface","type":"General","methodName":"Introduction"},{"id":"zip.requirements","name":"Requirements","description":"Zip","tag":"section","type":"General","methodName":"Requirements"},{"id":"zip.installation","name":"Installation","description":"Zip","tag":"section","type":"General","methodName":"Installation"},{"id":"zip.resources","name":"Resource Types","description":"Zip","tag":"section","type":"General","methodName":"Resource Types"},{"id":"zip.setup","name":"Installing\/Configuring","description":"Zip","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"zip.constants","name":"Predefined Constants","description":"Zip","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"zip.examples","name":"Examples","description":"Zip","tag":"chapter","type":"General","methodName":"Examples"},{"id":"ziparchive.addemptydir","name":"ZipArchive::addEmptyDir","description":"Add a new directory","tag":"refentry","type":"Function","methodName":"addEmptyDir"},{"id":"ziparchive.addfile","name":"ZipArchive::addFile","description":"Adds a file to a ZIP archive from the given path","tag":"refentry","type":"Function","methodName":"addFile"},{"id":"ziparchive.addfromstring","name":"ZipArchive::addFromString","description":"Add a file to a ZIP archive using its contents","tag":"refentry","type":"Function","methodName":"addFromString"},{"id":"ziparchive.addglob","name":"ZipArchive::addGlob","description":"Add files from a directory by glob pattern","tag":"refentry","type":"Function","methodName":"addGlob"},{"id":"ziparchive.addpattern","name":"ZipArchive::addPattern","description":"Add files from a directory by PCRE pattern","tag":"refentry","type":"Function","methodName":"addPattern"},{"id":"ziparchive.clearerror","name":"ZipArchive::clearError","description":"Clear the status error message, system and\/or zip messages","tag":"refentry","type":"Function","methodName":"clearError"},{"id":"ziparchive.close","name":"ZipArchive::close","description":"Close the active archive (opened or newly created)","tag":"refentry","type":"Function","methodName":"close"},{"id":"ziparchive.count","name":"ZipArchive::count","description":"Counts the number of files in the archive","tag":"refentry","type":"Function","methodName":"count"},{"id":"ziparchive.deleteindex","name":"ZipArchive::deleteIndex","description":"Delete an entry in the archive using its index","tag":"refentry","type":"Function","methodName":"deleteIndex"},{"id":"ziparchive.deletename","name":"ZipArchive::deleteName","description":"Delete an entry in the archive using its name","tag":"refentry","type":"Function","methodName":"deleteName"},{"id":"ziparchive.extractto","name":"ZipArchive::extractTo","description":"Extract the archive contents","tag":"refentry","type":"Function","methodName":"extractTo"},{"id":"ziparchive.getarchivecomment","name":"ZipArchive::getArchiveComment","description":"Returns the Zip archive comment","tag":"refentry","type":"Function","methodName":"getArchiveComment"},{"id":"ziparchive.getarchiveflag","name":"ZipArchive::getArchiveFlag","description":"Returns the value of a Zip archive global flag","tag":"refentry","type":"Function","methodName":"getArchiveFlag"},{"id":"ziparchive.getcommentindex","name":"ZipArchive::getCommentIndex","description":"Returns the comment of an entry using the entry index","tag":"refentry","type":"Function","methodName":"getCommentIndex"},{"id":"ziparchive.getcommentname","name":"ZipArchive::getCommentName","description":"Returns the comment of an entry using the entry name","tag":"refentry","type":"Function","methodName":"getCommentName"},{"id":"ziparchive.getexternalattributesindex","name":"ZipArchive::getExternalAttributesIndex","description":"Retrieve the external attributes of an entry defined by its index","tag":"refentry","type":"Function","methodName":"getExternalAttributesIndex"},{"id":"ziparchive.getexternalattributesname","name":"ZipArchive::getExternalAttributesName","description":"Retrieve the external attributes of an entry defined by its name","tag":"refentry","type":"Function","methodName":"getExternalAttributesName"},{"id":"ziparchive.getfromindex","name":"ZipArchive::getFromIndex","description":"Returns the entry contents using its index","tag":"refentry","type":"Function","methodName":"getFromIndex"},{"id":"ziparchive.getfromname","name":"ZipArchive::getFromName","description":"Returns the entry contents using its name","tag":"refentry","type":"Function","methodName":"getFromName"},{"id":"ziparchive.getnameindex","name":"ZipArchive::getNameIndex","description":"Returns the name of an entry using its index","tag":"refentry","type":"Function","methodName":"getNameIndex"},{"id":"ziparchive.getstatusstring","name":"ZipArchive::getStatusString","description":"Returns the status error message, system and\/or zip messages","tag":"refentry","type":"Function","methodName":"getStatusString"},{"id":"ziparchive.getstream","name":"ZipArchive::getStream","description":"Get a file handler to the entry defined by its name (read only)","tag":"refentry","type":"Function","methodName":"getStream"},{"id":"ziparchive.getstreamindex","name":"ZipArchive::getStreamIndex","description":"Get a file handler to the entry defined by its index (read only)","tag":"refentry","type":"Function","methodName":"getStreamIndex"},{"id":"ziparchive.getstreamname","name":"ZipArchive::getStreamName","description":"Get a file handler to the entry defined by its name (read only)","tag":"refentry","type":"Function","methodName":"getStreamName"},{"id":"ziparchive.iscompressionmethoddupported","name":"ZipArchive::isCompressionMethodSupported","description":"Check if a compression method is supported by libzip","tag":"refentry","type":"Function","methodName":"isCompressionMethodSupported"},{"id":"ziparchive.isencryptionmethoddupported","name":"ZipArchive::isEncryptionMethodSupported","description":"Check if a encryption method is supported by libzip","tag":"refentry","type":"Function","methodName":"isEncryptionMethodSupported"},{"id":"ziparchive.locatename","name":"ZipArchive::locateName","description":"Returns the index of the entry in the archive","tag":"refentry","type":"Function","methodName":"locateName"},{"id":"ziparchive.open","name":"ZipArchive::open","description":"Open a ZIP file archive","tag":"refentry","type":"Function","methodName":"open"},{"id":"ziparchive.registercancelcallback","name":"ZipArchive::registerCancelCallback","description":"Register a callback to allow cancellation during archive close.","tag":"refentry","type":"Function","methodName":"registerCancelCallback"},{"id":"ziparchive.registerprogresscallback","name":"ZipArchive::registerProgressCallback","description":"Register a callback to provide updates during archive close.","tag":"refentry","type":"Function","methodName":"registerProgressCallback"},{"id":"ziparchive.renameindex","name":"ZipArchive::renameIndex","description":"Renames an entry defined by its index","tag":"refentry","type":"Function","methodName":"renameIndex"},{"id":"ziparchive.renamename","name":"ZipArchive::renameName","description":"Renames an entry defined by its name","tag":"refentry","type":"Function","methodName":"renameName"},{"id":"ziparchive.replacefile","name":"ZipArchive::replaceFile","description":"Replace file in ZIP archive with a given path","tag":"refentry","type":"Function","methodName":"replaceFile"},{"id":"ziparchive.setarchivecomment","name":"ZipArchive::setArchiveComment","description":"Set the comment of a ZIP archive","tag":"refentry","type":"Function","methodName":"setArchiveComment"},{"id":"ziparchive.setarchiveflag","name":"ZipArchive::setArchiveFlag","description":"Set a global flag of a ZIP archive","tag":"refentry","type":"Function","methodName":"setArchiveFlag"},{"id":"ziparchive.setcommentindex","name":"ZipArchive::setCommentIndex","description":"Set the comment of an entry defined by its index","tag":"refentry","type":"Function","methodName":"setCommentIndex"},{"id":"ziparchive.setcommentname","name":"ZipArchive::setCommentName","description":"Set the comment of an entry defined by its name","tag":"refentry","type":"Function","methodName":"setCommentName"},{"id":"ziparchive.setcompressionindex","name":"ZipArchive::setCompressionIndex","description":"Set the compression method of an entry defined by its index","tag":"refentry","type":"Function","methodName":"setCompressionIndex"},{"id":"ziparchive.setcompressionname","name":"ZipArchive::setCompressionName","description":"Set the compression method of an entry defined by its name","tag":"refentry","type":"Function","methodName":"setCompressionName"},{"id":"ziparchive.setencryptionindex","name":"ZipArchive::setEncryptionIndex","description":"Set the encryption method of an entry defined by its index","tag":"refentry","type":"Function","methodName":"setEncryptionIndex"},{"id":"ziparchive.setencryptionname","name":"ZipArchive::setEncryptionName","description":"Set the encryption method of an entry defined by its name","tag":"refentry","type":"Function","methodName":"setEncryptionName"},{"id":"ziparchive.setexternalattributesindex","name":"ZipArchive::setExternalAttributesIndex","description":"Set the external attributes of an entry defined by its index","tag":"refentry","type":"Function","methodName":"setExternalAttributesIndex"},{"id":"ziparchive.setexternalattributesname","name":"ZipArchive::setExternalAttributesName","description":"Set the external attributes of an entry defined by its name","tag":"refentry","type":"Function","methodName":"setExternalAttributesName"},{"id":"ziparchive.setmtimeindex","name":"ZipArchive::setMtimeIndex","description":"Set the modification time of an entry defined by its index","tag":"refentry","type":"Function","methodName":"setMtimeIndex"},{"id":"ziparchive.setmtimename","name":"ZipArchive::setMtimeName","description":"Set the modification time of an entry defined by its name","tag":"refentry","type":"Function","methodName":"setMtimeName"},{"id":"ziparchive.setpassword","name":"ZipArchive::setPassword","description":"Set the password for the active archive","tag":"refentry","type":"Function","methodName":"setPassword"},{"id":"ziparchive.statindex","name":"ZipArchive::statIndex","description":"Get the details of an entry defined by its index","tag":"refentry","type":"Function","methodName":"statIndex"},{"id":"ziparchive.statname","name":"ZipArchive::statName","description":"Get the details of an entry defined by its name","tag":"refentry","type":"Function","methodName":"statName"},{"id":"ziparchive.unchangeall","name":"ZipArchive::unchangeAll","description":"Undo all changes done in the archive","tag":"refentry","type":"Function","methodName":"unchangeAll"},{"id":"ziparchive.unchangearchive","name":"ZipArchive::unchangeArchive","description":"Revert all global changes done in the archive","tag":"refentry","type":"Function","methodName":"unchangeArchive"},{"id":"ziparchive.unchangeindex","name":"ZipArchive::unchangeIndex","description":"Revert all changes done to an entry at the given index","tag":"refentry","type":"Function","methodName":"unchangeIndex"},{"id":"ziparchive.unchangename","name":"ZipArchive::unchangeName","description":"Revert all changes done to an entry with the given name","tag":"refentry","type":"Function","methodName":"unchangeName"},{"id":"class.ziparchive","name":"ZipArchive","description":"The ZipArchive class","tag":"phpdoc:classref","type":"Class","methodName":"ZipArchive"},{"id":"function.zip-close","name":"zip_close","description":"Close a ZIP file archive","tag":"refentry","type":"Function","methodName":"zip_close"},{"id":"function.zip-entry-close","name":"zip_entry_close","description":"Close a directory entry","tag":"refentry","type":"Function","methodName":"zip_entry_close"},{"id":"function.zip-entry-compressedsize","name":"zip_entry_compressedsize","description":"Retrieve the compressed size of a directory entry","tag":"refentry","type":"Function","methodName":"zip_entry_compressedsize"},{"id":"function.zip-entry-compressionmethod","name":"zip_entry_compressionmethod","description":"Retrieve the compression method of a directory entry","tag":"refentry","type":"Function","methodName":"zip_entry_compressionmethod"},{"id":"function.zip-entry-filesize","name":"zip_entry_filesize","description":"Retrieve the actual file size of a directory entry","tag":"refentry","type":"Function","methodName":"zip_entry_filesize"},{"id":"function.zip-entry-name","name":"zip_entry_name","description":"Retrieve the name of a directory entry","tag":"refentry","type":"Function","methodName":"zip_entry_name"},{"id":"function.zip-entry-open","name":"zip_entry_open","description":"Open a directory entry for reading","tag":"refentry","type":"Function","methodName":"zip_entry_open"},{"id":"function.zip-entry-read","name":"zip_entry_read","description":"Read from an open directory entry","tag":"refentry","type":"Function","methodName":"zip_entry_read"},{"id":"function.zip-open","name":"zip_open","description":"Open a ZIP file archive","tag":"refentry","type":"Function","methodName":"zip_open"},{"id":"function.zip-read","name":"zip_read","description":"Read next entry in a ZIP file archive","tag":"refentry","type":"Function","methodName":"zip_read"},{"id":"ref.zip","name":"Zip Functions","description":"Zip","tag":"reference","type":"Extension","methodName":"Zip Functions"},{"id":"book.zip","name":"Zip","description":"Compression and Archive Extensions","tag":"book","type":"Extension","methodName":"Zip"},{"id":"intro.zlib","name":"Introduction","description":"Zlib Compression","tag":"preface","type":"General","methodName":"Introduction"},{"id":"zlib.requirements","name":"Requirements","description":"Zlib Compression","tag":"section","type":"General","methodName":"Requirements"},{"id":"zlib.installation","name":"Installation","description":"Zlib Compression","tag":"section","type":"General","methodName":"Installation"},{"id":"zlib.configuration","name":"Runtime Configuration","description":"Zlib Compression","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"zlib.resources","name":"Resource Types","description":"Zlib Compression","tag":"section","type":"General","methodName":"Resource Types"},{"id":"zlib.setup","name":"Installing\/Configuring","description":"Zlib Compression","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"zlib.constants","name":"Predefined Constants","description":"Zlib Compression","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"zlib.examples","name":"Examples","description":"Zlib Compression","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.deflate-add","name":"deflate_add","description":"Incrementally deflate data","tag":"refentry","type":"Function","methodName":"deflate_add"},{"id":"function.deflate-init","name":"deflate_init","description":"Initialize an incremental deflate context","tag":"refentry","type":"Function","methodName":"deflate_init"},{"id":"function.gzclose","name":"gzclose","description":"Close an open gz-file pointer","tag":"refentry","type":"Function","methodName":"gzclose"},{"id":"function.gzcompress","name":"gzcompress","description":"Compress a string","tag":"refentry","type":"Function","methodName":"gzcompress"},{"id":"function.gzdecode","name":"gzdecode","description":"Decodes a gzip compressed string","tag":"refentry","type":"Function","methodName":"gzdecode"},{"id":"function.gzdeflate","name":"gzdeflate","description":"Deflate a string","tag":"refentry","type":"Function","methodName":"gzdeflate"},{"id":"function.gzencode","name":"gzencode","description":"Create a gzip compressed string","tag":"refentry","type":"Function","methodName":"gzencode"},{"id":"function.gzeof","name":"gzeof","description":"Test for EOF on a gz-file pointer","tag":"refentry","type":"Function","methodName":"gzeof"},{"id":"function.gzfile","name":"gzfile","description":"Read entire gz-file into an array","tag":"refentry","type":"Function","methodName":"gzfile"},{"id":"function.gzgetc","name":"gzgetc","description":"Get character from gz-file pointer","tag":"refentry","type":"Function","methodName":"gzgetc"},{"id":"function.gzgets","name":"gzgets","description":"Get line from file pointer","tag":"refentry","type":"Function","methodName":"gzgets"},{"id":"function.gzgetss","name":"gzgetss","description":"Get line from gz-file pointer and strip HTML tags","tag":"refentry","type":"Function","methodName":"gzgetss"},{"id":"function.gzinflate","name":"gzinflate","description":"Inflate a deflated string","tag":"refentry","type":"Function","methodName":"gzinflate"},{"id":"function.gzopen","name":"gzopen","description":"Open gz-file","tag":"refentry","type":"Function","methodName":"gzopen"},{"id":"function.gzpassthru","name":"gzpassthru","description":"Output all remaining data on a gz-file pointer","tag":"refentry","type":"Function","methodName":"gzpassthru"},{"id":"function.gzputs","name":"gzputs","description":"Alias of gzwrite","tag":"refentry","type":"Function","methodName":"gzputs"},{"id":"function.gzread","name":"gzread","description":"Binary-safe gz-file read","tag":"refentry","type":"Function","methodName":"gzread"},{"id":"function.gzrewind","name":"gzrewind","description":"Rewind the position of a gz-file pointer","tag":"refentry","type":"Function","methodName":"gzrewind"},{"id":"function.gzseek","name":"gzseek","description":"Seek on a gz-file pointer","tag":"refentry","type":"Function","methodName":"gzseek"},{"id":"function.gztell","name":"gztell","description":"Tell gz-file pointer read\/write position","tag":"refentry","type":"Function","methodName":"gztell"},{"id":"function.gzuncompress","name":"gzuncompress","description":"Uncompress a compressed string","tag":"refentry","type":"Function","methodName":"gzuncompress"},{"id":"function.gzwrite","name":"gzwrite","description":"Binary-safe gz-file write","tag":"refentry","type":"Function","methodName":"gzwrite"},{"id":"function.inflate-add","name":"inflate_add","description":"Incrementally inflate encoded data","tag":"refentry","type":"Function","methodName":"inflate_add"},{"id":"function.inflate-get-read-len","name":"inflate_get_read_len","description":"Get number of bytes read so far","tag":"refentry","type":"Function","methodName":"inflate_get_read_len"},{"id":"function.inflate-get-status","name":"inflate_get_status","description":"Get decompression status","tag":"refentry","type":"Function","methodName":"inflate_get_status"},{"id":"function.inflate-init","name":"inflate_init","description":"Initialize an incremental inflate context","tag":"refentry","type":"Function","methodName":"inflate_init"},{"id":"function.ob-gzhandler","name":"ob_gzhandler","description":"ob_start callback function to gzip output buffer","tag":"refentry","type":"Function","methodName":"ob_gzhandler"},{"id":"function.readgzfile","name":"readgzfile","description":"Output a gz-file","tag":"refentry","type":"Function","methodName":"readgzfile"},{"id":"function.zlib-decode","name":"zlib_decode","description":"Uncompress any raw\/gzip\/zlib encoded data","tag":"refentry","type":"Function","methodName":"zlib_decode"},{"id":"function.zlib-encode","name":"zlib_encode","description":"Compress data with the specified encoding","tag":"refentry","type":"Function","methodName":"zlib_encode"},{"id":"function.zlib-get-coding-type","name":"zlib_get_coding_type","description":"Returns the coding type used for output compression","tag":"refentry","type":"Function","methodName":"zlib_get_coding_type"},{"id":"ref.zlib","name":"Zlib Functions","description":"Zlib Compression","tag":"reference","type":"Extension","methodName":"Zlib Functions"},{"id":"class.deflatecontext","name":"DeflateContext","description":"The DeflateContext class","tag":"phpdoc:classref","type":"Class","methodName":"DeflateContext"},{"id":"class.inflatecontext","name":"InflateContext","description":"The InflateContext class","tag":"phpdoc:classref","type":"Class","methodName":"InflateContext"},{"id":"book.zlib","name":"Zlib","description":"Zlib Compression","tag":"book","type":"Extension","methodName":"Zlib"},{"id":"refs.compression","name":"Compression and Archive Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"Compression and Archive Extensions"},{"id":"intro.hash","name":"Introduction","description":"HASH Message Digest Framework","tag":"preface","type":"General","methodName":"Introduction"},{"id":"hash.installation","name":"Installation","description":"HASH Message Digest Framework","tag":"section","type":"General","methodName":"Installation"},{"id":"hash.resources","name":"Resource Types","description":"HASH Message Digest Framework","tag":"section","type":"General","methodName":"Resource Types"},{"id":"hash.setup","name":"Installing\/Configuring","description":"HASH Message Digest Framework","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"hash.constants","name":"Predefined Constants","description":"HASH Message Digest Framework","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"hashcontext.construct","name":"HashContext::__construct","description":"Private constructor to disallow direct instantiation","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"hashcontext.serialize","name":"HashContext::__serialize","description":"Serializes the HashContext object","tag":"refentry","type":"Function","methodName":"__serialize"},{"id":"hashcontext.unserialize","name":"HashContext::__unserialize","description":"Deserializes the data parameter into a HashContext object","tag":"refentry","type":"Function","methodName":"__unserialize"},{"id":"class.hashcontext","name":"HashContext","description":"The HashContext class","tag":"phpdoc:classref","type":"Class","methodName":"HashContext"},{"id":"function.hash","name":"hash","description":"Generate a hash value (message digest)","tag":"refentry","type":"Function","methodName":"hash"},{"id":"function.hash-algos","name":"hash_algos","description":"Return a list of registered hashing algorithms","tag":"refentry","type":"Function","methodName":"hash_algos"},{"id":"function.hash-copy","name":"hash_copy","description":"Copy hashing context","tag":"refentry","type":"Function","methodName":"hash_copy"},{"id":"function.hash-equals","name":"hash_equals","description":"Timing attack safe string comparison","tag":"refentry","type":"Function","methodName":"hash_equals"},{"id":"function.hash-file","name":"hash_file","description":"Generate a hash value using the contents of a given file","tag":"refentry","type":"Function","methodName":"hash_file"},{"id":"function.hash-final","name":"hash_final","description":"Finalize an incremental hash and return resulting digest","tag":"refentry","type":"Function","methodName":"hash_final"},{"id":"function.hash-hkdf","name":"hash_hkdf","description":"Generate a HKDF key derivation of a supplied key input","tag":"refentry","type":"Function","methodName":"hash_hkdf"},{"id":"function.hash-hmac","name":"hash_hmac","description":"Generate a keyed hash value using the HMAC method","tag":"refentry","type":"Function","methodName":"hash_hmac"},{"id":"function.hash-hmac-algos","name":"hash_hmac_algos","description":"Return a list of registered hashing algorithms suitable for hash_hmac","tag":"refentry","type":"Function","methodName":"hash_hmac_algos"},{"id":"function.hash-hmac-file","name":"hash_hmac_file","description":"Generate a keyed hash value using the HMAC method and the contents of a given file","tag":"refentry","type":"Function","methodName":"hash_hmac_file"},{"id":"function.hash-init","name":"hash_init","description":"Initialize an incremental hashing context","tag":"refentry","type":"Function","methodName":"hash_init"},{"id":"function.hash-pbkdf2","name":"hash_pbkdf2","description":"Generate a PBKDF2 key derivation of a supplied password","tag":"refentry","type":"Function","methodName":"hash_pbkdf2"},{"id":"function.hash-update","name":"hash_update","description":"Pump data into an active hashing context","tag":"refentry","type":"Function","methodName":"hash_update"},{"id":"function.hash-update-file","name":"hash_update_file","description":"Pump data into an active hashing context from a file","tag":"refentry","type":"Function","methodName":"hash_update_file"},{"id":"function.hash-update-stream","name":"hash_update_stream","description":"Pump data into an active hashing context from an open stream","tag":"refentry","type":"Function","methodName":"hash_update_stream"},{"id":"ref.hash","name":"Hash Functions","description":"HASH Message Digest Framework","tag":"reference","type":"Extension","methodName":"Hash Functions"},{"id":"book.hash","name":"Hash","description":"HASH Message Digest Framework","tag":"book","type":"Extension","methodName":"Hash"},{"id":"intro.mcrypt","name":"Introduction","description":"Mcrypt","tag":"preface","type":"General","methodName":"Introduction"},{"id":"mcrypt.requirements","name":"Requirements","description":"Mcrypt","tag":"section","type":"General","methodName":"Requirements"},{"id":"mcrypt.installation","name":"Installation","description":"Mcrypt","tag":"section","type":"General","methodName":"Installation"},{"id":"mcrypt.configuration","name":"Runtime Configuration","description":"Mcrypt","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"mcrypt.resources","name":"Resource Types","description":"Mcrypt","tag":"section","type":"General","methodName":"Resource Types"},{"id":"mcrypt.setup","name":"Installing\/Configuring","description":"Mcrypt","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"mcrypt.constants","name":"Predefined Constants","description":"Mcrypt","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"mcrypt.ciphers","name":"Mcrypt ciphers","description":"Mcrypt","tag":"appendix","type":"General","methodName":"Mcrypt ciphers"},{"id":"function.mcrypt-create-iv","name":"mcrypt_create_iv","description":"Creates an initialization vector (IV) from a random source","tag":"refentry","type":"Function","methodName":"mcrypt_create_iv"},{"id":"function.mcrypt-decrypt","name":"mcrypt_decrypt","description":"Decrypts crypttext with given parameters","tag":"refentry","type":"Function","methodName":"mcrypt_decrypt"},{"id":"function.mcrypt-enc-get-algorithms-name","name":"mcrypt_enc_get_algorithms_name","description":"Returns the name of the opened algorithm","tag":"refentry","type":"Function","methodName":"mcrypt_enc_get_algorithms_name"},{"id":"function.mcrypt-enc-get-block-size","name":"mcrypt_enc_get_block_size","description":"Returns the blocksize of the opened algorithm","tag":"refentry","type":"Function","methodName":"mcrypt_enc_get_block_size"},{"id":"function.mcrypt-enc-get-iv-size","name":"mcrypt_enc_get_iv_size","description":"Returns the size of the IV of the opened algorithm","tag":"refentry","type":"Function","methodName":"mcrypt_enc_get_iv_size"},{"id":"function.mcrypt-enc-get-key-size","name":"mcrypt_enc_get_key_size","description":"Returns the maximum supported keysize of the opened mode","tag":"refentry","type":"Function","methodName":"mcrypt_enc_get_key_size"},{"id":"function.mcrypt-enc-get-modes-name","name":"mcrypt_enc_get_modes_name","description":"Returns the name of the opened mode","tag":"refentry","type":"Function","methodName":"mcrypt_enc_get_modes_name"},{"id":"function.mcrypt-enc-get-supported-key-sizes","name":"mcrypt_enc_get_supported_key_sizes","description":"Returns an array with the supported keysizes of the opened algorithm","tag":"refentry","type":"Function","methodName":"mcrypt_enc_get_supported_key_sizes"},{"id":"function.mcrypt-enc-is-block-algorithm","name":"mcrypt_enc_is_block_algorithm","description":"Checks whether the algorithm of the opened mode is a block algorithm","tag":"refentry","type":"Function","methodName":"mcrypt_enc_is_block_algorithm"},{"id":"function.mcrypt-enc-is-block-algorithm-mode","name":"mcrypt_enc_is_block_algorithm_mode","description":"Checks whether the encryption of the opened mode works on blocks","tag":"refentry","type":"Function","methodName":"mcrypt_enc_is_block_algorithm_mode"},{"id":"function.mcrypt-enc-is-block-mode","name":"mcrypt_enc_is_block_mode","description":"Checks whether the opened mode outputs blocks","tag":"refentry","type":"Function","methodName":"mcrypt_enc_is_block_mode"},{"id":"function.mcrypt-enc-self-test","name":"mcrypt_enc_self_test","description":"Runs a self test on the opened module","tag":"refentry","type":"Function","methodName":"mcrypt_enc_self_test"},{"id":"function.mcrypt-encrypt","name":"mcrypt_encrypt","description":"Encrypts plaintext with given parameters","tag":"refentry","type":"Function","methodName":"mcrypt_encrypt"},{"id":"function.mcrypt-generic","name":"mcrypt_generic","description":"This function encrypts data","tag":"refentry","type":"Function","methodName":"mcrypt_generic"},{"id":"function.mcrypt-generic-deinit","name":"mcrypt_generic_deinit","description":"This function deinitializes an encryption module","tag":"refentry","type":"Function","methodName":"mcrypt_generic_deinit"},{"id":"function.mcrypt-generic-init","name":"mcrypt_generic_init","description":"This function initializes all buffers needed for encryption","tag":"refentry","type":"Function","methodName":"mcrypt_generic_init"},{"id":"function.mcrypt-get-block-size","name":"mcrypt_get_block_size","description":"Gets the block size of the specified cipher","tag":"refentry","type":"Function","methodName":"mcrypt_get_block_size"},{"id":"function.mcrypt-get-cipher-name","name":"mcrypt_get_cipher_name","description":"Gets the name of the specified cipher","tag":"refentry","type":"Function","methodName":"mcrypt_get_cipher_name"},{"id":"function.mcrypt-get-iv-size","name":"mcrypt_get_iv_size","description":"Returns the size of the IV belonging to a specific cipher\/mode combination","tag":"refentry","type":"Function","methodName":"mcrypt_get_iv_size"},{"id":"function.mcrypt-get-key-size","name":"mcrypt_get_key_size","description":"Gets the key size of the specified cipher","tag":"refentry","type":"Function","methodName":"mcrypt_get_key_size"},{"id":"function.mcrypt-list-algorithms","name":"mcrypt_list_algorithms","description":"Gets an array of all supported ciphers","tag":"refentry","type":"Function","methodName":"mcrypt_list_algorithms"},{"id":"function.mcrypt-list-modes","name":"mcrypt_list_modes","description":"Gets an array of all supported modes","tag":"refentry","type":"Function","methodName":"mcrypt_list_modes"},{"id":"function.mcrypt-module-close","name":"mcrypt_module_close","description":"Closes the mcrypt module","tag":"refentry","type":"Function","methodName":"mcrypt_module_close"},{"id":"function.mcrypt-module-get-algo-block-size","name":"mcrypt_module_get_algo_block_size","description":"Returns the blocksize of the specified algorithm","tag":"refentry","type":"Function","methodName":"mcrypt_module_get_algo_block_size"},{"id":"function.mcrypt-module-get-algo-key-size","name":"mcrypt_module_get_algo_key_size","description":"Returns the maximum supported keysize of the opened mode","tag":"refentry","type":"Function","methodName":"mcrypt_module_get_algo_key_size"},{"id":"function.mcrypt-module-get-supported-key-sizes","name":"mcrypt_module_get_supported_key_sizes","description":"Returns an array with the supported keysizes of the opened algorithm","tag":"refentry","type":"Function","methodName":"mcrypt_module_get_supported_key_sizes"},{"id":"function.mcrypt-module-is-block-algorithm","name":"mcrypt_module_is_block_algorithm","description":"This function checks whether the specified algorithm is a block algorithm","tag":"refentry","type":"Function","methodName":"mcrypt_module_is_block_algorithm"},{"id":"function.mcrypt-module-is-block-algorithm-mode","name":"mcrypt_module_is_block_algorithm_mode","description":"Returns if the specified module is a block algorithm or not","tag":"refentry","type":"Function","methodName":"mcrypt_module_is_block_algorithm_mode"},{"id":"function.mcrypt-module-is-block-mode","name":"mcrypt_module_is_block_mode","description":"Returns if the specified mode outputs blocks or not","tag":"refentry","type":"Function","methodName":"mcrypt_module_is_block_mode"},{"id":"function.mcrypt-module-open","name":"mcrypt_module_open","description":"Opens the module of the algorithm and the mode to be used","tag":"refentry","type":"Function","methodName":"mcrypt_module_open"},{"id":"function.mcrypt-module-self-test","name":"mcrypt_module_self_test","description":"This function runs a self test on the specified module","tag":"refentry","type":"Function","methodName":"mcrypt_module_self_test"},{"id":"function.mdecrypt-generic","name":"mdecrypt_generic","description":"Decrypts data","tag":"refentry","type":"Function","methodName":"mdecrypt_generic"},{"id":"ref.mcrypt","name":"Mcrypt Functions","description":"Mcrypt","tag":"reference","type":"Extension","methodName":"Mcrypt Functions"},{"id":"book.mcrypt","name":"Mcrypt","description":"Cryptography Extensions","tag":"book","type":"Extension","methodName":"Mcrypt"},{"id":"intro.mhash","name":"Introduction","description":"Mhash","tag":"preface","type":"General","methodName":"Introduction"},{"id":"mhash.requirements","name":"Requirements","description":"Mhash","tag":"section","type":"General","methodName":"Requirements"},{"id":"mhash.installation","name":"Installation","description":"Mhash","tag":"section","type":"General","methodName":"Installation"},{"id":"mhash.setup","name":"Installing\/Configuring","description":"Mhash","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"mhash.constants","name":"Predefined Constants","description":"Mhash","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"mhash.examples","name":"Examples","description":"Mhash","tag":"appendix","type":"General","methodName":"Examples"},{"id":"function.mhash","name":"mhash","description":"Computes hash","tag":"refentry","type":"Function","methodName":"mhash"},{"id":"function.mhash-count","name":"mhash_count","description":"Gets the highest available hash ID","tag":"refentry","type":"Function","methodName":"mhash_count"},{"id":"function.mhash-get-block-size","name":"mhash_get_block_size","description":"Gets the block size of the specified hash","tag":"refentry","type":"Function","methodName":"mhash_get_block_size"},{"id":"function.mhash-get-hash-name","name":"mhash_get_hash_name","description":"Gets the name of the specified hash","tag":"refentry","type":"Function","methodName":"mhash_get_hash_name"},{"id":"function.mhash-keygen-s2k","name":"mhash_keygen_s2k","description":"Generates a key","tag":"refentry","type":"Function","methodName":"mhash_keygen_s2k"},{"id":"ref.mhash","name":"Mhash Functions","description":"Mhash","tag":"reference","type":"Extension","methodName":"Mhash Functions"},{"id":"book.mhash","name":"Mhash","description":"Cryptography Extensions","tag":"book","type":"Extension","methodName":"Mhash"},{"id":"intro.openssl","name":"Introduction","description":"OpenSSL","tag":"preface","type":"General","methodName":"Introduction"},{"id":"openssl.requirements","name":"Requirements","description":"OpenSSL","tag":"section","type":"General","methodName":"Requirements"},{"id":"openssl.installation","name":"Installation","description":"OpenSSL","tag":"section","type":"General","methodName":"Installation"},{"id":"openssl.configuration","name":"Runtime Configuration","description":"OpenSSL","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"openssl.resources","name":"Resource Types","description":"OpenSSL","tag":"section","type":"General","methodName":"Resource Types"},{"id":"openssl.setup","name":"Installing\/Configuring","description":"OpenSSL","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"openssl.purpose-check","name":"Purpose checking flags","description":"OpenSSL","tag":"section","type":"General","methodName":"Purpose checking flags"},{"id":"openssl.padding","name":"Padding flags for asymmetric encryption","description":"OpenSSL","tag":"section","type":"General","methodName":"Padding flags for asymmetric encryption"},{"id":"openssl.key-types","name":"Key types","description":"OpenSSL","tag":"section","type":"General","methodName":"Key types"},{"id":"openssl.pkcs7.flags","name":"PKCS7 Flags\/Constants","description":"OpenSSL","tag":"section","type":"General","methodName":"PKCS7 Flags\/Constants"},{"id":"openssl.cms.flags","name":"CMS Flags\/Constants","description":"OpenSSL","tag":"section","type":"General","methodName":"CMS Flags\/Constants"},{"id":"openssl.signature-algos","name":"Signature Algorithms","description":"OpenSSL","tag":"section","type":"General","methodName":"Signature Algorithms"},{"id":"openssl.ciphers","name":"Ciphers","description":"OpenSSL","tag":"section","type":"General","methodName":"Ciphers"},{"id":"openssl.constversion","name":"Version constants","description":"OpenSSL","tag":"section","type":"General","methodName":"Version constants"},{"id":"openssl.constsni","name":"Server Name Indication constants","description":"OpenSSL","tag":"section","type":"General","methodName":"Server Name Indication constants"},{"id":"openssl.constants.other","name":"Other Constants","description":"OpenSSL","tag":"section","type":"General","methodName":"Other Constants"},{"id":"openssl.constants","name":"Predefined Constants","description":"OpenSSL","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"openssl.certparams","name":"Key\/Certificate parameters","description":"OpenSSL","tag":"appendix","type":"General","methodName":"Key\/Certificate parameters"},{"id":"openssl.cert.verification","name":"Certificate Verification","description":"OpenSSL","tag":"appendix","type":"General","methodName":"Certificate Verification"},{"id":"function.openssl-cipher-iv-length","name":"openssl_cipher_iv_length","description":"Gets the cipher iv length","tag":"refentry","type":"Function","methodName":"openssl_cipher_iv_length"},{"id":"function.openssl-cipher-key-length","name":"openssl_cipher_key_length","description":"Gets the cipher key length","tag":"refentry","type":"Function","methodName":"openssl_cipher_key_length"},{"id":"function.openssl-cms-decrypt","name":"openssl_cms_decrypt","description":"Decrypt a CMS message","tag":"refentry","type":"Function","methodName":"openssl_cms_decrypt"},{"id":"function.openssl-cms-encrypt","name":"openssl_cms_encrypt","description":"Encrypt a CMS message","tag":"refentry","type":"Function","methodName":"openssl_cms_encrypt"},{"id":"function.openssl-cms-read","name":"openssl_cms_read","description":"Export the CMS file to an array of PEM certificates","tag":"refentry","type":"Function","methodName":"openssl_cms_read"},{"id":"function.openssl-cms-sign","name":"openssl_cms_sign","description":"Sign a file","tag":"refentry","type":"Function","methodName":"openssl_cms_sign"},{"id":"function.openssl-cms-verify","name":"openssl_cms_verify","description":"Verify a CMS signature","tag":"refentry","type":"Function","methodName":"openssl_cms_verify"},{"id":"function.openssl-csr-export","name":"openssl_csr_export","description":"Exports a CSR as a string","tag":"refentry","type":"Function","methodName":"openssl_csr_export"},{"id":"function.openssl-csr-export-to-file","name":"openssl_csr_export_to_file","description":"Exports a CSR to a file","tag":"refentry","type":"Function","methodName":"openssl_csr_export_to_file"},{"id":"function.openssl-csr-get-public-key","name":"openssl_csr_get_public_key","description":"Returns the public key of a CSR","tag":"refentry","type":"Function","methodName":"openssl_csr_get_public_key"},{"id":"function.openssl-csr-get-subject","name":"openssl_csr_get_subject","description":"Returns the subject of a CSR","tag":"refentry","type":"Function","methodName":"openssl_csr_get_subject"},{"id":"function.openssl-csr-new","name":"openssl_csr_new","description":"Generates a CSR","tag":"refentry","type":"Function","methodName":"openssl_csr_new"},{"id":"function.openssl-csr-sign","name":"openssl_csr_sign","description":"Sign a CSR with another certificate (or itself) and generate a certificate","tag":"refentry","type":"Function","methodName":"openssl_csr_sign"},{"id":"function.openssl-decrypt","name":"openssl_decrypt","description":"Decrypts data","tag":"refentry","type":"Function","methodName":"openssl_decrypt"},{"id":"function.openssl-dh-compute-key","name":"openssl_dh_compute_key","description":"Computes shared secret for public value of remote DH public key and local DH key","tag":"refentry","type":"Function","methodName":"openssl_dh_compute_key"},{"id":"function.openssl-digest","name":"openssl_digest","description":"Computes a digest","tag":"refentry","type":"Function","methodName":"openssl_digest"},{"id":"function.openssl-encrypt","name":"openssl_encrypt","description":"Encrypts data","tag":"refentry","type":"Function","methodName":"openssl_encrypt"},{"id":"function.openssl-error-string","name":"openssl_error_string","description":"Return openSSL error message","tag":"refentry","type":"Function","methodName":"openssl_error_string"},{"id":"function.openssl-free-key","name":"openssl_free_key","description":"Free key resource","tag":"refentry","type":"Function","methodName":"openssl_free_key"},{"id":"function.openssl-get-cert-locations","name":"openssl_get_cert_locations","description":"Retrieve the available certificate locations","tag":"refentry","type":"Function","methodName":"openssl_get_cert_locations"},{"id":"function.openssl-get-cipher-methods","name":"openssl_get_cipher_methods","description":"Gets available cipher methods","tag":"refentry","type":"Function","methodName":"openssl_get_cipher_methods"},{"id":"function.openssl-get-curve-names","name":"openssl_get_curve_names","description":"Gets list of available curve names for ECC","tag":"refentry","type":"Function","methodName":"openssl_get_curve_names"},{"id":"function.openssl-get-md-methods","name":"openssl_get_md_methods","description":"Gets available digest methods","tag":"refentry","type":"Function","methodName":"openssl_get_md_methods"},{"id":"function.openssl-get-privatekey","name":"openssl_get_privatekey","description":"Alias of openssl_pkey_get_private","tag":"refentry","type":"Function","methodName":"openssl_get_privatekey"},{"id":"function.openssl-get-publickey","name":"openssl_get_publickey","description":"Alias of openssl_pkey_get_public","tag":"refentry","type":"Function","methodName":"openssl_get_publickey"},{"id":"function.openssl-open","name":"openssl_open","description":"Open sealed data","tag":"refentry","type":"Function","methodName":"openssl_open"},{"id":"function.openssl-pbkdf2","name":"openssl_pbkdf2","description":"Generates a PKCS5 v2 PBKDF2 string","tag":"refentry","type":"Function","methodName":"openssl_pbkdf2"},{"id":"function.openssl-pkcs12-export","name":"openssl_pkcs12_export","description":"Exports a PKCS#12 Compatible Certificate Store File to variable","tag":"refentry","type":"Function","methodName":"openssl_pkcs12_export"},{"id":"function.openssl-pkcs12-export-to-file","name":"openssl_pkcs12_export_to_file","description":"Exports a PKCS#12 Compatible Certificate Store File","tag":"refentry","type":"Function","methodName":"openssl_pkcs12_export_to_file"},{"id":"function.openssl-pkcs12-read","name":"openssl_pkcs12_read","description":"Parse a PKCS#12 Certificate Store into an array","tag":"refentry","type":"Function","methodName":"openssl_pkcs12_read"},{"id":"function.openssl-pkcs7-decrypt","name":"openssl_pkcs7_decrypt","description":"Decrypts an S\/MIME encrypted message","tag":"refentry","type":"Function","methodName":"openssl_pkcs7_decrypt"},{"id":"function.openssl-pkcs7-encrypt","name":"openssl_pkcs7_encrypt","description":"Encrypt an S\/MIME message","tag":"refentry","type":"Function","methodName":"openssl_pkcs7_encrypt"},{"id":"function.openssl-pkcs7-read","name":"openssl_pkcs7_read","description":"Export the PKCS7 file to an array of PEM certificates","tag":"refentry","type":"Function","methodName":"openssl_pkcs7_read"},{"id":"function.openssl-pkcs7-sign","name":"openssl_pkcs7_sign","description":"Sign an S\/MIME message","tag":"refentry","type":"Function","methodName":"openssl_pkcs7_sign"},{"id":"function.openssl-pkcs7-verify","name":"openssl_pkcs7_verify","description":"Verifies the signature of an S\/MIME signed message","tag":"refentry","type":"Function","methodName":"openssl_pkcs7_verify"},{"id":"function.openssl-pkey-derive","name":"openssl_pkey_derive","description":"Computes shared secret for public value of remote and local DH or ECDH key","tag":"refentry","type":"Function","methodName":"openssl_pkey_derive"},{"id":"function.openssl-pkey-export","name":"openssl_pkey_export","description":"Gets an exportable representation of a key into a string","tag":"refentry","type":"Function","methodName":"openssl_pkey_export"},{"id":"function.openssl-pkey-export-to-file","name":"openssl_pkey_export_to_file","description":"Gets an exportable representation of a key into a file","tag":"refentry","type":"Function","methodName":"openssl_pkey_export_to_file"},{"id":"function.openssl-pkey-free","name":"openssl_pkey_free","description":"Frees a private key","tag":"refentry","type":"Function","methodName":"openssl_pkey_free"},{"id":"function.openssl-pkey-get-details","name":"openssl_pkey_get_details","description":"Returns an array with the key details","tag":"refentry","type":"Function","methodName":"openssl_pkey_get_details"},{"id":"function.openssl-pkey-get-private","name":"openssl_pkey_get_private","description":"Get a private key","tag":"refentry","type":"Function","methodName":"openssl_pkey_get_private"},{"id":"function.openssl-pkey-get-public","name":"openssl_pkey_get_public","description":"Extract public key from certificate and prepare it for use","tag":"refentry","type":"Function","methodName":"openssl_pkey_get_public"},{"id":"function.openssl-pkey-new","name":"openssl_pkey_new","description":"Generates a new private key","tag":"refentry","type":"Function","methodName":"openssl_pkey_new"},{"id":"function.openssl-private-decrypt","name":"openssl_private_decrypt","description":"Decrypts data with private key","tag":"refentry","type":"Function","methodName":"openssl_private_decrypt"},{"id":"function.openssl-private-encrypt","name":"openssl_private_encrypt","description":"Encrypts data with private key","tag":"refentry","type":"Function","methodName":"openssl_private_encrypt"},{"id":"function.openssl-public-decrypt","name":"openssl_public_decrypt","description":"Decrypts data with public key","tag":"refentry","type":"Function","methodName":"openssl_public_decrypt"},{"id":"function.openssl-public-encrypt","name":"openssl_public_encrypt","description":"Encrypts data with public key","tag":"refentry","type":"Function","methodName":"openssl_public_encrypt"},{"id":"function.openssl-random-pseudo-bytes","name":"openssl_random_pseudo_bytes","description":"Generate a pseudo-random string of bytes","tag":"refentry","type":"Function","methodName":"openssl_random_pseudo_bytes"},{"id":"function.openssl-seal","name":"openssl_seal","description":"Seal (encrypt) data","tag":"refentry","type":"Function","methodName":"openssl_seal"},{"id":"function.openssl-sign","name":"openssl_sign","description":"Generate signature","tag":"refentry","type":"Function","methodName":"openssl_sign"},{"id":"function.openssl-spki-export","name":"openssl_spki_export","description":"Exports a valid PEM formatted public key signed public key and challenge","tag":"refentry","type":"Function","methodName":"openssl_spki_export"},{"id":"function.openssl-spki-export-challenge","name":"openssl_spki_export_challenge","description":"Exports the challenge associated with a signed public key and challenge","tag":"refentry","type":"Function","methodName":"openssl_spki_export_challenge"},{"id":"function.openssl-spki-new","name":"openssl_spki_new","description":"Generate a new signed public key and challenge","tag":"refentry","type":"Function","methodName":"openssl_spki_new"},{"id":"function.openssl-spki-verify","name":"openssl_spki_verify","description":"Verifies a signed public key and challenge","tag":"refentry","type":"Function","methodName":"openssl_spki_verify"},{"id":"function.openssl-verify","name":"openssl_verify","description":"Verify signature","tag":"refentry","type":"Function","methodName":"openssl_verify"},{"id":"function.openssl-x509-check-private-key","name":"openssl_x509_check_private_key","description":"Checks if a private key corresponds to a certificate","tag":"refentry","type":"Function","methodName":"openssl_x509_check_private_key"},{"id":"function.openssl-x509-checkpurpose","name":"openssl_x509_checkpurpose","description":"Verifies if a certificate can be used for a particular purpose","tag":"refentry","type":"Function","methodName":"openssl_x509_checkpurpose"},{"id":"function.openssl-x509-export","name":"openssl_x509_export","description":"Exports a certificate as a string","tag":"refentry","type":"Function","methodName":"openssl_x509_export"},{"id":"function.openssl-x509-export-to-file","name":"openssl_x509_export_to_file","description":"Exports a certificate to file","tag":"refentry","type":"Function","methodName":"openssl_x509_export_to_file"},{"id":"function.openssl-x509-fingerprint","name":"openssl_x509_fingerprint","description":"Calculates the fingerprint, or digest, of a given X.509 certificate","tag":"refentry","type":"Function","methodName":"openssl_x509_fingerprint"},{"id":"function.openssl-x509-free","name":"openssl_x509_free","description":"Free certificate resource","tag":"refentry","type":"Function","methodName":"openssl_x509_free"},{"id":"function.openssl-x509-parse","name":"openssl_x509_parse","description":"Parse an X509 certificate and return the information as an array","tag":"refentry","type":"Function","methodName":"openssl_x509_parse"},{"id":"function.openssl-x509-read","name":"openssl_x509_read","description":"Parse an X.509 certificate and return an object for\n it","tag":"refentry","type":"Function","methodName":"openssl_x509_read"},{"id":"function.openssl-x509-verify","name":"openssl_x509_verify","description":"Verifies digital signature of x509 certificate against a public key","tag":"refentry","type":"Function","methodName":"openssl_x509_verify"},{"id":"ref.openssl","name":"OpenSSL Functions","description":"OpenSSL","tag":"reference","type":"Extension","methodName":"OpenSSL Functions"},{"id":"class.opensslcertificate","name":"OpenSSLCertificate","description":"The OpenSSLCertificate class","tag":"phpdoc:classref","type":"Class","methodName":"OpenSSLCertificate"},{"id":"class.opensslcertificatesigningrequest","name":"OpenSSLCertificateSigningRequest","description":"The OpenSSLCertificateSigningRequest class","tag":"phpdoc:classref","type":"Class","methodName":"OpenSSLCertificateSigningRequest"},{"id":"class.opensslasymmetrickey","name":"OpenSSLAsymmetricKey","description":"The OpenSSLAsymmetricKey class","tag":"phpdoc:classref","type":"Class","methodName":"OpenSSLAsymmetricKey"},{"id":"book.openssl","name":"OpenSSL","description":"Cryptography Extensions","tag":"book","type":"Extension","methodName":"OpenSSL"},{"id":"intro.password","name":"Introduction","description":"Password Hashing","tag":"preface","type":"General","methodName":"Introduction"},{"id":"password.requirements","name":"Requirements","description":"Password Hashing","tag":"section","type":"General","methodName":"Requirements"},{"id":"password.installation","name":"Installation","description":"Password Hashing","tag":"section","type":"General","methodName":"Installation"},{"id":"password.setup","name":"Installing\/Configuring","description":"Password Hashing","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"password.constants","name":"Predefined Constants","description":"Password Hashing","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.password-algos","name":"password_algos","description":"Get available password hashing algorithm IDs","tag":"refentry","type":"Function","methodName":"password_algos"},{"id":"function.password-get-info","name":"password_get_info","description":"Returns information about the given hash","tag":"refentry","type":"Function","methodName":"password_get_info"},{"id":"function.password-hash","name":"password_hash","description":"Creates a password hash","tag":"refentry","type":"Function","methodName":"password_hash"},{"id":"function.password-needs-rehash","name":"password_needs_rehash","description":"Checks if the given hash matches the given options","tag":"refentry","type":"Function","methodName":"password_needs_rehash"},{"id":"function.password-verify","name":"password_verify","description":"Verifies that a password matches a hash","tag":"refentry","type":"Function","methodName":"password_verify"},{"id":"ref.password","name":"Password Hashing Functions","description":"Password Hashing","tag":"reference","type":"Extension","methodName":"Password Hashing Functions"},{"id":"book.password","name":"Password Hashing","description":"Cryptography Extensions","tag":"book","type":"Extension","methodName":"Password Hashing"},{"id":"intro.rnp","name":"Introduction","description":"Rnp","tag":"preface","type":"General","methodName":"Introduction"},{"id":"rnp.requirements","name":"Requirements","description":"Rnp","tag":"section","type":"General","methodName":"Requirements"},{"id":"rnp.installation","name":"Installation","description":"Rnp","tag":"section","type":"General","methodName":"Installation"},{"id":"rnp.setup","name":"Installing\/Configuring","description":"Rnp","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"rnp.constants","name":"Predefined Constants","description":"Rnp","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"rnp.examples-clearsign","name":"Clearsign text","description":"Rnp","tag":"section","type":"General","methodName":"Clearsign text"},{"id":"rnp.examples","name":"Examples","description":"Rnp","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.rnp-backend-string","name":"rnp_backend_string","description":"Return cryptographic backend library name","tag":"refentry","type":"Function","methodName":"rnp_backend_string"},{"id":"function.rnp-backend-version","name":"rnp_backend_version","description":"Return cryptographic backend library version","tag":"refentry","type":"Function","methodName":"rnp_backend_version"},{"id":"function.rnp-decrypt","name":"rnp_decrypt","description":"Decrypt PGP message","tag":"refentry","type":"Function","methodName":"rnp_decrypt"},{"id":"function.rnp-dump-packets","name":"rnp_dump_packets","description":"Dump OpenPGP packets stream information in humand-readable format","tag":"refentry","type":"Function","methodName":"rnp_dump_packets"},{"id":"function.rnp-dump-packets-to-json","name":"rnp_dump_packets_to_json","description":"Dump OpenPGP packets stream information to the JSON string","tag":"refentry","type":"Function","methodName":"rnp_dump_packets_to_json"},{"id":"function.rnp-ffi-create","name":"rnp_ffi_create","description":"Create the top-level object used for interacting with the library","tag":"refentry","type":"Function","methodName":"rnp_ffi_create"},{"id":"function.rnp-ffi-destroy","name":"rnp_ffi_destroy","description":"Destroy the top-level object used for interacting with the library","tag":"refentry","type":"Function","methodName":"rnp_ffi_destroy"},{"id":"function.rnp-ffi-set-pass-provider","name":"rnp_ffi_set_pass_provider","description":"Set password provider callback function","tag":"refentry","type":"Function","methodName":"rnp_ffi_set_pass_provider"},{"id":"function.rnp-import-keys","name":"rnp_import_keys","description":"Import keys from PHP string to the keyring and receive JSON describing new\/updated keys","tag":"refentry","type":"Function","methodName":"rnp_import_keys"},{"id":"function.rnp-import-signatures","name":"rnp_import_signatures","description":"Import standalone signatures to the keyring and receive JSON describing updated keys","tag":"refentry","type":"Function","methodName":"rnp_import_signatures"},{"id":"function.rnp-key-export","name":"rnp_key_export","description":"Export a key","tag":"refentry","type":"Function","methodName":"rnp_key_export"},{"id":"function.rnp-key-export-autocrypt","name":"rnp_key_export_autocrypt","description":"Export minimal key for autocrypt feature (just 5 packets: key, uid, signature,\n encryption subkey, signature)","tag":"refentry","type":"Function","methodName":"rnp_key_export_autocrypt"},{"id":"function.rnp-key-export-revocation","name":"rnp_key_export_revocation","description":"Generate and export primary key revocation signature","tag":"refentry","type":"Function","methodName":"rnp_key_export_revocation"},{"id":"function.rnp-key-get-info","name":"rnp_key_get_info","description":"Get information about the key","tag":"refentry","type":"Function","methodName":"rnp_key_get_info"},{"id":"function.rnp-key-remove","name":"rnp_key_remove","description":"Remove a key from keyring(s)","tag":"refentry","type":"Function","methodName":"rnp_key_remove"},{"id":"function.rnp-key-revoke","name":"rnp_key_revoke","description":"Revoke a key or subkey by generating and adding revocation signature","tag":"refentry","type":"Function","methodName":"rnp_key_revoke"},{"id":"function.rnp-list-keys","name":"rnp_list_keys","description":"Enumerate all keys present in a keyring by specified identifer type","tag":"refentry","type":"Function","methodName":"rnp_list_keys"},{"id":"function.rnp-load-keys","name":"rnp_load_keys","description":"Load keys from PHP string","tag":"refentry","type":"Function","methodName":"rnp_load_keys"},{"id":"function.rnp-load-keys-from-path","name":"rnp_load_keys_from_path","description":"Load keys from specified path","tag":"refentry","type":"Function","methodName":"rnp_load_keys_from_path"},{"id":"function.rnp-locate-key","name":"rnp_locate_key","description":"Search for the key","tag":"refentry","type":"Function","methodName":"rnp_locate_key"},{"id":"function.rnp-op-encrypt","name":"rnp_op_encrypt","description":"Encrypt message","tag":"refentry","type":"Function","methodName":"rnp_op_encrypt"},{"id":"function.rnp-op-generate-key","name":"rnp_op_generate_key","description":"Generate key","tag":"refentry","type":"Function","methodName":"rnp_op_generate_key"},{"id":"function.rnp-op-sign","name":"rnp_op_sign","description":"Perform signing operation on a binary data, return embedded signature(s)","tag":"refentry","type":"Function","methodName":"rnp_op_sign"},{"id":"function.rnp-op-sign-cleartext","name":"rnp_op_sign_cleartext","description":"Perform signing operation on a textual data, return cleartext signed message","tag":"refentry","type":"Function","methodName":"rnp_op_sign_cleartext"},{"id":"function.rnp-op-sign-detached","name":"rnp_op_sign_detached","description":"Perform signing operation, return detached signature(s)","tag":"refentry","type":"Function","methodName":"rnp_op_sign_detached"},{"id":"function.rnp-op-verify","name":"rnp_op_verify","description":"Verify embedded or cleartext signatures","tag":"refentry","type":"Function","methodName":"rnp_op_verify"},{"id":"function.rnp-op-verify-detached","name":"rnp_op_verify_detached","description":"Verify detached signatures","tag":"refentry","type":"Function","methodName":"rnp_op_verify_detached"},{"id":"function.rnp-save-keys","name":"rnp_save_keys","description":"Save keys to PHP string","tag":"refentry","type":"Function","methodName":"rnp_save_keys"},{"id":"function.rnp-save-keys-to-path","name":"rnp_save_keys_to_path","description":"Save keys to specified path","tag":"refentry","type":"Function","methodName":"rnp_save_keys_to_path"},{"id":"function.rnp-supported-features","name":"rnp_supported_features","description":"Get supported features in JSON format","tag":"refentry","type":"Function","methodName":"rnp_supported_features"},{"id":"function.rnp-version-string","name":"rnp_version_string","description":"RNP library version","tag":"refentry","type":"Function","methodName":"rnp_version_string"},{"id":"function.rnp-version-string-full","name":"rnp_version_string_full","description":"Full version string of RNP library","tag":"refentry","type":"Function","methodName":"rnp_version_string_full"},{"id":"ref.rnp","name":"Rnp Functions","description":"Rnp","tag":"reference","type":"Extension","methodName":"Rnp Functions"},{"id":"class.rnpffi","name":"RnpFFI","description":"The RnpFFI class","tag":"phpdoc:classref","type":"Class","methodName":"RnpFFI"},{"id":"book.rnp","name":"Rnp","description":"Rnp","tag":"book","type":"Extension","methodName":"Rnp"},{"id":"intro.sodium","name":"Introduction","description":"Sodium","tag":"preface","type":"General","methodName":"Introduction"},{"id":"sodium.requirements","name":"Requirements","description":"Sodium","tag":"section","type":"General","methodName":"Requirements"},{"id":"sodium.installation","name":"Installation","description":"Sodium","tag":"section","type":"General","methodName":"Installation"},{"id":"sodium.setup","name":"Installing\/Configuring","description":"Sodium","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"sodium.constants","name":"Predefined Constants","description":"Sodium","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.sodium-add","name":"sodium_add","description":"Add large numbers","tag":"refentry","type":"Function","methodName":"sodium_add"},{"id":"function.sodium-base642bin","name":"sodium_base642bin","description":"Decodes a base64-encoded string into raw binary.","tag":"refentry","type":"Function","methodName":"sodium_base642bin"},{"id":"function.sodium-bin2base64","name":"sodium_bin2base64","description":"Encodes a raw binary string with base64.","tag":"refentry","type":"Function","methodName":"sodium_bin2base64"},{"id":"function.sodium-bin2hex","name":"sodium_bin2hex","description":"Encode to hexadecimal","tag":"refentry","type":"Function","methodName":"sodium_bin2hex"},{"id":"function.sodium-compare","name":"sodium_compare","description":"Compare large numbers","tag":"refentry","type":"Function","methodName":"sodium_compare"},{"id":"function.sodium-crypto-aead-aegis128l-decrypt","name":"sodium_crypto_aead_aegis128l_decrypt","description":"Verify then decrypt a message with AEGIS-128L","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_aegis128l_decrypt"},{"id":"function.sodium-crypto-aead-aegis128l-encrypt","name":"sodium_crypto_aead_aegis128l_encrypt","description":"Encrypt then authenticate a message with AEGIS-128L","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_aegis128l_encrypt"},{"id":"function.sodium-crypto-aead-aegis128l-keygen","name":"sodium_crypto_aead_aegis128l_keygen","description":"Generate a random AEGIS-128L key","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_aegis128l_keygen"},{"id":"function.sodium-crypto-aead-aegis256-decrypt","name":"sodium_crypto_aead_aegis256_decrypt","description":"Verify then decrypt a message with AEGIS-256","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_aegis256_decrypt"},{"id":"function.sodium-crypto-aead-aegis256-encrypt","name":"sodium_crypto_aead_aegis256_encrypt","description":"Encrypt then authenticate a message with AEGIS-256","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_aegis256_encrypt"},{"id":"function.sodium-crypto-aead-aegis256-keygen","name":"sodium_crypto_aead_aegis256_keygen","description":"Generate a random AEGIS-256 key","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_aegis256_keygen"},{"id":"function.sodium-crypto-aead-aes256gcm-decrypt","name":"sodium_crypto_aead_aes256gcm_decrypt","description":"Verify then decrypt a message with AES-256-GCM","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_aes256gcm_decrypt"},{"id":"function.sodium-crypto-aead-aes256gcm-encrypt","name":"sodium_crypto_aead_aes256gcm_encrypt","description":"Encrypt then authenticate with AES-256-GCM","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_aes256gcm_encrypt"},{"id":"function.sodium-crypto-aead-aes256gcm-is-available","name":"sodium_crypto_aead_aes256gcm_is_available","description":"Check if hardware supports AES256-GCM","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_aes256gcm_is_available"},{"id":"function.sodium-crypto-aead-aes256gcm-keygen","name":"sodium_crypto_aead_aes256gcm_keygen","description":"Generate a random AES-256-GCM key","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_aes256gcm_keygen"},{"id":"function.sodium-crypto-aead-chacha20poly1305-decrypt","name":"sodium_crypto_aead_chacha20poly1305_decrypt","description":"Verify then decrypt with ChaCha20-Poly1305","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_chacha20poly1305_decrypt"},{"id":"function.sodium-crypto-aead-chacha20poly1305-encrypt","name":"sodium_crypto_aead_chacha20poly1305_encrypt","description":"Encrypt then authenticate with ChaCha20-Poly1305","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_chacha20poly1305_encrypt"},{"id":"function.sodium-crypto-aead-chacha20poly1305-ietf-decrypt","name":"sodium_crypto_aead_chacha20poly1305_ietf_decrypt","description":"Verify that the ciphertext includes a valid tag","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_chacha20poly1305_ietf_decrypt"},{"id":"function.sodium-crypto-aead-chacha20poly1305-ietf-encrypt","name":"sodium_crypto_aead_chacha20poly1305_ietf_encrypt","description":"Encrypt a message","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_chacha20poly1305_ietf_encrypt"},{"id":"function.sodium-crypto-aead-chacha20poly1305-ietf-keygen","name":"sodium_crypto_aead_chacha20poly1305_ietf_keygen","description":"Generate a random ChaCha20-Poly1305 (IETF) key.","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_chacha20poly1305_ietf_keygen"},{"id":"function.sodium-crypto-aead-chacha20poly1305-keygen","name":"sodium_crypto_aead_chacha20poly1305_keygen","description":"Generate a random ChaCha20-Poly1305 key.","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_chacha20poly1305_keygen"},{"id":"function.sodium-crypto-aead-xchacha20poly1305-ietf-decrypt","name":"sodium_crypto_aead_xchacha20poly1305_ietf_decrypt","description":"(Preferred) Verify then decrypt with XChaCha20-Poly1305","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_xchacha20poly1305_ietf_decrypt"},{"id":"function.sodium-crypto-aead-xchacha20poly1305-ietf-encrypt","name":"sodium_crypto_aead_xchacha20poly1305_ietf_encrypt","description":"(Preferred) Encrypt then authenticate with XChaCha20-Poly1305","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_xchacha20poly1305_ietf_encrypt"},{"id":"function.sodium-crypto-aead-xchacha20poly1305-ietf-keygen","name":"sodium_crypto_aead_xchacha20poly1305_ietf_keygen","description":"Generate a random XChaCha20-Poly1305 key.","tag":"refentry","type":"Function","methodName":"sodium_crypto_aead_xchacha20poly1305_ietf_keygen"},{"id":"function.sodium-crypto-auth","name":"sodium_crypto_auth","description":"Compute a tag for the message","tag":"refentry","type":"Function","methodName":"sodium_crypto_auth"},{"id":"function.sodium-crypto-auth-keygen","name":"sodium_crypto_auth_keygen","description":"Generate a random key for sodium_crypto_auth","tag":"refentry","type":"Function","methodName":"sodium_crypto_auth_keygen"},{"id":"function.sodium-crypto-auth-verify","name":"sodium_crypto_auth_verify","description":"Verifies that the tag is valid for the message","tag":"refentry","type":"Function","methodName":"sodium_crypto_auth_verify"},{"id":"function.sodium-crypto-box","name":"sodium_crypto_box","description":"Authenticated public-key encryption","tag":"refentry","type":"Function","methodName":"sodium_crypto_box"},{"id":"function.sodium-crypto-box-keypair","name":"sodium_crypto_box_keypair","description":"Randomly generate a secret key and a corresponding public key","tag":"refentry","type":"Function","methodName":"sodium_crypto_box_keypair"},{"id":"function.sodium-crypto-box-keypair-from-secretkey-and-publickey","name":"sodium_crypto_box_keypair_from_secretkey_and_publickey","description":"Create a unified keypair string from a secret key and public key","tag":"refentry","type":"Function","methodName":"sodium_crypto_box_keypair_from_secretkey_and_publickey"},{"id":"function.sodium-crypto-box-open","name":"sodium_crypto_box_open","description":"Authenticated public-key decryption","tag":"refentry","type":"Function","methodName":"sodium_crypto_box_open"},{"id":"function.sodium-crypto-box-publickey","name":"sodium_crypto_box_publickey","description":"Extract the public key from a crypto_box keypair","tag":"refentry","type":"Function","methodName":"sodium_crypto_box_publickey"},{"id":"function.sodium-crypto-box-publickey-from-secretkey","name":"sodium_crypto_box_publickey_from_secretkey","description":"Calculate the public key from a secret key","tag":"refentry","type":"Function","methodName":"sodium_crypto_box_publickey_from_secretkey"},{"id":"function.sodium-crypto-box-seal","name":"sodium_crypto_box_seal","description":"Anonymous public-key encryption","tag":"refentry","type":"Function","methodName":"sodium_crypto_box_seal"},{"id":"function.sodium-crypto-box-seal-open","name":"sodium_crypto_box_seal_open","description":"Anonymous public-key decryption","tag":"refentry","type":"Function","methodName":"sodium_crypto_box_seal_open"},{"id":"function.sodium-crypto-box-secretkey","name":"sodium_crypto_box_secretkey","description":"Extracts the secret key from a crypto_box keypair","tag":"refentry","type":"Function","methodName":"sodium_crypto_box_secretkey"},{"id":"function.sodium-crypto-box-seed-keypair","name":"sodium_crypto_box_seed_keypair","description":"Deterministically derive the key pair from a single key","tag":"refentry","type":"Function","methodName":"sodium_crypto_box_seed_keypair"},{"id":"function.sodium-crypto-core-ristretto255-add","name":"sodium_crypto_core_ristretto255_add","description":"Adds an element","tag":"refentry","type":"Function","methodName":"sodium_crypto_core_ristretto255_add"},{"id":"function.sodium-crypto-core-ristretto255-from-hash","name":"sodium_crypto_core_ristretto255_from_hash","description":"Maps a vector","tag":"refentry","type":"Function","methodName":"sodium_crypto_core_ristretto255_from_hash"},{"id":"function.sodium-crypto-core-ristretto255-is-valid-point","name":"sodium_crypto_core_ristretto255_is_valid_point","description":"Determines if a point on the ristretto255 curve","tag":"refentry","type":"Function","methodName":"sodium_crypto_core_ristretto255_is_valid_point"},{"id":"function.sodium-crypto-core-ristretto255-random","name":"sodium_crypto_core_ristretto255_random","description":"Generates a random key","tag":"refentry","type":"Function","methodName":"sodium_crypto_core_ristretto255_random"},{"id":"function.sodium-crypto-core-ristretto255-scalar-add","name":"sodium_crypto_core_ristretto255_scalar_add","description":"Adds a scalar value","tag":"refentry","type":"Function","methodName":"sodium_crypto_core_ristretto255_scalar_add"},{"id":"function.sodium-crypto-core-ristretto255-scalar-complement","name":"sodium_crypto_core_ristretto255_scalar_complement","description":"The sodium_crypto_core_ristretto255_scalar_complement purpose","tag":"refentry","type":"Function","methodName":"sodium_crypto_core_ristretto255_scalar_complement"},{"id":"function.sodium-crypto-core-ristretto255-scalar-invert","name":"sodium_crypto_core_ristretto255_scalar_invert","description":"Inverts a scalar value","tag":"refentry","type":"Function","methodName":"sodium_crypto_core_ristretto255_scalar_invert"},{"id":"function.sodium-crypto-core-ristretto255-scalar-mul","name":"sodium_crypto_core_ristretto255_scalar_mul","description":"Multiplies a scalar value","tag":"refentry","type":"Function","methodName":"sodium_crypto_core_ristretto255_scalar_mul"},{"id":"function.sodium-crypto-core-ristretto255-scalar-negate","name":"sodium_crypto_core_ristretto255_scalar_negate","description":"Negates a scalar value","tag":"refentry","type":"Function","methodName":"sodium_crypto_core_ristretto255_scalar_negate"},{"id":"function.sodium-crypto-core-ristretto255-scalar-random","name":"sodium_crypto_core_ristretto255_scalar_random","description":"Generates a random key","tag":"refentry","type":"Function","methodName":"sodium_crypto_core_ristretto255_scalar_random"},{"id":"function.sodium-crypto-core-ristretto255-scalar-reduce","name":"sodium_crypto_core_ristretto255_scalar_reduce","description":"Reduces a scalar value","tag":"refentry","type":"Function","methodName":"sodium_crypto_core_ristretto255_scalar_reduce"},{"id":"function.sodium-crypto-core-ristretto255-scalar-sub","name":"sodium_crypto_core_ristretto255_scalar_sub","description":"Subtracts a scalar value","tag":"refentry","type":"Function","methodName":"sodium_crypto_core_ristretto255_scalar_sub"},{"id":"function.sodium-crypto-core-ristretto255-sub","name":"sodium_crypto_core_ristretto255_sub","description":"Subtracts an element","tag":"refentry","type":"Function","methodName":"sodium_crypto_core_ristretto255_sub"},{"id":"function.sodium-crypto-generichash","name":"sodium_crypto_generichash","description":"Get a hash of the message","tag":"refentry","type":"Function","methodName":"sodium_crypto_generichash"},{"id":"function.sodium-crypto-generichash-final","name":"sodium_crypto_generichash_final","description":"Complete the hash","tag":"refentry","type":"Function","methodName":"sodium_crypto_generichash_final"},{"id":"function.sodium-crypto-generichash-init","name":"sodium_crypto_generichash_init","description":"Initialize a hash for streaming","tag":"refentry","type":"Function","methodName":"sodium_crypto_generichash_init"},{"id":"function.sodium-crypto-generichash-keygen","name":"sodium_crypto_generichash_keygen","description":"Generate a random generichash key","tag":"refentry","type":"Function","methodName":"sodium_crypto_generichash_keygen"},{"id":"function.sodium-crypto-generichash-update","name":"sodium_crypto_generichash_update","description":"Add message to a hash","tag":"refentry","type":"Function","methodName":"sodium_crypto_generichash_update"},{"id":"function.sodium-crypto-kdf-derive-from-key","name":"sodium_crypto_kdf_derive_from_key","description":"Derive a subkey","tag":"refentry","type":"Function","methodName":"sodium_crypto_kdf_derive_from_key"},{"id":"function.sodium-crypto-kdf-keygen","name":"sodium_crypto_kdf_keygen","description":"Generate a random root key for the KDF interface","tag":"refentry","type":"Function","methodName":"sodium_crypto_kdf_keygen"},{"id":"function.sodium-crypto-kx-client-session-keys","name":"sodium_crypto_kx_client_session_keys","description":"Calculate the client-side session keys.","tag":"refentry","type":"Function","methodName":"sodium_crypto_kx_client_session_keys"},{"id":"function.sodium-crypto-kx-keypair","name":"sodium_crypto_kx_keypair","description":"Creates a new sodium keypair","tag":"refentry","type":"Function","methodName":"sodium_crypto_kx_keypair"},{"id":"function.sodium-crypto-kx-publickey","name":"sodium_crypto_kx_publickey","description":"Extract the public key from a crypto_kx keypair","tag":"refentry","type":"Function","methodName":"sodium_crypto_kx_publickey"},{"id":"function.sodium-crypto-kx-secretkey","name":"sodium_crypto_kx_secretkey","description":"Extract the secret key from a crypto_kx keypair.","tag":"refentry","type":"Function","methodName":"sodium_crypto_kx_secretkey"},{"id":"function.sodium-crypto-kx-seed-keypair","name":"sodium_crypto_kx_seed_keypair","description":"Description","tag":"refentry","type":"Function","methodName":"sodium_crypto_kx_seed_keypair"},{"id":"function.sodium-crypto-kx-server-session-keys","name":"sodium_crypto_kx_server_session_keys","description":"Calculate the server-side session keys.","tag":"refentry","type":"Function","methodName":"sodium_crypto_kx_server_session_keys"},{"id":"function.sodium-crypto-pwhash","name":"sodium_crypto_pwhash","description":"Derive a key from a password, using Argon2","tag":"refentry","type":"Function","methodName":"sodium_crypto_pwhash"},{"id":"function.sodium-crypto-pwhash-scryptsalsa208sha256","name":"sodium_crypto_pwhash_scryptsalsa208sha256","description":"Derives a key from a password, using scrypt","tag":"refentry","type":"Function","methodName":"sodium_crypto_pwhash_scryptsalsa208sha256"},{"id":"function.sodium-crypto-pwhash-scryptsalsa208sha256-str","name":"sodium_crypto_pwhash_scryptsalsa208sha256_str","description":"Get an ASCII encoded hash","tag":"refentry","type":"Function","methodName":"sodium_crypto_pwhash_scryptsalsa208sha256_str"},{"id":"function.sodium-crypto-pwhash-scryptsalsa208sha256-str-verify","name":"sodium_crypto_pwhash_scryptsalsa208sha256_str_verify","description":"Verify that the password is a valid password verification string","tag":"refentry","type":"Function","methodName":"sodium_crypto_pwhash_scryptsalsa208sha256_str_verify"},{"id":"function.sodium-crypto-pwhash-str","name":"sodium_crypto_pwhash_str","description":"Get an ASCII-encoded hash","tag":"refentry","type":"Function","methodName":"sodium_crypto_pwhash_str"},{"id":"function.sodium-crypto-pwhash-str-needs-rehash","name":"sodium_crypto_pwhash_str_needs_rehash","description":"Determine whether or not to rehash a password","tag":"refentry","type":"Function","methodName":"sodium_crypto_pwhash_str_needs_rehash"},{"id":"function.sodium-crypto-pwhash-str-verify","name":"sodium_crypto_pwhash_str_verify","description":"Verifies that a password matches a hash","tag":"refentry","type":"Function","methodName":"sodium_crypto_pwhash_str_verify"},{"id":"function.sodium-crypto-scalarmult","name":"sodium_crypto_scalarmult","description":"Compute a shared secret given a user's secret key and another user's public key","tag":"refentry","type":"Function","methodName":"sodium_crypto_scalarmult"},{"id":"function.sodium-crypto-scalarmult-base","name":"sodium_crypto_scalarmult_base","description":"Alias of sodium_crypto_box_publickey_from_secretkey","tag":"refentry","type":"Function","methodName":"sodium_crypto_scalarmult_base"},{"id":"function.sodium-crypto-scalarmult-ristretto255","name":"sodium_crypto_scalarmult_ristretto255","description":"Computes a shared secret","tag":"refentry","type":"Function","methodName":"sodium_crypto_scalarmult_ristretto255"},{"id":"function.sodium-crypto-scalarmult-ristretto255-base","name":"sodium_crypto_scalarmult_ristretto255_base","description":"Calculates the public key from a secret key","tag":"refentry","type":"Function","methodName":"sodium_crypto_scalarmult_ristretto255_base"},{"id":"function.sodium-crypto-secretbox","name":"sodium_crypto_secretbox","description":"Authenticated shared-key encryption","tag":"refentry","type":"Function","methodName":"sodium_crypto_secretbox"},{"id":"function.sodium-crypto-secretbox-keygen","name":"sodium_crypto_secretbox_keygen","description":"Generate random key for sodium_crypto_secretbox","tag":"refentry","type":"Function","methodName":"sodium_crypto_secretbox_keygen"},{"id":"function.sodium-crypto-secretbox-open","name":"sodium_crypto_secretbox_open","description":"Authenticated shared-key decryption","tag":"refentry","type":"Function","methodName":"sodium_crypto_secretbox_open"},{"id":"function.sodium-crypto-secretstream-xchacha20poly1305-init-pull","name":"sodium_crypto_secretstream_xchacha20poly1305_init_pull","description":"Initialize a secretstream context for decryption","tag":"refentry","type":"Function","methodName":"sodium_crypto_secretstream_xchacha20poly1305_init_pull"},{"id":"function.sodium-crypto-secretstream-xchacha20poly1305-init-push","name":"sodium_crypto_secretstream_xchacha20poly1305_init_push","description":"Initialize a secretstream context for encryption","tag":"refentry","type":"Function","methodName":"sodium_crypto_secretstream_xchacha20poly1305_init_push"},{"id":"function.sodium-crypto-secretstream-xchacha20poly1305-keygen","name":"sodium_crypto_secretstream_xchacha20poly1305_keygen","description":"Generate a random secretstream key.","tag":"refentry","type":"Function","methodName":"sodium_crypto_secretstream_xchacha20poly1305_keygen"},{"id":"function.sodium-crypto-secretstream-xchacha20poly1305-pull","name":"sodium_crypto_secretstream_xchacha20poly1305_pull","description":"Decrypt a chunk of data from an encrypted stream","tag":"refentry","type":"Function","methodName":"sodium_crypto_secretstream_xchacha20poly1305_pull"},{"id":"function.sodium-crypto-secretstream-xchacha20poly1305-push","name":"sodium_crypto_secretstream_xchacha20poly1305_push","description":"Encrypt a chunk of data so that it can safely be decrypted in a streaming API","tag":"refentry","type":"Function","methodName":"sodium_crypto_secretstream_xchacha20poly1305_push"},{"id":"function.sodium-crypto-secretstream-xchacha20poly1305-rekey","name":"sodium_crypto_secretstream_xchacha20poly1305_rekey","description":"Explicitly rotate the key in the secretstream state","tag":"refentry","type":"Function","methodName":"sodium_crypto_secretstream_xchacha20poly1305_rekey"},{"id":"function.sodium-crypto-shorthash","name":"sodium_crypto_shorthash","description":"Compute a short hash of a message and key","tag":"refentry","type":"Function","methodName":"sodium_crypto_shorthash"},{"id":"function.sodium-crypto-shorthash-keygen","name":"sodium_crypto_shorthash_keygen","description":"Get random bytes for key","tag":"refentry","type":"Function","methodName":"sodium_crypto_shorthash_keygen"},{"id":"function.sodium-crypto-sign","name":"sodium_crypto_sign","description":"Sign a message","tag":"refentry","type":"Function","methodName":"sodium_crypto_sign"},{"id":"function.sodium-crypto-sign-detached","name":"sodium_crypto_sign_detached","description":"Sign the message","tag":"refentry","type":"Function","methodName":"sodium_crypto_sign_detached"},{"id":"function.sodium-crypto-sign-ed25519-pk-to-curve25519","name":"sodium_crypto_sign_ed25519_pk_to_curve25519","description":"Convert an Ed25519 public key to a Curve25519 public key","tag":"refentry","type":"Function","methodName":"sodium_crypto_sign_ed25519_pk_to_curve25519"},{"id":"function.sodium-crypto-sign-ed25519-sk-to-curve25519","name":"sodium_crypto_sign_ed25519_sk_to_curve25519","description":"Convert an Ed25519 secret key to a Curve25519 secret key","tag":"refentry","type":"Function","methodName":"sodium_crypto_sign_ed25519_sk_to_curve25519"},{"id":"function.sodium-crypto-sign-keypair","name":"sodium_crypto_sign_keypair","description":"Randomly generate a secret key and a corresponding public key","tag":"refentry","type":"Function","methodName":"sodium_crypto_sign_keypair"},{"id":"function.sodium-crypto-sign-keypair-from-secretkey-and-publickey","name":"sodium_crypto_sign_keypair_from_secretkey_and_publickey","description":"Join a secret key and public key together","tag":"refentry","type":"Function","methodName":"sodium_crypto_sign_keypair_from_secretkey_and_publickey"},{"id":"function.sodium-crypto-sign-open","name":"sodium_crypto_sign_open","description":"Check that the signed message has a valid signature","tag":"refentry","type":"Function","methodName":"sodium_crypto_sign_open"},{"id":"function.sodium-crypto-sign-publickey","name":"sodium_crypto_sign_publickey","description":"Extract the Ed25519 public key from a keypair","tag":"refentry","type":"Function","methodName":"sodium_crypto_sign_publickey"},{"id":"function.sodium-crypto-sign-publickey-from-secretkey","name":"sodium_crypto_sign_publickey_from_secretkey","description":"Extract the Ed25519 public key from the secret key","tag":"refentry","type":"Function","methodName":"sodium_crypto_sign_publickey_from_secretkey"},{"id":"function.sodium-crypto-sign-secretkey","name":"sodium_crypto_sign_secretkey","description":"Extract the Ed25519 secret key from a keypair","tag":"refentry","type":"Function","methodName":"sodium_crypto_sign_secretkey"},{"id":"function.sodium-crypto-sign-seed-keypair","name":"sodium_crypto_sign_seed_keypair","description":"Deterministically derive the key pair from a single key","tag":"refentry","type":"Function","methodName":"sodium_crypto_sign_seed_keypair"},{"id":"function.sodium-crypto-sign-verify-detached","name":"sodium_crypto_sign_verify_detached","description":"Verify signature for the message","tag":"refentry","type":"Function","methodName":"sodium_crypto_sign_verify_detached"},{"id":"function.sodium-crypto-stream","name":"sodium_crypto_stream","description":"Generate a deterministic sequence of bytes from a seed","tag":"refentry","type":"Function","methodName":"sodium_crypto_stream"},{"id":"function.sodium-crypto-stream-keygen","name":"sodium_crypto_stream_keygen","description":"Generate a random sodium_crypto_stream key.","tag":"refentry","type":"Function","methodName":"sodium_crypto_stream_keygen"},{"id":"function.sodium-crypto-stream-xchacha20","name":"sodium_crypto_stream_xchacha20","description":"Expands the key and nonce into a keystream of pseudorandom bytes","tag":"refentry","type":"Function","methodName":"sodium_crypto_stream_xchacha20"},{"id":"function.sodium-crypto-stream-xchacha20-keygen","name":"sodium_crypto_stream_xchacha20_keygen","description":"Returns a secure random key","tag":"refentry","type":"Function","methodName":"sodium_crypto_stream_xchacha20_keygen"},{"id":"function.sodium-crypto-stream-xchacha20-xor","name":"sodium_crypto_stream_xchacha20_xor","description":"Encrypts a message using a nonce and a secret key (no authentication)","tag":"refentry","type":"Function","methodName":"sodium_crypto_stream_xchacha20_xor"},{"id":"function.sodium-crypto-stream-xchacha20-xor-ic","name":"sodium_crypto_stream_xchacha20_xor_ic","description":"Encrypts a message using a nonce and a secret key (no authentication)","tag":"refentry","type":"Function","methodName":"sodium_crypto_stream_xchacha20_xor_ic"},{"id":"function.sodium-crypto-stream-xor","name":"sodium_crypto_stream_xor","description":"Encrypt a message without authentication","tag":"refentry","type":"Function","methodName":"sodium_crypto_stream_xor"},{"id":"function.sodium-hex2bin","name":"sodium_hex2bin","description":"Decodes a hexadecimally encoded binary string","tag":"refentry","type":"Function","methodName":"sodium_hex2bin"},{"id":"function.sodium-increment","name":"sodium_increment","description":"Increment large number","tag":"refentry","type":"Function","methodName":"sodium_increment"},{"id":"function.sodium-memcmp","name":"sodium_memcmp","description":"Test for equality in constant-time","tag":"refentry","type":"Function","methodName":"sodium_memcmp"},{"id":"function.sodium-memzero","name":"sodium_memzero","description":"Overwrite a string with NUL characters","tag":"refentry","type":"Function","methodName":"sodium_memzero"},{"id":"function.sodium-pad","name":"sodium_pad","description":"Add padding data","tag":"refentry","type":"Function","methodName":"sodium_pad"},{"id":"function.sodium-unpad","name":"sodium_unpad","description":"Remove padding data","tag":"refentry","type":"Function","methodName":"sodium_unpad"},{"id":"ref.sodium","name":"Sodium Functions","description":"Sodium","tag":"reference","type":"Extension","methodName":"Sodium Functions"},{"id":"class.sodiumexception","name":"SodiumException","description":"The SodiumException class","tag":"phpdoc:classref","type":"Class","methodName":"SodiumException"},{"id":"book.sodium","name":"Sodium","description":"Sodium","tag":"book","type":"Extension","methodName":"Sodium"},{"id":"intro.xpass","name":"Introduction","description":"Xpass","tag":"preface","type":"General","methodName":"Introduction"},{"id":"xpass.requirements","name":"Requirements","description":"Xpass","tag":"section","type":"General","methodName":"Requirements"},{"id":"xpass.installation","name":"Installation via PECL","description":"Xpass","tag":"section","type":"General","methodName":"Installation via PECL"},{"id":"xpass.setup","name":"Installing\/Configuring","description":"Xpass","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"xpass.constants","name":"Predefined Constants","description":"Xpass","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.crypt-checksalt","name":"crypt_checksalt","description":"Validate a crypt setting string","tag":"refentry","type":"Function","methodName":"crypt_checksalt"},{"id":"function.crypt-gensalt","name":"crypt_gensalt","description":"Compile a string for use as the salt argument to crypt","tag":"refentry","type":"Function","methodName":"crypt_gensalt"},{"id":"function.crypt-preferred-method","name":"crypt_preferred_method","description":"Get the prefix of the preferred hash method","tag":"refentry","type":"Function","methodName":"crypt_preferred_method"},{"id":"ref.xpass","name":"Xpass Functions","description":"Xpass","tag":"reference","type":"Extension","methodName":"Xpass Functions"},{"id":"book.xpass","name":"Xpass","description":"Xpass","tag":"book","type":"Extension","methodName":"Xpass"},{"id":"refs.crypto","name":"Cryptography Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"Cryptography Extensions"},{"id":"intro.dba","name":"Introduction","description":"Database (dbm-style) Abstraction Layer","tag":"preface","type":"General","methodName":"Introduction"},{"id":"dba.requirements","name":"Requirements","description":"Database (dbm-style) Abstraction Layer","tag":"section","type":"General","methodName":"Requirements"},{"id":"dba.installation","name":"Installation","description":"Database (dbm-style) Abstraction Layer","tag":"section","type":"General","methodName":"Installation"},{"id":"dba.configuration","name":"Runtime Configuration","description":"Database (dbm-style) Abstraction Layer","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"dba.resources","name":"Resource Types","description":"Database (dbm-style) Abstraction Layer","tag":"section","type":"General","methodName":"Resource Types"},{"id":"dba.setup","name":"Installing\/Configuring","description":"Database (dbm-style) Abstraction Layer","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"dba.constants","name":"Predefined Constants","description":"Database (dbm-style) Abstraction Layer","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"dba.example","name":"Basic usage","description":"Database (dbm-style) Abstraction Layer","tag":"section","type":"General","methodName":"Basic usage"},{"id":"dba.examples","name":"Examples","description":"Database (dbm-style) Abstraction Layer","tag":"chapter","type":"General","methodName":"Examples"},{"id":"class.dba-connection","name":"Dba\\Connection","description":"The Dba\\Connection class","tag":"phpdoc:classref","type":"Class","methodName":"Dba\\Connection"},{"id":"function.dba-close","name":"dba_close","description":"Close a DBA database","tag":"refentry","type":"Function","methodName":"dba_close"},{"id":"function.dba-delete","name":"dba_delete","description":"Delete DBA entry specified by key","tag":"refentry","type":"Function","methodName":"dba_delete"},{"id":"function.dba-exists","name":"dba_exists","description":"Check whether key exists","tag":"refentry","type":"Function","methodName":"dba_exists"},{"id":"function.dba-fetch","name":"dba_fetch","description":"Fetch data specified by key","tag":"refentry","type":"Function","methodName":"dba_fetch"},{"id":"function.dba-firstkey","name":"dba_firstkey","description":"Fetch first key","tag":"refentry","type":"Function","methodName":"dba_firstkey"},{"id":"function.dba-handlers","name":"dba_handlers","description":"List all the handlers available","tag":"refentry","type":"Function","methodName":"dba_handlers"},{"id":"function.dba-insert","name":"dba_insert","description":"Insert entry","tag":"refentry","type":"Function","methodName":"dba_insert"},{"id":"function.dba-key-split","name":"dba_key_split","description":"Splits a key in string representation into array representation","tag":"refentry","type":"Function","methodName":"dba_key_split"},{"id":"function.dba-list","name":"dba_list","description":"List all open database files","tag":"refentry","type":"Function","methodName":"dba_list"},{"id":"function.dba-nextkey","name":"dba_nextkey","description":"Fetch next key","tag":"refentry","type":"Function","methodName":"dba_nextkey"},{"id":"function.dba-open","name":"dba_open","description":"Open database","tag":"refentry","type":"Function","methodName":"dba_open"},{"id":"function.dba-optimize","name":"dba_optimize","description":"Optimize database","tag":"refentry","type":"Function","methodName":"dba_optimize"},{"id":"function.dba-popen","name":"dba_popen","description":"Open database persistently","tag":"refentry","type":"Function","methodName":"dba_popen"},{"id":"function.dba-replace","name":"dba_replace","description":"Replace or insert entry","tag":"refentry","type":"Function","methodName":"dba_replace"},{"id":"function.dba-sync","name":"dba_sync","description":"Synchronize database","tag":"refentry","type":"Function","methodName":"dba_sync"},{"id":"ref.dba","name":"DBA Functions","description":"Database (dbm-style) Abstraction Layer","tag":"reference","type":"Extension","methodName":"DBA Functions"},{"id":"book.dba","name":"DBA","description":"Database (dbm-style) Abstraction Layer","tag":"book","type":"Extension","methodName":"DBA"},{"id":"intro.uodbc","name":"Introduction","description":"ODBC (Unified)","tag":"preface","type":"General","methodName":"Introduction"},{"id":"uodbc.requirements","name":"Requirements","description":"ODBC (Unified)","tag":"section","type":"General","methodName":"Requirements"},{"id":"odbc.installation","name":"Installation","description":"ODBC (Unified)","tag":"section","type":"General","methodName":"Installation"},{"id":"odbc.configuration","name":"Runtime Configuration","description":"ODBC (Unified)","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"uodbc.resources","name":"Resource Types","description":"ODBC (Unified)","tag":"section","type":"General","methodName":"Resource Types"},{"id":"uodbc.setup","name":"Installing\/Configuring","description":"ODBC (Unified)","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"uodbc.constants","name":"Predefined Constants","description":"ODBC (Unified)","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.odbc-autocommit","name":"odbc_autocommit","description":"Toggle autocommit behaviour","tag":"refentry","type":"Function","methodName":"odbc_autocommit"},{"id":"function.odbc-binmode","name":"odbc_binmode","description":"Handling of binary column data","tag":"refentry","type":"Function","methodName":"odbc_binmode"},{"id":"function.odbc-close","name":"odbc_close","description":"Close an ODBC connection","tag":"refentry","type":"Function","methodName":"odbc_close"},{"id":"function.odbc-close-all","name":"odbc_close_all","description":"Close all ODBC connections","tag":"refentry","type":"Function","methodName":"odbc_close_all"},{"id":"function.odbc-columnprivileges","name":"odbc_columnprivileges","description":"Lists columns and associated privileges for the given table","tag":"refentry","type":"Function","methodName":"odbc_columnprivileges"},{"id":"function.odbc-columns","name":"odbc_columns","description":"Lists the column names in specified tables","tag":"refentry","type":"Function","methodName":"odbc_columns"},{"id":"function.odbc-commit","name":"odbc_commit","description":"Commit an ODBC transaction","tag":"refentry","type":"Function","methodName":"odbc_commit"},{"id":"function.odbc-connect","name":"odbc_connect","description":"Connect to a datasource","tag":"refentry","type":"Function","methodName":"odbc_connect"},{"id":"function.odbc-connection-string-is-quoted","name":"odbc_connection_string_is_quoted","description":"Determines if an ODBC connection string value is quoted","tag":"refentry","type":"Function","methodName":"odbc_connection_string_is_quoted"},{"id":"function.odbc-connection-string-quote","name":"odbc_connection_string_quote","description":"Quotes an ODBC connection string value","tag":"refentry","type":"Function","methodName":"odbc_connection_string_quote"},{"id":"function.odbc-connection-string-should-quote","name":"odbc_connection_string_should_quote","description":"Determines if an ODBC connection string value should be quoted","tag":"refentry","type":"Function","methodName":"odbc_connection_string_should_quote"},{"id":"function.odbc-cursor","name":"odbc_cursor","description":"Get cursorname","tag":"refentry","type":"Function","methodName":"odbc_cursor"},{"id":"function.odbc-data-source","name":"odbc_data_source","description":"Returns information about available DSNs","tag":"refentry","type":"Function","methodName":"odbc_data_source"},{"id":"function.odbc-do","name":"odbc_do","description":"Alias of odbc_exec","tag":"refentry","type":"Function","methodName":"odbc_do"},{"id":"function.odbc-error","name":"odbc_error","description":"Get the last error code","tag":"refentry","type":"Function","methodName":"odbc_error"},{"id":"function.odbc-errormsg","name":"odbc_errormsg","description":"Get the last error message","tag":"refentry","type":"Function","methodName":"odbc_errormsg"},{"id":"function.odbc-exec","name":"odbc_exec","description":"Directly execute an SQL statement","tag":"refentry","type":"Function","methodName":"odbc_exec"},{"id":"function.odbc-execute","name":"odbc_execute","description":"Execute a prepared statement","tag":"refentry","type":"Function","methodName":"odbc_execute"},{"id":"function.odbc-fetch-array","name":"odbc_fetch_array","description":"Fetch a result row as an associative array","tag":"refentry","type":"Function","methodName":"odbc_fetch_array"},{"id":"function.odbc-fetch-into","name":"odbc_fetch_into","description":"Fetch one result row into array","tag":"refentry","type":"Function","methodName":"odbc_fetch_into"},{"id":"function.odbc-fetch-object","name":"odbc_fetch_object","description":"Fetch a result row as an object","tag":"refentry","type":"Function","methodName":"odbc_fetch_object"},{"id":"function.odbc-fetch-row","name":"odbc_fetch_row","description":"Fetch a row","tag":"refentry","type":"Function","methodName":"odbc_fetch_row"},{"id":"function.odbc-field-len","name":"odbc_field_len","description":"Get the length (precision) of a field","tag":"refentry","type":"Function","methodName":"odbc_field_len"},{"id":"function.odbc-field-name","name":"odbc_field_name","description":"Get the columnname","tag":"refentry","type":"Function","methodName":"odbc_field_name"},{"id":"function.odbc-field-num","name":"odbc_field_num","description":"Return column number","tag":"refentry","type":"Function","methodName":"odbc_field_num"},{"id":"function.odbc-field-precision","name":"odbc_field_precision","description":"Alias of odbc_field_len","tag":"refentry","type":"Function","methodName":"odbc_field_precision"},{"id":"function.odbc-field-scale","name":"odbc_field_scale","description":"Get the scale of a field","tag":"refentry","type":"Function","methodName":"odbc_field_scale"},{"id":"function.odbc-field-type","name":"odbc_field_type","description":"Datatype of a field","tag":"refentry","type":"Function","methodName":"odbc_field_type"},{"id":"function.odbc-foreignkeys","name":"odbc_foreignkeys","description":"Retrieves a list of foreign keys","tag":"refentry","type":"Function","methodName":"odbc_foreignkeys"},{"id":"function.odbc-free-result","name":"odbc_free_result","description":"Free objects associated with a result","tag":"refentry","type":"Function","methodName":"odbc_free_result"},{"id":"function.odbc-gettypeinfo","name":"odbc_gettypeinfo","description":"Retrieves information about data types supported by the data source","tag":"refentry","type":"Function","methodName":"odbc_gettypeinfo"},{"id":"function.odbc-longreadlen","name":"odbc_longreadlen","description":"Handling of LONG columns","tag":"refentry","type":"Function","methodName":"odbc_longreadlen"},{"id":"function.odbc-next-result","name":"odbc_next_result","description":"Checks if multiple results are available","tag":"refentry","type":"Function","methodName":"odbc_next_result"},{"id":"function.odbc-num-fields","name":"odbc_num_fields","description":"Number of columns in a result","tag":"refentry","type":"Function","methodName":"odbc_num_fields"},{"id":"function.odbc-num-rows","name":"odbc_num_rows","description":"Number of rows in a result","tag":"refentry","type":"Function","methodName":"odbc_num_rows"},{"id":"function.odbc-pconnect","name":"odbc_pconnect","description":"Open a persistent database connection","tag":"refentry","type":"Function","methodName":"odbc_pconnect"},{"id":"function.odbc-prepare","name":"odbc_prepare","description":"Prepares a statement for execution","tag":"refentry","type":"Function","methodName":"odbc_prepare"},{"id":"function.odbc-primarykeys","name":"odbc_primarykeys","description":"Gets the primary keys for a table","tag":"refentry","type":"Function","methodName":"odbc_primarykeys"},{"id":"function.odbc-procedurecolumns","name":"odbc_procedurecolumns","description":"Retrieve information about parameters to procedures","tag":"refentry","type":"Function","methodName":"odbc_procedurecolumns"},{"id":"function.odbc-procedures","name":"odbc_procedures","description":"Get the list of procedures stored in a specific data source","tag":"refentry","type":"Function","methodName":"odbc_procedures"},{"id":"function.odbc-result","name":"odbc_result","description":"Get result data","tag":"refentry","type":"Function","methodName":"odbc_result"},{"id":"function.odbc-result-all","name":"odbc_result_all","description":"Print result as HTML table","tag":"refentry","type":"Function","methodName":"odbc_result_all"},{"id":"function.odbc-rollback","name":"odbc_rollback","description":"Rollback a transaction","tag":"refentry","type":"Function","methodName":"odbc_rollback"},{"id":"function.odbc-setoption","name":"odbc_setoption","description":"Adjust ODBC settings","tag":"refentry","type":"Function","methodName":"odbc_setoption"},{"id":"function.odbc-specialcolumns","name":"odbc_specialcolumns","description":"Retrieves special columns","tag":"refentry","type":"Function","methodName":"odbc_specialcolumns"},{"id":"function.odbc-statistics","name":"odbc_statistics","description":"Retrieve statistics about a table","tag":"refentry","type":"Function","methodName":"odbc_statistics"},{"id":"function.odbc-tableprivileges","name":"odbc_tableprivileges","description":"Lists tables and the privileges associated with each table","tag":"refentry","type":"Function","methodName":"odbc_tableprivileges"},{"id":"function.odbc-tables","name":"odbc_tables","description":"Get the list of table names stored in a specific data source","tag":"refentry","type":"Function","methodName":"odbc_tables"},{"id":"ref.uodbc","name":"ODBC Functions","description":"ODBC (Unified)","tag":"reference","type":"Extension","methodName":"ODBC Functions"},{"id":"book.uodbc","name":"ODBC","description":"ODBC (Unified)","tag":"book","type":"Extension","methodName":"ODBC"},{"id":"intro.pdo","name":"Introduction","description":"PHP Data Objects","tag":"preface","type":"General","methodName":"Introduction"},{"id":"pdo.installation","name":"Installation","description":"PHP Data Objects","tag":"section","type":"General","methodName":"Installation"},{"id":"pdo.configuration","name":"Runtime Configuration","description":"PHP Data Objects","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"pdo.setup","name":"Installing\/Configuring","description":"PHP Data Objects","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"pdo.constants.fetch-modes","name":"Fetch Modes","description":"PHP Data Objects","tag":"section","type":"General","methodName":"Fetch Modes"},{"id":"pdo.constants","name":"Predefined Constants","description":"PHP Data Objects","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"pdo.connections","name":"Connections and Connection management","description":"PHP Data Objects","tag":"chapter","type":"General","methodName":"Connections and Connection management"},{"id":"pdo.transactions","name":"Transactions and auto-commit","description":"PHP Data Objects","tag":"chapter","type":"General","methodName":"Transactions and auto-commit"},{"id":"pdo.prepared-statements","name":"Prepared statements and stored procedures","description":"PHP Data Objects","tag":"chapter","type":"General","methodName":"Prepared statements and stored procedures"},{"id":"pdo.error-handling","name":"Errors and error handling","description":"PHP Data Objects","tag":"chapter","type":"General","methodName":"Errors and error handling"},{"id":"pdo.lobs","name":"Large Objects (LOBs)","description":"PHP Data Objects","tag":"chapter","type":"General","methodName":"Large Objects (LOBs)"},{"id":"pdo.begintransaction","name":"PDO::beginTransaction","description":"Initiates a transaction","tag":"refentry","type":"Function","methodName":"beginTransaction"},{"id":"pdo.commit","name":"PDO::commit","description":"Commits a transaction","tag":"refentry","type":"Function","methodName":"commit"},{"id":"pdo.connect","name":"PDO::connect","description":"Connect to a database and return a PDO subclass for drivers that support it","tag":"refentry","type":"Function","methodName":"connect"},{"id":"pdo.construct","name":"PDO::__construct","description":"Creates a PDO instance representing a connection to a database","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"pdo.errorcode","name":"PDO::errorCode","description":"Fetch the SQLSTATE associated with the last operation on the database handle","tag":"refentry","type":"Function","methodName":"errorCode"},{"id":"pdo.errorinfo","name":"PDO::errorInfo","description":"Fetch extended error information associated with the last operation on the database handle","tag":"refentry","type":"Function","methodName":"errorInfo"},{"id":"pdo.exec","name":"PDO::exec","description":"Execute an SQL statement and return the number of affected rows","tag":"refentry","type":"Function","methodName":"exec"},{"id":"pdo.getattribute","name":"PDO::getAttribute","description":"Retrieve a database connection attribute","tag":"refentry","type":"Function","methodName":"getAttribute"},{"id":"pdo.getavailabledrivers","name":"pdo_drivers","description":"Return an array of available PDO drivers","tag":"refentry","type":"Function","methodName":"pdo_drivers"},{"id":"pdo.getavailabledrivers","name":"PDO::getAvailableDrivers","description":"Return an array of available PDO drivers","tag":"refentry","type":"Function","methodName":"getAvailableDrivers"},{"id":"pdo.intransaction","name":"PDO::inTransaction","description":"Checks if inside a transaction","tag":"refentry","type":"Function","methodName":"inTransaction"},{"id":"pdo.lastinsertid","name":"PDO::lastInsertId","description":"Returns the ID of the last inserted row or sequence value","tag":"refentry","type":"Function","methodName":"lastInsertId"},{"id":"pdo.prepare","name":"PDO::prepare","description":"Prepares a statement for execution and returns a statement object","tag":"refentry","type":"Function","methodName":"prepare"},{"id":"pdo.query","name":"PDO::query","description":"Prepares and executes an SQL statement without placeholders","tag":"refentry","type":"Function","methodName":"query"},{"id":"pdo.quote","name":"PDO::quote","description":"Quotes a string for use in a query","tag":"refentry","type":"Function","methodName":"quote"},{"id":"pdo.rollback","name":"PDO::rollBack","description":"Rolls back a transaction","tag":"refentry","type":"Function","methodName":"rollBack"},{"id":"pdo.setattribute","name":"PDO::setAttribute","description":"Set an attribute","tag":"refentry","type":"Function","methodName":"setAttribute"},{"id":"class.pdo","name":"PDO","description":"The PDO class","tag":"phpdoc:classref","type":"Class","methodName":"PDO"},{"id":"pdostatement.bindcolumn","name":"PDOStatement::bindColumn","description":"Bind a column to a PHP variable","tag":"refentry","type":"Function","methodName":"bindColumn"},{"id":"pdostatement.bindparam","name":"PDOStatement::bindParam","description":"Binds a parameter to the specified variable name","tag":"refentry","type":"Function","methodName":"bindParam"},{"id":"pdostatement.bindvalue","name":"PDOStatement::bindValue","description":"Binds a value to a parameter","tag":"refentry","type":"Function","methodName":"bindValue"},{"id":"pdostatement.closecursor","name":"PDOStatement::closeCursor","description":"Closes the cursor, enabling the statement to be executed again","tag":"refentry","type":"Function","methodName":"closeCursor"},{"id":"pdostatement.columncount","name":"PDOStatement::columnCount","description":"Returns the number of columns in the result set","tag":"refentry","type":"Function","methodName":"columnCount"},{"id":"pdostatement.debugdumpparams","name":"PDOStatement::debugDumpParams","description":"Dump an SQL prepared command","tag":"refentry","type":"Function","methodName":"debugDumpParams"},{"id":"pdostatement.errorcode","name":"PDOStatement::errorCode","description":"Fetch the SQLSTATE associated with the last operation on the statement handle","tag":"refentry","type":"Function","methodName":"errorCode"},{"id":"pdostatement.errorinfo","name":"PDOStatement::errorInfo","description":"Fetch extended error information associated with the last operation on the statement handle","tag":"refentry","type":"Function","methodName":"errorInfo"},{"id":"pdostatement.execute","name":"PDOStatement::execute","description":"Executes a prepared statement","tag":"refentry","type":"Function","methodName":"execute"},{"id":"pdostatement.fetch","name":"PDOStatement::fetch","description":"Fetches the next row from a result set","tag":"refentry","type":"Function","methodName":"fetch"},{"id":"pdostatement.fetchall","name":"PDOStatement::fetchAll","description":"Fetches the remaining rows from a result set","tag":"refentry","type":"Function","methodName":"fetchAll"},{"id":"pdostatement.fetchcolumn","name":"PDOStatement::fetchColumn","description":"Returns a single column from the next row of a result set","tag":"refentry","type":"Function","methodName":"fetchColumn"},{"id":"pdostatement.fetchobject","name":"PDOStatement::fetchObject","description":"Fetches the next row and returns it as an object","tag":"refentry","type":"Function","methodName":"fetchObject"},{"id":"pdostatement.getattribute","name":"PDOStatement::getAttribute","description":"Retrieve a statement attribute","tag":"refentry","type":"Function","methodName":"getAttribute"},{"id":"pdostatement.getcolumnmeta","name":"PDOStatement::getColumnMeta","description":"Returns metadata for a column in a result set","tag":"refentry","type":"Function","methodName":"getColumnMeta"},{"id":"pdostatement.getiterator","name":"PDOStatement::getIterator","description":"Gets result set iterator","tag":"refentry","type":"Function","methodName":"getIterator"},{"id":"pdostatement.nextrowset","name":"PDOStatement::nextRowset","description":"Advances to the next rowset in a multi-rowset statement handle","tag":"refentry","type":"Function","methodName":"nextRowset"},{"id":"pdostatement.rowcount","name":"PDOStatement::rowCount","description":"Returns the number of rows affected by the last SQL statement","tag":"refentry","type":"Function","methodName":"rowCount"},{"id":"pdostatement.setattribute","name":"PDOStatement::setAttribute","description":"Set a statement attribute","tag":"refentry","type":"Function","methodName":"setAttribute"},{"id":"pdostatement.setfetchmode","name":"PDOStatement::setFetchMode","description":"Set the default fetch mode for this statement","tag":"refentry","type":"Function","methodName":"setFetchMode"},{"id":"class.pdostatement","name":"PDOStatement","description":"The PDOStatement class","tag":"phpdoc:classref","type":"Class","methodName":"PDOStatement"},{"id":"class.pdorow","name":"PDORow","description":"The PDORow class","tag":"phpdoc:classref","type":"Class","methodName":"PDORow"},{"id":"class.pdoexception","name":"PDOException","description":"The PDOException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"PDOException"},{"id":"ref.pdo-cubrid.connection","name":"PDO_CUBRID DSN","description":"Connecting to CUBRID databases","tag":"refentry","type":"Function","methodName":"PDO_CUBRID DSN"},{"id":"pdo.cubrid-schema","name":"PDO::cubrid_schema","description":"Get the requested schema information","tag":"refentry","type":"Function","methodName":"cubrid_schema"},{"id":"ref.pdo-cubrid","name":"CUBRID PDO Driver","description":"CUBRID PDO Driver (PDO_CUBRID)","tag":"reference","type":"Extension","methodName":"CUBRID PDO Driver"},{"id":"ref.pdo-dblib.connection","name":"PDO_DBLIB DSN","description":"Connecting to Microsoft SQL Server and Sybase databases","tag":"refentry","type":"Function","methodName":"PDO_DBLIB DSN"},{"id":"ref.pdo-dblib","name":"MS SQL Server PDO Driver","description":"Microsoft SQL Server and Sybase PDO Driver (PDO_DBLIB)","tag":"reference","type":"Extension","methodName":"MS SQL Server PDO Driver"},{"id":"class.pdo-dblib","name":"Pdo\\Dblib","description":"The Pdo\\Dblib class","tag":"phpdoc:classref","type":"Class","methodName":"Pdo\\Dblib"},{"id":"ref.pdo-firebird.connection","name":"PDO_FIREBIRD DSN","description":"Connecting to Firebird databases","tag":"refentry","type":"Function","methodName":"PDO_FIREBIRD DSN"},{"id":"ref.pdo-firebird","name":"Firebird PDO Driver","description":"Firebird PDO Driver (PDO_FIREBIRD)","tag":"reference","type":"Extension","methodName":"Firebird PDO Driver"},{"id":"pdo-firebird.getapiversion","name":"Pdo\\Firebird::getApiVersion","description":"Get the API version","tag":"refentry","type":"Function","methodName":"getApiVersion"},{"id":"class.pdo-firebird","name":"Pdo\\Firebird","description":"The Pdo\\Firebird class","tag":"phpdoc:classref","type":"Class","methodName":"Pdo\\Firebird"},{"id":"ref.pdo-ibm.connection","name":"PDO_IBM DSN","description":"Connecting to IBM databases","tag":"refentry","type":"Function","methodName":"PDO_IBM DSN"},{"id":"ref.pdo-ibm","name":"IBM PDO Driver","description":"IBM PDO Driver (PDO_IBM)","tag":"reference","type":"Extension","methodName":"IBM PDO Driver"},{"id":"ref.pdo-informix.connection","name":"PDO_INFORMIX DSN","description":"Connecting to Informix databases","tag":"refentry","type":"Function","methodName":"PDO_INFORMIX DSN"},{"id":"ref.pdo-informix","name":"Informix PDO Driver","description":"Informix PDO Driver (PDO_INFORMIX)","tag":"reference","type":"Extension","methodName":"Informix PDO Driver"},{"id":"ref.pdo-mysql.connection","name":"PDO_MYSQL DSN","description":"Connecting to MySQL databases","tag":"refentry","type":"Function","methodName":"PDO_MYSQL DSN"},{"id":"ref.pdo-mysql","name":"MySQL PDO Driver","description":"MySQL PDO Driver (PDO_MYSQL)","tag":"reference","type":"Extension","methodName":"MySQL PDO Driver"},{"id":"pdo-mysql.getwarningcount","name":"Pdo\\Mysql::getWarningCount","description":"Returns the number of warnings from the last executed query","tag":"refentry","type":"Function","methodName":"getWarningCount"},{"id":"class.pdo-mysql","name":"Pdo\\Mysql","description":"The Pdo\\Mysql class","tag":"phpdoc:classref","type":"Class","methodName":"Pdo\\Mysql"},{"id":"ref.pdo-sqlsrv.connection","name":"PDO_SQLSRV DSN","description":"Connecting to MS SQL Server and SQL Azure databases","tag":"refentry","type":"Function","methodName":"PDO_SQLSRV DSN"},{"id":"ref.pdo-sqlsrv","name":"MS SQL Server PDO Driver","description":"Microsoft SQL Server PDO Driver (PDO_SQLSRV)","tag":"reference","type":"Extension","methodName":"MS SQL Server PDO Driver"},{"id":"ref.pdo-oci.connection","name":"PDO_OCI DSN","description":"Connecting to Oracle databases","tag":"refentry","type":"Function","methodName":"PDO_OCI DSN"},{"id":"ref.pdo-oci","name":"Oracle PDO Driver","description":"Oracle PDO Driver (PDO_OCI)","tag":"reference","type":"Extension","methodName":"Oracle PDO Driver"},{"id":"ref.pdo-odbc.connection","name":"PDO_ODBC DSN","description":"Connecting to ODBC or DB2 databases","tag":"refentry","type":"Function","methodName":"PDO_ODBC DSN"},{"id":"ref.pdo-odbc","name":"ODBC and DB2 PDO Driver","description":"ODBC and DB2 PDO Driver (PDO_ODBC)","tag":"reference","type":"Extension","methodName":"ODBC and DB2 PDO Driver"},{"id":"class.pdo-odbc","name":"Pdo\\Odbc","description":"The Pdo\\Odbc class","tag":"phpdoc:classref","type":"Class","methodName":"Pdo\\Odbc"},{"id":"ref.pdo-pgsql.connection","name":"PDO_PGSQL DSN","description":"Connecting to PostgreSQL databases","tag":"refentry","type":"Function","methodName":"PDO_PGSQL DSN"},{"id":"pdo.pgsqlcopyfromarray","name":"PDO::pgsqlCopyFromArray","description":"Alias of Pdo\\Pgsql::copyFromArray","tag":"refentry","type":"Function","methodName":"pgsqlCopyFromArray"},{"id":"pdo.pgsqlcopyfromfile","name":"PDO::pgsqlCopyFromFile","description":"Alias of Pdo\\Pgsql::copyFromFile","tag":"refentry","type":"Function","methodName":"pgsqlCopyFromFile"},{"id":"pdo.pgsqlcopytoarray","name":"PDO::pgsqlCopyToArray","description":"Alias of Pdo\\Pgsql::copyToArray","tag":"refentry","type":"Function","methodName":"pgsqlCopyToArray"},{"id":"pdo.pgsqlcopytofile","name":"PDO::pgsqlCopyToFile","description":"Alias of Pdo\\Pgsql::copyToFile","tag":"refentry","type":"Function","methodName":"pgsqlCopyToFile"},{"id":"pdo.pgsqlgetnotify","name":"PDO::pgsqlGetNotify","description":"Alias of Pdo\\Pgsql::getNotify","tag":"refentry","type":"Function","methodName":"pgsqlGetNotify"},{"id":"pdo.pgsqlgetpid","name":"PDO::pgsqlGetPid","description":"Alias of Pdo\\Pgsql::getPid","tag":"refentry","type":"Function","methodName":"pgsqlGetPid"},{"id":"pdo.pgsqllobcreate","name":"PDO::pgsqlLOBCreate","description":"Alias of Pdo\\Pgsql::lobCreate","tag":"refentry","type":"Function","methodName":"pgsqlLOBCreate"},{"id":"pdo.pgsqllobopen","name":"PDO::pgsqlLOBOpen","description":"Alias of Pdo\\Pgsql::lobOpen","tag":"refentry","type":"Function","methodName":"pgsqlLOBOpen"},{"id":"pdo.pgsqllobunlink","name":"PDO::pgsqlLOBUnlink","description":"Alias of Pdo\\Pgsql::lobUnlink","tag":"refentry","type":"Function","methodName":"pgsqlLOBUnlink"},{"id":"ref.pdo-pgsql","name":"PostgreSQL PDO Driver","description":"PostgreSQL PDO Driver (PDO_PGSQL)","tag":"reference","type":"Extension","methodName":"PostgreSQL PDO Driver"},{"id":"pdo-pgsql.copyfromarray","name":"Pdo\\Pgsql::copyFromArray","description":"Copy data from a PHP array into a table","tag":"refentry","type":"Function","methodName":"copyFromArray"},{"id":"pdo-pgsql.copyfromfile","name":"Pdo\\Pgsql::copyFromFile","description":"Copy data from file into table","tag":"refentry","type":"Function","methodName":"copyFromFile"},{"id":"pdo-pgsql.copytoarray","name":"Pdo\\Pgsql::copyToArray","description":"Copy data from database table into PHP array","tag":"refentry","type":"Function","methodName":"copyToArray"},{"id":"pdo-pgsql.copytofile","name":"Pdo\\Pgsql::copyToFile","description":"Copy data from table into file","tag":"refentry","type":"Function","methodName":"copyToFile"},{"id":"pdo-pgsql.escapeidentifier","name":"Pdo\\Pgsql::escapeIdentifier","description":"Escapes a string for use as an SQL identifier","tag":"refentry","type":"Function","methodName":"escapeIdentifier"},{"id":"pdo-pgsql.getnotify","name":"Pdo\\Pgsql::getNotify","description":"Get asynchronous notification","tag":"refentry","type":"Function","methodName":"getNotify"},{"id":"pdo-pgsql.getpid","name":"Pdo\\Pgsql::getPid","description":"Get the PID of the backend process handling this connection","tag":"refentry","type":"Function","methodName":"getPid"},{"id":"pdo-pgsql.lobcreate","name":"Pdo\\Pgsql::lobCreate","description":"Creates a new large object","tag":"refentry","type":"Function","methodName":"lobCreate"},{"id":"pdo-pgsql.lobopen","name":"Pdo\\Pgsql::lobOpen","description":"Opens an existing large object stream","tag":"refentry","type":"Function","methodName":"lobOpen"},{"id":"pdo-pgsql.lobunlink","name":"Pdo\\Pgsql::lobUnlink","description":"Deletes the large object","tag":"refentry","type":"Function","methodName":"lobUnlink"},{"id":"pdo-pgsql.setnoticecallback","name":"Pdo\\Pgsql::setNoticeCallback","description":"Set a callback to handle notice and warning messages generated by the backend","tag":"refentry","type":"Function","methodName":"setNoticeCallback"},{"id":"class.pdo-pgsql","name":"Pdo\\Pgsql","description":"The Pdo\\Pgsql class","tag":"phpdoc:classref","type":"Class","methodName":"Pdo\\Pgsql"},{"id":"ref.pdo-sqlite.connection","name":"PDO_SQLITE DSN","description":"Connecting to SQLite databases","tag":"refentry","type":"Function","methodName":"PDO_SQLITE DSN"},{"id":"pdo.sqlitecreateaggregate","name":"PDO::sqliteCreateAggregate","description":"Alias of Pdo\\Sqlite::createAggregate","tag":"refentry","type":"Function","methodName":"sqliteCreateAggregate"},{"id":"pdo.sqlitecreatecollation","name":"PDO::sqliteCreateCollation","description":"Alias of Pdo\\Sqlite::createCollation","tag":"refentry","type":"Function","methodName":"sqliteCreateCollation"},{"id":"pdo.sqlitecreatefunction","name":"PDO::sqliteCreateFunction","description":"Alias of Pdo\\Sqlite::createFunction","tag":"refentry","type":"Function","methodName":"sqliteCreateFunction"},{"id":"ref.pdo-sqlite","name":"SQLite PDO Driver","description":"SQLite PDO Driver (PDO_SQLITE)","tag":"reference","type":"Extension","methodName":"SQLite PDO Driver"},{"id":"pdo-sqlite.createaggregate","name":"Pdo\\Sqlite::createAggregate","description":"Registers an aggregating user-defined function for use in SQL statements","tag":"refentry","type":"Function","methodName":"createAggregate"},{"id":"pdo-sqlite.createcollation","name":"Pdo\\Sqlite::createCollation","description":"Registers a user-defined function for use as a collating function in SQL statements","tag":"refentry","type":"Function","methodName":"createCollation"},{"id":"pdo-sqlite.createfunction","name":"Pdo\\Sqlite::createFunction","description":"Registers a user-defined function for use in SQL statements","tag":"refentry","type":"Function","methodName":"createFunction"},{"id":"pdo-sqlite.loadextension","name":"Pdo\\Sqlite::loadExtension","description":"Description","tag":"refentry","type":"Function","methodName":"loadExtension"},{"id":"pdo-sqlite.openblob","name":"Pdo\\Sqlite::openBlob","description":"Description","tag":"refentry","type":"Function","methodName":"openBlob"},{"id":"class.pdo-sqlite","name":"Pdo\\Sqlite","description":"The Pdo\\Sqlite class","tag":"phpdoc:classref","type":"Class","methodName":"Pdo\\Sqlite"},{"id":"pdo.drivers","name":"PDO Drivers","description":"PHP Data Objects","tag":"part","type":"General","methodName":"PDO Drivers"},{"id":"book.pdo","name":"PDO","description":"PHP Data Objects","tag":"book","type":"Extension","methodName":"PDO"},{"id":"refs.database.abstract","name":"Abstraction Layers","description":"Database Extensions","tag":"set","type":"Extension","methodName":"Abstraction Layers"},{"id":"intro.cubrid","name":"Introduction","description":"CUBRID","tag":"preface","type":"General","methodName":"Introduction"},{"id":"cubrid.requirements","name":"Requirements","description":"CUBRID","tag":"section","type":"General","methodName":"Requirements"},{"id":"cubrid.installation","name":"Installation","description":"CUBRID","tag":"section","type":"General","methodName":"Installation"},{"id":"cubrid.configuration","name":"Runtime Configuration","description":"CUBRID","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"cubrid.resources","name":"Resource Types","description":"CUBRID","tag":"section","type":"General","methodName":"Resource Types"},{"id":"cubrid.setup","name":"Installing\/Configuring","description":"CUBRID","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"cubrid.constants","name":"Predefined Constants","description":"CUBRID","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"cubrid.examples","name":"Examples","description":"CUBRID","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.cubrid-bind","name":"cubrid_bind","description":"Bind variables to a prepared statement as parameters","tag":"refentry","type":"Function","methodName":"cubrid_bind"},{"id":"function.cubrid-close-prepare","name":"cubrid_close_prepare","description":"Close the request handle","tag":"refentry","type":"Function","methodName":"cubrid_close_prepare"},{"id":"function.cubrid-close-request","name":"cubrid_close_request","description":"Close the request handle","tag":"refentry","type":"Function","methodName":"cubrid_close_request"},{"id":"function.cubrid-col-get","name":"cubrid_col_get","description":"Get contents of collection type column using OID","tag":"refentry","type":"Function","methodName":"cubrid_col_get"},{"id":"function.cubrid-col-size","name":"cubrid_col_size","description":"Get the number of elements in collection type column using OID","tag":"refentry","type":"Function","methodName":"cubrid_col_size"},{"id":"function.cubrid-column-names","name":"cubrid_column_names","description":"Get the column names in result","tag":"refentry","type":"Function","methodName":"cubrid_column_names"},{"id":"function.cubrid-column-types","name":"cubrid_column_types","description":"Get column types in result","tag":"refentry","type":"Function","methodName":"cubrid_column_types"},{"id":"function.cubrid-commit","name":"cubrid_commit","description":"Commit a transaction","tag":"refentry","type":"Function","methodName":"cubrid_commit"},{"id":"function.cubrid-connect","name":"cubrid_connect","description":"Open a connection to a CUBRID Server","tag":"refentry","type":"Function","methodName":"cubrid_connect"},{"id":"function.cubrid-connect-with-url","name":"cubrid_connect_with_url","description":"Establish the environment for connecting to CUBRID server","tag":"refentry","type":"Function","methodName":"cubrid_connect_with_url"},{"id":"function.cubrid-current-oid","name":"cubrid_current_oid","description":"Get OID of the current cursor location","tag":"refentry","type":"Function","methodName":"cubrid_current_oid"},{"id":"function.cubrid-disconnect","name":"cubrid_disconnect","description":"Close a database connection","tag":"refentry","type":"Function","methodName":"cubrid_disconnect"},{"id":"function.cubrid-drop","name":"cubrid_drop","description":"Delete an instance using OID","tag":"refentry","type":"Function","methodName":"cubrid_drop"},{"id":"function.cubrid-error-code","name":"cubrid_error_code","description":"Get error code for the most recent function call","tag":"refentry","type":"Function","methodName":"cubrid_error_code"},{"id":"function.cubrid-error-code-facility","name":"cubrid_error_code_facility","description":"Get the facility code of error","tag":"refentry","type":"Function","methodName":"cubrid_error_code_facility"},{"id":"function.cubrid-error-msg","name":"cubrid_error_msg","description":"Get last error message for the most recent function call","tag":"refentry","type":"Function","methodName":"cubrid_error_msg"},{"id":"function.cubrid-execute","name":"cubrid_execute","description":"Execute a prepared SQL statement","tag":"refentry","type":"Function","methodName":"cubrid_execute"},{"id":"function.cubrid-fetch","name":"cubrid_fetch","description":"Fetch the next row from a result set","tag":"refentry","type":"Function","methodName":"cubrid_fetch"},{"id":"function.cubrid-free-result","name":"cubrid_free_result","description":"Free the memory occupied by the result data","tag":"refentry","type":"Function","methodName":"cubrid_free_result"},{"id":"function.cubrid-get","name":"cubrid_get","description":"Get a column using OID","tag":"refentry","type":"Function","methodName":"cubrid_get"},{"id":"function.cubrid-get-autocommit","name":"cubrid_get_autocommit","description":"Get auto-commit mode of the connection","tag":"refentry","type":"Function","methodName":"cubrid_get_autocommit"},{"id":"function.cubrid-get-charset","name":"cubrid_get_charset","description":"Return the current CUBRID connection charset","tag":"refentry","type":"Function","methodName":"cubrid_get_charset"},{"id":"function.cubrid-get-class-name","name":"cubrid_get_class_name","description":"Get the class name using OID","tag":"refentry","type":"Function","methodName":"cubrid_get_class_name"},{"id":"function.cubrid-get-client-info","name":"cubrid_get_client_info","description":"Return the client library version","tag":"refentry","type":"Function","methodName":"cubrid_get_client_info"},{"id":"function.cubrid-get-db-parameter","name":"cubrid_get_db_parameter","description":"Returns the CUBRID database parameters","tag":"refentry","type":"Function","methodName":"cubrid_get_db_parameter"},{"id":"function.cubrid-get-query-timeout","name":"cubrid_get_query_timeout","description":"Get the query timeout value of the request","tag":"refentry","type":"Function","methodName":"cubrid_get_query_timeout"},{"id":"function.cubrid-get-server-info","name":"cubrid_get_server_info","description":"Return the CUBRID server version","tag":"refentry","type":"Function","methodName":"cubrid_get_server_info"},{"id":"function.cubrid-insert-id","name":"cubrid_insert_id","description":"Return the ID generated for the last updated AUTO_INCREMENT column","tag":"refentry","type":"Function","methodName":"cubrid_insert_id"},{"id":"function.cubrid-is-instance","name":"cubrid_is_instance","description":"Check whether the instance pointed by OID exists","tag":"refentry","type":"Function","methodName":"cubrid_is_instance"},{"id":"function.cubrid-lob-close","name":"cubrid_lob_close","description":"Close BLOB\/CLOB data","tag":"refentry","type":"Function","methodName":"cubrid_lob_close"},{"id":"function.cubrid-lob-export","name":"cubrid_lob_export","description":"Export BLOB\/CLOB data to file","tag":"refentry","type":"Function","methodName":"cubrid_lob_export"},{"id":"function.cubrid-lob-get","name":"cubrid_lob_get","description":"Get BLOB\/CLOB data","tag":"refentry","type":"Function","methodName":"cubrid_lob_get"},{"id":"function.cubrid-lob-send","name":"cubrid_lob_send","description":"Read BLOB\/CLOB data and send straight to browser","tag":"refentry","type":"Function","methodName":"cubrid_lob_send"},{"id":"function.cubrid-lob-size","name":"cubrid_lob_size","description":"Get BLOB\/CLOB data size","tag":"refentry","type":"Function","methodName":"cubrid_lob_size"},{"id":"function.cubrid-lob2-bind","name":"cubrid_lob2_bind","description":"Bind a lob object or a string as a lob object to a prepared statement as parameters","tag":"refentry","type":"Function","methodName":"cubrid_lob2_bind"},{"id":"function.cubrid-lob2-close","name":"cubrid_lob2_close","description":"Close LOB object","tag":"refentry","type":"Function","methodName":"cubrid_lob2_close"},{"id":"function.cubrid-lob2-export","name":"cubrid_lob2_export","description":"Export the lob object to a file","tag":"refentry","type":"Function","methodName":"cubrid_lob2_export"},{"id":"function.cubrid-lob2-import","name":"cubrid_lob2_import","description":"Import BLOB\/CLOB data from a file","tag":"refentry","type":"Function","methodName":"cubrid_lob2_import"},{"id":"function.cubrid-lob2-new","name":"cubrid_lob2_new","description":"Create a lob object","tag":"refentry","type":"Function","methodName":"cubrid_lob2_new"},{"id":"function.cubrid-lob2-read","name":"cubrid_lob2_read","description":"Read from BLOB\/CLOB data","tag":"refentry","type":"Function","methodName":"cubrid_lob2_read"},{"id":"function.cubrid-lob2-seek","name":"cubrid_lob2_seek","description":"Move the cursor of a lob object","tag":"refentry","type":"Function","methodName":"cubrid_lob2_seek"},{"id":"function.cubrid-lob2-seek64","name":"cubrid_lob2_seek64","description":"Move the cursor of a lob object","tag":"refentry","type":"Function","methodName":"cubrid_lob2_seek64"},{"id":"function.cubrid-lob2-size","name":"cubrid_lob2_size","description":"Get a lob object's size","tag":"refentry","type":"Function","methodName":"cubrid_lob2_size"},{"id":"function.cubrid-lob2-size64","name":"cubrid_lob2_size64","description":"Get a lob object's size","tag":"refentry","type":"Function","methodName":"cubrid_lob2_size64"},{"id":"function.cubrid-lob2-tell","name":"cubrid_lob2_tell","description":"Tell the cursor position of the LOB object","tag":"refentry","type":"Function","methodName":"cubrid_lob2_tell"},{"id":"function.cubrid-lob2-tell64","name":"cubrid_lob2_tell64","description":"Tell the cursor position of the LOB object","tag":"refentry","type":"Function","methodName":"cubrid_lob2_tell64"},{"id":"function.cubrid-lob2-write","name":"cubrid_lob2_write","description":"Write to a lob object","tag":"refentry","type":"Function","methodName":"cubrid_lob2_write"},{"id":"function.cubrid-lock-read","name":"cubrid_lock_read","description":"Set a read lock on the given OID","tag":"refentry","type":"Function","methodName":"cubrid_lock_read"},{"id":"function.cubrid-lock-write","name":"cubrid_lock_write","description":"Set a write lock on the given OID","tag":"refentry","type":"Function","methodName":"cubrid_lock_write"},{"id":"function.cubrid-move-cursor","name":"cubrid_move_cursor","description":"Move the cursor in the result","tag":"refentry","type":"Function","methodName":"cubrid_move_cursor"},{"id":"function.cubrid-next-result","name":"cubrid_next_result","description":"Get result of next query when executing multiple SQL statements","tag":"refentry","type":"Function","methodName":"cubrid_next_result"},{"id":"function.cubrid-num-cols","name":"cubrid_num_cols","description":"Return the number of columns in the result set","tag":"refentry","type":"Function","methodName":"cubrid_num_cols"},{"id":"function.cubrid-num-rows","name":"cubrid_num_rows","description":"Get the number of rows in the result set","tag":"refentry","type":"Function","methodName":"cubrid_num_rows"},{"id":"function.cubrid-pconnect","name":"cubrid_pconnect","description":"Open a persistent connection to a CUBRID server","tag":"refentry","type":"Function","methodName":"cubrid_pconnect"},{"id":"function.cubrid-pconnect-with-url","name":"cubrid_pconnect_with_url","description":"Open a persistent connection to CUBRID server","tag":"refentry","type":"Function","methodName":"cubrid_pconnect_with_url"},{"id":"function.cubrid-prepare","name":"cubrid_prepare","description":"Prepare a SQL statement for execution","tag":"refentry","type":"Function","methodName":"cubrid_prepare"},{"id":"function.cubrid-put","name":"cubrid_put","description":"Update a column using OID","tag":"refentry","type":"Function","methodName":"cubrid_put"},{"id":"function.cubrid-rollback","name":"cubrid_rollback","description":"Roll back a transaction","tag":"refentry","type":"Function","methodName":"cubrid_rollback"},{"id":"function.cubrid-schema","name":"cubrid_schema","description":"Get the requested schema information","tag":"refentry","type":"Function","methodName":"cubrid_schema"},{"id":"function.cubrid-seq-drop","name":"cubrid_seq_drop","description":"Delete an element from sequence type column using OID","tag":"refentry","type":"Function","methodName":"cubrid_seq_drop"},{"id":"function.cubrid-seq-insert","name":"cubrid_seq_insert","description":"Insert an element to a sequence type column using OID","tag":"refentry","type":"Function","methodName":"cubrid_seq_insert"},{"id":"function.cubrid-seq-put","name":"cubrid_seq_put","description":"Update the element value of sequence type column using OID","tag":"refentry","type":"Function","methodName":"cubrid_seq_put"},{"id":"function.cubrid-set-add","name":"cubrid_set_add","description":"Insert a single element to set type column using OID","tag":"refentry","type":"Function","methodName":"cubrid_set_add"},{"id":"function.cubrid-set-autocommit","name":"cubrid_set_autocommit","description":"Set autocommit mode of the connection","tag":"refentry","type":"Function","methodName":"cubrid_set_autocommit"},{"id":"function.cubrid-set-db-parameter","name":"cubrid_set_db_parameter","description":"Sets the CUBRID database parameters","tag":"refentry","type":"Function","methodName":"cubrid_set_db_parameter"},{"id":"function.cubrid-set-drop","name":"cubrid_set_drop","description":"Delete an element from set type column using OID","tag":"refentry","type":"Function","methodName":"cubrid_set_drop"},{"id":"function.cubrid-set-query-timeout","name":"cubrid_set_query_timeout","description":"Set the timeout time of query execution","tag":"refentry","type":"Function","methodName":"cubrid_set_query_timeout"},{"id":"function.cubrid-version","name":"cubrid_version","description":"Get the CUBRID PHP module's version","tag":"refentry","type":"Function","methodName":"cubrid_version"},{"id":"ref.cubrid","name":"CUBRID Functions","description":"CUBRID","tag":"reference","type":"Extension","methodName":"CUBRID Functions"},{"id":"function.cubrid-affected-rows","name":"cubrid_affected_rows","description":"Return the number of rows affected by the last SQL statement","tag":"refentry","type":"Function","methodName":"cubrid_affected_rows"},{"id":"function.cubrid-client-encoding","name":"cubrid_client_encoding","description":"Return the current CUBRID connection charset","tag":"refentry","type":"Function","methodName":"cubrid_client_encoding"},{"id":"function.cubrid-close","name":"cubrid_close","description":"Close CUBRID connection","tag":"refentry","type":"Function","methodName":"cubrid_close"},{"id":"function.cubrid-data-seek","name":"cubrid_data_seek","description":"Move the internal row pointer of the CUBRID result","tag":"refentry","type":"Function","methodName":"cubrid_data_seek"},{"id":"function.cubrid-db-name","name":"cubrid_db_name","description":"Get db name from results of cubrid_list_dbs","tag":"refentry","type":"Function","methodName":"cubrid_db_name"},{"id":"function.cubrid-errno","name":"cubrid_errno","description":"Return the numerical value of the error message from previous CUBRID operation","tag":"refentry","type":"Function","methodName":"cubrid_errno"},{"id":"function.cubrid-error","name":"cubrid_error","description":"Get the error message","tag":"refentry","type":"Function","methodName":"cubrid_error"},{"id":"function.cubrid-fetch-array","name":"cubrid_fetch_array","description":"Fetch a result row as an associative array, a numeric array, or both","tag":"refentry","type":"Function","methodName":"cubrid_fetch_array"},{"id":"function.cubrid-fetch-assoc","name":"cubrid_fetch_assoc","description":"Return the associative array that corresponds to the fetched row","tag":"refentry","type":"Function","methodName":"cubrid_fetch_assoc"},{"id":"function.cubrid-fetch-field","name":"cubrid_fetch_field","description":"Get column information from a result and return as an object","tag":"refentry","type":"Function","methodName":"cubrid_fetch_field"},{"id":"function.cubrid-fetch-lengths","name":"cubrid_fetch_lengths","description":"Return an array with the lengths of the values of each field from the current row","tag":"refentry","type":"Function","methodName":"cubrid_fetch_lengths"},{"id":"function.cubrid-fetch-object","name":"cubrid_fetch_object","description":"Fetch the next row and return it as an object","tag":"refentry","type":"Function","methodName":"cubrid_fetch_object"},{"id":"function.cubrid-fetch-row","name":"cubrid_fetch_row","description":"Return a numerical array with the values of the current row","tag":"refentry","type":"Function","methodName":"cubrid_fetch_row"},{"id":"function.cubrid-field-flags","name":"cubrid_field_flags","description":"Return a string with the flags of the given field offset","tag":"refentry","type":"Function","methodName":"cubrid_field_flags"},{"id":"function.cubrid-field-len","name":"cubrid_field_len","description":"Get the maximum length of the specified field","tag":"refentry","type":"Function","methodName":"cubrid_field_len"},{"id":"function.cubrid-field-name","name":"cubrid_field_name","description":"Return the name of the specified field index","tag":"refentry","type":"Function","methodName":"cubrid_field_name"},{"id":"function.cubrid-field-seek","name":"cubrid_field_seek","description":"Move the result set cursor to the specified field offset","tag":"refentry","type":"Function","methodName":"cubrid_field_seek"},{"id":"function.cubrid-field-table","name":"cubrid_field_table","description":"Return the name of the table of the specified field","tag":"refentry","type":"Function","methodName":"cubrid_field_table"},{"id":"function.cubrid-field-type","name":"cubrid_field_type","description":"Return the type of the column corresponding to the given field offset","tag":"refentry","type":"Function","methodName":"cubrid_field_type"},{"id":"function.cubrid-list-dbs","name":"cubrid_list_dbs","description":"Return an array with the list of all existing CUBRID databases","tag":"refentry","type":"Function","methodName":"cubrid_list_dbs"},{"id":"function.cubrid-num-fields","name":"cubrid_num_fields","description":"Return the number of columns in the result set","tag":"refentry","type":"Function","methodName":"cubrid_num_fields"},{"id":"function.cubrid-ping","name":"cubrid_ping","description":"Ping a server connection or reconnect if there is no connection","tag":"refentry","type":"Function","methodName":"cubrid_ping"},{"id":"function.cubrid-query","name":"cubrid_query","description":"Send a CUBRID query","tag":"refentry","type":"Function","methodName":"cubrid_query"},{"id":"function.cubrid-real-escape-string","name":"cubrid_real_escape_string","description":"Escape special characters in a string for use in an SQL statement","tag":"refentry","type":"Function","methodName":"cubrid_real_escape_string"},{"id":"function.cubrid-result","name":"cubrid_result","description":"Return the value of a specific field in a specific row","tag":"refentry","type":"Function","methodName":"cubrid_result"},{"id":"function.cubrid-unbuffered-query","name":"cubrid_unbuffered_query","description":"Perform a query without fetching the results into memory","tag":"refentry","type":"Function","methodName":"cubrid_unbuffered_query"},{"id":"cubridmysql.cubrid","name":"CUBRID MySQL Compatibility Functions","description":"CUBRID","tag":"reference","type":"Extension","methodName":"CUBRID MySQL Compatibility Functions"},{"id":"function.cubrid-load-from-glo","name":"cubrid_load_from_glo","description":"Read data from a GLO instance and save it in a file","tag":"refentry","type":"Function","methodName":"cubrid_load_from_glo"},{"id":"function.cubrid-new-glo","name":"cubrid_new_glo","description":"Create a glo instance","tag":"refentry","type":"Function","methodName":"cubrid_new_glo"},{"id":"function.cubrid-save-to-glo","name":"cubrid_save_to_glo","description":"Save requested file in a GLO instance","tag":"refentry","type":"Function","methodName":"cubrid_save_to_glo"},{"id":"function.cubrid-send-glo","name":"cubrid_send_glo","description":"Read data from glo and send it to std output","tag":"refentry","type":"Function","methodName":"cubrid_send_glo"},{"id":"oldaliases.cubrid","name":"CUBRID Obsolete Aliases and Functions","description":"CUBRID","tag":"reference","type":"Extension","methodName":"CUBRID Obsolete Aliases and Functions"},{"id":"book.cubrid","name":"CUBRID","description":"CUBRID","tag":"book","type":"Extension","methodName":"CUBRID"},{"id":"intro.dbase","name":"Introduction","description":"dBase","tag":"preface","type":"General","methodName":"Introduction"},{"id":"dbase.installation","name":"Installation","description":"dBase","tag":"section","type":"General","methodName":"Installation"},{"id":"dbase.resources","name":"Resource Types","description":"dBase","tag":"section","type":"General","methodName":"Resource Types"},{"id":"dbase.setup","name":"Installing\/Configuring","description":"dBase","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"dbase.constants","name":"Predefined Constants","description":"dBase","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.dbase-add-record","name":"dbase_add_record","description":"Adds a record to a database","tag":"refentry","type":"Function","methodName":"dbase_add_record"},{"id":"function.dbase-close","name":"dbase_close","description":"Closes a database","tag":"refentry","type":"Function","methodName":"dbase_close"},{"id":"function.dbase-create","name":"dbase_create","description":"Creates a database","tag":"refentry","type":"Function","methodName":"dbase_create"},{"id":"function.dbase-delete-record","name":"dbase_delete_record","description":"Deletes a record from a database","tag":"refentry","type":"Function","methodName":"dbase_delete_record"},{"id":"function.dbase-get-header-info","name":"dbase_get_header_info","description":"Gets the header info of a database","tag":"refentry","type":"Function","methodName":"dbase_get_header_info"},{"id":"function.dbase-get-record","name":"dbase_get_record","description":"Gets a record from a database as an indexed array","tag":"refentry","type":"Function","methodName":"dbase_get_record"},{"id":"function.dbase-get-record-with-names","name":"dbase_get_record_with_names","description":"Gets a record from a database as an associative array","tag":"refentry","type":"Function","methodName":"dbase_get_record_with_names"},{"id":"function.dbase-numfields","name":"dbase_numfields","description":"Gets the number of fields of a database","tag":"refentry","type":"Function","methodName":"dbase_numfields"},{"id":"function.dbase-numrecords","name":"dbase_numrecords","description":"Gets the number of records in a database","tag":"refentry","type":"Function","methodName":"dbase_numrecords"},{"id":"function.dbase-open","name":"dbase_open","description":"Opens a database","tag":"refentry","type":"Function","methodName":"dbase_open"},{"id":"function.dbase-pack","name":"dbase_pack","description":"Packs a database","tag":"refentry","type":"Function","methodName":"dbase_pack"},{"id":"function.dbase-replace-record","name":"dbase_replace_record","description":"Replaces a record in a database","tag":"refentry","type":"Function","methodName":"dbase_replace_record"},{"id":"ref.dbase","name":"dBase Functions","description":"dBase","tag":"reference","type":"Extension","methodName":"dBase Functions"},{"id":"book.dbase","name":"dBase","description":"Vendor Specific Database Extensions","tag":"book","type":"Extension","methodName":"dBase"},{"id":"intro.ibase","name":"Introduction","description":"Firebird\/InterBase","tag":"preface","type":"General","methodName":"Introduction"},{"id":"ibase.installation","name":"Installation","description":"Firebird\/InterBase","tag":"section","type":"General","methodName":"Installation"},{"id":"ibase.configuration","name":"Runtime Configuration","description":"Firebird\/InterBase","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"ibase.setup","name":"Installing\/Configuring","description":"Firebird\/InterBase","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"ibase.constants","name":"Predefined Constants","description":"Firebird\/InterBase","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.fbird-add-user","name":"fbird_add_user","description":"Alias of ibase_add_user","tag":"refentry","type":"Function","methodName":"fbird_add_user"},{"id":"function.fbird-affected-rows","name":"fbird_affected_rows","description":"Alias of ibase_affected_rows","tag":"refentry","type":"Function","methodName":"fbird_affected_rows"},{"id":"function.fbird-backup","name":"fbird_backup","description":"Alias of ibase_backup","tag":"refentry","type":"Function","methodName":"fbird_backup"},{"id":"function.fbird-blob-add","name":"fbird_blob_add","description":"Alias of ibase_blob_add","tag":"refentry","type":"Function","methodName":"fbird_blob_add"},{"id":"function.fbird-blob-cancel","name":"fbird_blob_cancel","description":"Cancel creating blob","tag":"refentry","type":"Function","methodName":"fbird_blob_cancel"},{"id":"function.fbird-blob-close","name":"fbird_blob_close","description":"Alias of ibase_blob_close","tag":"refentry","type":"Function","methodName":"fbird_blob_close"},{"id":"function.fbird-blob-create","name":"fbird_blob_create","description":"Alias of ibase_blob_create","tag":"refentry","type":"Function","methodName":"fbird_blob_create"},{"id":"function.fbird-blob-echo","name":"fbird_blob_echo","description":"Alias of ibase_blob_echo","tag":"refentry","type":"Function","methodName":"fbird_blob_echo"},{"id":"function.fbird-blob-get","name":"fbird_blob_get","description":"Alias of ibase_blob_get","tag":"refentry","type":"Function","methodName":"fbird_blob_get"},{"id":"function.fbird-blob-import","name":"fbird_blob_import","description":"Alias of ibase_blob_import","tag":"refentry","type":"Function","methodName":"fbird_blob_import"},{"id":"function.fbird-blob-info","name":"fbird_blob_info","description":"Alias of ibase_blob_info","tag":"refentry","type":"Function","methodName":"fbird_blob_info"},{"id":"function.fbird-blob-open","name":"fbird_blob_open","description":"Alias of ibase_blob_open","tag":"refentry","type":"Function","methodName":"fbird_blob_open"},{"id":"function.fbird-close","name":"fbird_close","description":"Alias of ibase_close","tag":"refentry","type":"Function","methodName":"fbird_close"},{"id":"function.fbird-commit","name":"fbird_commit","description":"Alias of ibase_commit","tag":"refentry","type":"Function","methodName":"fbird_commit"},{"id":"function.fbird-commit-ret","name":"fbird_commit_ret","description":"Alias of ibase_commit_ret","tag":"refentry","type":"Function","methodName":"fbird_commit_ret"},{"id":"function.fbird-connect","name":"fbird_connect","description":"Alias of ibase_connect","tag":"refentry","type":"Function","methodName":"fbird_connect"},{"id":"function.fbird-db-info","name":"fbird_db_info","description":"Alias of ibase_db_info","tag":"refentry","type":"Function","methodName":"fbird_db_info"},{"id":"function.fbird-delete-user","name":"fbird_delete_user","description":"Alias of ibase_delete_user","tag":"refentry","type":"Function","methodName":"fbird_delete_user"},{"id":"function.fbird-drop-db","name":"fbird_drop_db","description":"Alias of ibase_drop_db","tag":"refentry","type":"Function","methodName":"fbird_drop_db"},{"id":"function.fbird-errcode","name":"fbird_errcode","description":"Alias of ibase_errcode","tag":"refentry","type":"Function","methodName":"fbird_errcode"},{"id":"function.fbird-errmsg","name":"fbird_errmsg","description":"Alias of ibase_errmsg","tag":"refentry","type":"Function","methodName":"fbird_errmsg"},{"id":"function.fbird-execute","name":"fbird_execute","description":"Alias of ibase_execute","tag":"refentry","type":"Function","methodName":"fbird_execute"},{"id":"function.fbird-fetch-assoc","name":"fbird_fetch_assoc","description":"Alias of ibase_fetch_assoc","tag":"refentry","type":"Function","methodName":"fbird_fetch_assoc"},{"id":"function.fbird-fetch-object","name":"fbird_fetch_object","description":"Alias of ibase_fetch_object","tag":"refentry","type":"Function","methodName":"fbird_fetch_object"},{"id":"function.fbird-fetch-row","name":"fbird_fetch_row","description":"Alias of ibase_fetch_row","tag":"refentry","type":"Function","methodName":"fbird_fetch_row"},{"id":"function.fbird-field-info","name":"fbird_field_info","description":"Alias of ibase_field_info","tag":"refentry","type":"Function","methodName":"fbird_field_info"},{"id":"function.fbird-free-event-handler","name":"fbird_free_event_handler","description":"Alias of ibase_free_event_handler","tag":"refentry","type":"Function","methodName":"fbird_free_event_handler"},{"id":"function.fbird-free-query","name":"fbird_free_query","description":"Alias of ibase_free_query","tag":"refentry","type":"Function","methodName":"fbird_free_query"},{"id":"function.fbird-free-result","name":"fbird_free_result","description":"Alias of ibase_free_result","tag":"refentry","type":"Function","methodName":"fbird_free_result"},{"id":"function.fbird-gen-id","name":"fbird_gen_id","description":"Alias of ibase_gen_id","tag":"refentry","type":"Function","methodName":"fbird_gen_id"},{"id":"function.fbird-maintain-db","name":"fbird_maintain_db","description":"Alias of ibase_maintain_db","tag":"refentry","type":"Function","methodName":"fbird_maintain_db"},{"id":"function.fbird-modify-user","name":"fbird_modify_user","description":"Alias of ibase_modify_user","tag":"refentry","type":"Function","methodName":"fbird_modify_user"},{"id":"function.fbird-name-result","name":"fbird_name_result","description":"Alias of ibase_name_result","tag":"refentry","type":"Function","methodName":"fbird_name_result"},{"id":"function.fbird-num-fields","name":"fbird_num_fields","description":"Alias of ibase_num_fields","tag":"refentry","type":"Function","methodName":"fbird_num_fields"},{"id":"function.fbird-num-params","name":"fbird_num_params","description":"Alias of ibase_num_params","tag":"refentry","type":"Function","methodName":"fbird_num_params"},{"id":"function.fbird-param-info","name":"fbird_param_info","description":"Alias of ibase_param_info","tag":"refentry","type":"Function","methodName":"fbird_param_info"},{"id":"function.fbird-pconnect","name":"fbird_pconnect","description":"Alias of ibase_pconnect","tag":"refentry","type":"Function","methodName":"fbird_pconnect"},{"id":"function.fbird-prepare","name":"fbird_prepare","description":"Alias of ibase_prepare","tag":"refentry","type":"Function","methodName":"fbird_prepare"},{"id":"function.fbird-query","name":"fbird_query","description":"Alias of ibase_query","tag":"refentry","type":"Function","methodName":"fbird_query"},{"id":"function.fbird-restore","name":"fbird_restore","description":"Alias of ibase_restore","tag":"refentry","type":"Function","methodName":"fbird_restore"},{"id":"function.fbird-rollback","name":"fbird_rollback","description":"Alias of ibase_rollback","tag":"refentry","type":"Function","methodName":"fbird_rollback"},{"id":"function.fbird-rollback-ret","name":"fbird_rollback_ret","description":"Alias of ibase_rollback_ret","tag":"refentry","type":"Function","methodName":"fbird_rollback_ret"},{"id":"function.fbird-server-info","name":"fbird_server_info","description":"Alias of ibase_server_info","tag":"refentry","type":"Function","methodName":"fbird_server_info"},{"id":"function.fbird-service-attach","name":"fbird_service_attach","description":"Alias of ibase_service_attach","tag":"refentry","type":"Function","methodName":"fbird_service_attach"},{"id":"function.fbird-service-detach","name":"fbird_service_detach","description":"Alias of ibase_service_detach","tag":"refentry","type":"Function","methodName":"fbird_service_detach"},{"id":"function.fbird-set-event-handler","name":"fbird_set_event_handler","description":"Alias of ibase_set_event_handler","tag":"refentry","type":"Function","methodName":"fbird_set_event_handler"},{"id":"function.fbird-trans","name":"fbird_trans","description":"Alias of ibase_trans","tag":"refentry","type":"Function","methodName":"fbird_trans"},{"id":"function.fbird-wait-event","name":"fbird_wait_event","description":"Alias of ibase_wait_event","tag":"refentry","type":"Function","methodName":"fbird_wait_event"},{"id":"function.ibase-add-user","name":"ibase_add_user","description":"Add a user to a security database","tag":"refentry","type":"Function","methodName":"ibase_add_user"},{"id":"function.ibase-affected-rows","name":"ibase_affected_rows","description":"Return the number of rows that were affected by the previous query","tag":"refentry","type":"Function","methodName":"ibase_affected_rows"},{"id":"function.ibase-backup","name":"ibase_backup","description":"Initiates a backup task in the service manager and returns immediately","tag":"refentry","type":"Function","methodName":"ibase_backup"},{"id":"function.ibase-blob-add","name":"ibase_blob_add","description":"Add data into a newly created blob","tag":"refentry","type":"Function","methodName":"ibase_blob_add"},{"id":"function.ibase-blob-cancel","name":"ibase_blob_cancel","description":"Cancel creating blob","tag":"refentry","type":"Function","methodName":"ibase_blob_cancel"},{"id":"function.ibase-blob-close","name":"ibase_blob_close","description":"Close blob","tag":"refentry","type":"Function","methodName":"ibase_blob_close"},{"id":"function.ibase-blob-create","name":"ibase_blob_create","description":"Create a new blob for adding data","tag":"refentry","type":"Function","methodName":"ibase_blob_create"},{"id":"function.ibase-blob-echo","name":"ibase_blob_echo","description":"Output blob contents to browser","tag":"refentry","type":"Function","methodName":"ibase_blob_echo"},{"id":"function.ibase-blob-get","name":"ibase_blob_get","description":"Get len bytes data from open blob","tag":"refentry","type":"Function","methodName":"ibase_blob_get"},{"id":"function.ibase-blob-import","name":"ibase_blob_import","description":"Create blob, copy file in it, and close it","tag":"refentry","type":"Function","methodName":"ibase_blob_import"},{"id":"function.ibase-blob-info","name":"ibase_blob_info","description":"Return blob length and other useful info","tag":"refentry","type":"Function","methodName":"ibase_blob_info"},{"id":"function.ibase-blob-open","name":"ibase_blob_open","description":"Open blob for retrieving data parts","tag":"refentry","type":"Function","methodName":"ibase_blob_open"},{"id":"function.ibase-close","name":"ibase_close","description":"Close a connection to an InterBase database","tag":"refentry","type":"Function","methodName":"ibase_close"},{"id":"function.ibase-commit","name":"ibase_commit","description":"Commit a transaction","tag":"refentry","type":"Function","methodName":"ibase_commit"},{"id":"function.ibase-commit-ret","name":"ibase_commit_ret","description":"Commit a transaction without closing it","tag":"refentry","type":"Function","methodName":"ibase_commit_ret"},{"id":"function.ibase-connect","name":"ibase_connect","description":"Open a connection to a database","tag":"refentry","type":"Function","methodName":"ibase_connect"},{"id":"function.ibase-db-info","name":"ibase_db_info","description":"Request statistics about a database","tag":"refentry","type":"Function","methodName":"ibase_db_info"},{"id":"function.ibase-delete-user","name":"ibase_delete_user","description":"Delete a user from a security database","tag":"refentry","type":"Function","methodName":"ibase_delete_user"},{"id":"function.ibase-drop-db","name":"ibase_drop_db","description":"Drops a database","tag":"refentry","type":"Function","methodName":"ibase_drop_db"},{"id":"function.ibase-errcode","name":"ibase_errcode","description":"Return an error code","tag":"refentry","type":"Function","methodName":"ibase_errcode"},{"id":"function.ibase-errmsg","name":"ibase_errmsg","description":"Return error messages","tag":"refentry","type":"Function","methodName":"ibase_errmsg"},{"id":"function.ibase-execute","name":"ibase_execute","description":"Execute a previously prepared query","tag":"refentry","type":"Function","methodName":"ibase_execute"},{"id":"function.ibase-fetch-assoc","name":"ibase_fetch_assoc","description":"Fetch a result row from a query as an associative array","tag":"refentry","type":"Function","methodName":"ibase_fetch_assoc"},{"id":"function.ibase-fetch-object","name":"ibase_fetch_object","description":"Get an object from a InterBase database","tag":"refentry","type":"Function","methodName":"ibase_fetch_object"},{"id":"function.ibase-fetch-row","name":"ibase_fetch_row","description":"Fetch a row from an InterBase database","tag":"refentry","type":"Function","methodName":"ibase_fetch_row"},{"id":"function.ibase-field-info","name":"ibase_field_info","description":"Get information about a field","tag":"refentry","type":"Function","methodName":"ibase_field_info"},{"id":"function.ibase-free-event-handler","name":"ibase_free_event_handler","description":"Cancels a registered event handler","tag":"refentry","type":"Function","methodName":"ibase_free_event_handler"},{"id":"function.ibase-free-query","name":"ibase_free_query","description":"Free memory allocated by a prepared query","tag":"refentry","type":"Function","methodName":"ibase_free_query"},{"id":"function.ibase-free-result","name":"ibase_free_result","description":"Free a result set","tag":"refentry","type":"Function","methodName":"ibase_free_result"},{"id":"function.ibase-gen-id","name":"ibase_gen_id","description":"Increments the named generator and returns its new value","tag":"refentry","type":"Function","methodName":"ibase_gen_id"},{"id":"function.ibase-maintain-db","name":"ibase_maintain_db","description":"Execute a maintenance command on the database server","tag":"refentry","type":"Function","methodName":"ibase_maintain_db"},{"id":"function.ibase-modify-user","name":"ibase_modify_user","description":"Modify a user to a security database","tag":"refentry","type":"Function","methodName":"ibase_modify_user"},{"id":"function.ibase-name-result","name":"ibase_name_result","description":"Assigns a name to a result set","tag":"refentry","type":"Function","methodName":"ibase_name_result"},{"id":"function.ibase-num-fields","name":"ibase_num_fields","description":"Get the number of fields in a result set","tag":"refentry","type":"Function","methodName":"ibase_num_fields"},{"id":"function.ibase-num-params","name":"ibase_num_params","description":"Return the number of parameters in a prepared query","tag":"refentry","type":"Function","methodName":"ibase_num_params"},{"id":"function.ibase-param-info","name":"ibase_param_info","description":"Return information about a parameter in a prepared query","tag":"refentry","type":"Function","methodName":"ibase_param_info"},{"id":"function.ibase-pconnect","name":"ibase_pconnect","description":"Open a persistent connection to an InterBase database","tag":"refentry","type":"Function","methodName":"ibase_pconnect"},{"id":"function.ibase-prepare","name":"ibase_prepare","description":"Prepare a query for later binding of parameter placeholders and execution","tag":"refentry","type":"Function","methodName":"ibase_prepare"},{"id":"function.ibase-query","name":"ibase_query","description":"Execute a query on an InterBase database","tag":"refentry","type":"Function","methodName":"ibase_query"},{"id":"function.ibase-restore","name":"ibase_restore","description":"Initiates a restore task in the service manager and returns immediately","tag":"refentry","type":"Function","methodName":"ibase_restore"},{"id":"function.ibase-rollback","name":"ibase_rollback","description":"Roll back a transaction","tag":"refentry","type":"Function","methodName":"ibase_rollback"},{"id":"function.ibase-rollback-ret","name":"ibase_rollback_ret","description":"Roll back a transaction without closing it","tag":"refentry","type":"Function","methodName":"ibase_rollback_ret"},{"id":"function.ibase-server-info","name":"ibase_server_info","description":"Request information about a database server","tag":"refentry","type":"Function","methodName":"ibase_server_info"},{"id":"function.ibase-service-attach","name":"ibase_service_attach","description":"Connect to the service manager","tag":"refentry","type":"Function","methodName":"ibase_service_attach"},{"id":"function.ibase-service-detach","name":"ibase_service_detach","description":"Disconnect from the service manager","tag":"refentry","type":"Function","methodName":"ibase_service_detach"},{"id":"function.ibase-set-event-handler","name":"ibase_set_event_handler","description":"Register a callback function to be called when events are posted","tag":"refentry","type":"Function","methodName":"ibase_set_event_handler"},{"id":"function.ibase-trans","name":"ibase_trans","description":"Begin a transaction","tag":"refentry","type":"Function","methodName":"ibase_trans"},{"id":"function.ibase-wait-event","name":"ibase_wait_event","description":"Wait for an event to be posted by the database","tag":"refentry","type":"Function","methodName":"ibase_wait_event"},{"id":"ref.ibase","name":"Firebird\/InterBase Functions","description":"Firebird\/InterBase","tag":"reference","type":"Extension","methodName":"Firebird\/InterBase Functions"},{"id":"book.ibase","name":"Firebird\/InterBase","description":"Vendor Specific Database Extensions","tag":"book","type":"Extension","methodName":"Firebird\/InterBase"},{"id":"intro.ibm-db2","name":"Introduction","description":"IBM DB2, Cloudscape and Apache Derby","tag":"preface","type":"General","methodName":"Introduction"},{"id":"ibm-db2.requirements","name":"Requirements","description":"IBM DB2, Cloudscape and Apache Derby","tag":"section","type":"General","methodName":"Requirements"},{"id":"ibm-db2.installation","name":"Installation","description":"IBM DB2, Cloudscape and Apache Derby","tag":"section","type":"General","methodName":"Installation"},{"id":"ibm-db2.configuration","name":"Runtime Configuration","description":"IBM DB2, Cloudscape and Apache Derby","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"ibm-db2.resources","name":"Resource Types","description":"IBM DB2, Cloudscape and Apache Derby","tag":"section","type":"General","methodName":"Resource Types"},{"id":"ibm-db2.setup","name":"Installing\/Configuring","description":"IBM DB2, Cloudscape and Apache Derby","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"ibm-db2.constants","name":"Predefined Constants","description":"IBM DB2, Cloudscape and Apache Derby","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.db2-autocommit","name":"db2_autocommit","description":"Returns or sets the AUTOCOMMIT state for a database connection","tag":"refentry","type":"Function","methodName":"db2_autocommit"},{"id":"function.db2-bind-param","name":"db2_bind_param","description":"Binds a PHP variable to an SQL statement parameter","tag":"refentry","type":"Function","methodName":"db2_bind_param"},{"id":"function.db2-client-info","name":"db2_client_info","description":"Returns an object with properties that describe the DB2 database client","tag":"refentry","type":"Function","methodName":"db2_client_info"},{"id":"function.db2-close","name":"db2_close","description":"Closes a database connection","tag":"refentry","type":"Function","methodName":"db2_close"},{"id":"function.db2-column-privileges","name":"db2_column_privileges","description":"Returns a result set listing the columns and associated privileges for a table","tag":"refentry","type":"Function","methodName":"db2_column_privileges"},{"id":"function.db2-columns","name":"db2_columns","description":"Returns a result set listing the columns and associated metadata for a table","tag":"refentry","type":"Function","methodName":"db2_columns"},{"id":"function.db2-commit","name":"db2_commit","description":"Commits a transaction","tag":"refentry","type":"Function","methodName":"db2_commit"},{"id":"function.db2-conn-error","name":"db2_conn_error","description":"Returns a string containing the SQLSTATE returned by the last connection attempt","tag":"refentry","type":"Function","methodName":"db2_conn_error"},{"id":"function.db2-conn-errormsg","name":"db2_conn_errormsg","description":"Returns the last connection error message and SQLCODE value","tag":"refentry","type":"Function","methodName":"db2_conn_errormsg"},{"id":"function.db2-connect","name":"db2_connect","description":"Returns a connection to a database","tag":"refentry","type":"Function","methodName":"db2_connect"},{"id":"function.db2-cursor-type","name":"db2_cursor_type","description":"Returns the cursor type used by a statement resource","tag":"refentry","type":"Function","methodName":"db2_cursor_type"},{"id":"function.db2-escape-string","name":"db2_escape_string","description":"Used to escape certain characters","tag":"refentry","type":"Function","methodName":"db2_escape_string"},{"id":"function.db2-exec","name":"db2_exec","description":"Executes an SQL statement directly","tag":"refentry","type":"Function","methodName":"db2_exec"},{"id":"function.db2-execute","name":"db2_execute","description":"Executes a prepared SQL statement","tag":"refentry","type":"Function","methodName":"db2_execute"},{"id":"function.db2-fetch-array","name":"db2_fetch_array","description":"Returns an array, indexed by column position, representing a row in a result set","tag":"refentry","type":"Function","methodName":"db2_fetch_array"},{"id":"function.db2-fetch-assoc","name":"db2_fetch_assoc","description":"Returns an array, indexed by column name, representing a row in a result set","tag":"refentry","type":"Function","methodName":"db2_fetch_assoc"},{"id":"function.db2-fetch-both","name":"db2_fetch_both","description":"Returns an array, indexed by both column name and position, representing a row in a result set","tag":"refentry","type":"Function","methodName":"db2_fetch_both"},{"id":"function.db2-fetch-object","name":"db2_fetch_object","description":"Returns an object with properties representing columns in the fetched row","tag":"refentry","type":"Function","methodName":"db2_fetch_object"},{"id":"function.db2-fetch-row","name":"db2_fetch_row","description":"Sets the result set pointer to the next row or requested row","tag":"refentry","type":"Function","methodName":"db2_fetch_row"},{"id":"function.db2-field-display-size","name":"db2_field_display_size","description":"Returns the maximum number of bytes required to display a column","tag":"refentry","type":"Function","methodName":"db2_field_display_size"},{"id":"function.db2-field-name","name":"db2_field_name","description":"Returns the name of the column in the result set","tag":"refentry","type":"Function","methodName":"db2_field_name"},{"id":"function.db2-field-num","name":"db2_field_num","description":"Returns the position of the named column in a result set","tag":"refentry","type":"Function","methodName":"db2_field_num"},{"id":"function.db2-field-precision","name":"db2_field_precision","description":"Returns the precision of the indicated column in a result set","tag":"refentry","type":"Function","methodName":"db2_field_precision"},{"id":"function.db2-field-scale","name":"db2_field_scale","description":"Returns the scale of the indicated column in a result set","tag":"refentry","type":"Function","methodName":"db2_field_scale"},{"id":"function.db2-field-type","name":"db2_field_type","description":"Returns the data type of the indicated column in a result set","tag":"refentry","type":"Function","methodName":"db2_field_type"},{"id":"function.db2-field-width","name":"db2_field_width","description":"Returns the width of the current value of the indicated column in a result set","tag":"refentry","type":"Function","methodName":"db2_field_width"},{"id":"function.db2-foreign-keys","name":"db2_foreign_keys","description":"Returns a result set listing the foreign keys for a table","tag":"refentry","type":"Function","methodName":"db2_foreign_keys"},{"id":"function.db2-free-result","name":"db2_free_result","description":"Frees resources associated with a result set","tag":"refentry","type":"Function","methodName":"db2_free_result"},{"id":"function.db2-free-stmt","name":"db2_free_stmt","description":"Frees resources associated with the indicated statement resource","tag":"refentry","type":"Function","methodName":"db2_free_stmt"},{"id":"function.db2-get-option","name":"db2_get_option","description":"Retrieves an option value for a statement resource or a connection resource","tag":"refentry","type":"Function","methodName":"db2_get_option"},{"id":"function.db2-last-insert-id","name":"db2_last_insert_id","description":"Returns the auto generated ID of the last insert query that successfully \n executed on this connection","tag":"refentry","type":"Function","methodName":"db2_last_insert_id"},{"id":"function.db2-lob-read","name":"db2_lob_read","description":"Gets a user defined size of LOB files with each invocation","tag":"refentry","type":"Function","methodName":"db2_lob_read"},{"id":"function.db2-next-result","name":"db2_next_result","description":"Requests the next result set from a stored procedure","tag":"refentry","type":"Function","methodName":"db2_next_result"},{"id":"function.db2-num-fields","name":"db2_num_fields","description":"Returns the number of fields contained in a result set","tag":"refentry","type":"Function","methodName":"db2_num_fields"},{"id":"function.db2-num-rows","name":"db2_num_rows","description":"Returns the number of rows affected by an SQL statement","tag":"refentry","type":"Function","methodName":"db2_num_rows"},{"id":"function.db2-pclose","name":"db2_pclose","description":"Closes a persistent database connection","tag":"refentry","type":"Function","methodName":"db2_pclose"},{"id":"function.db2-pconnect","name":"db2_pconnect","description":"Returns a persistent connection to a database","tag":"refentry","type":"Function","methodName":"db2_pconnect"},{"id":"function.db2-prepare","name":"db2_prepare","description":"Prepares an SQL statement to be executed","tag":"refentry","type":"Function","methodName":"db2_prepare"},{"id":"function.db2-primary-keys","name":"db2_primary_keys","description":"Returns a result set listing primary keys for a table","tag":"refentry","type":"Function","methodName":"db2_primary_keys"},{"id":"function.db2-procedure-columns","name":"db2_procedure_columns","description":"Returns a result set listing stored procedure parameters","tag":"refentry","type":"Function","methodName":"db2_procedure_columns"},{"id":"function.db2-procedures","name":"db2_procedures","description":"Returns a result set listing the stored procedures registered in a database","tag":"refentry","type":"Function","methodName":"db2_procedures"},{"id":"function.db2-result","name":"db2_result","description":"Returns a single column from a row in the result set","tag":"refentry","type":"Function","methodName":"db2_result"},{"id":"function.db2-rollback","name":"db2_rollback","description":"Rolls back a transaction","tag":"refentry","type":"Function","methodName":"db2_rollback"},{"id":"function.db2-server-info","name":"db2_server_info","description":"Returns an object with properties that describe the DB2 database server","tag":"refentry","type":"Function","methodName":"db2_server_info"},{"id":"function.db2-set-option","name":"db2_set_option","description":"Set options for connection or statement resources","tag":"refentry","type":"Function","methodName":"db2_set_option"},{"id":"function.db2-special-columns","name":"db2_special_columns","description":"Returns a result set listing the unique row identifier columns for a table","tag":"refentry","type":"Function","methodName":"db2_special_columns"},{"id":"function.db2-statistics","name":"db2_statistics","description":"Returns a result set listing the index and statistics for a table","tag":"refentry","type":"Function","methodName":"db2_statistics"},{"id":"function.db2-stmt-error","name":"db2_stmt_error","description":"Returns a string containing the SQLSTATE returned by an SQL statement","tag":"refentry","type":"Function","methodName":"db2_stmt_error"},{"id":"function.db2-stmt-errormsg","name":"db2_stmt_errormsg","description":"Returns a string containing the last SQL statement error message","tag":"refentry","type":"Function","methodName":"db2_stmt_errormsg"},{"id":"function.db2-table-privileges","name":"db2_table_privileges","description":"Returns a result set listing the tables and associated privileges in a database","tag":"refentry","type":"Function","methodName":"db2_table_privileges"},{"id":"function.db2-tables","name":"db2_tables","description":"Returns a result set listing the tables and associated metadata in a database","tag":"refentry","type":"Function","methodName":"db2_tables"},{"id":"ref.ibm-db2","name":"IBM DB2 Functions","description":"IBM DB2, Cloudscape and Apache Derby","tag":"reference","type":"Extension","methodName":"IBM DB2 Functions"},{"id":"book.ibm-db2","name":"IBM DB2","description":"IBM DB2, Cloudscape and Apache Derby","tag":"book","type":"Extension","methodName":"IBM DB2"},{"id":"mongodb.requirements","name":"Requirements","description":"MongoDB Extension","tag":"section","type":"General","methodName":"Requirements"},{"id":"mongodb.installation","name":"Installation","description":"MongoDB Extension","tag":"section","type":"General","methodName":"Installation"},{"id":"mongodb.configuration","name":"Runtime Configuration","description":"MongoDB Extension","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"mongodb.setup","name":"Installing\/Configuring","description":"MongoDB Extension","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"mongodb.constants","name":"Predefined Constants","description":"MongoDB Extension","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"mongodb.tutorial.library","name":"Using the PHP Library for MongoDB (PHPLIB)","description":"MongoDB Extension","tag":"section","type":"General","methodName":"Using the PHP Library for MongoDB (PHPLIB)"},{"id":"mongodb.tutorial.apm","name":"Application Performance Monitoring (APM)","description":"MongoDB Extension","tag":"section","type":"General","methodName":"Application Performance Monitoring (APM)"},{"id":"mongodb.tutorial","name":"Tutorials","description":"Tutorials","tag":"chapter","type":"General","methodName":"Tutorials"},{"id":"mongodb.overview","name":"Architecture","description":"Architecture Overview","tag":"section","type":"General","methodName":"Architecture"},{"id":"mongodb.connection-handling","name":"Connections","description":"Connection handling and persistence","tag":"section","type":"General","methodName":"Connections"},{"id":"mongodb.persistence","name":"Persisting Data","description":"Serialization and deserialization of PHP variables into MongoDB","tag":"section","type":"General","methodName":"Persisting Data"},{"id":"mongodb.architecture","name":"Driver Architecture and Internals","description":"Explains the driver architecture, and special features","tag":"chapter","type":"General","methodName":"Driver Architecture and Internals"},{"id":"mongodb.security.request_injection","name":"Request Injection Attacks","description":"MongoDB Extension","tag":"section","type":"General","methodName":"Request Injection Attacks"},{"id":"mongodb.security.script_injection","name":"Script Injection Attacks","description":"MongoDB Extension","tag":"section","type":"General","methodName":"Script Injection Attacks"},{"id":"mongodb.security","name":"Security","description":"MongoDB Extension","tag":"chapter","type":"General","methodName":"Security"},{"id":"mongodb-driver-manager.addsubscriber","name":"MongoDB\\Driver\\Manager::addSubscriber","description":"Registers a monitoring event subscriber with this Manager","tag":"refentry","type":"Function","methodName":"addSubscriber"},{"id":"mongodb-driver-manager.construct","name":"MongoDB\\Driver\\Manager::__construct","description":"Create new MongoDB Manager","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-driver-manager.createclientencryption","name":"MongoDB\\Driver\\Manager::createClientEncryption","description":"Create a new ClientEncryption object","tag":"refentry","type":"Function","methodName":"createClientEncryption"},{"id":"mongodb-driver-manager.executebulkwrite","name":"MongoDB\\Driver\\Manager::executeBulkWrite","description":"Execute one or more write operations","tag":"refentry","type":"Function","methodName":"executeBulkWrite"},{"id":"mongodb-driver-manager.executebulkwritecommand","name":"MongoDB\\Driver\\Manager::executeBulkWriteCommand","description":"Execute write operations using the bulkWrite command","tag":"refentry","type":"Function","methodName":"executeBulkWriteCommand"},{"id":"mongodb-driver-manager.executecommand","name":"MongoDB\\Driver\\Manager::executeCommand","description":"Execute a database command","tag":"refentry","type":"Function","methodName":"executeCommand"},{"id":"mongodb-driver-manager.executequery","name":"MongoDB\\Driver\\Manager::executeQuery","description":"Execute a database query","tag":"refentry","type":"Function","methodName":"executeQuery"},{"id":"mongodb-driver-manager.executereadcommand","name":"MongoDB\\Driver\\Manager::executeReadCommand","description":"Execute a database command that reads","tag":"refentry","type":"Function","methodName":"executeReadCommand"},{"id":"mongodb-driver-manager.executereadwritecommand","name":"MongoDB\\Driver\\Manager::executeReadWriteCommand","description":"Execute a database command that reads and writes","tag":"refentry","type":"Function","methodName":"executeReadWriteCommand"},{"id":"mongodb-driver-manager.executewritecommand","name":"MongoDB\\Driver\\Manager::executeWriteCommand","description":"Execute a database command that writes","tag":"refentry","type":"Function","methodName":"executeWriteCommand"},{"id":"mongodb-driver-manager.getencryptedfieldsmap","name":"MongoDB\\Driver\\Manager::getEncryptedFieldsMap","description":"Return the encryptedFieldsMap auto encryption option for the Manager","tag":"refentry","type":"Function","methodName":"getEncryptedFieldsMap"},{"id":"mongodb-driver-manager.getreadconcern","name":"MongoDB\\Driver\\Manager::getReadConcern","description":"Return the ReadConcern for the Manager","tag":"refentry","type":"Function","methodName":"getReadConcern"},{"id":"mongodb-driver-manager.getreadpreference","name":"MongoDB\\Driver\\Manager::getReadPreference","description":"Return the ReadPreference for the Manager","tag":"refentry","type":"Function","methodName":"getReadPreference"},{"id":"mongodb-driver-manager.getservers","name":"MongoDB\\Driver\\Manager::getServers","description":"Return the servers to which this manager is connected","tag":"refentry","type":"Function","methodName":"getServers"},{"id":"mongodb-driver-manager.getwriteconcern","name":"MongoDB\\Driver\\Manager::getWriteConcern","description":"Return the WriteConcern for the Manager","tag":"refentry","type":"Function","methodName":"getWriteConcern"},{"id":"mongodb-driver-manager.removesubscriber","name":"MongoDB\\Driver\\Manager::removeSubscriber","description":"Unregisters a monitoring event subscriber with this Manager","tag":"refentry","type":"Function","methodName":"removeSubscriber"},{"id":"mongodb-driver-manager.selectserver","name":"MongoDB\\Driver\\Manager::selectServer","description":"Select a server matching a read preference","tag":"refentry","type":"Function","methodName":"selectServer"},{"id":"mongodb-driver-manager.startsession","name":"MongoDB\\Driver\\Manager::startSession","description":"Start a new client session for use with this client","tag":"refentry","type":"Function","methodName":"startSession"},{"id":"class.mongodb-driver-manager","name":"MongoDB\\Driver\\Manager","description":"The MongoDB\\Driver\\Manager class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Manager"},{"id":"mongodb-driver-command.construct","name":"MongoDB\\Driver\\Command::__construct","description":"Create a new Command","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.mongodb-driver-command","name":"MongoDB\\Driver\\Command","description":"The MongoDB\\Driver\\Command class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Command"},{"id":"mongodb-driver-query.construct","name":"MongoDB\\Driver\\Query::__construct","description":"Create a new Query","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.mongodb-driver-query","name":"MongoDB\\Driver\\Query","description":"The MongoDB\\Driver\\Query class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Query"},{"id":"mongodb-driver-bulkwrite.construct","name":"MongoDB\\Driver\\BulkWrite::__construct","description":"Create a new BulkWrite","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-driver-bulkwrite.count","name":"MongoDB\\Driver\\BulkWrite::count","description":"Count number of write operations in the bulk","tag":"refentry","type":"Function","methodName":"count"},{"id":"mongodb-driver-bulkwrite.delete","name":"MongoDB\\Driver\\BulkWrite::delete","description":"Add a delete operation to the bulk","tag":"refentry","type":"Function","methodName":"delete"},{"id":"mongodb-driver-bulkwrite.insert","name":"MongoDB\\Driver\\BulkWrite::insert","description":"Add an insert operation to the bulk","tag":"refentry","type":"Function","methodName":"insert"},{"id":"mongodb-driver-bulkwrite.update","name":"MongoDB\\Driver\\BulkWrite::update","description":"Add an update operation to the bulk","tag":"refentry","type":"Function","methodName":"update"},{"id":"class.mongodb-driver-bulkwrite","name":"MongoDB\\Driver\\BulkWrite","description":"The MongoDB\\Driver\\BulkWrite class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\BulkWrite"},{"id":"mongodb-driver-bulkwritecommand.construct","name":"MongoDB\\Driver\\BulkWriteCommand::__construct","description":"Create a new BulkWriteCommand","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-driver-bulkwritecommand.count","name":"MongoDB\\Driver\\BulkWriteCommand::count","description":"Count number of write operations in the BulkWriteCommand","tag":"refentry","type":"Function","methodName":"count"},{"id":"mongodb-driver-bulkwritecommand.deletemany","name":"MongoDB\\Driver\\BulkWriteCommand::deleteMany","description":"Add a deleteMany operation","tag":"refentry","type":"Function","methodName":"deleteMany"},{"id":"mongodb-driver-bulkwritecommand.deleteone","name":"MongoDB\\Driver\\BulkWriteCommand::deleteOne","description":"Add a deleteOne operation","tag":"refentry","type":"Function","methodName":"deleteOne"},{"id":"mongodb-driver-bulkwritecommand.insertone","name":"MongoDB\\Driver\\BulkWriteCommand::insertOne","description":"Add an insertOne operation","tag":"refentry","type":"Function","methodName":"insertOne"},{"id":"mongodb-driver-bulkwritecommand.replaceone","name":"MongoDB\\Driver\\BulkWriteCommand::replaceOne","description":"Add a replaceOne operation","tag":"refentry","type":"Function","methodName":"replaceOne"},{"id":"mongodb-driver-bulkwritecommand.updatemany","name":"MongoDB\\Driver\\BulkWriteCommand::updateMany","description":"Add an updateMany operation","tag":"refentry","type":"Function","methodName":"updateMany"},{"id":"mongodb-driver-bulkwritecommand.updateone","name":"MongoDB\\Driver\\BulkWriteCommand::updateOne","description":"Add an updateOne operation","tag":"refentry","type":"Function","methodName":"updateOne"},{"id":"class.mongodb-driver-bulkwritecommand","name":"MongoDB\\Driver\\BulkWriteCommand","description":"The MongoDB\\Driver\\BulkWriteCommand class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\BulkWriteCommand"},{"id":"mongodb-driver-session.aborttransaction","name":"MongoDB\\Driver\\Session::abortTransaction","description":"Aborts a transaction","tag":"refentry","type":"Function","methodName":"abortTransaction"},{"id":"mongodb-driver-session.advanceclustertime","name":"MongoDB\\Driver\\Session::advanceClusterTime","description":"Advances the cluster time for this session","tag":"refentry","type":"Function","methodName":"advanceClusterTime"},{"id":"mongodb-driver-session.advanceoperationtime","name":"MongoDB\\Driver\\Session::advanceOperationTime","description":"Advances the operation time for this session","tag":"refentry","type":"Function","methodName":"advanceOperationTime"},{"id":"mongodb-driver-session.committransaction","name":"MongoDB\\Driver\\Session::commitTransaction","description":"Commits a transaction","tag":"refentry","type":"Function","methodName":"commitTransaction"},{"id":"mongodb-driver-session.construct","name":"MongoDB\\Driver\\Session::__construct","description":"Create a new Session (not used)","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-driver-session.endsession","name":"MongoDB\\Driver\\Session::endSession","description":"Terminates a session","tag":"refentry","type":"Function","methodName":"endSession"},{"id":"mongodb-driver-session.getclustertime","name":"MongoDB\\Driver\\Session::getClusterTime","description":"Returns the cluster time for this session","tag":"refentry","type":"Function","methodName":"getClusterTime"},{"id":"mongodb-driver-session.getlogicalsessionid","name":"MongoDB\\Driver\\Session::getLogicalSessionId","description":"Returns the logical session ID for this session","tag":"refentry","type":"Function","methodName":"getLogicalSessionId"},{"id":"mongodb-driver-session.getoperationtime","name":"MongoDB\\Driver\\Session::getOperationTime","description":"Returns the operation time for this session","tag":"refentry","type":"Function","methodName":"getOperationTime"},{"id":"mongodb-driver-session.getserver","name":"MongoDB\\Driver\\Session::getServer","description":"Returns the server to which this session is pinned","tag":"refentry","type":"Function","methodName":"getServer"},{"id":"mongodb-driver-session.gettransactionoptions","name":"MongoDB\\Driver\\Session::getTransactionOptions","description":"Returns options for the currently running transaction","tag":"refentry","type":"Function","methodName":"getTransactionOptions"},{"id":"mongodb-driver-session.gettransactionstate","name":"MongoDB\\Driver\\Session::getTransactionState","description":"Returns the current transaction state for this session","tag":"refentry","type":"Function","methodName":"getTransactionState"},{"id":"mongodb-driver-session.isdirty","name":"MongoDB\\Driver\\Session::isDirty","description":"Returns whether the session has been marked as dirty","tag":"refentry","type":"Function","methodName":"isDirty"},{"id":"mongodb-driver-session.isintransaction","name":"MongoDB\\Driver\\Session::isInTransaction","description":"Returns whether a multi-document transaction is in progress","tag":"refentry","type":"Function","methodName":"isInTransaction"},{"id":"mongodb-driver-session.starttransaction","name":"MongoDB\\Driver\\Session::startTransaction","description":"Starts a transaction","tag":"refentry","type":"Function","methodName":"startTransaction"},{"id":"class.mongodb-driver-session","name":"MongoDB\\Driver\\Session","description":"The MongoDB\\Driver\\Session class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Session"},{"id":"mongodb-driver-clientencryption.addkeyaltname","name":"MongoDB\\Driver\\ClientEncryption::addKeyAltName","description":"Adds an alternate name to a key document","tag":"refentry","type":"Function","methodName":"addKeyAltName"},{"id":"mongodb-driver-clientencryption.construct","name":"MongoDB\\Driver\\ClientEncryption::__construct","description":"Create a new ClientEncryption object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-driver-clientencryption.createdatakey","name":"MongoDB\\Driver\\ClientEncryption::createDataKey","description":"Creates a key document","tag":"refentry","type":"Function","methodName":"createDataKey"},{"id":"mongodb-driver-clientencryption.decrypt","name":"MongoDB\\Driver\\ClientEncryption::decrypt","description":"Decrypt a value","tag":"refentry","type":"Function","methodName":"decrypt"},{"id":"mongodb-driver-clientencryption.deletekey","name":"MongoDB\\Driver\\ClientEncryption::deleteKey","description":"Deletes a key document","tag":"refentry","type":"Function","methodName":"deleteKey"},{"id":"mongodb-driver-clientencryption.encrypt","name":"MongoDB\\Driver\\ClientEncryption::encrypt","description":"Encrypt a value","tag":"refentry","type":"Function","methodName":"encrypt"},{"id":"mongodb-driver-clientencryption.encryptexpression","name":"MongoDB\\Driver\\ClientEncryption::encryptExpression","description":"Encrypts a match or aggregate expression","tag":"refentry","type":"Function","methodName":"encryptExpression"},{"id":"mongodb-driver-clientencryption.getkey","name":"MongoDB\\Driver\\ClientEncryption::getKey","description":"Gets a key document","tag":"refentry","type":"Function","methodName":"getKey"},{"id":"mongodb-driver-clientencryption.getkeybyaltname","name":"MongoDB\\Driver\\ClientEncryption::getKeyByAltName","description":"Gets a key document by an alternate name","tag":"refentry","type":"Function","methodName":"getKeyByAltName"},{"id":"mongodb-driver-clientencryption.getkeys","name":"MongoDB\\Driver\\ClientEncryption::getKeys","description":"Gets all key documents","tag":"refentry","type":"Function","methodName":"getKeys"},{"id":"mongodb-driver-clientencryption.removekeyaltname","name":"MongoDB\\Driver\\ClientEncryption::removeKeyAltName","description":"Removes an alternate name from a key document","tag":"refentry","type":"Function","methodName":"removeKeyAltName"},{"id":"mongodb-driver-clientencryption.rewrapmanydatakey","name":"MongoDB\\Driver\\ClientEncryption::rewrapManyDataKey","description":"Rewraps data keys","tag":"refentry","type":"Function","methodName":"rewrapManyDataKey"},{"id":"class.mongodb-driver-clientencryption","name":"MongoDB\\Driver\\ClientEncryption","description":"The MongoDB\\Driver\\ClientEncryption class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\ClientEncryption"},{"id":"mongodb-driver-serverapi.bsonserialize","name":"MongoDB\\Driver\\ServerApi::bsonSerialize","description":"Returns an object for BSON serialization","tag":"refentry","type":"Function","methodName":"bsonSerialize"},{"id":"mongodb-driver-serverapi.construct","name":"MongoDB\\Driver\\ServerApi::__construct","description":"Create a new ServerApi instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.mongodb-driver-serverapi","name":"MongoDB\\Driver\\ServerApi","description":"The MongoDB\\Driver\\ServerApi class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\ServerApi"},{"id":"mongodb-driver-writeconcern.bsonserialize","name":"MongoDB\\Driver\\WriteConcern::bsonSerialize","description":"Returns an object for BSON serialization","tag":"refentry","type":"Function","methodName":"bsonSerialize"},{"id":"mongodb-driver-writeconcern.construct","name":"MongoDB\\Driver\\WriteConcern::__construct","description":"Create a new WriteConcern","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-driver-writeconcern.getjournal","name":"MongoDB\\Driver\\WriteConcern::getJournal","description":"Returns the WriteConcern's \"journal\" option","tag":"refentry","type":"Function","methodName":"getJournal"},{"id":"mongodb-driver-writeconcern.getw","name":"MongoDB\\Driver\\WriteConcern::getW","description":"Returns the WriteConcern's \"w\" option","tag":"refentry","type":"Function","methodName":"getW"},{"id":"mongodb-driver-writeconcern.getwtimeout","name":"MongoDB\\Driver\\WriteConcern::getWtimeout","description":"Returns the WriteConcern's \"wtimeout\" option","tag":"refentry","type":"Function","methodName":"getWtimeout"},{"id":"mongodb-driver-writeconcern.isdefault","name":"MongoDB\\Driver\\WriteConcern::isDefault","description":"Checks if this is the default write concern","tag":"refentry","type":"Function","methodName":"isDefault"},{"id":"class.mongodb-driver-writeconcern","name":"MongoDB\\Driver\\WriteConcern","description":"The MongoDB\\Driver\\WriteConcern class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\WriteConcern"},{"id":"mongodb-driver-readpreference.bsonserialize","name":"MongoDB\\Driver\\ReadPreference::bsonSerialize","description":"Returns an object for BSON serialization","tag":"refentry","type":"Function","methodName":"bsonSerialize"},{"id":"mongodb-driver-readpreference.construct","name":"MongoDB\\Driver\\ReadPreference::__construct","description":"Create a new ReadPreference","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-driver-readpreference.gethedge","name":"MongoDB\\Driver\\ReadPreference::getHedge","description":"Returns the ReadPreference's \"hedge\" option","tag":"refentry","type":"Function","methodName":"getHedge"},{"id":"mongodb-driver-readpreference.getmaxstalenessseconds","name":"MongoDB\\Driver\\ReadPreference::getMaxStalenessSeconds","description":"Returns the ReadPreference's \"maxStalenessSeconds\" option","tag":"refentry","type":"Function","methodName":"getMaxStalenessSeconds"},{"id":"mongodb-driver-readpreference.getmode","name":"MongoDB\\Driver\\ReadPreference::getMode","description":"Returns the ReadPreference's \"mode\" option","tag":"refentry","type":"Function","methodName":"getMode"},{"id":"mongodb-driver-readpreference.getmodestring","name":"MongoDB\\Driver\\ReadPreference::getModeString","description":"Returns the ReadPreference's \"mode\" option","tag":"refentry","type":"Function","methodName":"getModeString"},{"id":"mongodb-driver-readpreference.gettagsets","name":"MongoDB\\Driver\\ReadPreference::getTagSets","description":"Returns the ReadPreference's \"tagSets\" option","tag":"refentry","type":"Function","methodName":"getTagSets"},{"id":"class.mongodb-driver-readpreference","name":"MongoDB\\Driver\\ReadPreference","description":"The MongoDB\\Driver\\ReadPreference class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\ReadPreference"},{"id":"mongodb-driver-readconcern.bsonserialize","name":"MongoDB\\Driver\\ReadConcern::bsonSerialize","description":"Returns an object for BSON serialization","tag":"refentry","type":"Function","methodName":"bsonSerialize"},{"id":"mongodb-driver-readconcern.construct","name":"MongoDB\\Driver\\ReadConcern::__construct","description":"Create a new ReadConcern","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-driver-readconcern.getlevel","name":"MongoDB\\Driver\\ReadConcern::getLevel","description":"Returns the ReadConcern's \"level\" option","tag":"refentry","type":"Function","methodName":"getLevel"},{"id":"mongodb-driver-readconcern.isdefault","name":"MongoDB\\Driver\\ReadConcern::isDefault","description":"Checks if this is the default read concern","tag":"refentry","type":"Function","methodName":"isDefault"},{"id":"class.mongodb-driver-readconcern","name":"MongoDB\\Driver\\ReadConcern","description":"The MongoDB\\Driver\\ReadConcern class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\ReadConcern"},{"id":"mongodb-driver-cursor.construct","name":"MongoDB\\Driver\\Cursor::__construct","description":"Create a new Cursor (not used)","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-driver-cursor.current","name":"MongoDB\\Driver\\Cursor::current","description":"Returns the current element","tag":"refentry","type":"Function","methodName":"current"},{"id":"mongodb-driver-cursor.getid","name":"MongoDB\\Driver\\Cursor::getId","description":"Returns the ID for this cursor","tag":"refentry","type":"Function","methodName":"getId"},{"id":"mongodb-driver-cursor.getserver","name":"MongoDB\\Driver\\Cursor::getServer","description":"Returns the server associated with this cursor","tag":"refentry","type":"Function","methodName":"getServer"},{"id":"mongodb-driver-cursor.isdead","name":"MongoDB\\Driver\\Cursor::isDead","description":"Checks if the cursor is exhausted or may have additional results","tag":"refentry","type":"Function","methodName":"isDead"},{"id":"mongodb-driver-cursor.key","name":"MongoDB\\Driver\\Cursor::key","description":"Returns the current result's index within the cursor","tag":"refentry","type":"Function","methodName":"key"},{"id":"mongodb-driver-cursor.next","name":"MongoDB\\Driver\\Cursor::next","description":"Advances the cursor to the next result","tag":"refentry","type":"Function","methodName":"next"},{"id":"mongodb-driver-cursor.rewind","name":"MongoDB\\Driver\\Cursor::rewind","description":"Rewind the cursor to the first result","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"mongodb-driver-cursor.settypemap","name":"MongoDB\\Driver\\Cursor::setTypeMap","description":"Sets a type map to use for BSON unserialization","tag":"refentry","type":"Function","methodName":"setTypeMap"},{"id":"mongodb-driver-cursor.toarray","name":"MongoDB\\Driver\\Cursor::toArray","description":"Returns an array containing all results for this cursor","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"mongodb-driver-cursor.valid","name":"MongoDB\\Driver\\Cursor::valid","description":"Checks if the current position in the cursor is valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.mongodb-driver-cursor","name":"MongoDB\\Driver\\Cursor","description":"The MongoDB\\Driver\\Cursor class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Cursor"},{"id":"mongodb-driver-cursorid.construct","name":"MongoDB\\Driver\\CursorId::__construct","description":"Create a new CursorId (not used)","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-driver-cursorid.tostring","name":"MongoDB\\Driver\\CursorId::__toString","description":"String representation of the cursor ID","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-driver-cursorid","name":"MongoDB\\Driver\\CursorId","description":"The MongoDB\\Driver\\CursorId class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\CursorId"},{"id":"mongodb-driver-cursorinterface.getid","name":"MongoDB\\Driver\\CursorInterface::getId","description":"Returns the ID for this cursor","tag":"refentry","type":"Function","methodName":"getId"},{"id":"mongodb-driver-cursorinterface.getserver","name":"MongoDB\\Driver\\CursorInterface::getServer","description":"Returns the server associated with this cursor","tag":"refentry","type":"Function","methodName":"getServer"},{"id":"mongodb-driver-cursorinterface.isdead","name":"MongoDB\\Driver\\CursorInterface::isDead","description":"Checks if the cursor may have additional results","tag":"refentry","type":"Function","methodName":"isDead"},{"id":"mongodb-driver-cursorinterface.settypemap","name":"MongoDB\\Driver\\CursorInterface::setTypeMap","description":"Sets a type map to use for BSON unserialization","tag":"refentry","type":"Function","methodName":"setTypeMap"},{"id":"mongodb-driver-cursorinterface.toarray","name":"MongoDB\\Driver\\CursorInterface::toArray","description":"Returns an array containing all results for this cursor","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"class.mongodb-driver-cursorinterface","name":"MongoDB\\Driver\\CursorInterface","description":"The MongoDB\\Driver\\CursorInterface interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\CursorInterface"},{"id":"mongodb-driver-server.construct","name":"MongoDB\\Driver\\Server::__construct","description":"Create a new Server (not used)","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-driver-server.executebulkwrite","name":"MongoDB\\Driver\\Server::executeBulkWrite","description":"Execute one or more write operations on this server","tag":"refentry","type":"Function","methodName":"executeBulkWrite"},{"id":"mongodb-driver-server.executebulkwritecommand","name":"MongoDB\\Driver\\Server::executeBulkWriteCommand","description":"Execute write operations on this server using the bulkWrite command","tag":"refentry","type":"Function","methodName":"executeBulkWriteCommand"},{"id":"mongodb-driver-server.executecommand","name":"MongoDB\\Driver\\Server::executeCommand","description":"Execute a database command on this server","tag":"refentry","type":"Function","methodName":"executeCommand"},{"id":"mongodb-driver-server.executequery","name":"MongoDB\\Driver\\Server::executeQuery","description":"Execute a database query on this server","tag":"refentry","type":"Function","methodName":"executeQuery"},{"id":"mongodb-driver-server.executereadcommand","name":"MongoDB\\Driver\\Server::executeReadCommand","description":"Execute a database command that reads on this server","tag":"refentry","type":"Function","methodName":"executeReadCommand"},{"id":"mongodb-driver-server.executereadwritecommand","name":"MongoDB\\Driver\\Server::executeReadWriteCommand","description":"Execute a database command that reads and writes on this server","tag":"refentry","type":"Function","methodName":"executeReadWriteCommand"},{"id":"mongodb-driver-server.executewritecommand","name":"MongoDB\\Driver\\Server::executeWriteCommand","description":"Execute a database command that writes on this server","tag":"refentry","type":"Function","methodName":"executeWriteCommand"},{"id":"mongodb-driver-server.gethost","name":"MongoDB\\Driver\\Server::getHost","description":"Returns the hostname of this server","tag":"refentry","type":"Function","methodName":"getHost"},{"id":"mongodb-driver-server.getinfo","name":"MongoDB\\Driver\\Server::getInfo","description":"Returns an array of information describing this server","tag":"refentry","type":"Function","methodName":"getInfo"},{"id":"mongodb-driver-server.getlatency","name":"MongoDB\\Driver\\Server::getLatency","description":"Returns the latency of this server in milliseconds","tag":"refentry","type":"Function","methodName":"getLatency"},{"id":"mongodb-driver-server.getport","name":"MongoDB\\Driver\\Server::getPort","description":"Returns the port on which this server is listening","tag":"refentry","type":"Function","methodName":"getPort"},{"id":"mongodb-driver-server.getserverdescription","name":"MongoDB\\Driver\\Server::getServerDescription","description":"Returns a ServerDescription for this server","tag":"refentry","type":"Function","methodName":"getServerDescription"},{"id":"mongodb-driver-server.gettags","name":"MongoDB\\Driver\\Server::getTags","description":"Returns an array of tags describing this server in a replica set","tag":"refentry","type":"Function","methodName":"getTags"},{"id":"mongodb-driver-server.gettype","name":"MongoDB\\Driver\\Server::getType","description":"Returns an integer denoting the type of this server","tag":"refentry","type":"Function","methodName":"getType"},{"id":"mongodb-driver-server.isarbiter","name":"MongoDB\\Driver\\Server::isArbiter","description":"Checks if this server is an arbiter member of a replica set","tag":"refentry","type":"Function","methodName":"isArbiter"},{"id":"mongodb-driver-server.ishidden","name":"MongoDB\\Driver\\Server::isHidden","description":"Checks if this server is a hidden member of a replica set","tag":"refentry","type":"Function","methodName":"isHidden"},{"id":"mongodb-driver-server.ispassive","name":"MongoDB\\Driver\\Server::isPassive","description":"Checks if this server is a passive member of a replica set","tag":"refentry","type":"Function","methodName":"isPassive"},{"id":"mongodb-driver-server.isprimary","name":"MongoDB\\Driver\\Server::isPrimary","description":"Checks if this server is a primary member of a replica set","tag":"refentry","type":"Function","methodName":"isPrimary"},{"id":"mongodb-driver-server.issecondary","name":"MongoDB\\Driver\\Server::isSecondary","description":"Checks if this server is a secondary member of a replica set","tag":"refentry","type":"Function","methodName":"isSecondary"},{"id":"class.mongodb-driver-server","name":"MongoDB\\Driver\\Server","description":"The MongoDB\\Driver\\Server class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Server"},{"id":"mongodb-driver-serverdescription.gethelloresponse","name":"MongoDB\\Driver\\ServerDescription::getHelloResponse","description":"Returns the server's most recent \"hello\" response","tag":"refentry","type":"Function","methodName":"getHelloResponse"},{"id":"mongodb-driver-serverdescription.gethost","name":"MongoDB\\Driver\\ServerDescription::getHost","description":"Returns the hostname of this server","tag":"refentry","type":"Function","methodName":"getHost"},{"id":"mongodb-driver-serverdescription.getlastupdatetime","name":"MongoDB\\Driver\\ServerDescription::getLastUpdateTime","description":"Returns the server's last update time in microseconds","tag":"refentry","type":"Function","methodName":"getLastUpdateTime"},{"id":"mongodb-driver-serverdescription.getport","name":"MongoDB\\Driver\\ServerDescription::getPort","description":"Returns the port on which this server is listening","tag":"refentry","type":"Function","methodName":"getPort"},{"id":"mongodb-driver-serverdescription.getroundtriptime","name":"MongoDB\\Driver\\ServerDescription::getRoundTripTime","description":"Returns the server's round trip time in milliseconds","tag":"refentry","type":"Function","methodName":"getRoundTripTime"},{"id":"mongodb-driver-serverdescription.gettype","name":"MongoDB\\Driver\\ServerDescription::getType","description":"Returns a string denoting the type of this server","tag":"refentry","type":"Function","methodName":"getType"},{"id":"class.mongodb-driver-serverdescription","name":"MongoDB\\Driver\\ServerDescription","description":"The MongoDB\\Driver\\ServerDescription class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\ServerDescription"},{"id":"mongodb-driver-topologydescription.getservers","name":"MongoDB\\Driver\\TopologyDescription::getServers","description":"Returns the servers in the topology","tag":"refentry","type":"Function","methodName":"getServers"},{"id":"mongodb-driver-topologydescription.gettype","name":"MongoDB\\Driver\\TopologyDescription::getType","description":"Returns a string denoting the type of this topology","tag":"refentry","type":"Function","methodName":"getType"},{"id":"mongodb-driver-topologydescription.hasreadableserver","name":"MongoDB\\Driver\\TopologyDescription::hasReadableServer","description":"Returns whether the topology has a readable server","tag":"refentry","type":"Function","methodName":"hasReadableServer"},{"id":"mongodb-driver-topologydescription.haswritableserver","name":"MongoDB\\Driver\\TopologyDescription::hasWritableServer","description":"Returns whether the topology has a writable server","tag":"refentry","type":"Function","methodName":"hasWritableServer"},{"id":"class.mongodb-driver-topologydescription","name":"MongoDB\\Driver\\TopologyDescription","description":"The MongoDB\\Driver\\TopologyDescription class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\TopologyDescription"},{"id":"mongodb-driver-writeconcernerror.getcode","name":"MongoDB\\Driver\\WriteConcernError::getCode","description":"Returns the WriteConcernError's error code","tag":"refentry","type":"Function","methodName":"getCode"},{"id":"mongodb-driver-writeconcernerror.getinfo","name":"MongoDB\\Driver\\WriteConcernError::getInfo","description":"Returns metadata document for the WriteConcernError","tag":"refentry","type":"Function","methodName":"getInfo"},{"id":"mongodb-driver-writeconcernerror.getmessage","name":"MongoDB\\Driver\\WriteConcernError::getMessage","description":"Returns the WriteConcernError's error message","tag":"refentry","type":"Function","methodName":"getMessage"},{"id":"class.mongodb-driver-writeconcernerror","name":"MongoDB\\Driver\\WriteConcernError","description":"The MongoDB\\Driver\\WriteConcernError class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\WriteConcernError"},{"id":"mongodb-driver-writeerror.getcode","name":"MongoDB\\Driver\\WriteError::getCode","description":"Returns the WriteError's error code","tag":"refentry","type":"Function","methodName":"getCode"},{"id":"mongodb-driver-writeerror.getindex","name":"MongoDB\\Driver\\WriteError::getIndex","description":"Returns the index of the write operation corresponding to this WriteError","tag":"refentry","type":"Function","methodName":"getIndex"},{"id":"mongodb-driver-writeerror.getinfo","name":"MongoDB\\Driver\\WriteError::getInfo","description":"Returns metadata document for the WriteError","tag":"refentry","type":"Function","methodName":"getInfo"},{"id":"mongodb-driver-writeerror.getmessage","name":"MongoDB\\Driver\\WriteError::getMessage","description":"Returns the WriteError's error message","tag":"refentry","type":"Function","methodName":"getMessage"},{"id":"class.mongodb-driver-writeerror","name":"MongoDB\\Driver\\WriteError","description":"The MongoDB\\Driver\\WriteError class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\WriteError"},{"id":"mongodb-driver-writeresult.getdeletedcount","name":"MongoDB\\Driver\\WriteResult::getDeletedCount","description":"Returns the number of documents deleted","tag":"refentry","type":"Function","methodName":"getDeletedCount"},{"id":"mongodb-driver-writeresult.getinsertedcount","name":"MongoDB\\Driver\\WriteResult::getInsertedCount","description":"Returns the number of documents inserted (excluding upserts)","tag":"refentry","type":"Function","methodName":"getInsertedCount"},{"id":"mongodb-driver-writeresult.getmatchedcount","name":"MongoDB\\Driver\\WriteResult::getMatchedCount","description":"Returns the number of documents selected for update","tag":"refentry","type":"Function","methodName":"getMatchedCount"},{"id":"mongodb-driver-writeresult.getmodifiedcount","name":"MongoDB\\Driver\\WriteResult::getModifiedCount","description":"Returns the number of existing documents updated","tag":"refentry","type":"Function","methodName":"getModifiedCount"},{"id":"mongodb-driver-writeresult.getserver","name":"MongoDB\\Driver\\WriteResult::getServer","description":"Returns the server associated with this write result","tag":"refentry","type":"Function","methodName":"getServer"},{"id":"mongodb-driver-writeresult.getupsertedcount","name":"MongoDB\\Driver\\WriteResult::getUpsertedCount","description":"Returns the number of documents inserted by an upsert","tag":"refentry","type":"Function","methodName":"getUpsertedCount"},{"id":"mongodb-driver-writeresult.getupsertedids","name":"MongoDB\\Driver\\WriteResult::getUpsertedIds","description":"Returns an array of identifiers for upserted documents","tag":"refentry","type":"Function","methodName":"getUpsertedIds"},{"id":"mongodb-driver-writeresult.getwriteconcernerror","name":"MongoDB\\Driver\\WriteResult::getWriteConcernError","description":"Returns any write concern error that occurred","tag":"refentry","type":"Function","methodName":"getWriteConcernError"},{"id":"mongodb-driver-writeresult.getwriteerrors","name":"MongoDB\\Driver\\WriteResult::getWriteErrors","description":"Returns any write errors that occurred","tag":"refentry","type":"Function","methodName":"getWriteErrors"},{"id":"mongodb-driver-writeresult.isacknowledged","name":"MongoDB\\Driver\\WriteResult::isAcknowledged","description":"Returns whether the write was acknowledged","tag":"refentry","type":"Function","methodName":"isAcknowledged"},{"id":"class.mongodb-driver-writeresult","name":"MongoDB\\Driver\\WriteResult","description":"The MongoDB\\Driver\\WriteResult class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\WriteResult"},{"id":"mongodb-driver-bulkwritecommandresult.getdeletedcount","name":"MongoDB\\Driver\\BulkWriteCommandResult::getDeletedCount","description":"Returns the number of documents deleted","tag":"refentry","type":"Function","methodName":"getDeletedCount"},{"id":"mongodb-driver-bulkwritecommandresult.getdeleteresults","name":"MongoDB\\Driver\\BulkWriteCommandResult::getDeleteResults","description":"Returns verbose results for successful deletes","tag":"refentry","type":"Function","methodName":"getDeleteResults"},{"id":"mongodb-driver-bulkwritecommandresult.getinsertedcount","name":"MongoDB\\Driver\\BulkWriteCommandResult::getInsertedCount","description":"Returns the number of documents inserted","tag":"refentry","type":"Function","methodName":"getInsertedCount"},{"id":"mongodb-driver-bulkwritecommandresult.getinsertresults","name":"MongoDB\\Driver\\BulkWriteCommandResult::getInsertResults","description":"Returns verbose results for successful inserts","tag":"refentry","type":"Function","methodName":"getInsertResults"},{"id":"mongodb-driver-bulkwritecommandresult.getmatchedcount","name":"MongoDB\\Driver\\BulkWriteCommandResult::getMatchedCount","description":"Returns the number of documents selected for update","tag":"refentry","type":"Function","methodName":"getMatchedCount"},{"id":"mongodb-driver-bulkwritecommandresult.getmodifiedcount","name":"MongoDB\\Driver\\BulkWriteCommandResult::getModifiedCount","description":"Returns the number of existing documents updated","tag":"refentry","type":"Function","methodName":"getModifiedCount"},{"id":"mongodb-driver-bulkwritecommandresult.getupdateresults","name":"MongoDB\\Driver\\BulkWriteCommandResult::getUpdateResults","description":"Returns verbose results for successful updates","tag":"refentry","type":"Function","methodName":"getUpdateResults"},{"id":"mongodb-driver-bulkwritecommandresult.getupsertedcount","name":"MongoDB\\Driver\\BulkWriteCommandResult::getUpsertedCount","description":"Returns the number of documents upserted","tag":"refentry","type":"Function","methodName":"getUpsertedCount"},{"id":"mongodb-driver-bulkwritecommandresult.isacknowledged","name":"MongoDB\\Driver\\BulkWriteCommandResult::isAcknowledged","description":"Returns whether the write was acknowledged","tag":"refentry","type":"Function","methodName":"isAcknowledged"},{"id":"class.mongodb-driver-bulkwritecommandresult","name":"MongoDB\\Driver\\BulkWriteCommandResult","description":"The MongoDB\\Driver\\BulkWriteCommandResult class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\BulkWriteCommandResult"},{"id":"mongodb.mongodb","name":"MongoDB\\Driver","description":"MongoDB Extension Classes","tag":"part","type":"General","methodName":"MongoDB\\Driver"},{"id":"function.mongodb.bson-fromjson","name":"MongoDB\\BSON\\fromJSON","description":"Returns the BSON representation of a JSON value","tag":"refentry","type":"Function","methodName":"MongoDB\\BSON\\fromJSON"},{"id":"function.mongodb.bson-fromphp","name":"MongoDB\\BSON\\fromPHP","description":"Returns the BSON representation of a PHP value","tag":"refentry","type":"Function","methodName":"MongoDB\\BSON\\fromPHP"},{"id":"function.mongodb.bson-tocanonicalextendedjson","name":"MongoDB\\BSON\\toCanonicalExtendedJSON","description":"Returns the Canonical Extended JSON representation of a BSON value","tag":"refentry","type":"Function","methodName":"MongoDB\\BSON\\toCanonicalExtendedJSON"},{"id":"function.mongodb.bson-tojson","name":"MongoDB\\BSON\\toJSON","description":"Returns the Legacy Extended JSON representation of a BSON value","tag":"refentry","type":"Function","methodName":"MongoDB\\BSON\\toJSON"},{"id":"function.mongodb.bson-tophp","name":"MongoDB\\BSON\\toPHP","description":"Returns the PHP representation of a BSON value","tag":"refentry","type":"Function","methodName":"MongoDB\\BSON\\toPHP"},{"id":"function.mongodb.bson-torelaxedextendedjson","name":"MongoDB\\BSON\\toRelaxedExtendedJSON","description":"Returns the Relaxed Extended JSON representation of a BSON value","tag":"refentry","type":"Function","methodName":"MongoDB\\BSON\\toRelaxedExtendedJSON"},{"id":"ref.bson.functions","name":"Functions","description":"MongoDB Extension","tag":"reference","type":"Extension","methodName":"Functions"},{"id":"mongodb-bson-document.construct","name":"MongoDB\\BSON\\Document::__construct","description":"Construct a new BSON document (unused)","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-document.frombson","name":"MongoDB\\BSON\\Document::fromBSON","description":"Construct a new document instance from a BSON string","tag":"refentry","type":"Function","methodName":"fromBSON"},{"id":"mongodb-bson-document.fromjson","name":"MongoDB\\BSON\\Document::fromJSON","description":"Construct a new document instance from a JSON string","tag":"refentry","type":"Function","methodName":"fromJSON"},{"id":"mongodb-bson-document.fromphp","name":"MongoDB\\BSON\\Document::fromPHP","description":"Construct a new document instance from PHP data","tag":"refentry","type":"Function","methodName":"fromPHP"},{"id":"mongodb-bson-document.get","name":"MongoDB\\BSON\\Document::get","description":"Returns the value of a key in the document","tag":"refentry","type":"Function","methodName":"get"},{"id":"mongodb-bson-document.getiterator","name":"MongoDB\\BSON\\Document::getIterator","description":"Returns an iterator for the BSON document","tag":"refentry","type":"Function","methodName":"getIterator"},{"id":"mongodb-bson-document.has","name":"MongoDB\\BSON\\Document::has","description":"Returns whether a key is present in the document","tag":"refentry","type":"Function","methodName":"has"},{"id":"mongodb-bson-document.offsetexists","name":"MongoDB\\BSON\\Document::offsetExists","description":"Returns whether a key is present in the document","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"mongodb-bson-document.offsetget","name":"MongoDB\\BSON\\Document::offsetGet","description":"Returns the value of a key in the document","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"mongodb-bson-document.offsetset","name":"MongoDB\\BSON\\Document::offsetSet","description":"Implementation of ArrayAccess","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"mongodb-bson-document.offsetunset","name":"MongoDB\\BSON\\Document::offsetUnset","description":"Implementation of ArrayAccess","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"mongodb-bson-document.tocanonicalextendedjson","name":"MongoDB\\BSON\\Document::toCanonicalExtendedJSON","description":"Returns the Canonical Extended JSON representation of the BSON document","tag":"refentry","type":"Function","methodName":"toCanonicalExtendedJSON"},{"id":"mongodb-bson-document.tophp","name":"MongoDB\\BSON\\Document::toPHP","description":"Returns the PHP representation of the BSON document","tag":"refentry","type":"Function","methodName":"toPHP"},{"id":"mongodb-bson-document.torelaxedextendedjson","name":"MongoDB\\BSON\\Document::toRelaxedExtendedJSON","description":"Returns the Relaxed Extended JSON representation of the BSON document","tag":"refentry","type":"Function","methodName":"toRelaxedExtendedJSON"},{"id":"mongodb-bson-document.tostring","name":"MongoDB\\BSON\\Document::__toString","description":"Returns the string representation of this BSON Document","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-document","name":"MongoDB\\BSON\\Document","description":"The MongoDB\\BSON\\Document class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\Document"},{"id":"mongodb-bson-packedarray.construct","name":"MongoDB\\BSON\\PackedArray::__construct","description":"Construct a new BSON array (unused)","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-packedarray.fromjson","name":"MongoDB\\BSON\\PackedArray::fromJSON","description":"Construct a new BSON array instance from a JSON string","tag":"refentry","type":"Function","methodName":"fromJSON"},{"id":"mongodb-bson-packedarray.fromphp","name":"MongoDB\\BSON\\PackedArray::fromPHP","description":"Construct a new BSON array instance from PHP data","tag":"refentry","type":"Function","methodName":"fromPHP"},{"id":"mongodb-bson-packedarray.get","name":"MongoDB\\BSON\\PackedArray::get","description":"Returns the value of an index in the array","tag":"refentry","type":"Function","methodName":"get"},{"id":"mongodb-bson-packedarray.getiterator","name":"MongoDB\\BSON\\PackedArray::getIterator","description":"Returns an iterator for the BSON array","tag":"refentry","type":"Function","methodName":"getIterator"},{"id":"mongodb-bson-packedarray.has","name":"MongoDB\\BSON\\PackedArray::has","description":"Returns whether a index is present in the array","tag":"refentry","type":"Function","methodName":"has"},{"id":"mongodb-bson-packedarray.offsetexists","name":"MongoDB\\BSON\\PackedArray::offsetExists","description":"Returns whether a index is present in the array","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"mongodb-bson-packedarray.offsetget","name":"MongoDB\\BSON\\PackedArray::offsetGet","description":"Returns the value of an index in the array","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"mongodb-bson-packedarray.offsetset","name":"MongoDB\\BSON\\PackedArray::offsetSet","description":"Implementation of ArrayAccess","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"mongodb-bson-packedarray.offsetunset","name":"MongoDB\\BSON\\PackedArray::offsetUnset","description":"Implementation of ArrayAccess","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"mongodb-bson-packedarray.tocanonicalextendedjson","name":"MongoDB\\BSON\\PackedArray::toCanonicalExtendedJSON","description":"Returns the Canonical Extended JSON representation of the BSON array","tag":"refentry","type":"Function","methodName":"toCanonicalExtendedJSON"},{"id":"mongodb-bson-packedarray.tophp","name":"MongoDB\\BSON\\PackedArray::toPHP","description":"Returns the PHP representation of the BSON array","tag":"refentry","type":"Function","methodName":"toPHP"},{"id":"mongodb-bson-packedarray.torelaxedextendedjson","name":"MongoDB\\BSON\\PackedArray::toRelaxedExtendedJSON","description":"Returns the Relaxed Extended JSON representation of the BSON array","tag":"refentry","type":"Function","methodName":"toRelaxedExtendedJSON"},{"id":"mongodb-bson-packedarray.tostring","name":"MongoDB\\BSON\\PackedArray::__toString","description":"Returns the string representation of this BSON array","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-packedarray","name":"MongoDB\\BSON\\PackedArray","description":"The MongoDB\\BSON\\PackedArray class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\PackedArray"},{"id":"mongodb-bson-iterator.construct","name":"MongoDB\\BSON\\Iterator::__construct","description":"Construct a new BSON iterator (unused)","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-iterator.current","name":"MongoDB\\BSON\\Iterator::current","description":"Returns the current element","tag":"refentry","type":"Function","methodName":"current"},{"id":"mongodb-bson-iterator.key","name":"MongoDB\\BSON\\Iterator::key","description":"Returns the key of the current element","tag":"refentry","type":"Function","methodName":"key"},{"id":"mongodb-bson-iterator.next","name":"MongoDB\\BSON\\Iterator::next","description":"Advances the iterator to next element","tag":"refentry","type":"Function","methodName":"next"},{"id":"mongodb-bson-iterator.rewind","name":"MongoDB\\BSON\\Iterator::rewind","description":"Rewinds the Iterator to the first element","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"mongodb-bson-iterator.valid","name":"MongoDB\\BSON\\Iterator::valid","description":"Checks if current position is valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.mongodb-bson-iterator","name":"MongoDB\\BSON\\Iterator","description":"The MongoDB\\BSON\\Iterator class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\Iterator"},{"id":"mongodb-bson-binary.construct","name":"MongoDB\\BSON\\Binary::__construct","description":"Construct a new Binary","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-binary.getdata","name":"MongoDB\\BSON\\Binary::getData","description":"Returns the Binary's data","tag":"refentry","type":"Function","methodName":"getData"},{"id":"mongodb-bson-binary.gettype","name":"MongoDB\\BSON\\Binary::getType","description":"Returns the Binary's type","tag":"refentry","type":"Function","methodName":"getType"},{"id":"mongodb-bson-binary.jsonserialize","name":"MongoDB\\BSON\\Binary::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"mongodb-bson-binary.tostring","name":"MongoDB\\BSON\\Binary::__toString","description":"Returns the Binary's data","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-binary","name":"MongoDB\\BSON\\Binary","description":"The MongoDB\\BSON\\Binary class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\Binary"},{"id":"mongodb-bson-decimal128.construct","name":"MongoDB\\BSON\\Decimal128::__construct","description":"Construct a new Decimal128","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-decimal128.jsonserialize","name":"MongoDB\\BSON\\Decimal128::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"mongodb-bson-decimal128.tostring","name":"MongoDB\\BSON\\Decimal128::__toString","description":"Returns the string representation of this Decimal128","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-decimal128","name":"MongoDB\\BSON\\Decimal128","description":"The MongoDB\\BSON\\Decimal128 class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\Decimal128"},{"id":"mongodb-bson-javascript.construct","name":"MongoDB\\BSON\\Javascript::__construct","description":"Construct a new Javascript","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-javascript.getcode","name":"MongoDB\\BSON\\Javascript::getCode","description":"Returns the Javascript's code","tag":"refentry","type":"Function","methodName":"getCode"},{"id":"mongodb-bson-javascript.getscope","name":"MongoDB\\BSON\\Javascript::getScope","description":"Returns the Javascript's scope document","tag":"refentry","type":"Function","methodName":"getScope"},{"id":"mongodb-bson-javascript.jsonserialize","name":"MongoDB\\BSON\\Javascript::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"mongodb-bson-javascript.tostring","name":"MongoDB\\BSON\\Javascript::__toString","description":"Returns the Javascript's code","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-javascript","name":"MongoDB\\BSON\\Javascript","description":"The MongoDB\\BSON\\Javascript class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\Javascript"},{"id":"mongodb-bson-maxkey.construct","name":"MongoDB\\BSON\\MaxKey::__construct","description":"Construct a new MaxKey","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-maxkey.jsonserialize","name":"MongoDB\\BSON\\MaxKey::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"class.mongodb-bson-maxkey","name":"MongoDB\\BSON\\MaxKey","description":"The MongoDB\\BSON\\MaxKey class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\MaxKey"},{"id":"mongodb-bson-minkey.construct","name":"MongoDB\\BSON\\MinKey::__construct","description":"Construct a new MinKey","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-minkey.jsonserialize","name":"MongoDB\\BSON\\MinKey::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"class.mongodb-bson-minkey","name":"MongoDB\\BSON\\MinKey","description":"The MongoDB\\BSON\\MinKey class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\MinKey"},{"id":"mongodb-bson-objectid.construct","name":"MongoDB\\BSON\\ObjectId::__construct","description":"Construct a new ObjectId","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-objectid.gettimestamp","name":"MongoDB\\BSON\\ObjectId::getTimestamp","description":"Returns the timestamp component of this ObjectId","tag":"refentry","type":"Function","methodName":"getTimestamp"},{"id":"mongodb-bson-objectid.jsonserialize","name":"MongoDB\\BSON\\ObjectId::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"mongodb-bson-objectid.tostring","name":"MongoDB\\BSON\\ObjectId::__toString","description":"Returns the hexidecimal representation of this ObjectId","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-objectid","name":"MongoDB\\BSON\\ObjectId","description":"The MongoDB\\BSON\\ObjectId class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\ObjectId"},{"id":"mongodb-bson-regex.construct","name":"MongoDB\\BSON\\Regex::__construct","description":"Construct a new Regex","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-regex.getflags","name":"MongoDB\\BSON\\Regex::getFlags","description":"Returns the Regex's flags","tag":"refentry","type":"Function","methodName":"getFlags"},{"id":"mongodb-bson-regex.getpattern","name":"MongoDB\\BSON\\Regex::getPattern","description":"Returns the Regex's pattern","tag":"refentry","type":"Function","methodName":"getPattern"},{"id":"mongodb-bson-regex.jsonserialize","name":"MongoDB\\BSON\\Regex::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"mongodb-bson-regex.tostring","name":"MongoDB\\BSON\\Regex::__toString","description":"Returns the string representation of this Regex","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-regex","name":"MongoDB\\BSON\\Regex","description":"The MongoDB\\BSON\\Regex class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\Regex"},{"id":"mongodb-bson-timestamp.construct","name":"MongoDB\\BSON\\Timestamp::__construct","description":"Construct a new Timestamp","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-timestamp.getincrement","name":"MongoDB\\BSON\\Timestamp::getIncrement","description":"Returns the increment component of this Timestamp","tag":"refentry","type":"Function","methodName":"getIncrement"},{"id":"mongodb-bson-timestamp.gettimestamp","name":"MongoDB\\BSON\\Timestamp::getTimestamp","description":"Returns the timestamp component of this Timestamp","tag":"refentry","type":"Function","methodName":"getTimestamp"},{"id":"mongodb-bson-timestamp.jsonserialize","name":"MongoDB\\BSON\\Timestamp::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"mongodb-bson-timestamp.tostring","name":"MongoDB\\BSON\\Timestamp::__toString","description":"Returns the string representation of this Timestamp","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-timestamp","name":"MongoDB\\BSON\\Timestamp","description":"The MongoDB\\BSON\\Timestamp class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\Timestamp"},{"id":"mongodb-bson-utcdatetime.construct","name":"MongoDB\\BSON\\UTCDateTime::__construct","description":"Construct a new UTCDateTime","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-utcdatetime.jsonserialize","name":"MongoDB\\BSON\\UTCDateTime::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"mongodb-bson-utcdatetime.todatetime","name":"MongoDB\\BSON\\UTCDateTime::toDateTime","description":"Returns the DateTime representation of this UTCDateTime","tag":"refentry","type":"Function","methodName":"toDateTime"},{"id":"mongodb-bson-utcdatetime.todatetimeimmutable","name":"MongoDB\\BSON\\UTCDateTime::toDateTimeImmutable","description":"Returns the DateTimeImmutable representation of this UTCDateTime","tag":"refentry","type":"Function","methodName":"toDateTimeImmutable"},{"id":"mongodb-bson-utcdatetime.tostring","name":"MongoDB\\BSON\\UTCDateTime::__toString","description":"Returns the string representation of this UTCDateTime","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-utcdatetime","name":"MongoDB\\BSON\\UTCDateTime","description":"The MongoDB\\BSON\\UTCDateTime class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\UTCDateTime"},{"id":"class.mongodb-bson-type","name":"MongoDB\\BSON\\Type","description":"The MongoDB\\BSON\\Type interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\Type"},{"id":"mongodb-bson-persistable.bsonserialize","name":"MongoDB\\BSON\\Persistable::bsonSerialize","description":"Provides an array or document to serialize as BSON","tag":"refentry","type":"Function","methodName":"bsonSerialize"},{"id":"class.mongodb-bson-persistable","name":"MongoDB\\BSON\\Persistable","description":"The MongoDB\\BSON\\Persistable interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\Persistable"},{"id":"mongodb-bson-serializable.bsonserialize","name":"MongoDB\\BSON\\Serializable::bsonSerialize","description":"Provides an array or document to serialize as BSON","tag":"refentry","type":"Function","methodName":"bsonSerialize"},{"id":"class.mongodb-bson-serializable","name":"MongoDB\\BSON\\Serializable","description":"The MongoDB\\BSON\\Serializable interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\Serializable"},{"id":"mongodb-bson-unserializable.bsonunserialize","name":"MongoDB\\BSON\\Unserializable::bsonUnserialize","description":"Constructs the object from a BSON array or document","tag":"refentry","type":"Function","methodName":"bsonUnserialize"},{"id":"class.mongodb-bson-unserializable","name":"MongoDB\\BSON\\Unserializable","description":"The MongoDB\\BSON\\Unserializable interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\Unserializable"},{"id":"mongodb-bson-binaryinterface.getdata","name":"MongoDB\\BSON\\BinaryInterface::getData","description":"Returns the BinaryInterface's data","tag":"refentry","type":"Function","methodName":"getData"},{"id":"mongodb-bson-binaryinterface.gettype","name":"MongoDB\\BSON\\BinaryInterface::getType","description":"Returns the BinaryInterface's type","tag":"refentry","type":"Function","methodName":"getType"},{"id":"mongodb-bson-binaryinterface.tostring","name":"MongoDB\\BSON\\BinaryInterface::__toString","description":"Returns the BinaryInterface's data","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-binaryinterface","name":"MongoDB\\BSON\\BinaryInterface","description":"The MongoDB\\BSON\\BinaryInterface interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\BinaryInterface"},{"id":"mongodb-bson-decimal128interface.tostring","name":"MongoDB\\BSON\\Decimal128Interface::__toString","description":"Returns the string representation of this Decimal128Interface","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-decimal128interface","name":"MongoDB\\BSON\\Decimal128Interface","description":"The MongoDB\\BSON\\Decimal128Interface interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\Decimal128Interface"},{"id":"mongodb-bson-javascriptinterface.getcode","name":"MongoDB\\BSON\\JavascriptInterface::getCode","description":"Returns the JavascriptInterface's code","tag":"refentry","type":"Function","methodName":"getCode"},{"id":"mongodb-bson-javascriptinterface.getscope","name":"MongoDB\\BSON\\JavascriptInterface::getScope","description":"Returns the JavascriptInterface's scope document","tag":"refentry","type":"Function","methodName":"getScope"},{"id":"mongodb-bson-javascriptinterface.tostring","name":"MongoDB\\BSON\\JavascriptInterface::__toString","description":"Returns the JavascriptInterface's code","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-javascriptinterface","name":"MongoDB\\BSON\\JavascriptInterface","description":"The MongoDB\\BSON\\JavascriptInterface interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\JavascriptInterface"},{"id":"class.mongodb-bson-maxkeyinterface","name":"MongoDB\\BSON\\MaxKeyInterface","description":"The MongoDB\\BSON\\MaxKeyInterface interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\MaxKeyInterface"},{"id":"class.mongodb-bson-minkeyinterface","name":"MongoDB\\BSON\\MinKeyInterface","description":"The MongoDB\\BSON\\MinKeyInterface interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\MinKeyInterface"},{"id":"mongodb-bson-objectidinterface.gettimestamp","name":"MongoDB\\BSON\\ObjectIdInterface::getTimestamp","description":"Returns the timestamp component of this ObjectIdInterface","tag":"refentry","type":"Function","methodName":"getTimestamp"},{"id":"mongodb-bson-objectidinterface.tostring","name":"MongoDB\\BSON\\ObjectIdInterface::__toString","description":"Returns the hexidecimal representation of this ObjectIdInterface","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-objectidinterface","name":"MongoDB\\BSON\\ObjectIdInterface","description":"The MongoDB\\BSON\\ObjectIdInterface interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\ObjectIdInterface"},{"id":"mongodb-bson-regexinterface.getflags","name":"MongoDB\\BSON\\RegexInterface::getFlags","description":"Returns the RegexInterface's flags","tag":"refentry","type":"Function","methodName":"getFlags"},{"id":"mongodb-bson-regexinterface.getpattern","name":"MongoDB\\BSON\\RegexInterface::getPattern","description":"Returns the RegexInterface's pattern","tag":"refentry","type":"Function","methodName":"getPattern"},{"id":"mongodb-bson-regexinterface.tostring","name":"MongoDB\\BSON\\RegexInterface::__toString","description":"Returns the string representation of this RegexInterface","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-regexinterface","name":"MongoDB\\BSON\\RegexInterface","description":"The MongoDB\\BSON\\RegexInterface interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\RegexInterface"},{"id":"mongodb-bson-timestampinterface.getincrement","name":"MongoDB\\BSON\\TimestampInterface::getIncrement","description":"Returns the increment component of this TimestampInterface","tag":"refentry","type":"Function","methodName":"getIncrement"},{"id":"mongodb-bson-timestampinterface.gettimestamp","name":"MongoDB\\BSON\\TimestampInterface::getTimestamp","description":"Returns the timestamp component of this TimestampInterface","tag":"refentry","type":"Function","methodName":"getTimestamp"},{"id":"mongodb-bson-timestampinterface.tostring","name":"MongoDB\\BSON\\TimestampInterface::__toString","description":"Returns the string representation of this TimestampInterface","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-timestampinterface","name":"MongoDB\\BSON\\TimestampInterface","description":"The MongoDB\\BSON\\TimestampInterface interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\TimestampInterface"},{"id":"mongodb-bson-utcdatetimeinterface.todatetime","name":"MongoDB\\BSON\\UTCDateTimeInterface::toDateTime","description":"Returns the DateTime representation of this UTCDateTimeInterface","tag":"refentry","type":"Function","methodName":"toDateTime"},{"id":"mongodb-bson-utcdatetimeinterface.todatetimeimmutable","name":"MongoDB\\BSON\\UTCDateTimeInterface::toDateTimeImmutable","description":"Returns the DateTimeImmutable representation of this UTCDateTimeInterface","tag":"refentry","type":"Function","methodName":"toDateTimeImmutable"},{"id":"mongodb-bson-utcdatetimeinterface.tostring","name":"MongoDB\\BSON\\UTCDateTimeInterface::__toString","description":"Returns the string representation of this UTCDateTimeInterface","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-utcdatetimeinterface","name":"MongoDB\\BSON\\UTCDateTimeInterface","description":"The MongoDB\\BSON\\UTCDateTimeInterface interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\UTCDateTimeInterface"},{"id":"mongodb-bson-dbpointer.construct","name":"MongoDB\\BSON\\DBPointer::__construct","description":"Construct a new DBPointer (unused)","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-dbpointer.jsonserialize","name":"MongoDB\\BSON\\DBPointer::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"mongodb-bson-dbpointer.tostring","name":"MongoDB\\BSON\\DBPointer::__toString","description":"Returns an empty string","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-dbpointer","name":"MongoDB\\BSON\\DBPointer","description":"The MongoDB\\BSON\\DBPointer class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\DBPointer"},{"id":"mongodb-bson-int64.construct","name":"MongoDB\\BSON\\Int64::__construct","description":"Construct a new Int64","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-int64.jsonserialize","name":"MongoDB\\BSON\\Int64::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"mongodb-bson-int64.tostring","name":"MongoDB\\BSON\\Int64::__toString","description":"Returns the string representation of this Int64","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-int64","name":"MongoDB\\BSON\\Int64","description":"The MongoDB\\BSON\\Int64 class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\Int64"},{"id":"mongodb-bson-symbol.construct","name":"MongoDB\\BSON\\Symbol::__construct","description":"Construct a new Symbol (unused)","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-symbol.jsonserialize","name":"MongoDB\\BSON\\Symbol::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"mongodb-bson-symbol.tostring","name":"MongoDB\\BSON\\Symbol::__toString","description":"Returns the Symbol as a string","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-symbol","name":"MongoDB\\BSON\\Symbol","description":"The MongoDB\\BSON\\Symbol class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\Symbol"},{"id":"mongodb-bson-undefined.construct","name":"MongoDB\\BSON\\Undefined::__construct","description":"Construct a new Undefined (unused)","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mongodb-bson-undefined.jsonserialize","name":"MongoDB\\BSON\\Undefined::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"mongodb-bson-undefined.tostring","name":"MongoDB\\BSON\\Undefined::__toString","description":"Returns an empty string","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.mongodb-bson-undefined","name":"MongoDB\\BSON\\Undefined","description":"The MongoDB\\BSON\\Undefined class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\BSON\\Undefined"},{"id":"mongodb.bson","name":"MongoDB\\BSON","description":"MongoDB BSON Classes and Functions","tag":"part","type":"General","methodName":"MongoDB\\BSON"},{"id":"function.mongodb.driver.monitoring.addsubscriber","name":"MongoDB\\Driver\\Monitoring\\addSubscriber","description":"Registers a monitoring event subscriber globally","tag":"refentry","type":"Function","methodName":"MongoDB\\Driver\\Monitoring\\addSubscriber"},{"id":"function.mongodb.driver.monitoring.removesubscriber","name":"MongoDB\\Driver\\Monitoring\\removeSubscriber","description":"Unregisters a monitoring event subscriber globally","tag":"refentry","type":"Function","methodName":"MongoDB\\Driver\\Monitoring\\removeSubscriber"},{"id":"ref.monitoring.functions","name":"Functions","description":"MongoDB Extension","tag":"reference","type":"Extension","methodName":"Functions"},{"id":"mongodb-driver-monitoring-commandfailedevent.getcommandname","name":"MongoDB\\Driver\\Monitoring\\CommandFailedEvent::getCommandName","description":"Returns the command name","tag":"refentry","type":"Function","methodName":"getCommandName"},{"id":"mongodb-driver-monitoring-commandfailedevent.getdatabasename","name":"MongoDB\\Driver\\Monitoring\\CommandFailedEvent::getDatabaseName","description":"Returns the database on which the command was executed","tag":"refentry","type":"Function","methodName":"getDatabaseName"},{"id":"mongodb-driver-monitoring-commandfailedevent.getdurationmicros","name":"MongoDB\\Driver\\Monitoring\\CommandFailedEvent::getDurationMicros","description":"Returns the command's duration in microseconds","tag":"refentry","type":"Function","methodName":"getDurationMicros"},{"id":"mongodb-driver-monitoring-commandfailedevent.geterror","name":"MongoDB\\Driver\\Monitoring\\CommandFailedEvent::getError","description":"Returns the Exception associated with the failed command","tag":"refentry","type":"Function","methodName":"getError"},{"id":"mongodb-driver-monitoring-commandfailedevent.gethost","name":"MongoDB\\Driver\\Monitoring\\CommandFailedEvent::getHost","description":"Returns the server hostname for the command","tag":"refentry","type":"Function","methodName":"getHost"},{"id":"mongodb-driver-monitoring-commandfailedevent.getoperationid","name":"MongoDB\\Driver\\Monitoring\\CommandFailedEvent::getOperationId","description":"Returns the command's operation ID","tag":"refentry","type":"Function","methodName":"getOperationId"},{"id":"mongodb-driver-monitoring-commandfailedevent.getport","name":"MongoDB\\Driver\\Monitoring\\CommandFailedEvent::getPort","description":"Returns the server port for the command","tag":"refentry","type":"Function","methodName":"getPort"},{"id":"mongodb-driver-monitoring-commandfailedevent.getreply","name":"MongoDB\\Driver\\Monitoring\\CommandFailedEvent::getReply","description":"Returns the command reply document","tag":"refentry","type":"Function","methodName":"getReply"},{"id":"mongodb-driver-monitoring-commandfailedevent.getrequestid","name":"MongoDB\\Driver\\Monitoring\\CommandFailedEvent::getRequestId","description":"Returns the command's request ID","tag":"refentry","type":"Function","methodName":"getRequestId"},{"id":"mongodb-driver-monitoring-commandfailedevent.getserver","name":"MongoDB\\Driver\\Monitoring\\CommandFailedEvent::getServer","description":"Returns the Server on which the command was executed","tag":"refentry","type":"Function","methodName":"getServer"},{"id":"mongodb-driver-monitoring-commandfailedevent.getserverconnectionid","name":"MongoDB\\Driver\\Monitoring\\CommandFailedEvent::getServerConnectionId","description":"Returns the server connection ID for the command","tag":"refentry","type":"Function","methodName":"getServerConnectionId"},{"id":"mongodb-driver-monitoring-commandfailedevent.getserviceid","name":"MongoDB\\Driver\\Monitoring\\CommandFailedEvent::getServiceId","description":"Returns the load balancer service ID for the command","tag":"refentry","type":"Function","methodName":"getServiceId"},{"id":"class.mongodb-driver-monitoring-commandfailedevent","name":"MongoDB\\Driver\\Monitoring\\CommandFailedEvent","description":"The MongoDB\\Driver\\Monitoring\\CommandFailedEvent class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\CommandFailedEvent"},{"id":"mongodb-driver-monitoring-commandstartedevent.getcommand","name":"MongoDB\\Driver\\Monitoring\\CommandStartedEvent::getCommand","description":"Returns the command document","tag":"refentry","type":"Function","methodName":"getCommand"},{"id":"mongodb-driver-monitoring-commandstartedevent.getcommandname","name":"MongoDB\\Driver\\Monitoring\\CommandStartedEvent::getCommandName","description":"Returns the command name","tag":"refentry","type":"Function","methodName":"getCommandName"},{"id":"mongodb-driver-monitoring-commandstartedevent.getdatabasename","name":"MongoDB\\Driver\\Monitoring\\CommandStartedEvent::getDatabaseName","description":"Returns the database on which the command was executed","tag":"refentry","type":"Function","methodName":"getDatabaseName"},{"id":"mongodb-driver-monitoring-commandstartedevent.gethost","name":"MongoDB\\Driver\\Monitoring\\CommandStartedEvent::getHost","description":"Returns the server hostname for the command","tag":"refentry","type":"Function","methodName":"getHost"},{"id":"mongodb-driver-monitoring-commandstartedevent.getoperationid","name":"MongoDB\\Driver\\Monitoring\\CommandStartedEvent::getOperationId","description":"Returns the command's operation ID","tag":"refentry","type":"Function","methodName":"getOperationId"},{"id":"mongodb-driver-monitoring-commandstartedevent.getport","name":"MongoDB\\Driver\\Monitoring\\CommandStartedEvent::getPort","description":"Returns the server port for the command","tag":"refentry","type":"Function","methodName":"getPort"},{"id":"mongodb-driver-monitoring-commandstartedevent.getrequestid","name":"MongoDB\\Driver\\Monitoring\\CommandStartedEvent::getRequestId","description":"Returns the command's request ID","tag":"refentry","type":"Function","methodName":"getRequestId"},{"id":"mongodb-driver-monitoring-commandstartedevent.getserver","name":"MongoDB\\Driver\\Monitoring\\CommandStartedEvent::getServer","description":"Returns the Server on which the command was executed","tag":"refentry","type":"Function","methodName":"getServer"},{"id":"mongodb-driver-monitoring-commandstartedevent.getserverconnectionid","name":"MongoDB\\Driver\\Monitoring\\CommandStartedEvent::getServerConnectionId","description":"Returns the server connection ID for the command","tag":"refentry","type":"Function","methodName":"getServerConnectionId"},{"id":"mongodb-driver-monitoring-commandstartedevent.getserviceid","name":"MongoDB\\Driver\\Monitoring\\CommandStartedEvent::getServiceId","description":"Returns the load balancer service ID for the command","tag":"refentry","type":"Function","methodName":"getServiceId"},{"id":"class.mongodb-driver-monitoring-commandstartedevent","name":"MongoDB\\Driver\\Monitoring\\CommandStartedEvent","description":"The MongoDB\\Driver\\Monitoring\\CommandStartedEvent class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\CommandStartedEvent"},{"id":"mongodb-driver-monitoring-commandsucceededevent.getcommandname","name":"MongoDB\\Driver\\Monitoring\\CommandSucceededEvent::getCommandName","description":"Returns the command name","tag":"refentry","type":"Function","methodName":"getCommandName"},{"id":"mongodb-driver-monitoring-commandsucceededevent.getdatabasename","name":"MongoDB\\Driver\\Monitoring\\CommandSucceededEvent::getDatabaseName","description":"Returns the database on which the command was executed","tag":"refentry","type":"Function","methodName":"getDatabaseName"},{"id":"mongodb-driver-monitoring-commandsucceededevent.getdurationmicros","name":"MongoDB\\Driver\\Monitoring\\CommandSucceededEvent::getDurationMicros","description":"Returns the command's duration in microseconds","tag":"refentry","type":"Function","methodName":"getDurationMicros"},{"id":"mongodb-driver-monitoring-commandsucceededevent.gethost","name":"MongoDB\\Driver\\Monitoring\\CommandSucceededEvent::getHost","description":"Returns the server hostname for the command","tag":"refentry","type":"Function","methodName":"getHost"},{"id":"mongodb-driver-monitoring-commandsucceededevent.getoperationid","name":"MongoDB\\Driver\\Monitoring\\CommandSucceededEvent::getOperationId","description":"Returns the command's operation ID","tag":"refentry","type":"Function","methodName":"getOperationId"},{"id":"mongodb-driver-monitoring-commandsucceededevent.getport","name":"MongoDB\\Driver\\Monitoring\\CommandSucceededEvent::getPort","description":"Returns the server port for the command","tag":"refentry","type":"Function","methodName":"getPort"},{"id":"mongodb-driver-monitoring-commandsucceededevent.getreply","name":"MongoDB\\Driver\\Monitoring\\CommandSucceededEvent::getReply","description":"Returns the command reply document","tag":"refentry","type":"Function","methodName":"getReply"},{"id":"mongodb-driver-monitoring-commandsucceededevent.getrequestid","name":"MongoDB\\Driver\\Monitoring\\CommandSucceededEvent::getRequestId","description":"Returns the command's request ID","tag":"refentry","type":"Function","methodName":"getRequestId"},{"id":"mongodb-driver-monitoring-commandsucceededevent.getserver","name":"MongoDB\\Driver\\Monitoring\\CommandSucceededEvent::getServer","description":"Returns the Server on which the command was executed","tag":"refentry","type":"Function","methodName":"getServer"},{"id":"mongodb-driver-monitoring-commandsucceededevent.getserverconnectionid","name":"MongoDB\\Driver\\Monitoring\\CommandSucceededEvent::getServerConnectionId","description":"Returns the server connection ID for the command","tag":"refentry","type":"Function","methodName":"getServerConnectionId"},{"id":"mongodb-driver-monitoring-commandsucceededevent.getserviceid","name":"MongoDB\\Driver\\Monitoring\\CommandSucceededEvent::getServiceId","description":"Returns the load balancer service ID for the command","tag":"refentry","type":"Function","methodName":"getServiceId"},{"id":"class.mongodb-driver-monitoring-commandsucceededevent","name":"MongoDB\\Driver\\Monitoring\\CommandSucceededEvent","description":"The MongoDB\\Driver\\Monitoring\\CommandSucceededEvent class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\CommandSucceededEvent"},{"id":"mongodb-driver-monitoring-serverchangedevent.gethost","name":"MongoDB\\Driver\\Monitoring\\ServerChangedEvent::getHost","description":"Returns the hostname of the server","tag":"refentry","type":"Function","methodName":"getHost"},{"id":"mongodb-driver-monitoring-serverchangedevent.getnewdescription","name":"MongoDB\\Driver\\Monitoring\\ServerChangedEvent::getNewDescription","description":"Returns the new description for the server","tag":"refentry","type":"Function","methodName":"getNewDescription"},{"id":"mongodb-driver-monitoring-serverchangedevent.getport","name":"MongoDB\\Driver\\Monitoring\\ServerChangedEvent::getPort","description":"Returns the port on which this server is listening","tag":"refentry","type":"Function","methodName":"getPort"},{"id":"mongodb-driver-monitoring-serverchangedevent.getpreviousdescription","name":"MongoDB\\Driver\\Monitoring\\ServerChangedEvent::getPreviousDescription","description":"Returns the previous description for the server","tag":"refentry","type":"Function","methodName":"getPreviousDescription"},{"id":"mongodb-driver-monitoring-serverchangedevent.gettopologyid","name":"MongoDB\\Driver\\Monitoring\\ServerChangedEvent::getTopologyId","description":"Returns the topology ID associated with this server","tag":"refentry","type":"Function","methodName":"getTopologyId"},{"id":"class.mongodb-driver-monitoring-serverchangedevent","name":"MongoDB\\Driver\\Monitoring\\ServerChangedEvent","description":"The MongoDB\\Driver\\Monitoring\\ServerChangedEvent class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\ServerChangedEvent"},{"id":"mongodb-driver-monitoring-serverclosedevent.gethost","name":"MongoDB\\Driver\\Monitoring\\ServerClosedEvent::getHost","description":"Returns the hostname of the server","tag":"refentry","type":"Function","methodName":"getHost"},{"id":"mongodb-driver-monitoring-serverclosedevent.getport","name":"MongoDB\\Driver\\Monitoring\\ServerClosedEvent::getPort","description":"Returns the port on which this server is listening","tag":"refentry","type":"Function","methodName":"getPort"},{"id":"mongodb-driver-monitoring-serverclosedevent.gettopologyid","name":"MongoDB\\Driver\\Monitoring\\ServerClosedEvent::getTopologyId","description":"Returns the topology ID associated with this server","tag":"refentry","type":"Function","methodName":"getTopologyId"},{"id":"class.mongodb-driver-monitoring-serverclosedevent","name":"MongoDB\\Driver\\Monitoring\\ServerClosedEvent","description":"The MongoDB\\Driver\\Monitoring\\ServerClosedEvent class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\ServerClosedEvent"},{"id":"mongodb-driver-monitoring-serveropeningevent.gethost","name":"MongoDB\\Driver\\Monitoring\\ServerOpeningEvent::getHost","description":"Returns the hostname of the server","tag":"refentry","type":"Function","methodName":"getHost"},{"id":"mongodb-driver-monitoring-serveropeningevent.getport","name":"MongoDB\\Driver\\Monitoring\\ServerOpeningEvent::getPort","description":"Returns the port on which this server is listening","tag":"refentry","type":"Function","methodName":"getPort"},{"id":"mongodb-driver-monitoring-serveropeningevent.gettopologyid","name":"MongoDB\\Driver\\Monitoring\\ServerOpeningEvent::getTopologyId","description":"Returns the topology ID associated with this server","tag":"refentry","type":"Function","methodName":"getTopologyId"},{"id":"class.mongodb-driver-monitoring-serveropeningevent","name":"MongoDB\\Driver\\Monitoring\\ServerOpeningEvent","description":"The MongoDB\\Driver\\Monitoring\\ServerOpeningEvent class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\ServerOpeningEvent"},{"id":"mongodb-driver-monitoring-serverheartbeatfailedevent.getdurationmicros","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatFailedEvent::getDurationMicros","description":"Returns the heartbeat's duration in microseconds","tag":"refentry","type":"Function","methodName":"getDurationMicros"},{"id":"mongodb-driver-monitoring-serverheartbeatfailedevent.geterror","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatFailedEvent::getError","description":"Returns the Exception associated with the failed heartbeat","tag":"refentry","type":"Function","methodName":"getError"},{"id":"mongodb-driver-monitoring-serverheartbeatfailedevent.gethost","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatFailedEvent::getHost","description":"Returns the hostname of the server","tag":"refentry","type":"Function","methodName":"getHost"},{"id":"mongodb-driver-monitoring-serverheartbeatfailedevent.getport","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatFailedEvent::getPort","description":"Returns the port on which this server is listening","tag":"refentry","type":"Function","methodName":"getPort"},{"id":"mongodb-driver-monitoring-serverheartbeatfailedevent.isawaited","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatFailedEvent::isAwaited","description":"Returns whether the heartbeat used a streaming protocol","tag":"refentry","type":"Function","methodName":"isAwaited"},{"id":"class.mongodb-driver-monitoring-serverheartbeatfailedevent","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatFailedEvent","description":"The MongoDB\\Driver\\Monitoring\\ServerHeartbeatFailedEvent class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatFailedEvent"},{"id":"mongodb-driver-monitoring-serverheartbeatstartedevent.gethost","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatStartedEvent::getHost","description":"Returns the hostname of the server","tag":"refentry","type":"Function","methodName":"getHost"},{"id":"mongodb-driver-monitoring-serverheartbeatstartedevent.getport","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatStartedEvent::getPort","description":"Returns the port on which this server is listening","tag":"refentry","type":"Function","methodName":"getPort"},{"id":"mongodb-driver-monitoring-serverheartbeatstartedevent.isawaited","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatStartedEvent::isAwaited","description":"Returns whether the heartbeat used a streaming protocol","tag":"refentry","type":"Function","methodName":"isAwaited"},{"id":"class.mongodb-driver-monitoring-serverheartbeatstartedevent","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatStartedEvent","description":"The MongoDB\\Driver\\Monitoring\\ServerHeartbeatStartedEvent class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatStartedEvent"},{"id":"mongodb-driver-monitoring-serverheartbeatsucceededevent.getdurationmicros","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatSucceededEvent::getDurationMicros","description":"Returns the heartbeat's duration in microseconds","tag":"refentry","type":"Function","methodName":"getDurationMicros"},{"id":"mongodb-driver-monitoring-serverheartbeatsucceededevent.gethost","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatSucceededEvent::getHost","description":"Returns the hostname of the server","tag":"refentry","type":"Function","methodName":"getHost"},{"id":"mongodb-driver-monitoring-serverheartbeatsucceededevent.getport","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatSucceededEvent::getPort","description":"Returns the port on which this server is listening","tag":"refentry","type":"Function","methodName":"getPort"},{"id":"mongodb-driver-monitoring-serverheartbeatsucceededevent.getreply","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatSucceededEvent::getReply","description":"Returns the heartbeat reply document","tag":"refentry","type":"Function","methodName":"getReply"},{"id":"mongodb-driver-monitoring-serverheartbeatsucceededevent.isawaited","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatSucceededEvent::isAwaited","description":"Returns whether the heartbeat used a streaming protocol","tag":"refentry","type":"Function","methodName":"isAwaited"},{"id":"class.mongodb-driver-monitoring-serverheartbeatsucceededevent","name":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatSucceededEvent","description":"The MongoDB\\Driver\\Monitoring\\ServerHeartbeatSucceededEvent class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\ServerHeartbeatSucceededEvent"},{"id":"mongodb-driver-monitoring-topologychangedevent.getnewdescription","name":"MongoDB\\Driver\\Monitoring\\TopologyChangedEvent::getNewDescription","description":"Returns the new description for the topology","tag":"refentry","type":"Function","methodName":"getNewDescription"},{"id":"mongodb-driver-monitoring-topologychangedevent.getpreviousdescription","name":"MongoDB\\Driver\\Monitoring\\TopologyChangedEvent::getPreviousDescription","description":"Returns the previous description for the topology","tag":"refentry","type":"Function","methodName":"getPreviousDescription"},{"id":"mongodb-driver-monitoring-topologychangedevent.gettopologyid","name":"MongoDB\\Driver\\Monitoring\\TopologyChangedEvent::getTopologyId","description":"Returns the topology ID","tag":"refentry","type":"Function","methodName":"getTopologyId"},{"id":"class.mongodb-driver-monitoring-topologychangedevent","name":"MongoDB\\Driver\\Monitoring\\TopologyChangedEvent","description":"The MongoDB\\Driver\\Monitoring\\TopologyChangedEvent class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\TopologyChangedEvent"},{"id":"mongodb-driver-monitoring-topologyclosedevent.gettopologyid","name":"MongoDB\\Driver\\Monitoring\\TopologyClosedEvent::getTopologyId","description":"Returns the topology ID","tag":"refentry","type":"Function","methodName":"getTopologyId"},{"id":"class.mongodb-driver-monitoring-topologyclosedevent","name":"MongoDB\\Driver\\Monitoring\\TopologyClosedEvent","description":"The MongoDB\\Driver\\Monitoring\\TopologyClosedEvent class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\TopologyClosedEvent"},{"id":"mongodb-driver-monitoring-topologyopeningevent.gettopologyid","name":"MongoDB\\Driver\\Monitoring\\TopologyOpeningEvent::getTopologyId","description":"Returns the topology ID","tag":"refentry","type":"Function","methodName":"getTopologyId"},{"id":"class.mongodb-driver-monitoring-topologyopeningevent","name":"MongoDB\\Driver\\Monitoring\\TopologyOpeningEvent","description":"The MongoDB\\Driver\\Monitoring\\TopologyOpeningEvent class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\TopologyOpeningEvent"},{"id":"mongodb-driver-monitoring-commandsubscriber.commandfailed","name":"MongoDB\\Driver\\Monitoring\\CommandSubscriber::commandFailed","description":"Notification method for a failed command","tag":"refentry","type":"Function","methodName":"commandFailed"},{"id":"mongodb-driver-monitoring-commandsubscriber.commandstarted","name":"MongoDB\\Driver\\Monitoring\\CommandSubscriber::commandStarted","description":"Notification method for a started command","tag":"refentry","type":"Function","methodName":"commandStarted"},{"id":"mongodb-driver-monitoring-commandsubscriber.commandsucceeded","name":"MongoDB\\Driver\\Monitoring\\CommandSubscriber::commandSucceeded","description":"Notification method for a successful command","tag":"refentry","type":"Function","methodName":"commandSucceeded"},{"id":"class.mongodb-driver-monitoring-commandsubscriber","name":"MongoDB\\Driver\\Monitoring\\CommandSubscriber","description":"The MongoDB\\Driver\\Monitoring\\CommandSubscriber interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\CommandSubscriber"},{"id":"mongodb-driver-monitoring-logsubscriber.log","name":"MongoDB\\Driver\\Monitoring\\LogSubscriber::log","description":"Notification method for a log message","tag":"refentry","type":"Function","methodName":"log"},{"id":"class.mongodb-driver-monitoring-logsubscriber","name":"MongoDB\\Driver\\Monitoring\\LogSubscriber","description":"The MongoDB\\Driver\\Monitoring\\LogSubscriber interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\LogSubscriber"},{"id":"mongodb-driver-monitoring-sdamsubscriber.serverchanged","name":"MongoDB\\Driver\\Monitoring\\SDAMSubscriber::serverChanged","description":"Notification method for a server description change","tag":"refentry","type":"Function","methodName":"serverChanged"},{"id":"mongodb-driver-monitoring-sdamsubscriber.serverclosed","name":"MongoDB\\Driver\\Monitoring\\SDAMSubscriber::serverClosed","description":"Notification method for closing a server","tag":"refentry","type":"Function","methodName":"serverClosed"},{"id":"mongodb-driver-monitoring-sdamsubscriber.serverheartbeatfailed","name":"MongoDB\\Driver\\Monitoring\\SDAMSubscriber::serverHeartbeatFailed","description":"Notification method for a failed server heartbeat","tag":"refentry","type":"Function","methodName":"serverHeartbeatFailed"},{"id":"mongodb-driver-monitoring-sdamsubscriber.serverheartbeatstarted","name":"MongoDB\\Driver\\Monitoring\\SDAMSubscriber::serverHeartbeatStarted","description":"Notification method for a started server heartbeat","tag":"refentry","type":"Function","methodName":"serverHeartbeatStarted"},{"id":"mongodb-driver-monitoring-sdamsubscriber.serverheartbeatsucceeded","name":"MongoDB\\Driver\\Monitoring\\SDAMSubscriber::serverHeartbeatSucceeded","description":"Notification method for a successful server heartbeat","tag":"refentry","type":"Function","methodName":"serverHeartbeatSucceeded"},{"id":"mongodb-driver-monitoring-sdamsubscriber.serveropening","name":"MongoDB\\Driver\\Monitoring\\SDAMSubscriber::serverOpening","description":"Notification method for opening a server","tag":"refentry","type":"Function","methodName":"serverOpening"},{"id":"mongodb-driver-monitoring-sdamsubscriber.topologychanged","name":"MongoDB\\Driver\\Monitoring\\SDAMSubscriber::topologyChanged","description":"Notification method for a topology description change","tag":"refentry","type":"Function","methodName":"topologyChanged"},{"id":"mongodb-driver-monitoring-sdamsubscriber.topologyclosed","name":"MongoDB\\Driver\\Monitoring\\SDAMSubscriber::topologyClosed","description":"Notification method for closing the topology","tag":"refentry","type":"Function","methodName":"topologyClosed"},{"id":"mongodb-driver-monitoring-sdamsubscriber.topologyopening","name":"MongoDB\\Driver\\Monitoring\\SDAMSubscriber::topologyOpening","description":"Notification method for opening the topology","tag":"refentry","type":"Function","methodName":"topologyOpening"},{"id":"class.mongodb-driver-monitoring-sdamsubscriber","name":"MongoDB\\Driver\\Monitoring\\SDAMSubscriber","description":"The MongoDB\\Driver\\Monitoring\\SDAMSubscriber interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\SDAMSubscriber"},{"id":"class.mongodb-driver-monitoring-subscriber","name":"MongoDB\\Driver\\Monitoring\\Subscriber","description":"The MongoDB\\Driver\\Monitoring\\Subscriber interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Monitoring\\Subscriber"},{"id":"mongodb.monitoring","name":"MongoDB\\Driver\\Monitoring","description":"Monitoring classes and subscriber functions","tag":"part","type":"General","methodName":"MongoDB\\Driver\\Monitoring"},{"id":"class.mongodb-driver-exception-authenticationexception","name":"MongoDB\\Driver\\Exception\\AuthenticationException","description":"The MongoDB\\Driver\\Exception\\AuthenticationException class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\AuthenticationException"},{"id":"mongodb-driver-bulkwriteexception.getwriteresult","name":"MongoDB\\Driver\\Exception\\BulkWriteException::getWriteResult","description":"Returns the WriteResult for the failed write operation","tag":"refentry","type":"Function","methodName":"getWriteResult"},{"id":"class.mongodb-driver-exception-bulkwriteexception","name":"MongoDB\\Driver\\Exception\\BulkWriteException","description":"The MongoDB\\Driver\\Exception\\BulkWriteException class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\BulkWriteException"},{"id":"mongodb-driver-bulkwritecommandexception.geterrorreply","name":"MongoDB\\Driver\\Exception\\BulkWriteCommandException::getErrorReply","description":"Returns any top-level command error","tag":"refentry","type":"Function","methodName":"getErrorReply"},{"id":"mongodb-driver-bulkwritecommandexception.getpartialresult","name":"MongoDB\\Driver\\Exception\\BulkWriteCommandException::getPartialResult","description":"Returns the result of any successful write operations","tag":"refentry","type":"Function","methodName":"getPartialResult"},{"id":"mongodb-driver-bulkwritecommandexception.getwriteconcernerrors","name":"MongoDB\\Driver\\Exception\\BulkWriteCommandException::getWriteConcernErrors","description":"Returns any write concern errors","tag":"refentry","type":"Function","methodName":"getWriteConcernErrors"},{"id":"mongodb-driver-bulkwritecommandexception.getwriteerrors","name":"MongoDB\\Driver\\Exception\\BulkWriteCommandException::getWriteErrors","description":"Returns any write errors","tag":"refentry","type":"Function","methodName":"getWriteErrors"},{"id":"class.mongodb-driver-exception-bulkwritecommandexception","name":"MongoDB\\Driver\\Exception\\BulkWriteCommandException","description":"The MongoDB\\Driver\\Exception\\BulkWriteCommandException class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\BulkWriteCommandException"},{"id":"mongodb-driver-commandexception.getresultdocument","name":"MongoDB\\Driver\\Exception\\CommandException::getResultDocument","description":"Returns the result document for the failed command","tag":"refentry","type":"Function","methodName":"getResultDocument"},{"id":"class.mongodb-driver-exception-commandexception","name":"MongoDB\\Driver\\Exception\\CommandException","description":"The MongoDB\\Driver\\Exception\\CommandException class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\CommandException"},{"id":"class.mongodb-driver-exception-connectionexception","name":"MongoDB\\Driver\\Exception\\ConnectionException","description":"The MongoDB\\Driver\\Exception\\ConnectionException class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\ConnectionException"},{"id":"class.mongodb-driver-exception-connectiontimeoutexception","name":"MongoDB\\Driver\\Exception\\ConnectionTimeoutException","description":"The MongoDB\\Driver\\Exception\\ConnectionTimeoutException class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\ConnectionTimeoutException"},{"id":"class.mongodb-driver-exception-encryptionexception","name":"MongoDB\\Driver\\Exception\\EncryptionException","description":"The MongoDB\\Driver\\Exception\\EncryptionException class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\EncryptionException"},{"id":"class.mongodb-driver-exception-exception","name":"MongoDB\\Driver\\Exception\\Exception","description":"The MongoDB\\Driver\\Exception\\Exception interface","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\Exception"},{"id":"class.mongodb-driver-exception-executiontimeoutexception","name":"MongoDB\\Driver\\Exception\\ExecutionTimeoutException","description":"The MongoDB\\Driver\\Exception\\ExecutionTimeoutException class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\ExecutionTimeoutException"},{"id":"class.mongodb-driver-exception-invalidargumentexception","name":"MongoDB\\Driver\\Exception\\InvalidArgumentException","description":"The MongoDB\\Driver\\Exception\\InvalidArgumentException class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\InvalidArgumentException"},{"id":"class.mongodb-driver-exception-logicexception","name":"MongoDB\\Driver\\Exception\\LogicException","description":"The MongoDB\\Driver\\Exception\\LogicException class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\LogicException"},{"id":"mongodb-driver-runtimeexception.haserrorlabel","name":"MongoDB\\Driver\\Exception\\RuntimeException::hasErrorLabel","description":"Returns whether an error label is associated with an exception","tag":"refentry","type":"Function","methodName":"hasErrorLabel"},{"id":"class.mongodb-driver-exception-runtimeexception","name":"MongoDB\\Driver\\Exception\\RuntimeException","description":"The MongoDB\\Driver\\Exception\\RuntimeException class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\RuntimeException"},{"id":"class.mongodb-driver-exception-serverexception","name":"MongoDB\\Driver\\Exception\\ServerException","description":"The MongoDB\\Driver\\Exception\\ServerException class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\ServerException"},{"id":"class.mongodb-driver-exception-sslconnectionexception","name":"MongoDB\\Driver\\Exception\\SSLConnectionException","description":"The MongoDB\\Driver\\Exception\\SSLConnectionException class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\SSLConnectionException"},{"id":"class.mongodb-driver-exception-unexpectedvalueexception","name":"MongoDB\\Driver\\Exception\\UnexpectedValueException","description":"The MongoDB\\Driver\\Exception\\UnexpectedValueException class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\UnexpectedValueException"},{"id":"mongodb-driver-writeexception.getwriteresult","name":"MongoDB\\Driver\\Exception\\WriteException::getWriteResult","description":"Returns the WriteResult for the failed write operation","tag":"refentry","type":"Function","methodName":"getWriteResult"},{"id":"class.mongodb-driver-exception-writeexception","name":"MongoDB\\Driver\\Exception\\WriteException","description":"The MongoDB\\Driver\\Exception\\WriteException class","tag":"phpdoc:classref","type":"Class","methodName":"MongoDB\\Driver\\Exception\\WriteException"},{"id":"mongodb.exceptions.tree","name":"Class Tree","description":"MongoDB Exception Class Tree","tag":"article","type":"General","methodName":"Class Tree"},{"id":"mongodb.exceptions","name":"MongoDB\\Driver\\Exception","description":"Exception classes","tag":"part","type":"General","methodName":"MongoDB\\Driver\\Exception"},{"id":"book.mongodb","name":"MongoDB","description":"MongoDB Extension","tag":"book","type":"Extension","methodName":"MongoDB"},{"id":"mysqlinfo.intro","name":"Introduction","description":"Overview of the MySQL PHP drivers","tag":"preface","type":"General","methodName":"Introduction"},{"id":"mysqlinfo.terminology","name":"Terminology overview","description":"Overview of the MySQL PHP drivers","tag":"chapter","type":"General","methodName":"Terminology overview"},{"id":"mysqlinfo.api.choosing","name":"Choosing an API","description":"Overview of the MySQL PHP drivers","tag":"chapter","type":"General","methodName":"Choosing an API"},{"id":"mysqlinfo.library.choosing","name":"Choosing a library","description":"Overview of the MySQL PHP drivers","tag":"chapter","type":"General","methodName":"Choosing a library"},{"id":"mysqlinfo.concepts.buffering","name":"Buffered and Unbuffered queries","description":"Overview of the MySQL PHP drivers","tag":"section","type":"General","methodName":"Buffered and Unbuffered queries"},{"id":"mysqlinfo.concepts.charset","name":"Character sets","description":"Overview of the MySQL PHP drivers","tag":"section","type":"General","methodName":"Character sets"},{"id":"mysqlinfo.concepts","name":"Concepts","description":"Overview of the MySQL PHP drivers","tag":"chapter","type":"General","methodName":"Concepts"},{"id":"mysql","name":"Overview of the MySQL PHP drivers","description":"MySQL Drivers and Plugins","tag":"book","type":"Extension","methodName":"Overview of the MySQL PHP drivers"},{"id":"intro.mysqli","name":"Introduction","description":"MySQL Improved Extension","tag":"preface","type":"General","methodName":"Introduction"},{"id":"mysqli.overview","name":"Overview","description":"MySQL Improved Extension","tag":"chapter","type":"General","methodName":"Overview"},{"id":"mysqli.quickstart.dual-interface","name":"Dual procedural and object-oriented interface","description":"MySQL Improved Extension","tag":"section","type":"General","methodName":"Dual procedural and object-oriented interface"},{"id":"mysqli.quickstart.connections","name":"Connections","description":"MySQL Improved Extension","tag":"section","type":"General","methodName":"Connections"},{"id":"mysqli.quickstart.statements","name":"Executing statements","description":"MySQL Improved Extension","tag":"section","type":"General","methodName":"Executing statements"},{"id":"mysqli.quickstart.prepared-statements","name":"Prepared Statements","description":"MySQL Improved Extension","tag":"section","type":"General","methodName":"Prepared Statements"},{"id":"mysqli.quickstart.stored-procedures","name":"Stored Procedures","description":"MySQL Improved Extension","tag":"section","type":"General","methodName":"Stored Procedures"},{"id":"mysqli.quickstart.multiple-statement","name":"Multiple Statements","description":"MySQL Improved Extension","tag":"section","type":"General","methodName":"Multiple Statements"},{"id":"mysqli.quickstart.transactions","name":"API support for transactions","description":"MySQL Improved Extension","tag":"section","type":"General","methodName":"API support for transactions"},{"id":"mysqli.quickstart.metadata","name":"Metadata","description":"MySQL Improved Extension","tag":"section","type":"General","methodName":"Metadata"},{"id":"mysqli.quickstart","name":"Quick start guide","description":"MySQL Improved Extension","tag":"chapter","type":"General","methodName":"Quick start guide"},{"id":"mysqli.requirements","name":"Requirements","description":"MySQL Improved Extension","tag":"section","type":"General","methodName":"Requirements"},{"id":"mysqli.installation","name":"Installation","description":"MySQL Improved Extension","tag":"section","type":"General","methodName":"Installation"},{"id":"mysqli.configuration","name":"Runtime Configuration","description":"MySQL Improved Extension","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"mysqli.setup","name":"Installing\/Configuring","description":"MySQL Improved Extension","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"mysqli.persistconns","name":"The mysqli Extension and Persistent Connections","description":"MySQL Improved Extension","tag":"chapter","type":"General","methodName":"The mysqli Extension and Persistent Connections"},{"id":"mysqli.constants","name":"Predefined Constants","description":"MySQL Improved Extension","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"mysqli.notes","name":"Notes","description":"MySQL Improved Extension","tag":"chapter","type":"General","methodName":"Notes"},{"id":"mysqli.summary","name":"The MySQLi Extension Function Summary","description":"MySQL Improved Extension","tag":"chapter","type":"General","methodName":"The MySQLi Extension Function Summary"},{"id":"mysqli.affected-rows","name":"mysqli_affected_rows","description":"Gets the number of affected rows in a previous MySQL operation","tag":"refentry","type":"Function","methodName":"mysqli_affected_rows"},{"id":"mysqli.affected-rows","name":"mysqli::$affected_rows","description":"Gets the number of affected rows in a previous MySQL operation","tag":"refentry","type":"Function","methodName":"$affected_rows"},{"id":"mysqli.autocommit","name":"mysqli_autocommit","description":"Turns on or off auto-committing database modifications","tag":"refentry","type":"Function","methodName":"mysqli_autocommit"},{"id":"mysqli.autocommit","name":"mysqli::autocommit","description":"Turns on or off auto-committing database modifications","tag":"refentry","type":"Function","methodName":"autocommit"},{"id":"mysqli.begin-transaction","name":"mysqli_begin_transaction","description":"Starts a transaction","tag":"refentry","type":"Function","methodName":"mysqli_begin_transaction"},{"id":"mysqli.begin-transaction","name":"mysqli::begin_transaction","description":"Starts a transaction","tag":"refentry","type":"Function","methodName":"begin_transaction"},{"id":"mysqli.change-user","name":"mysqli_change_user","description":"Changes the user of the database connection","tag":"refentry","type":"Function","methodName":"mysqli_change_user"},{"id":"mysqli.change-user","name":"mysqli::change_user","description":"Changes the user of the database connection","tag":"refentry","type":"Function","methodName":"change_user"},{"id":"mysqli.character-set-name","name":"mysqli_character_set_name","description":"Returns the current character set of the database connection","tag":"refentry","type":"Function","methodName":"mysqli_character_set_name"},{"id":"mysqli.character-set-name","name":"mysqli::character_set_name","description":"Returns the current character set of the database connection","tag":"refentry","type":"Function","methodName":"character_set_name"},{"id":"mysqli.close","name":"mysqli_close","description":"Closes a previously opened database connection","tag":"refentry","type":"Function","methodName":"mysqli_close"},{"id":"mysqli.close","name":"mysqli::close","description":"Closes a previously opened database connection","tag":"refentry","type":"Function","methodName":"close"},{"id":"mysqli.commit","name":"mysqli_commit","description":"Commits the current transaction","tag":"refentry","type":"Function","methodName":"mysqli_commit"},{"id":"mysqli.commit","name":"mysqli::commit","description":"Commits the current transaction","tag":"refentry","type":"Function","methodName":"commit"},{"id":"mysqli.connect-errno","name":"mysqli_connect_errno","description":"Returns the error code from last connect call","tag":"refentry","type":"Function","methodName":"mysqli_connect_errno"},{"id":"mysqli.connect-errno","name":"mysqli::$connect_errno","description":"Returns the error code from last connect call","tag":"refentry","type":"Function","methodName":"$connect_errno"},{"id":"mysqli.connect-error","name":"mysqli_connect_error","description":"Returns a description of the last connection error","tag":"refentry","type":"Function","methodName":"mysqli_connect_error"},{"id":"mysqli.connect-error","name":"mysqli::$connect_error","description":"Returns a description of the last connection error","tag":"refentry","type":"Function","methodName":"$connect_error"},{"id":"mysqli.construct","name":"mysqli_connect","description":"Open a new connection to the MySQL server","tag":"refentry","type":"Function","methodName":"mysqli_connect"},{"id":"mysqli.construct","name":"mysqli::connect","description":"Open a new connection to the MySQL server","tag":"refentry","type":"Function","methodName":"connect"},{"id":"mysqli.construct","name":"mysqli::__construct","description":"Open a new connection to the MySQL server","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysqli.debug","name":"mysqli_debug","description":"Performs debugging operations","tag":"refentry","type":"Function","methodName":"mysqli_debug"},{"id":"mysqli.debug","name":"mysqli::debug","description":"Performs debugging operations","tag":"refentry","type":"Function","methodName":"debug"},{"id":"mysqli.dump-debug-info","name":"mysqli_dump_debug_info","description":"Dump debugging information into the log","tag":"refentry","type":"Function","methodName":"mysqli_dump_debug_info"},{"id":"mysqli.dump-debug-info","name":"mysqli::dump_debug_info","description":"Dump debugging information into the log","tag":"refentry","type":"Function","methodName":"dump_debug_info"},{"id":"mysqli.errno","name":"mysqli_errno","description":"Returns the error code for the most recent function call","tag":"refentry","type":"Function","methodName":"mysqli_errno"},{"id":"mysqli.errno","name":"mysqli::$errno","description":"Returns the error code for the most recent function call","tag":"refentry","type":"Function","methodName":"$errno"},{"id":"mysqli.error","name":"mysqli_error","description":"Returns a string description of the last error","tag":"refentry","type":"Function","methodName":"mysqli_error"},{"id":"mysqli.error","name":"mysqli::$error","description":"Returns a string description of the last error","tag":"refentry","type":"Function","methodName":"$error"},{"id":"mysqli.error-list","name":"mysqli_error_list","description":"Returns a list of errors from the last command executed","tag":"refentry","type":"Function","methodName":"mysqli_error_list"},{"id":"mysqli.error-list","name":"mysqli::$error_list","description":"Returns a list of errors from the last command executed","tag":"refentry","type":"Function","methodName":"$error_list"},{"id":"mysqli.execute-query","name":"mysqli_execute_query","description":"Prepares, binds parameters, and executes SQL statement","tag":"refentry","type":"Function","methodName":"mysqli_execute_query"},{"id":"mysqli.execute-query","name":"mysqli::execute_query","description":"Prepares, binds parameters, and executes SQL statement","tag":"refentry","type":"Function","methodName":"execute_query"},{"id":"mysqli.field-count","name":"mysqli_field_count","description":"Returns the number of columns for the most recent query","tag":"refentry","type":"Function","methodName":"mysqli_field_count"},{"id":"mysqli.field-count","name":"mysqli::$field_count","description":"Returns the number of columns for the most recent query","tag":"refentry","type":"Function","methodName":"$field_count"},{"id":"mysqli.get-charset","name":"mysqli_get_charset","description":"Returns a character set object","tag":"refentry","type":"Function","methodName":"mysqli_get_charset"},{"id":"mysqli.get-charset","name":"mysqli::get_charset","description":"Returns a character set object","tag":"refentry","type":"Function","methodName":"get_charset"},{"id":"mysqli.get-client-info","name":"mysqli_get_client_info","description":"Get MySQL client info","tag":"refentry","type":"Function","methodName":"mysqli_get_client_info"},{"id":"mysqli.get-client-info","name":"mysqli::get_client_info","description":"Get MySQL client info","tag":"refentry","type":"Function","methodName":"get_client_info"},{"id":"mysqli.get-client-info","name":"mysqli::$client_info","description":"Get MySQL client info","tag":"refentry","type":"Function","methodName":"$client_info"},{"id":"mysqli.get-client-version","name":"mysqli_get_client_version","description":"Returns the MySQL client version as an integer","tag":"refentry","type":"Function","methodName":"mysqli_get_client_version"},{"id":"mysqli.get-client-version","name":"mysqli::$client_version","description":"Returns the MySQL client version as an integer","tag":"refentry","type":"Function","methodName":"$client_version"},{"id":"mysqli.get-connection-stats","name":"mysqli_get_connection_stats","description":"Returns statistics about the client connection","tag":"refentry","type":"Function","methodName":"mysqli_get_connection_stats"},{"id":"mysqli.get-connection-stats","name":"mysqli::get_connection_stats","description":"Returns statistics about the client connection","tag":"refentry","type":"Function","methodName":"get_connection_stats"},{"id":"mysqli.get-host-info","name":"mysqli_get_host_info","description":"Returns a string representing the type of connection used","tag":"refentry","type":"Function","methodName":"mysqli_get_host_info"},{"id":"mysqli.get-host-info","name":"mysqli::$host_info","description":"Returns a string representing the type of connection used","tag":"refentry","type":"Function","methodName":"$host_info"},{"id":"mysqli.get-proto-info","name":"mysqli_get_proto_info","description":"Returns the version of the MySQL protocol used","tag":"refentry","type":"Function","methodName":"mysqli_get_proto_info"},{"id":"mysqli.get-proto-info","name":"mysqli::$protocol_version","description":"Returns the version of the MySQL protocol used","tag":"refentry","type":"Function","methodName":"$protocol_version"},{"id":"mysqli.get-server-info","name":"mysqli_get_server_info","description":"Returns the version of the MySQL server","tag":"refentry","type":"Function","methodName":"mysqli_get_server_info"},{"id":"mysqli.get-server-info","name":"mysqli::get_server_info","description":"Returns the version of the MySQL server","tag":"refentry","type":"Function","methodName":"get_server_info"},{"id":"mysqli.get-server-info","name":"mysqli::$server_info","description":"Returns the version of the MySQL server","tag":"refentry","type":"Function","methodName":"$server_info"},{"id":"mysqli.get-server-version","name":"mysqli_get_server_version","description":"Returns the version of the MySQL server as an integer","tag":"refentry","type":"Function","methodName":"mysqli_get_server_version"},{"id":"mysqli.get-server-version","name":"mysqli::$server_version","description":"Returns the version of the MySQL server as an integer","tag":"refentry","type":"Function","methodName":"$server_version"},{"id":"mysqli.get-warnings","name":"mysqli_get_warnings","description":"Get result of SHOW WARNINGS","tag":"refentry","type":"Function","methodName":"mysqli_get_warnings"},{"id":"mysqli.get-warnings","name":"mysqli::get_warnings","description":"Get result of SHOW WARNINGS","tag":"refentry","type":"Function","methodName":"get_warnings"},{"id":"mysqli.info","name":"mysqli_info","description":"Retrieves information about the most recently executed query","tag":"refentry","type":"Function","methodName":"mysqli_info"},{"id":"mysqli.info","name":"mysqli::$info","description":"Retrieves information about the most recently executed query","tag":"refentry","type":"Function","methodName":"$info"},{"id":"mysqli.init","name":"mysqli_init","description":"Initializes MySQLi and returns an object for use with mysqli_real_connect()","tag":"refentry","type":"Function","methodName":"mysqli_init"},{"id":"mysqli.init","name":"mysqli::init","description":"Initializes MySQLi and returns an object for use with mysqli_real_connect()","tag":"refentry","type":"Function","methodName":"init"},{"id":"mysqli.insert-id","name":"mysqli_insert_id","description":"Returns the value generated for an AUTO_INCREMENT column by the last query","tag":"refentry","type":"Function","methodName":"mysqli_insert_id"},{"id":"mysqli.insert-id","name":"mysqli::$insert_id","description":"Returns the value generated for an AUTO_INCREMENT column by the last query","tag":"refentry","type":"Function","methodName":"$insert_id"},{"id":"mysqli.kill","name":"mysqli_kill","description":"Asks the server to kill a MySQL thread","tag":"refentry","type":"Function","methodName":"mysqli_kill"},{"id":"mysqli.kill","name":"mysqli::kill","description":"Asks the server to kill a MySQL thread","tag":"refentry","type":"Function","methodName":"kill"},{"id":"mysqli.more-results","name":"mysqli_more_results","description":"Check if there are any more query results from a multi query","tag":"refentry","type":"Function","methodName":"mysqli_more_results"},{"id":"mysqli.more-results","name":"mysqli::more_results","description":"Check if there are any more query results from a multi query","tag":"refentry","type":"Function","methodName":"more_results"},{"id":"mysqli.multi-query","name":"mysqli_multi_query","description":"Performs one or more queries on the database","tag":"refentry","type":"Function","methodName":"mysqli_multi_query"},{"id":"mysqli.multi-query","name":"mysqli::multi_query","description":"Performs one or more queries on the database","tag":"refentry","type":"Function","methodName":"multi_query"},{"id":"mysqli.next-result","name":"mysqli_next_result","description":"Prepare next result from multi_query","tag":"refentry","type":"Function","methodName":"mysqli_next_result"},{"id":"mysqli.next-result","name":"mysqli::next_result","description":"Prepare next result from multi_query","tag":"refentry","type":"Function","methodName":"next_result"},{"id":"mysqli.options","name":"mysqli_options","description":"Set options","tag":"refentry","type":"Function","methodName":"mysqli_options"},{"id":"mysqli.options","name":"mysqli::options","description":"Set options","tag":"refentry","type":"Function","methodName":"options"},{"id":"mysqli.ping","name":"mysqli_ping","description":"Pings a server connection, or tries to reconnect if the connection has gone down","tag":"refentry","type":"Function","methodName":"mysqli_ping"},{"id":"mysqli.ping","name":"mysqli::ping","description":"Pings a server connection, or tries to reconnect if the connection has gone down","tag":"refentry","type":"Function","methodName":"ping"},{"id":"mysqli.poll","name":"mysqli_poll","description":"Poll connections","tag":"refentry","type":"Function","methodName":"mysqli_poll"},{"id":"mysqli.poll","name":"mysqli::poll","description":"Poll connections","tag":"refentry","type":"Function","methodName":"poll"},{"id":"mysqli.prepare","name":"mysqli_prepare","description":"Prepares an SQL statement for execution","tag":"refentry","type":"Function","methodName":"mysqli_prepare"},{"id":"mysqli.prepare","name":"mysqli::prepare","description":"Prepares an SQL statement for execution","tag":"refentry","type":"Function","methodName":"prepare"},{"id":"mysqli.query","name":"mysqli_query","description":"Performs a query on the database","tag":"refentry","type":"Function","methodName":"mysqli_query"},{"id":"mysqli.query","name":"mysqli::query","description":"Performs a query on the database","tag":"refentry","type":"Function","methodName":"query"},{"id":"mysqli.real-connect","name":"mysqli_real_connect","description":"Opens a connection to a mysql server","tag":"refentry","type":"Function","methodName":"mysqli_real_connect"},{"id":"mysqli.real-connect","name":"mysqli::real_connect","description":"Opens a connection to a mysql server","tag":"refentry","type":"Function","methodName":"real_connect"},{"id":"mysqli.real-escape-string","name":"mysqli_real_escape_string","description":"Escapes special characters in a string for use in an SQL statement, taking into account the current charset of the connection","tag":"refentry","type":"Function","methodName":"mysqli_real_escape_string"},{"id":"mysqli.real-escape-string","name":"mysqli::real_escape_string","description":"Escapes special characters in a string for use in an SQL statement, taking into account the current charset of the connection","tag":"refentry","type":"Function","methodName":"real_escape_string"},{"id":"mysqli.real-query","name":"mysqli_real_query","description":"Execute an SQL query","tag":"refentry","type":"Function","methodName":"mysqli_real_query"},{"id":"mysqli.real-query","name":"mysqli::real_query","description":"Execute an SQL query","tag":"refentry","type":"Function","methodName":"real_query"},{"id":"mysqli.reap-async-query","name":"mysqli_reap_async_query","description":"Get result from async query","tag":"refentry","type":"Function","methodName":"mysqli_reap_async_query"},{"id":"mysqli.reap-async-query","name":"mysqli::reap_async_query","description":"Get result from async query","tag":"refentry","type":"Function","methodName":"reap_async_query"},{"id":"mysqli.refresh","name":"mysqli_refresh","description":"Refreshes","tag":"refentry","type":"Function","methodName":"mysqli_refresh"},{"id":"mysqli.refresh","name":"mysqli::refresh","description":"Refreshes","tag":"refentry","type":"Function","methodName":"refresh"},{"id":"mysqli.release-savepoint","name":"mysqli_release_savepoint","description":"Removes the named savepoint from the set of savepoints of the current transaction","tag":"refentry","type":"Function","methodName":"mysqli_release_savepoint"},{"id":"mysqli.release-savepoint","name":"mysqli::release_savepoint","description":"Removes the named savepoint from the set of savepoints of the current transaction","tag":"refentry","type":"Function","methodName":"release_savepoint"},{"id":"mysqli.rollback","name":"mysqli_rollback","description":"Rolls back current transaction","tag":"refentry","type":"Function","methodName":"mysqli_rollback"},{"id":"mysqli.rollback","name":"mysqli::rollback","description":"Rolls back current transaction","tag":"refentry","type":"Function","methodName":"rollback"},{"id":"mysqli.savepoint","name":"mysqli_savepoint","description":"Set a named transaction savepoint","tag":"refentry","type":"Function","methodName":"mysqli_savepoint"},{"id":"mysqli.savepoint","name":"mysqli::savepoint","description":"Set a named transaction savepoint","tag":"refentry","type":"Function","methodName":"savepoint"},{"id":"mysqli.select-db","name":"mysqli_select_db","description":"Selects the default database for database queries","tag":"refentry","type":"Function","methodName":"mysqli_select_db"},{"id":"mysqli.select-db","name":"mysqli::select_db","description":"Selects the default database for database queries","tag":"refentry","type":"Function","methodName":"select_db"},{"id":"mysqli.set-charset","name":"mysqli_set_charset","description":"Sets the client character set","tag":"refentry","type":"Function","methodName":"mysqli_set_charset"},{"id":"mysqli.set-charset","name":"mysqli::set_charset","description":"Sets the client character set","tag":"refentry","type":"Function","methodName":"set_charset"},{"id":"mysqli.sqlstate","name":"mysqli_sqlstate","description":"Returns the SQLSTATE error from previous MySQL operation","tag":"refentry","type":"Function","methodName":"mysqli_sqlstate"},{"id":"mysqli.sqlstate","name":"mysqli::$sqlstate","description":"Returns the SQLSTATE error from previous MySQL operation","tag":"refentry","type":"Function","methodName":"$sqlstate"},{"id":"mysqli.ssl-set","name":"mysqli_ssl_set","description":"Used for establishing secure connections using SSL","tag":"refentry","type":"Function","methodName":"mysqli_ssl_set"},{"id":"mysqli.ssl-set","name":"mysqli::ssl_set","description":"Used for establishing secure connections using SSL","tag":"refentry","type":"Function","methodName":"ssl_set"},{"id":"mysqli.stat","name":"mysqli_stat","description":"Gets the current system status","tag":"refentry","type":"Function","methodName":"mysqli_stat"},{"id":"mysqli.stat","name":"mysqli::stat","description":"Gets the current system status","tag":"refentry","type":"Function","methodName":"stat"},{"id":"mysqli.stmt-init","name":"mysqli_stmt_init","description":"Initializes a statement and returns an object for use with mysqli_stmt_prepare","tag":"refentry","type":"Function","methodName":"mysqli_stmt_init"},{"id":"mysqli.stmt-init","name":"mysqli::stmt_init","description":"Initializes a statement and returns an object for use with mysqli_stmt_prepare","tag":"refentry","type":"Function","methodName":"stmt_init"},{"id":"mysqli.store-result","name":"mysqli_store_result","description":"Transfers a result set from the last query","tag":"refentry","type":"Function","methodName":"mysqli_store_result"},{"id":"mysqli.store-result","name":"mysqli::store_result","description":"Transfers a result set from the last query","tag":"refentry","type":"Function","methodName":"store_result"},{"id":"mysqli.thread-id","name":"mysqli_thread_id","description":"Returns the thread ID for the current connection","tag":"refentry","type":"Function","methodName":"mysqli_thread_id"},{"id":"mysqli.thread-id","name":"mysqli::$thread_id","description":"Returns the thread ID for the current connection","tag":"refentry","type":"Function","methodName":"$thread_id"},{"id":"mysqli.thread-safe","name":"mysqli_thread_safe","description":"Returns whether thread safety is given or not","tag":"refentry","type":"Function","methodName":"mysqli_thread_safe"},{"id":"mysqli.thread-safe","name":"mysqli::thread_safe","description":"Returns whether thread safety is given or not","tag":"refentry","type":"Function","methodName":"thread_safe"},{"id":"mysqli.use-result","name":"mysqli_use_result","description":"Initiate a result set retrieval","tag":"refentry","type":"Function","methodName":"mysqli_use_result"},{"id":"mysqli.use-result","name":"mysqli::use_result","description":"Initiate a result set retrieval","tag":"refentry","type":"Function","methodName":"use_result"},{"id":"mysqli.warning-count","name":"mysqli_warning_count","description":"Returns the number of warnings generated by the most recently executed query","tag":"refentry","type":"Function","methodName":"mysqli_warning_count"},{"id":"mysqli.warning-count","name":"mysqli::$warning_count","description":"Returns the number of warnings generated by the most recently executed query","tag":"refentry","type":"Function","methodName":"$warning_count"},{"id":"class.mysqli","name":"mysqli","description":"The mysqli class","tag":"phpdoc:classref","type":"Class","methodName":"mysqli"},{"id":"mysqli-stmt.affected-rows","name":"mysqli_stmt_affected_rows","description":"Returns the total number of rows changed, deleted, inserted, or\n matched by the last statement executed","tag":"refentry","type":"Function","methodName":"mysqli_stmt_affected_rows"},{"id":"mysqli-stmt.affected-rows","name":"mysqli_stmt::$affected_rows","description":"Returns the total number of rows changed, deleted, inserted, or\n matched by the last statement executed","tag":"refentry","type":"Function","methodName":"$affected_rows"},{"id":"mysqli-stmt.attr-get","name":"mysqli_stmt_attr_get","description":"Used to get the current value of a statement attribute","tag":"refentry","type":"Function","methodName":"mysqli_stmt_attr_get"},{"id":"mysqli-stmt.attr-get","name":"mysqli_stmt::attr_get","description":"Used to get the current value of a statement attribute","tag":"refentry","type":"Function","methodName":"attr_get"},{"id":"mysqli-stmt.attr-set","name":"mysqli_stmt_attr_set","description":"Used to modify the behavior of a prepared statement","tag":"refentry","type":"Function","methodName":"mysqli_stmt_attr_set"},{"id":"mysqli-stmt.attr-set","name":"mysqli_stmt::attr_set","description":"Used to modify the behavior of a prepared statement","tag":"refentry","type":"Function","methodName":"attr_set"},{"id":"mysqli-stmt.bind-param","name":"mysqli_stmt_bind_param","description":"Binds variables to a prepared statement as parameters","tag":"refentry","type":"Function","methodName":"mysqli_stmt_bind_param"},{"id":"mysqli-stmt.bind-param","name":"mysqli_stmt::bind_param","description":"Binds variables to a prepared statement as parameters","tag":"refentry","type":"Function","methodName":"bind_param"},{"id":"mysqli-stmt.bind-result","name":"mysqli_stmt_bind_result","description":"Binds variables to a prepared statement for result storage","tag":"refentry","type":"Function","methodName":"mysqli_stmt_bind_result"},{"id":"mysqli-stmt.bind-result","name":"mysqli_stmt::bind_result","description":"Binds variables to a prepared statement for result storage","tag":"refentry","type":"Function","methodName":"bind_result"},{"id":"mysqli-stmt.close","name":"mysqli_stmt_close","description":"Closes a prepared statement","tag":"refentry","type":"Function","methodName":"mysqli_stmt_close"},{"id":"mysqli-stmt.close","name":"mysqli_stmt::close","description":"Closes a prepared statement","tag":"refentry","type":"Function","methodName":"close"},{"id":"mysqli-stmt.construct","name":"mysqli_stmt::__construct","description":"Constructs a new mysqli_stmt object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysqli-stmt.data-seek","name":"mysqli_stmt_data_seek","description":"Adjusts the result pointer to an arbitrary row in the buffered result","tag":"refentry","type":"Function","methodName":"mysqli_stmt_data_seek"},{"id":"mysqli-stmt.data-seek","name":"mysqli_stmt::data_seek","description":"Adjusts the result pointer to an arbitrary row in the buffered result","tag":"refentry","type":"Function","methodName":"data_seek"},{"id":"mysqli-stmt.errno","name":"mysqli_stmt_errno","description":"Returns the error code for the most recent statement call","tag":"refentry","type":"Function","methodName":"mysqli_stmt_errno"},{"id":"mysqli-stmt.errno","name":"mysqli_stmt::$errno","description":"Returns the error code for the most recent statement call","tag":"refentry","type":"Function","methodName":"$errno"},{"id":"mysqli-stmt.error","name":"mysqli_stmt_error","description":"Returns a string description for last statement error","tag":"refentry","type":"Function","methodName":"mysqli_stmt_error"},{"id":"mysqli-stmt.error","name":"mysqli_stmt::$error","description":"Returns a string description for last statement error","tag":"refentry","type":"Function","methodName":"$error"},{"id":"mysqli-stmt.error-list","name":"mysqli_stmt_error_list","description":"Returns a list of errors from the last statement executed","tag":"refentry","type":"Function","methodName":"mysqli_stmt_error_list"},{"id":"mysqli-stmt.error-list","name":"mysqli_stmt::$error_list","description":"Returns a list of errors from the last statement executed","tag":"refentry","type":"Function","methodName":"$error_list"},{"id":"mysqli-stmt.execute","name":"mysqli_stmt_execute","description":"Executes a prepared statement","tag":"refentry","type":"Function","methodName":"mysqli_stmt_execute"},{"id":"mysqli-stmt.execute","name":"mysqli_stmt::execute","description":"Executes a prepared statement","tag":"refentry","type":"Function","methodName":"execute"},{"id":"mysqli-stmt.fetch","name":"mysqli_stmt_fetch","description":"Fetch results from a prepared statement into the bound variables","tag":"refentry","type":"Function","methodName":"mysqli_stmt_fetch"},{"id":"mysqli-stmt.fetch","name":"mysqli_stmt::fetch","description":"Fetch results from a prepared statement into the bound variables","tag":"refentry","type":"Function","methodName":"fetch"},{"id":"mysqli-stmt.field-count","name":"mysqli_stmt_field_count","description":"Returns the number of columns in the given statement","tag":"refentry","type":"Function","methodName":"mysqli_stmt_field_count"},{"id":"mysqli-stmt.field-count","name":"mysqli_stmt::$field_count","description":"Returns the number of columns in the given statement","tag":"refentry","type":"Function","methodName":"$field_count"},{"id":"mysqli-stmt.free-result","name":"mysqli_stmt_free_result","description":"Frees stored result memory for the given statement handle","tag":"refentry","type":"Function","methodName":"mysqli_stmt_free_result"},{"id":"mysqli-stmt.free-result","name":"mysqli_stmt::free_result","description":"Frees stored result memory for the given statement handle","tag":"refentry","type":"Function","methodName":"free_result"},{"id":"mysqli-stmt.get-result","name":"mysqli_stmt_get_result","description":"Gets a result set from a prepared statement as a mysqli_result object","tag":"refentry","type":"Function","methodName":"mysqli_stmt_get_result"},{"id":"mysqli-stmt.get-result","name":"mysqli_stmt::get_result","description":"Gets a result set from a prepared statement as a mysqli_result object","tag":"refentry","type":"Function","methodName":"get_result"},{"id":"mysqli-stmt.get-warnings","name":"mysqli_stmt_get_warnings","description":"Get result of SHOW WARNINGS","tag":"refentry","type":"Function","methodName":"mysqli_stmt_get_warnings"},{"id":"mysqli-stmt.get-warnings","name":"mysqli_stmt::get_warnings","description":"Get result of SHOW WARNINGS","tag":"refentry","type":"Function","methodName":"get_warnings"},{"id":"mysqli-stmt.insert-id","name":"mysqli_stmt_insert_id","description":"Get the ID generated from the previous INSERT operation","tag":"refentry","type":"Function","methodName":"mysqli_stmt_insert_id"},{"id":"mysqli-stmt.insert-id","name":"mysqli_stmt::$insert_id","description":"Get the ID generated from the previous INSERT operation","tag":"refentry","type":"Function","methodName":"$insert_id"},{"id":"mysqli-stmt.more-results","name":"mysqli_stmt_more_results","description":"Check if there are more query results from a multiple query","tag":"refentry","type":"Function","methodName":"mysqli_stmt_more_results"},{"id":"mysqli-stmt.more-results","name":"mysqli_stmt::more_results","description":"Check if there are more query results from a multiple query","tag":"refentry","type":"Function","methodName":"more_results"},{"id":"mysqli-stmt.next-result","name":"mysqli_stmt_next_result","description":"Reads the next result from a multiple query","tag":"refentry","type":"Function","methodName":"mysqli_stmt_next_result"},{"id":"mysqli-stmt.next-result","name":"mysqli_stmt::next_result","description":"Reads the next result from a multiple query","tag":"refentry","type":"Function","methodName":"next_result"},{"id":"mysqli-stmt.num-rows","name":"mysqli_stmt_num_rows","description":"Returns the number of rows fetched from the server","tag":"refentry","type":"Function","methodName":"mysqli_stmt_num_rows"},{"id":"mysqli-stmt.num-rows","name":"mysqli_stmt::num_rows","description":"Returns the number of rows fetched from the server","tag":"refentry","type":"Function","methodName":"num_rows"},{"id":"mysqli-stmt.num-rows","name":"mysqli_stmt::$num_rows","description":"Returns the number of rows fetched from the server","tag":"refentry","type":"Function","methodName":"$num_rows"},{"id":"mysqli-stmt.param-count","name":"mysqli_stmt_param_count","description":"Returns the number of parameters for the given statement","tag":"refentry","type":"Function","methodName":"mysqli_stmt_param_count"},{"id":"mysqli-stmt.param-count","name":"mysqli_stmt::$param_count","description":"Returns the number of parameters for the given statement","tag":"refentry","type":"Function","methodName":"$param_count"},{"id":"mysqli-stmt.prepare","name":"mysqli_stmt_prepare","description":"Prepares an SQL statement for execution","tag":"refentry","type":"Function","methodName":"mysqli_stmt_prepare"},{"id":"mysqli-stmt.prepare","name":"mysqli_stmt::prepare","description":"Prepares an SQL statement for execution","tag":"refentry","type":"Function","methodName":"prepare"},{"id":"mysqli-stmt.reset","name":"mysqli_stmt_reset","description":"Resets a prepared statement","tag":"refentry","type":"Function","methodName":"mysqli_stmt_reset"},{"id":"mysqli-stmt.reset","name":"mysqli_stmt::reset","description":"Resets a prepared statement","tag":"refentry","type":"Function","methodName":"reset"},{"id":"mysqli-stmt.result-metadata","name":"mysqli_stmt_result_metadata","description":"Returns result set metadata from a prepared statement","tag":"refentry","type":"Function","methodName":"mysqli_stmt_result_metadata"},{"id":"mysqli-stmt.result-metadata","name":"mysqli_stmt::result_metadata","description":"Returns result set metadata from a prepared statement","tag":"refentry","type":"Function","methodName":"result_metadata"},{"id":"mysqli-stmt.send-long-data","name":"mysqli_stmt_send_long_data","description":"Send data in blocks","tag":"refentry","type":"Function","methodName":"mysqli_stmt_send_long_data"},{"id":"mysqli-stmt.send-long-data","name":"mysqli_stmt::send_long_data","description":"Send data in blocks","tag":"refentry","type":"Function","methodName":"send_long_data"},{"id":"mysqli-stmt.sqlstate","name":"mysqli_stmt_sqlstate","description":"Returns SQLSTATE error from previous statement operation","tag":"refentry","type":"Function","methodName":"mysqli_stmt_sqlstate"},{"id":"mysqli-stmt.sqlstate","name":"mysqli_stmt::$sqlstate","description":"Returns SQLSTATE error from previous statement operation","tag":"refentry","type":"Function","methodName":"$sqlstate"},{"id":"mysqli-stmt.store-result","name":"mysqli_stmt_store_result","description":"Stores a result set in an internal buffer","tag":"refentry","type":"Function","methodName":"mysqli_stmt_store_result"},{"id":"mysqli-stmt.store-result","name":"mysqli_stmt::store_result","description":"Stores a result set in an internal buffer","tag":"refentry","type":"Function","methodName":"store_result"},{"id":"class.mysqli-stmt","name":"mysqli_stmt","description":"The mysqli_stmt class","tag":"phpdoc:classref","type":"Class","methodName":"mysqli_stmt"},{"id":"mysqli-result.construct","name":"mysqli_result::__construct","description":"Constructs a mysqli_result object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysqli-result.current-field","name":"mysqli_field_tell","description":"Get current field offset of a result pointer","tag":"refentry","type":"Function","methodName":"mysqli_field_tell"},{"id":"mysqli-result.current-field","name":"mysqli_result::$current_field","description":"Get current field offset of a result pointer","tag":"refentry","type":"Function","methodName":"$current_field"},{"id":"mysqli-result.data-seek","name":"mysqli_data_seek","description":"Adjusts the result pointer to an arbitrary row in the result","tag":"refentry","type":"Function","methodName":"mysqli_data_seek"},{"id":"mysqli-result.data-seek","name":"mysqli_result::data_seek","description":"Adjusts the result pointer to an arbitrary row in the result","tag":"refentry","type":"Function","methodName":"data_seek"},{"id":"mysqli-result.fetch-all","name":"mysqli_fetch_all","description":"Fetch all result rows as an associative array, a numeric array, or both","tag":"refentry","type":"Function","methodName":"mysqli_fetch_all"},{"id":"mysqli-result.fetch-all","name":"mysqli_result::fetch_all","description":"Fetch all result rows as an associative array, a numeric array, or both","tag":"refentry","type":"Function","methodName":"fetch_all"},{"id":"mysqli-result.fetch-array","name":"mysqli_fetch_array","description":"Fetch the next row of a result set as an associative, a numeric array, or both","tag":"refentry","type":"Function","methodName":"mysqli_fetch_array"},{"id":"mysqli-result.fetch-array","name":"mysqli_result::fetch_array","description":"Fetch the next row of a result set as an associative, a numeric array, or both","tag":"refentry","type":"Function","methodName":"fetch_array"},{"id":"mysqli-result.fetch-assoc","name":"mysqli_fetch_assoc","description":"Fetch the next row of a result set as an associative array","tag":"refentry","type":"Function","methodName":"mysqli_fetch_assoc"},{"id":"mysqli-result.fetch-assoc","name":"mysqli_result::fetch_assoc","description":"Fetch the next row of a result set as an associative array","tag":"refentry","type":"Function","methodName":"fetch_assoc"},{"id":"mysqli-result.fetch-column","name":"mysqli_fetch_column","description":"Fetch a single column from the next row of a result set","tag":"refentry","type":"Function","methodName":"mysqli_fetch_column"},{"id":"mysqli-result.fetch-column","name":"mysqli_result::fetch_column","description":"Fetch a single column from the next row of a result set","tag":"refentry","type":"Function","methodName":"fetch_column"},{"id":"mysqli-result.fetch-field","name":"mysqli_fetch_field","description":"Returns the next field in the result set","tag":"refentry","type":"Function","methodName":"mysqli_fetch_field"},{"id":"mysqli-result.fetch-field","name":"mysqli_result::fetch_field","description":"Returns the next field in the result set","tag":"refentry","type":"Function","methodName":"fetch_field"},{"id":"mysqli-result.fetch-field-direct","name":"mysqli_fetch_field_direct","description":"Fetch meta-data for a single field","tag":"refentry","type":"Function","methodName":"mysqli_fetch_field_direct"},{"id":"mysqli-result.fetch-field-direct","name":"mysqli_result::fetch_field_direct","description":"Fetch meta-data for a single field","tag":"refentry","type":"Function","methodName":"fetch_field_direct"},{"id":"mysqli-result.fetch-fields","name":"mysqli_fetch_fields","description":"Returns an array of objects representing the fields in a result set","tag":"refentry","type":"Function","methodName":"mysqli_fetch_fields"},{"id":"mysqli-result.fetch-fields","name":"mysqli_result::fetch_fields","description":"Returns an array of objects representing the fields in a result set","tag":"refentry","type":"Function","methodName":"fetch_fields"},{"id":"mysqli-result.fetch-object","name":"mysqli_fetch_object","description":"Fetch the next row of a result set as an object","tag":"refentry","type":"Function","methodName":"mysqli_fetch_object"},{"id":"mysqli-result.fetch-object","name":"mysqli_result::fetch_object","description":"Fetch the next row of a result set as an object","tag":"refentry","type":"Function","methodName":"fetch_object"},{"id":"mysqli-result.fetch-row","name":"mysqli_fetch_row","description":"Fetch the next row of a result set as an enumerated array","tag":"refentry","type":"Function","methodName":"mysqli_fetch_row"},{"id":"mysqli-result.fetch-row","name":"mysqli_result::fetch_row","description":"Fetch the next row of a result set as an enumerated array","tag":"refentry","type":"Function","methodName":"fetch_row"},{"id":"mysqli-result.field-count","name":"mysqli_num_fields","description":"Gets the number of fields in the result set","tag":"refentry","type":"Function","methodName":"mysqli_num_fields"},{"id":"mysqli-result.field-count","name":"mysqli_result::$field_count","description":"Gets the number of fields in the result set","tag":"refentry","type":"Function","methodName":"$field_count"},{"id":"mysqli-result.field-seek","name":"mysqli_field_seek","description":"Set result pointer to a specified field offset","tag":"refentry","type":"Function","methodName":"mysqli_field_seek"},{"id":"mysqli-result.field-seek","name":"mysqli_result::field_seek","description":"Set result pointer to a specified field offset","tag":"refentry","type":"Function","methodName":"field_seek"},{"id":"mysqli-result.free","name":"mysqli_free_result","description":"Frees the memory associated with a result","tag":"refentry","type":"Function","methodName":"mysqli_free_result"},{"id":"mysqli-result.free","name":"mysqli_result::free_result","description":"Frees the memory associated with a result","tag":"refentry","type":"Function","methodName":"free_result"},{"id":"mysqli-result.free","name":"mysqli_result::close","description":"Frees the memory associated with a result","tag":"refentry","type":"Function","methodName":"close"},{"id":"mysqli-result.free","name":"mysqli_result::free","description":"Frees the memory associated with a result","tag":"refentry","type":"Function","methodName":"free"},{"id":"mysqli-result.getiterator","name":"mysqli_result::getIterator","description":"Retrieve an external iterator","tag":"refentry","type":"Function","methodName":"getIterator"},{"id":"mysqli-result.lengths","name":"mysqli_fetch_lengths","description":"Returns the lengths of the columns of the current row in the result set","tag":"refentry","type":"Function","methodName":"mysqli_fetch_lengths"},{"id":"mysqli-result.lengths","name":"mysqli_result::$lengths","description":"Returns the lengths of the columns of the current row in the result set","tag":"refentry","type":"Function","methodName":"$lengths"},{"id":"mysqli-result.num-rows","name":"mysqli_num_rows","description":"Gets the number of rows in the result set","tag":"refentry","type":"Function","methodName":"mysqli_num_rows"},{"id":"mysqli-result.num-rows","name":"mysqli_result::$num_rows","description":"Gets the number of rows in the result set","tag":"refentry","type":"Function","methodName":"$num_rows"},{"id":"class.mysqli-result","name":"mysqli_result","description":"The mysqli_result class","tag":"phpdoc:classref","type":"Class","methodName":"mysqli_result"},{"id":"mysqli-driver.embedded-server-end","name":"mysqli_embedded_server_end","description":"Stop embedded server","tag":"refentry","type":"Function","methodName":"mysqli_embedded_server_end"},{"id":"mysqli-driver.embedded-server-end","name":"mysqli_driver::embedded_server_end","description":"Stop embedded server","tag":"refentry","type":"Function","methodName":"embedded_server_end"},{"id":"mysqli-driver.embedded-server-start","name":"mysqli_embedded_server_start","description":"Initialize and start embedded server","tag":"refentry","type":"Function","methodName":"mysqli_embedded_server_start"},{"id":"mysqli-driver.embedded-server-start","name":"mysqli_driver::embedded_server_start","description":"Initialize and start embedded server","tag":"refentry","type":"Function","methodName":"embedded_server_start"},{"id":"mysqli-driver.report-mode","name":"mysqli_report","description":"Sets mysqli error reporting mode","tag":"refentry","type":"Function","methodName":"mysqli_report"},{"id":"mysqli-driver.report-mode","name":"mysqli_driver::$report_mode","description":"Sets mysqli error reporting mode","tag":"refentry","type":"Function","methodName":"$report_mode"},{"id":"class.mysqli-driver","name":"mysqli_driver","description":"The mysqli_driver class","tag":"phpdoc:classref","type":"Class","methodName":"mysqli_driver"},{"id":"mysqli-warning.construct","name":"mysqli_warning::__construct","description":"Private constructor to disallow direct instantiation","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysqli-warning.next","name":"mysqli_warning::next","description":"Fetch next warning","tag":"refentry","type":"Function","methodName":"next"},{"id":"class.mysqli-warning","name":"mysqli_warning","description":"The mysqli_warning class","tag":"phpdoc:classref","type":"Class","methodName":"mysqli_warning"},{"id":"mysqli-sql-exception.getsqlstate","name":"mysqli_sql_exception::getSqlState","description":"Returns the SQLSTATE error code","tag":"refentry","type":"Function","methodName":"getSqlState"},{"id":"class.mysqli-sql-exception","name":"mysqli_sql_exception","description":"The mysqli_sql_exception class","tag":"phpdoc:classref","type":"Class","methodName":"mysqli_sql_exception"},{"id":"function.mysqli-connect","name":"mysqli_connect","description":"Alias of mysqli::__construct","tag":"refentry","type":"Function","methodName":"mysqli_connect"},{"id":"function.mysqli-escape-string","name":"mysqli_escape_string","description":"Alias of mysqli_real_escape_string","tag":"refentry","type":"Function","methodName":"mysqli_escape_string"},{"id":"function.mysqli-escape-string","name":"mysqli::escape_string","description":"Alias of mysqli_real_escape_string","tag":"refentry","type":"Function","methodName":"escape_string"},{"id":"function.mysqli-execute","name":"mysqli_execute","description":"Alias of mysqli_stmt_execute","tag":"refentry","type":"Function","methodName":"mysqli_execute"},{"id":"function.mysqli-get-client-stats","name":"mysqli_get_client_stats","description":"Returns client per-process statistics","tag":"refentry","type":"Function","methodName":"mysqli_get_client_stats"},{"id":"function.mysqli-get-links-stats","name":"mysqli_get_links_stats","description":"Return information about open and cached links","tag":"refentry","type":"Function","methodName":"mysqli_get_links_stats"},{"id":"function.mysqli-report","name":"mysqli_report","description":"Alias of mysqli_driver->report_mode","tag":"refentry","type":"Function","methodName":"mysqli_report"},{"id":"function.mysqli-set-opt","name":"mysqli_set_opt","description":"Alias of mysqli_options","tag":"refentry","type":"Function","methodName":"mysqli_set_opt"},{"id":"function.mysqli-set-opt","name":"mysqli::set_opt","description":"Alias of mysqli_options","tag":"refentry","type":"Function","methodName":"set_opt"},{"id":"ref.mysqli","name":"Aliases and deprecated Mysqli Functions","description":"MySQL Improved Extension","tag":"reference","type":"Extension","methodName":"Aliases and deprecated Mysqli Functions"},{"id":"changelog.mysqli","name":"Changelog","description":"MySQL Improved Extension","tag":"appendix","type":"General","methodName":"Changelog"},{"id":"book.mysqli","name":"MySQLi","description":"MySQL Improved Extension","tag":"book","type":"Extension","methodName":"MySQLi"},{"id":"intro.mysql-xdevapi","name":"Introduction","description":"Mysql_xdevapi","tag":"preface","type":"General","methodName":"Introduction"},{"id":"mysql-xdevapi.requirements","name":"Requirements","description":"Mysql_xdevapi","tag":"section","type":"General","methodName":"Requirements"},{"id":"mysql-xdevapi.installation","name":"Installation","description":"Mysql_xdevapi","tag":"section","type":"General","methodName":"Installation"},{"id":"mysql-xdevapi.configuration","name":"Runtime Configuration","description":"Mysql_xdevapi","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"mysql-xdevapi.build","name":"Building \/ Compiling From Source","description":"Mysql_xdevapi","tag":"section","type":"General","methodName":"Building \/ Compiling From Source"},{"id":"mysql-xdevapi.setup","name":"Installing\/Configuring","description":"Mysql_xdevapi","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"mysql-xdevapi.constants","name":"Predefined Constants","description":"Mysql_xdevapi","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"changelog.mysql_xdevapi","name":"Changelog","description":"Mysql_xdevapi","tag":"appendix","type":"General","methodName":"Changelog"},{"id":"mysql-xdevapi.examples","name":"Examples","description":"Mysql_xdevapi","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.mysql-xdevapi-expression","name":"expression","description":"Bind prepared statement variables as parameters","tag":"refentry","type":"Function","methodName":"expression"},{"id":"function.mysql-xdevapi-getsession","name":"getSession","description":"Connect to a MySQL server","tag":"refentry","type":"Function","methodName":"getSession"},{"id":"ref.mysql-xdevapi","name":"Mysql_xdevapi Functions","description":"Mysql_xdevapi","tag":"reference","type":"Extension","methodName":"Mysql_xdevapi Functions"},{"id":"mysql-xdevapi-baseresult.getwarnings","name":"BaseResult::getWarnings","description":"Fetch warnings from last operation","tag":"refentry","type":"Function","methodName":"getWarnings"},{"id":"mysql-xdevapi-baseresult.getwarningscount","name":"BaseResult::getWarningsCount","description":"Fetch warning count from last operation","tag":"refentry","type":"Function","methodName":"getWarningsCount"},{"id":"class.mysql-xdevapi-baseresult","name":"mysql_xdevapi\\BaseResult","description":"BaseResult interface","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\BaseResult"},{"id":"mysql-xdevapi-client.close","name":"mysql_xdevapi\\Client::close","description":"Close client","tag":"refentry","type":"Function","methodName":"close"},{"id":"mysql-xdevapi-client.construct","name":"Client::__construct","description":"Client constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-client.getsession","name":"Client::getClient","description":"Get client session","tag":"refentry","type":"Function","methodName":"getClient"},{"id":"class.mysql-xdevapi-client","name":"mysql_xdevapi\\Client","description":"Client class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\Client"},{"id":"mysql-xdevapi-collection.add","name":"Collection::add","description":"Add collection document","tag":"refentry","type":"Function","methodName":"add"},{"id":"mysql-xdevapi-collection.addorreplaceone","name":"Collection::addOrReplaceOne","description":"Add or replace collection document","tag":"refentry","type":"Function","methodName":"addOrReplaceOne"},{"id":"mysql-xdevapi-collection.construct","name":"Collection::__construct","description":"Collection constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-collection.count","name":"Collection::count","description":"Get document count","tag":"refentry","type":"Function","methodName":"count"},{"id":"mysql-xdevapi-collection.createindex","name":"Collection::createIndex","description":"Create collection index","tag":"refentry","type":"Function","methodName":"createIndex"},{"id":"mysql-xdevapi-collection.dropindex","name":"Collection::dropIndex","description":"Drop collection index","tag":"refentry","type":"Function","methodName":"dropIndex"},{"id":"mysql-xdevapi-collection.existsindatabase","name":"Collection::existsInDatabase","description":"Check if collection exists in database","tag":"refentry","type":"Function","methodName":"existsInDatabase"},{"id":"mysql-xdevapi-collection.find","name":"Collection::find","description":"Search for document","tag":"refentry","type":"Function","methodName":"find"},{"id":"mysql-xdevapi-collection.getname","name":"Collection::getName","description":"Get collection name","tag":"refentry","type":"Function","methodName":"getName"},{"id":"mysql-xdevapi-collection.getone","name":"Collection::getOne","description":"Get one document","tag":"refentry","type":"Function","methodName":"getOne"},{"id":"mysql-xdevapi-collection.getschema","name":"Collection::getSchema","description":"Get schema object","tag":"refentry","type":"Function","methodName":"getSchema"},{"id":"mysql-xdevapi-collection.getsession","name":"Collection::getSession","description":"Get session object","tag":"refentry","type":"Function","methodName":"getSession"},{"id":"mysql-xdevapi-collection.modify","name":"Collection::modify","description":"Modify collection documents","tag":"refentry","type":"Function","methodName":"modify"},{"id":"mysql-xdevapi-collection.remove","name":"Collection::remove","description":"Remove collection documents","tag":"refentry","type":"Function","methodName":"remove"},{"id":"mysql-xdevapi-collection.removeone","name":"Collection::removeOne","description":"Remove one collection document","tag":"refentry","type":"Function","methodName":"removeOne"},{"id":"mysql-xdevapi-collection.replaceone","name":"Collection::replaceOne","description":"Replace one collection document","tag":"refentry","type":"Function","methodName":"replaceOne"},{"id":"class.mysql-xdevapi-collection","name":"mysql_xdevapi\\Collection","description":"Collection class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\Collection"},{"id":"mysql-xdevapi-collectionadd.construct","name":"CollectionAdd::__construct","description":"CollectionAdd constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-collectionadd.execute","name":"CollectionAdd::execute","description":"Execute the statement","tag":"refentry","type":"Function","methodName":"execute"},{"id":"class.mysql-xdevapi-collectionadd","name":"mysql_xdevapi\\CollectionAdd","description":"CollectionAdd class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\CollectionAdd"},{"id":"mysql-xdevapi-collectionfind.bind","name":"CollectionFind::bind","description":"Bind value to query placeholder","tag":"refentry","type":"Function","methodName":"bind"},{"id":"mysql-xdevapi-collectionfind.construct","name":"CollectionFind::__construct","description":"CollectionFind constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-collectionfind.execute","name":"CollectionFind::execute","description":"Execute the statement","tag":"refentry","type":"Function","methodName":"execute"},{"id":"mysql-xdevapi-collectionfind.fields","name":"CollectionFind::fields","description":"Set document field filter","tag":"refentry","type":"Function","methodName":"fields"},{"id":"mysql-xdevapi-collectionfind.groupby","name":"CollectionFind::groupBy","description":"Set grouping criteria","tag":"refentry","type":"Function","methodName":"groupBy"},{"id":"mysql-xdevapi-collectionfind.having","name":"CollectionFind::having","description":"Set condition for aggregate functions","tag":"refentry","type":"Function","methodName":"having"},{"id":"mysql-xdevapi-collectionfind.limit","name":"CollectionFind::limit","description":"Limit number of returned documents","tag":"refentry","type":"Function","methodName":"limit"},{"id":"mysql-xdevapi-collectionfind.lockexclusive","name":"CollectionFind::lockExclusive","description":"Execute operation with EXCLUSIVE LOCK","tag":"refentry","type":"Function","methodName":"lockExclusive"},{"id":"mysql-xdevapi-collectionfind.lockshared","name":"CollectionFind::lockShared","description":"Execute operation with SHARED LOCK","tag":"refentry","type":"Function","methodName":"lockShared"},{"id":"mysql-xdevapi-collectionfind.offset","name":"CollectionFind::offset","description":"Skip given number of elements to be returned","tag":"refentry","type":"Function","methodName":"offset"},{"id":"mysql-xdevapi-collectionfind.sort","name":"CollectionFind::sort","description":"Set the sorting criteria","tag":"refentry","type":"Function","methodName":"sort"},{"id":"class.mysql-xdevapi-collectionfind","name":"mysql_xdevapi\\CollectionFind","description":"CollectionFind class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\CollectionFind"},{"id":"mysql-xdevapi-collectionmodify.arrayappend","name":"CollectionModify::arrayAppend","description":"Append element to an array field","tag":"refentry","type":"Function","methodName":"arrayAppend"},{"id":"mysql-xdevapi-collectionmodify.arrayinsert","name":"CollectionModify::arrayInsert","description":"Insert element into an array field","tag":"refentry","type":"Function","methodName":"arrayInsert"},{"id":"mysql-xdevapi-collectionmodify.bind","name":"CollectionModify::bind","description":"Bind value to query placeholder","tag":"refentry","type":"Function","methodName":"bind"},{"id":"mysql-xdevapi-collectionmodify.construct","name":"CollectionModify::__construct","description":"CollectionModify constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-collectionmodify.execute","name":"CollectionModify::execute","description":"Execute modify operation","tag":"refentry","type":"Function","methodName":"execute"},{"id":"mysql-xdevapi-collectionmodify.limit","name":"CollectionModify::limit","description":"Limit number of modified documents","tag":"refentry","type":"Function","methodName":"limit"},{"id":"mysql-xdevapi-collectionmodify.patch","name":"CollectionModify::patch","description":"Patch document","tag":"refentry","type":"Function","methodName":"patch"},{"id":"mysql-xdevapi-collectionmodify.replace","name":"CollectionModify::replace","description":"Replace document field","tag":"refentry","type":"Function","methodName":"replace"},{"id":"mysql-xdevapi-collectionmodify.set","name":"CollectionModify::set","description":"Set document attribute","tag":"refentry","type":"Function","methodName":"set"},{"id":"mysql-xdevapi-collectionmodify.skip","name":"CollectionModify::skip","description":"Skip elements","tag":"refentry","type":"Function","methodName":"skip"},{"id":"mysql-xdevapi-collectionmodify.sort","name":"CollectionModify::sort","description":"Set the sorting criteria","tag":"refentry","type":"Function","methodName":"sort"},{"id":"mysql-xdevapi-collectionmodify.unset","name":"CollectionModify::unset","description":"Unset the value of document fields","tag":"refentry","type":"Function","methodName":"unset"},{"id":"class.mysql-xdevapi-collectionmodify","name":"mysql_xdevapi\\CollectionModify","description":"CollectionModify class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\CollectionModify"},{"id":"mysql-xdevapi-collectionremove.bind","name":"CollectionRemove::bind","description":"Bind value to placeholder","tag":"refentry","type":"Function","methodName":"bind"},{"id":"mysql-xdevapi-collectionremove.construct","name":"CollectionRemove::__construct","description":"CollectionRemove constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-collectionremove.execute","name":"CollectionRemove::execute","description":"Execute remove operation","tag":"refentry","type":"Function","methodName":"execute"},{"id":"mysql-xdevapi-collectionremove.limit","name":"CollectionRemove::limit","description":"Limit number of documents to remove","tag":"refentry","type":"Function","methodName":"limit"},{"id":"mysql-xdevapi-collectionremove.sort","name":"CollectionRemove::sort","description":"Set the sorting criteria","tag":"refentry","type":"Function","methodName":"sort"},{"id":"class.mysql-xdevapi-collectionremove","name":"mysql_xdevapi\\CollectionRemove","description":"CollectionRemove class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\CollectionRemove"},{"id":"mysql-xdevapi-columnresult.construct","name":"ColumnResult::__construct","description":"ColumnResult constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-columnresult.getcharactersetname","name":"ColumnResult::getCharacterSetName","description":"Get character set","tag":"refentry","type":"Function","methodName":"getCharacterSetName"},{"id":"mysql-xdevapi-columnresult.getcollationname","name":"ColumnResult::getCollationName","description":"Get collation name","tag":"refentry","type":"Function","methodName":"getCollationName"},{"id":"mysql-xdevapi-columnresult.getcolumnlabel","name":"ColumnResult::getColumnLabel","description":"Get column label","tag":"refentry","type":"Function","methodName":"getColumnLabel"},{"id":"mysql-xdevapi-columnresult.getcolumnname","name":"ColumnResult::getColumnName","description":"Get column name","tag":"refentry","type":"Function","methodName":"getColumnName"},{"id":"mysql-xdevapi-columnresult.getfractionaldigits","name":"ColumnResult::getFractionalDigits","description":"Get fractional digit length","tag":"refentry","type":"Function","methodName":"getFractionalDigits"},{"id":"mysql-xdevapi-columnresult.getlength","name":"ColumnResult::getLength","description":"Get column field length","tag":"refentry","type":"Function","methodName":"getLength"},{"id":"mysql-xdevapi-columnresult.getschemaname","name":"ColumnResult::getSchemaName","description":"Get schema name","tag":"refentry","type":"Function","methodName":"getSchemaName"},{"id":"mysql-xdevapi-columnresult.gettablelabel","name":"ColumnResult::getTableLabel","description":"Get table label","tag":"refentry","type":"Function","methodName":"getTableLabel"},{"id":"mysql-xdevapi-columnresult.gettablename","name":"ColumnResult::getTableName","description":"Get table name","tag":"refentry","type":"Function","methodName":"getTableName"},{"id":"mysql-xdevapi-columnresult.gettype","name":"ColumnResult::getType","description":"Get column type","tag":"refentry","type":"Function","methodName":"getType"},{"id":"mysql-xdevapi-columnresult.isnumbersigned","name":"ColumnResult::isNumberSigned","description":"Check if signed type","tag":"refentry","type":"Function","methodName":"isNumberSigned"},{"id":"mysql-xdevapi-columnresult.ispadded","name":"ColumnResult::isPadded","description":"Check if padded","tag":"refentry","type":"Function","methodName":"isPadded"},{"id":"class.mysql-xdevapi-columnresult","name":"mysql_xdevapi\\ColumnResult","description":"ColumnResult class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\ColumnResult"},{"id":"mysql-xdevapi-crudoperationbindable.bind","name":"CrudOperationBindable::bind","description":"Bind value to placeholder","tag":"refentry","type":"Function","methodName":"bind"},{"id":"class.mysql-xdevapi-crudoperationbindable","name":"mysql_xdevapi\\CrudOperationBindable","description":"CrudOperationBindable interface","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\CrudOperationBindable"},{"id":"mysql-xdevapi-crudoperationlimitable.limit","name":"CrudOperationLimitable::limit","description":"Set result limit","tag":"refentry","type":"Function","methodName":"limit"},{"id":"class.mysql-xdevapi-crudoperationlimitable","name":"mysql_xdevapi\\CrudOperationLimitable","description":"CrudOperationLimitable interface","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\CrudOperationLimitable"},{"id":"mysql-xdevapi-crudoperationskippable.skip","name":"CrudOperationSkippable::skip","description":"Number of operations to skip","tag":"refentry","type":"Function","methodName":"skip"},{"id":"class.mysql-xdevapi-crudoperationskippable","name":"mysql_xdevapi\\CrudOperationSkippable","description":"CrudOperationSkippable interface","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\CrudOperationSkippable"},{"id":"mysql-xdevapi-crudoperationsortable.sort","name":"CrudOperationSortable::sort","description":"Sort results","tag":"refentry","type":"Function","methodName":"sort"},{"id":"class.mysql-xdevapi-crudoperationsortable","name":"mysql_xdevapi\\CrudOperationSortable","description":"CrudOperationSortable interface","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\CrudOperationSortable"},{"id":"mysql-xdevapi-databaseobject.existsindatabase","name":"DatabaseObject::existsInDatabase","description":"Check if object exists in database","tag":"refentry","type":"Function","methodName":"existsInDatabase"},{"id":"mysql-xdevapi-databaseobject.getname","name":"DatabaseObject::getName","description":"Get object name","tag":"refentry","type":"Function","methodName":"getName"},{"id":"mysql-xdevapi-databaseobject.getsession","name":"DatabaseObject::getSession","description":"Get session name","tag":"refentry","type":"Function","methodName":"getSession"},{"id":"class.mysql-xdevapi-databaseobject","name":"mysql_xdevapi\\DatabaseObject","description":"DatabaseObject interface","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\DatabaseObject"},{"id":"mysql-xdevapi-docresult.construct","name":"DocResult::__construct","description":"DocResult constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-docresult.fetchall","name":"DocResult::fetchAll","description":"Get all rows","tag":"refentry","type":"Function","methodName":"fetchAll"},{"id":"mysql-xdevapi-docresult.fetchone","name":"DocResult::fetchOne","description":"Get one row","tag":"refentry","type":"Function","methodName":"fetchOne"},{"id":"mysql-xdevapi-docresult.getwarnings","name":"DocResult::getWarnings","description":"Get warnings from last operation","tag":"refentry","type":"Function","methodName":"getWarnings"},{"id":"mysql-xdevapi-docresult.getwarningscount","name":"DocResult::getWarningsCount","description":"Get warning count from last operation","tag":"refentry","type":"Function","methodName":"getWarningsCount"},{"id":"class.mysql-xdevapi-docresult","name":"mysql_xdevapi\\DocResult","description":"DocResult class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\DocResult"},{"id":"class.mysql-xdevapi-exception","name":"mysql_xdevapi\\Exception","description":"Exception class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\Exception"},{"id":"mysql-xdevapi-executable.execute","name":"Executable::execute","description":"Execute statement","tag":"refentry","type":"Function","methodName":"execute"},{"id":"class.mysql-xdevapi-executable","name":"mysql_xdevapi\\Executable","description":"Executable interface","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\Executable"},{"id":"mysql-xdevapi-executionstatus.construct","name":"ExecutionStatus::__construct","description":"ExecutionStatus constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.mysql-xdevapi-executionstatus","name":"mysql_xdevapi\\ExecutionStatus","description":"ExecutionStatus class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\ExecutionStatus"},{"id":"mysql-xdevapi-expression.construct","name":"Expression::__construct","description":"Expression constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.mysql-xdevapi-expression","name":"mysql_xdevapi\\Expression","description":"Expression class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\Expression"},{"id":"mysql-xdevapi-result.construct","name":"Result::__construct","description":"Result constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-result.getaffecteditemscount","name":"Result::getAffectedItemsCount","description":"Get affected row count","tag":"refentry","type":"Function","methodName":"getAffectedItemsCount"},{"id":"mysql-xdevapi-result.getautoincrementvalue","name":"Result::getAutoIncrementValue","description":"Get autoincremented value","tag":"refentry","type":"Function","methodName":"getAutoIncrementValue"},{"id":"mysql-xdevapi-result.getgeneratedids","name":"Result::getGeneratedIds","description":"Get generated ids","tag":"refentry","type":"Function","methodName":"getGeneratedIds"},{"id":"mysql-xdevapi-result.getwarnings","name":"Result::getWarnings","description":"Get warnings from last operation","tag":"refentry","type":"Function","methodName":"getWarnings"},{"id":"mysql-xdevapi-result.getwarningscount","name":"Result::getWarningsCount","description":"Get warning count from last operation","tag":"refentry","type":"Function","methodName":"getWarningsCount"},{"id":"class.mysql-xdevapi-result","name":"mysql_xdevapi\\Result","description":"Result class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\Result"},{"id":"mysql-xdevapi-rowresult.construct","name":"RowResult::__construct","description":"RowResult constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-rowresult.fetchall","name":"RowResult::fetchAll","description":"Get all rows from result","tag":"refentry","type":"Function","methodName":"fetchAll"},{"id":"mysql-xdevapi-rowresult.fetchone","name":"RowResult::fetchOne","description":"Get row from result","tag":"refentry","type":"Function","methodName":"fetchOne"},{"id":"mysql-xdevapi-rowresult.getcolumncount","name":"RowResult::getColumnsCount","description":"Get column count","tag":"refentry","type":"Function","methodName":"getColumnsCount"},{"id":"mysql-xdevapi-rowresult.getcolumnnames","name":"RowResult::getColumnNames","description":"Get all column names","tag":"refentry","type":"Function","methodName":"getColumnNames"},{"id":"mysql-xdevapi-rowresult.getcolumns","name":"RowResult::getColumns","description":"Get column metadata","tag":"refentry","type":"Function","methodName":"getColumns"},{"id":"mysql-xdevapi-rowresult.getwarnings","name":"RowResult::getWarnings","description":"Get warnings from last operation","tag":"refentry","type":"Function","methodName":"getWarnings"},{"id":"mysql-xdevapi-rowresult.getwarningscount","name":"RowResult::getWarningsCount","description":"Get warning count from last operation","tag":"refentry","type":"Function","methodName":"getWarningsCount"},{"id":"class.mysql-xdevapi-rowresult","name":"mysql_xdevapi\\RowResult","description":"RowResult class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\RowResult"},{"id":"mysql-xdevapi-schema.construct","name":"Schema::__construct","description":"Schema constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-schema.createcollection","name":"Schema::createCollection","description":"Add collection to schema","tag":"refentry","type":"Function","methodName":"createCollection"},{"id":"mysql-xdevapi-schema.dropcollection","name":"Schema::dropCollection","description":"Drop collection from schema","tag":"refentry","type":"Function","methodName":"dropCollection"},{"id":"mysql-xdevapi-schema.existsindatabase","name":"Schema::existsInDatabase","description":"Check if exists in database","tag":"refentry","type":"Function","methodName":"existsInDatabase"},{"id":"mysql-xdevapi-schema.getcollection","name":"Schema::getCollection","description":"Get collection from schema","tag":"refentry","type":"Function","methodName":"getCollection"},{"id":"mysql-xdevapi-schema.getcollectionastable","name":"Schema::getCollectionAsTable","description":"Get collection as a Table object","tag":"refentry","type":"Function","methodName":"getCollectionAsTable"},{"id":"mysql-xdevapi-schema.getcollections","name":"Schema::getCollections","description":"Get all schema collections","tag":"refentry","type":"Function","methodName":"getCollections"},{"id":"mysql-xdevapi-schema.getname","name":"Schema::getName","description":"Get schema name","tag":"refentry","type":"Function","methodName":"getName"},{"id":"mysql-xdevapi-schema.getsession","name":"Schema::getSession","description":"Get schema session","tag":"refentry","type":"Function","methodName":"getSession"},{"id":"mysql-xdevapi-schema.gettable","name":"Schema::getTable","description":"Get schema table","tag":"refentry","type":"Function","methodName":"getTable"},{"id":"mysql-xdevapi-schema.gettables","name":"Schema::getTables","description":"Get schema tables","tag":"refentry","type":"Function","methodName":"getTables"},{"id":"class.mysql-xdevapi-schema","name":"mysql_xdevapi\\Schema","description":"Schema class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\Schema"},{"id":"mysql-xdevapi-schemaobject.getschema","name":"SchemaObject::getSchema","description":"Get schema object","tag":"refentry","type":"Function","methodName":"getSchema"},{"id":"class.mysql-xdevapi-schemaobject","name":"mysql_xdevapi\\SchemaObject","description":"SchemaObject interface","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\SchemaObject"},{"id":"mysql-xdevapi-session.close","name":"Session::close","description":"Close session","tag":"refentry","type":"Function","methodName":"close"},{"id":"mysql-xdevapi-session.commit","name":"Session::commit","description":"Commit transaction","tag":"refentry","type":"Function","methodName":"commit"},{"id":"mysql-xdevapi-session.construct","name":"Session::__construct","description":"Description constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-session.createschema","name":"Session::createSchema","description":"Create new schema","tag":"refentry","type":"Function","methodName":"createSchema"},{"id":"mysql-xdevapi-session.dropschema","name":"Session::dropSchema","description":"Drop a schema","tag":"refentry","type":"Function","methodName":"dropSchema"},{"id":"mysql-xdevapi-session.generateuuid","name":"Session::generateUUID","description":"Get new UUID","tag":"refentry","type":"Function","methodName":"generateUUID"},{"id":"mysql-xdevapi-session.getdefaultschema","name":"Session::getDefaultSchema","description":"Get default schema name","tag":"refentry","type":"Function","methodName":"getDefaultSchema"},{"id":"mysql-xdevapi-session.getschema","name":"Session::getSchema","description":"Get a new schema object","tag":"refentry","type":"Function","methodName":"getSchema"},{"id":"mysql-xdevapi-session.getschemas","name":"Session::getSchemas","description":"Get the schemas","tag":"refentry","type":"Function","methodName":"getSchemas"},{"id":"mysql-xdevapi-session.getserverversion","name":"Session::getServerVersion","description":"Get server version","tag":"refentry","type":"Function","methodName":"getServerVersion"},{"id":"mysql-xdevapi-session.listclients","name":"Session::listClients","description":"Get client list","tag":"refentry","type":"Function","methodName":"listClients"},{"id":"mysql-xdevapi-session.quotename","name":"Session::quoteName","description":"Add quotes","tag":"refentry","type":"Function","methodName":"quoteName"},{"id":"mysql-xdevapi-session.releasesavepoint","name":"Session::releaseSavepoint","description":"Release set savepoint","tag":"refentry","type":"Function","methodName":"releaseSavepoint"},{"id":"mysql-xdevapi-session.rollback","name":"Session::rollback","description":"Rollback transaction","tag":"refentry","type":"Function","methodName":"rollback"},{"id":"mysql-xdevapi-session.rollbackto","name":"Session::rollbackTo","description":"Rollback transaction to savepoint","tag":"refentry","type":"Function","methodName":"rollbackTo"},{"id":"mysql-xdevapi-session.setsavepoint","name":"Session::setSavepoint","description":"Create savepoint","tag":"refentry","type":"Function","methodName":"setSavepoint"},{"id":"mysql-xdevapi-session.sql","name":"Session::sql","description":"Create SQL query","tag":"refentry","type":"Function","methodName":"sql"},{"id":"mysql-xdevapi-session.starttransaction","name":"Session::startTransaction","description":"Start transaction","tag":"refentry","type":"Function","methodName":"startTransaction"},{"id":"class.mysql-xdevapi-session","name":"mysql_xdevapi\\Session","description":"Session class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\Session"},{"id":"mysql-xdevapi-sqlstatement.bind","name":"SqlStatement::bind","description":"Bind statement parameters","tag":"refentry","type":"Function","methodName":"bind"},{"id":"mysql-xdevapi-sqlstatement.construct","name":"SqlStatement::__construct","description":"Description constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-sqlstatement.execute","name":"SqlStatement::execute","description":"Execute the operation","tag":"refentry","type":"Function","methodName":"execute"},{"id":"mysql-xdevapi-sqlstatement.getnextresult","name":"SqlStatement::getNextResult","description":"Get next result","tag":"refentry","type":"Function","methodName":"getNextResult"},{"id":"mysql-xdevapi-sqlstatement.getresult","name":"SqlStatement::getResult","description":"Get result","tag":"refentry","type":"Function","methodName":"getResult"},{"id":"mysql-xdevapi-sqlstatement.hasmoreresults","name":"SqlStatement::hasMoreResults","description":"Check for more results","tag":"refentry","type":"Function","methodName":"hasMoreResults"},{"id":"class.mysql-xdevapi-sqlstatement","name":"mysql_xdevapi\\SqlStatement","description":"SqlStatement class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\SqlStatement"},{"id":"mysql-xdevapi-sqlstatementresult.construct","name":"SqlStatementResult::__construct","description":"Description constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-sqlstatementresult.fetchall","name":"SqlStatementResult::fetchAll","description":"Get all rows from result","tag":"refentry","type":"Function","methodName":"fetchAll"},{"id":"mysql-xdevapi-sqlstatementresult.fetchone","name":"SqlStatementResult::fetchOne","description":"Get single row","tag":"refentry","type":"Function","methodName":"fetchOne"},{"id":"mysql-xdevapi-sqlstatementresult.getaffecteditemscount","name":"SqlStatementResult::getAffectedItemsCount","description":"Get affected row count","tag":"refentry","type":"Function","methodName":"getAffectedItemsCount"},{"id":"mysql-xdevapi-sqlstatementresult.getcolumncount","name":"SqlStatementResult::getColumnsCount","description":"Get column count","tag":"refentry","type":"Function","methodName":"getColumnsCount"},{"id":"mysql-xdevapi-sqlstatementresult.getcolumnnames","name":"SqlStatementResult::getColumnNames","description":"Get column names","tag":"refentry","type":"Function","methodName":"getColumnNames"},{"id":"mysql-xdevapi-sqlstatementresult.getcolumns","name":"SqlStatementResult::getColumns","description":"Get columns","tag":"refentry","type":"Function","methodName":"getColumns"},{"id":"mysql-xdevapi-sqlstatementresult.getgeneratedids","name":"SqlStatementResult::getGeneratedIds","description":"Get generated ids","tag":"refentry","type":"Function","methodName":"getGeneratedIds"},{"id":"mysql-xdevapi-sqlstatementresult.getlastinsertid","name":"SqlStatementResult::getLastInsertId","description":"Get last insert id","tag":"refentry","type":"Function","methodName":"getLastInsertId"},{"id":"mysql-xdevapi-sqlstatementresult.getwarnings","name":"SqlStatementResult::getWarnings","description":"Get warnings from last operation","tag":"refentry","type":"Function","methodName":"getWarnings"},{"id":"mysql-xdevapi-sqlstatementresult.getwarningcount","name":"SqlStatementResult::getWarningsCount","description":"Get warning count from last operation","tag":"refentry","type":"Function","methodName":"getWarningsCount"},{"id":"mysql-xdevapi-sqlstatementresult.hasdata","name":"SqlStatementResult::hasData","description":"Check if result has data","tag":"refentry","type":"Function","methodName":"hasData"},{"id":"mysql-xdevapi-sqlstatementresult.nextresult","name":"SqlStatementResult::nextResult","description":"Get next result","tag":"refentry","type":"Function","methodName":"nextResult"},{"id":"class.mysql-xdevapi-sqlstatementresult","name":"mysql_xdevapi\\SqlStatementResult","description":"SqlStatementResult class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\SqlStatementResult"},{"id":"mysql-xdevapi-statement.construct","name":"Statement::__construct","description":"Description constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-statement.getnextresult","name":"Statement::getNextResult","description":"Get next result","tag":"refentry","type":"Function","methodName":"getNextResult"},{"id":"mysql-xdevapi-statement.getresult","name":"Statement::getResult","description":"Get result","tag":"refentry","type":"Function","methodName":"getResult"},{"id":"mysql-xdevapi-statement.hasmoreresults","name":"Statement::hasMoreResults","description":"Check if more results","tag":"refentry","type":"Function","methodName":"hasMoreResults"},{"id":"class.mysql-xdevapi-statement","name":"mysql_xdevapi\\Statement","description":"Statement class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\Statement"},{"id":"mysql-xdevapi-table.construct","name":"Table::__construct","description":"Table constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-table.count","name":"Table::count","description":"Get row count","tag":"refentry","type":"Function","methodName":"count"},{"id":"mysql-xdevapi-table.delete","name":"Table::delete","description":"Delete rows from table","tag":"refentry","type":"Function","methodName":"delete"},{"id":"mysql-xdevapi-table.existsindatabase","name":"Table::existsInDatabase","description":"Check if table exists in database","tag":"refentry","type":"Function","methodName":"existsInDatabase"},{"id":"mysql-xdevapi-table.getname","name":"Table::getName","description":"Get table name","tag":"refentry","type":"Function","methodName":"getName"},{"id":"mysql-xdevapi-table.getschema","name":"Table::getSchema","description":"Get table schema","tag":"refentry","type":"Function","methodName":"getSchema"},{"id":"mysql-xdevapi-table.getsession","name":"Table::getSession","description":"Get table session","tag":"refentry","type":"Function","methodName":"getSession"},{"id":"mysql-xdevapi-table.insert","name":"Table::insert","description":"Insert table rows","tag":"refentry","type":"Function","methodName":"insert"},{"id":"mysql-xdevapi-table.isview","name":"Table::isView","description":"Check if table is view","tag":"refentry","type":"Function","methodName":"isView"},{"id":"mysql-xdevapi-table.select","name":"Table::select","description":"Select rows from table","tag":"refentry","type":"Function","methodName":"select"},{"id":"mysql-xdevapi-table.update","name":"Table::update","description":"Update rows in table","tag":"refentry","type":"Function","methodName":"update"},{"id":"class.mysql-xdevapi-table","name":"mysql_xdevapi\\Table","description":"Table class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\Table"},{"id":"mysql-xdevapi-tabledelete.bind","name":"TableDelete::bind","description":"Bind delete query parameters","tag":"refentry","type":"Function","methodName":"bind"},{"id":"mysql-xdevapi-tabledelete.construct","name":"TableDelete::__construct","description":"TableDelete constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-tabledelete.execute","name":"TableDelete::execute","description":"Execute delete query","tag":"refentry","type":"Function","methodName":"execute"},{"id":"mysql-xdevapi-tabledelete.limit","name":"TableDelete::limit","description":"Limit deleted rows","tag":"refentry","type":"Function","methodName":"limit"},{"id":"mysql-xdevapi-tabledelete.orderby","name":"TableDelete::orderby","description":"Set delete sort criteria","tag":"refentry","type":"Function","methodName":"orderby"},{"id":"mysql-xdevapi-tabledelete.where","name":"TableDelete::where","description":"Set delete search condition","tag":"refentry","type":"Function","methodName":"where"},{"id":"class.mysql-xdevapi-tabledelete","name":"mysql_xdevapi\\TableDelete","description":"TableDelete class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\TableDelete"},{"id":"mysql-xdevapi-tableinsert.construct","name":"TableInsert::__construct","description":"TableInsert constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-tableinsert.execute","name":"TableInsert::execute","description":"Execute insert query","tag":"refentry","type":"Function","methodName":"execute"},{"id":"mysql-xdevapi-tableinsert.values","name":"TableInsert::values","description":"Add insert row values","tag":"refentry","type":"Function","methodName":"values"},{"id":"class.mysql-xdevapi-tableinsert","name":"mysql_xdevapi\\TableInsert","description":"TableInsert class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\TableInsert"},{"id":"mysql-xdevapi-tableselect.bind","name":"TableSelect::bind","description":"Bind select query parameters","tag":"refentry","type":"Function","methodName":"bind"},{"id":"mysql-xdevapi-tableselect.construct","name":"TableSelect::__construct","description":"TableSelect constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-tableselect.execute","name":"TableSelect::execute","description":"Execute select statement","tag":"refentry","type":"Function","methodName":"execute"},{"id":"mysql-xdevapi-tableselect.groupby","name":"TableSelect::groupBy","description":"Set select grouping criteria","tag":"refentry","type":"Function","methodName":"groupBy"},{"id":"mysql-xdevapi-tableselect.having","name":"TableSelect::having","description":"Set select having condition","tag":"refentry","type":"Function","methodName":"having"},{"id":"mysql-xdevapi-tableselect.limit","name":"TableSelect::limit","description":"Limit selected rows","tag":"refentry","type":"Function","methodName":"limit"},{"id":"mysql-xdevapi-tableselect.lockexclusive","name":"TableSelect::lockExclusive","description":"Execute EXCLUSIVE LOCK","tag":"refentry","type":"Function","methodName":"lockExclusive"},{"id":"mysql-xdevapi-tableselect.lockshared","name":"TableSelect::lockShared","description":"Execute SHARED LOCK","tag":"refentry","type":"Function","methodName":"lockShared"},{"id":"mysql-xdevapi-tableselect.offset","name":"TableSelect::offset","description":"Set limit offset","tag":"refentry","type":"Function","methodName":"offset"},{"id":"mysql-xdevapi-tableselect.orderby","name":"TableSelect::orderby","description":"Set select sort criteria","tag":"refentry","type":"Function","methodName":"orderby"},{"id":"mysql-xdevapi-tableselect.where","name":"TableSelect::where","description":"Set select search condition","tag":"refentry","type":"Function","methodName":"where"},{"id":"class.mysql-xdevapi-tableselect","name":"mysql_xdevapi\\TableSelect","description":"TableSelect class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\TableSelect"},{"id":"mysql-xdevapi-tableupdate.bind","name":"TableUpdate::bind","description":"Bind update query parameters","tag":"refentry","type":"Function","methodName":"bind"},{"id":"mysql-xdevapi-tableupdate.construct","name":"TableUpdate::__construct","description":"TableUpdate constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"mysql-xdevapi-tableupdate.execute","name":"TableUpdate::execute","description":"Execute update query","tag":"refentry","type":"Function","methodName":"execute"},{"id":"mysql-xdevapi-tableupdate.limit","name":"TableUpdate::limit","description":"Limit update row count","tag":"refentry","type":"Function","methodName":"limit"},{"id":"mysql-xdevapi-tableupdate.orderby","name":"TableUpdate::orderby","description":"Set sorting criteria","tag":"refentry","type":"Function","methodName":"orderby"},{"id":"mysql-xdevapi-tableupdate.set","name":"TableUpdate::set","description":"Add field to be updated","tag":"refentry","type":"Function","methodName":"set"},{"id":"mysql-xdevapi-tableupdate.where","name":"TableUpdate::where","description":"Set search filter","tag":"refentry","type":"Function","methodName":"where"},{"id":"class.mysql-xdevapi-tableupdate","name":"mysql_xdevapi\\TableUpdate","description":"TableUpdate class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\TableUpdate"},{"id":"mysql-xdevapi-warning.construct","name":"Warning::__construct","description":"Warning constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.mysql-xdevapi-warning","name":"mysql_xdevapi\\Warning","description":"Warning class","tag":"phpdoc:classref","type":"Class","methodName":"mysql_xdevapi\\Warning"},{"id":"book.mysql-xdevapi","name":"Mysql_xdevapi","description":"Mysql_xdevapi","tag":"book","type":"Extension","methodName":"Mysql_xdevapi"},{"id":"intro.mysql","name":"Introduction","description":"Original MySQL API","tag":"preface","type":"General","methodName":"Introduction"},{"id":"mysql.requirements","name":"Requirements","description":"Original MySQL API","tag":"section","type":"General","methodName":"Requirements"},{"id":"mysql.installation","name":"Installation","description":"Original MySQL API","tag":"section","type":"General","methodName":"Installation"},{"id":"mysql.configuration","name":"Runtime Configuration","description":"Original MySQL API","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"mysql.resources","name":"Resource Types","description":"Original MySQL API","tag":"section","type":"General","methodName":"Resource Types"},{"id":"mysql.setup","name":"Installing\/Configuring","description":"Original MySQL API","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"changelog.mysql","name":"Changelog","description":"Original MySQL API","tag":"appendix","type":"General","methodName":"Changelog"},{"id":"mysql.constants","name":"Predefined Constants","description":"Original MySQL API","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"mysql.examples-basic","name":"MySQL extension overview example","description":"Original MySQL API","tag":"section","type":"General","methodName":"MySQL extension overview example"},{"id":"mysql.examples","name":"Examples","description":"Original MySQL API","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.mysql-affected-rows","name":"mysql_affected_rows","description":"Get number of affected rows in previous MySQL operation","tag":"refentry","type":"Function","methodName":"mysql_affected_rows"},{"id":"function.mysql-client-encoding","name":"mysql_client_encoding","description":"Returns the name of the character set","tag":"refentry","type":"Function","methodName":"mysql_client_encoding"},{"id":"function.mysql-close","name":"mysql_close","description":"Close MySQL connection","tag":"refentry","type":"Function","methodName":"mysql_close"},{"id":"function.mysql-connect","name":"mysql_connect","description":"Open a connection to a MySQL Server","tag":"refentry","type":"Function","methodName":"mysql_connect"},{"id":"function.mysql-create-db","name":"mysql_create_db","description":"Create a MySQL database","tag":"refentry","type":"Function","methodName":"mysql_create_db"},{"id":"function.mysql-data-seek","name":"mysql_data_seek","description":"Move internal result pointer","tag":"refentry","type":"Function","methodName":"mysql_data_seek"},{"id":"function.mysql-db-name","name":"mysql_db_name","description":"Retrieves database name from the call to mysql_list_dbs","tag":"refentry","type":"Function","methodName":"mysql_db_name"},{"id":"function.mysql-db-query","name":"mysql_db_query","description":"Selects a database and executes a query on it","tag":"refentry","type":"Function","methodName":"mysql_db_query"},{"id":"function.mysql-drop-db","name":"mysql_drop_db","description":"Drop (delete) a MySQL database","tag":"refentry","type":"Function","methodName":"mysql_drop_db"},{"id":"function.mysql-errno","name":"mysql_errno","description":"Returns the numerical value of the error message from previous MySQL operation","tag":"refentry","type":"Function","methodName":"mysql_errno"},{"id":"function.mysql-error","name":"mysql_error","description":"Returns the text of the error message from previous MySQL operation","tag":"refentry","type":"Function","methodName":"mysql_error"},{"id":"function.mysql-escape-string","name":"mysql_escape_string","description":"Escapes a string for use in a mysql_query","tag":"refentry","type":"Function","methodName":"mysql_escape_string"},{"id":"function.mysql-fetch-array","name":"mysql_fetch_array","description":"Fetch a result row as an associative array, a numeric array, or both","tag":"refentry","type":"Function","methodName":"mysql_fetch_array"},{"id":"function.mysql-fetch-assoc","name":"mysql_fetch_assoc","description":"Fetch a result row as an associative array","tag":"refentry","type":"Function","methodName":"mysql_fetch_assoc"},{"id":"function.mysql-fetch-field","name":"mysql_fetch_field","description":"Get column information from a result and return as an object","tag":"refentry","type":"Function","methodName":"mysql_fetch_field"},{"id":"function.mysql-fetch-lengths","name":"mysql_fetch_lengths","description":"Get the length of each output in a result","tag":"refentry","type":"Function","methodName":"mysql_fetch_lengths"},{"id":"function.mysql-fetch-object","name":"mysql_fetch_object","description":"Fetch a result row as an object","tag":"refentry","type":"Function","methodName":"mysql_fetch_object"},{"id":"function.mysql-fetch-row","name":"mysql_fetch_row","description":"Get a result row as an enumerated array","tag":"refentry","type":"Function","methodName":"mysql_fetch_row"},{"id":"function.mysql-field-flags","name":"mysql_field_flags","description":"Get the flags associated with the specified field in a result","tag":"refentry","type":"Function","methodName":"mysql_field_flags"},{"id":"function.mysql-field-len","name":"mysql_field_len","description":"Returns the length of the specified field","tag":"refentry","type":"Function","methodName":"mysql_field_len"},{"id":"function.mysql-field-name","name":"mysql_field_name","description":"Get the name of the specified field in a result","tag":"refentry","type":"Function","methodName":"mysql_field_name"},{"id":"function.mysql-field-seek","name":"mysql_field_seek","description":"Set result pointer to a specified field offset","tag":"refentry","type":"Function","methodName":"mysql_field_seek"},{"id":"function.mysql-field-table","name":"mysql_field_table","description":"Get name of the table the specified field is in","tag":"refentry","type":"Function","methodName":"mysql_field_table"},{"id":"function.mysql-field-type","name":"mysql_field_type","description":"Get the type of the specified field in a result","tag":"refentry","type":"Function","methodName":"mysql_field_type"},{"id":"function.mysql-free-result","name":"mysql_free_result","description":"Free result memory","tag":"refentry","type":"Function","methodName":"mysql_free_result"},{"id":"function.mysql-get-client-info","name":"mysql_get_client_info","description":"Get MySQL client info","tag":"refentry","type":"Function","methodName":"mysql_get_client_info"},{"id":"function.mysql-get-host-info","name":"mysql_get_host_info","description":"Get MySQL host info","tag":"refentry","type":"Function","methodName":"mysql_get_host_info"},{"id":"function.mysql-get-proto-info","name":"mysql_get_proto_info","description":"Get MySQL protocol info","tag":"refentry","type":"Function","methodName":"mysql_get_proto_info"},{"id":"function.mysql-get-server-info","name":"mysql_get_server_info","description":"Get MySQL server info","tag":"refentry","type":"Function","methodName":"mysql_get_server_info"},{"id":"function.mysql-info","name":"mysql_info","description":"Get information about the most recent query","tag":"refentry","type":"Function","methodName":"mysql_info"},{"id":"function.mysql-insert-id","name":"mysql_insert_id","description":"Get the ID generated in the last query","tag":"refentry","type":"Function","methodName":"mysql_insert_id"},{"id":"function.mysql-list-dbs","name":"mysql_list_dbs","description":"List databases available on a MySQL server","tag":"refentry","type":"Function","methodName":"mysql_list_dbs"},{"id":"function.mysql-list-fields","name":"mysql_list_fields","description":"List MySQL table fields","tag":"refentry","type":"Function","methodName":"mysql_list_fields"},{"id":"function.mysql-list-processes","name":"mysql_list_processes","description":"List MySQL processes","tag":"refentry","type":"Function","methodName":"mysql_list_processes"},{"id":"function.mysql-list-tables","name":"mysql_list_tables","description":"List tables in a MySQL database","tag":"refentry","type":"Function","methodName":"mysql_list_tables"},{"id":"function.mysql-num-fields","name":"mysql_num_fields","description":"Get number of fields in result","tag":"refentry","type":"Function","methodName":"mysql_num_fields"},{"id":"function.mysql-num-rows","name":"mysql_num_rows","description":"Get number of rows in result","tag":"refentry","type":"Function","methodName":"mysql_num_rows"},{"id":"function.mysql-pconnect","name":"mysql_pconnect","description":"Open a persistent connection to a MySQL server","tag":"refentry","type":"Function","methodName":"mysql_pconnect"},{"id":"function.mysql-ping","name":"mysql_ping","description":"Ping a server connection or reconnect if there is no connection","tag":"refentry","type":"Function","methodName":"mysql_ping"},{"id":"function.mysql-query","name":"mysql_query","description":"Send a MySQL query","tag":"refentry","type":"Function","methodName":"mysql_query"},{"id":"function.mysql-real-escape-string","name":"mysql_real_escape_string","description":"Escapes special characters in a string for use in an SQL statement","tag":"refentry","type":"Function","methodName":"mysql_real_escape_string"},{"id":"function.mysql-result","name":"mysql_result","description":"Get result data","tag":"refentry","type":"Function","methodName":"mysql_result"},{"id":"function.mysql-select-db","name":"mysql_select_db","description":"Select a MySQL database","tag":"refentry","type":"Function","methodName":"mysql_select_db"},{"id":"function.mysql-set-charset","name":"mysql_set_charset","description":"Sets the client character set","tag":"refentry","type":"Function","methodName":"mysql_set_charset"},{"id":"function.mysql-stat","name":"mysql_stat","description":"Get current system status","tag":"refentry","type":"Function","methodName":"mysql_stat"},{"id":"function.mysql-tablename","name":"mysql_tablename","description":"Get table name of field","tag":"refentry","type":"Function","methodName":"mysql_tablename"},{"id":"function.mysql-thread-id","name":"mysql_thread_id","description":"Return the current thread ID","tag":"refentry","type":"Function","methodName":"mysql_thread_id"},{"id":"function.mysql-unbuffered-query","name":"mysql_unbuffered_query","description":"Send an SQL query to MySQL without fetching and buffering the result rows","tag":"refentry","type":"Function","methodName":"mysql_unbuffered_query"},{"id":"ref.mysql","name":"MySQL Functions","description":"Original MySQL API","tag":"reference","type":"Extension","methodName":"MySQL Functions"},{"id":"book.mysql","name":"MySQL (Original)","description":"Original MySQL API","tag":"book","type":"Extension","methodName":"MySQL (Original)"},{"id":"intro.mysqlnd","name":"Introduction","description":"MySQL Native Driver","tag":"preface","type":"General","methodName":"Introduction"},{"id":"mysqlnd.overview","name":"Overview","description":"MySQL Native Driver","tag":"chapter","type":"General","methodName":"Overview"},{"id":"mysqlnd.install","name":"Installation","description":"MySQL Native Driver","tag":"chapter","type":"General","methodName":"Installation"},{"id":"mysqlnd.config","name":"Runtime Configuration","description":"MySQL Native Driver","tag":"chapter","type":"General","methodName":"Runtime Configuration"},{"id":"mysqlnd.incompatibilities","name":"Incompatibilities","description":"MySQL Native Driver","tag":"chapter","type":"General","methodName":"Incompatibilities"},{"id":"mysqlnd.persist","name":"Persistent Connections","description":"MySQL Native Driver","tag":"chapter","type":"General","methodName":"Persistent Connections"},{"id":"mysqlnd.stats","name":"Statistics","description":"MySQL Native Driver","tag":"chapter","type":"General","methodName":"Statistics"},{"id":"mysqlnd.notes","name":"Notes","description":"MySQL Native Driver","tag":"chapter","type":"General","methodName":"Notes"},{"id":"mysqlnd.memory","name":"Memory management","description":"MySQL Native Driver","tag":"chapter","type":"General","methodName":"Memory management"},{"id":"mysqlnd.plugin.mysql-proxy","name":"A comparison of mysqlnd plugins with MySQL Proxy","description":"MySQL Native Driver","tag":"section","type":"General","methodName":"A comparison of mysqlnd plugins with MySQL Proxy"},{"id":"mysqlnd.plugin.obtaining","name":"Obtaining the mysqlnd plugin API","description":"MySQL Native Driver","tag":"section","type":"General","methodName":"Obtaining the mysqlnd plugin API"},{"id":"mysqlnd.plugin.architecture","name":"MySQL Native Driver Plugin Architecture","description":"MySQL Native Driver","tag":"section","type":"General","methodName":"MySQL Native Driver Plugin Architecture"},{"id":"mysqlnd.plugin.api","name":"The mysqlnd plugin API","description":"MySQL Native Driver","tag":"section","type":"General","methodName":"The mysqlnd plugin API"},{"id":"mysqlnd.plugin.developing","name":"Getting started building a mysqlnd plugin","description":"MySQL Native Driver","tag":"section","type":"General","methodName":"Getting started building a mysqlnd plugin"},{"id":"mysqlnd.plugin","name":"MySQL Native Driver Plugin API","description":"MySQL Native Driver","tag":"chapter","type":"General","methodName":"MySQL Native Driver Plugin API"},{"id":"book.mysqlnd","name":"Mysqlnd","description":"MySQL Native Driver","tag":"book","type":"Extension","methodName":"Mysqlnd"},{"id":"set.mysqlinfo","name":"MySQL","description":"MySQL Drivers and Plugins","tag":"set","type":"Extension","methodName":"MySQL"},{"id":"intro.oci8","name":"Introduction","description":"Oracle OCI8","tag":"preface","type":"General","methodName":"Introduction"},{"id":"oci8.requirements","name":"Requirements","description":"Oracle OCI8","tag":"section","type":"General","methodName":"Requirements"},{"id":"oci8.installation","name":"Installation","description":"Oracle OCI8","tag":"section","type":"General","methodName":"Installation"},{"id":"oci8.test","name":"Testing","description":"Oracle OCI8","tag":"section","type":"General","methodName":"Testing"},{"id":"oci8.configuration","name":"Runtime Configuration","description":"Oracle OCI8","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"oci8.setup","name":"Installing\/Configuring","description":"Oracle OCI8","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"oci8.constants","name":"Predefined Constants","description":"Oracle OCI8","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"oci8.examples","name":"Examples","description":"Oracle OCI8","tag":"chapter","type":"General","methodName":"Examples"},{"id":"oci8.connection","name":"OCI8 Connection Handling and Connection Pooling","description":"Oracle OCI8","tag":"chapter","type":"General","methodName":"OCI8 Connection Handling and Connection Pooling"},{"id":"oci8.fan","name":"OCI8 Fast Application Notification (FAN) Support","description":"Oracle OCI8","tag":"chapter","type":"General","methodName":"OCI8 Fast Application Notification (FAN) Support"},{"id":"oci8.taf","name":"OCI8 Transparent Application Failover (TAF) Support","description":"Oracle OCI8","tag":"chapter","type":"General","methodName":"OCI8 Transparent Application Failover (TAF) Support"},{"id":"oci8.dtrace","name":"OCI8 and DTrace Dynamic Tracing","description":"Oracle OCI8","tag":"chapter","type":"General","methodName":"OCI8 and DTrace Dynamic Tracing"},{"id":"oci8.datatypes","name":"Supported Datatypes","description":"Oracle OCI8","tag":"chapter","type":"General","methodName":"Supported Datatypes"},{"id":"function.oci-bind-array-by-name","name":"oci_bind_array_by_name","description":"Binds a PHP array to an Oracle PL\/SQL array parameter","tag":"refentry","type":"Function","methodName":"oci_bind_array_by_name"},{"id":"function.oci-bind-by-name","name":"oci_bind_by_name","description":"Binds a PHP variable to an Oracle placeholder","tag":"refentry","type":"Function","methodName":"oci_bind_by_name"},{"id":"function.oci-cancel","name":"oci_cancel","description":"Cancels reading from cursor","tag":"refentry","type":"Function","methodName":"oci_cancel"},{"id":"function.oci-client-version","name":"oci_client_version","description":"Returns the Oracle client library version","tag":"refentry","type":"Function","methodName":"oci_client_version"},{"id":"function.oci-close","name":"oci_close","description":"Closes an Oracle connection","tag":"refentry","type":"Function","methodName":"oci_close"},{"id":"function.oci-commit","name":"oci_commit","description":"Commits the outstanding database transaction","tag":"refentry","type":"Function","methodName":"oci_commit"},{"id":"function.oci-connect","name":"oci_connect","description":"Connect to an Oracle database","tag":"refentry","type":"Function","methodName":"oci_connect"},{"id":"function.oci-define-by-name","name":"oci_define_by_name","description":"Associates a PHP variable with a column for query fetches","tag":"refentry","type":"Function","methodName":"oci_define_by_name"},{"id":"function.oci-error","name":"oci_error","description":"Returns the last error found","tag":"refentry","type":"Function","methodName":"oci_error"},{"id":"function.oci-execute","name":"oci_execute","description":"Executes a statement","tag":"refentry","type":"Function","methodName":"oci_execute"},{"id":"function.oci-fetch","name":"oci_fetch","description":"Fetches the next row from a query into internal buffers","tag":"refentry","type":"Function","methodName":"oci_fetch"},{"id":"function.oci-fetch-all","name":"oci_fetch_all","description":"Fetches multiple rows from a query into a two-dimensional array","tag":"refentry","type":"Function","methodName":"oci_fetch_all"},{"id":"function.oci-fetch-array","name":"oci_fetch_array","description":"Returns the next row from a query as an associative or numeric array","tag":"refentry","type":"Function","methodName":"oci_fetch_array"},{"id":"function.oci-fetch-assoc","name":"oci_fetch_assoc","description":"Returns the next row from a query as an associative array","tag":"refentry","type":"Function","methodName":"oci_fetch_assoc"},{"id":"function.oci-fetch-object","name":"oci_fetch_object","description":"Returns the next row from a query as an object","tag":"refentry","type":"Function","methodName":"oci_fetch_object"},{"id":"function.oci-fetch-row","name":"oci_fetch_row","description":"Returns the next row from a query as a numeric array","tag":"refentry","type":"Function","methodName":"oci_fetch_row"},{"id":"function.oci-field-is-null","name":"oci_field_is_null","description":"Checks if a field in the currently fetched row is null","tag":"refentry","type":"Function","methodName":"oci_field_is_null"},{"id":"function.oci-field-name","name":"oci_field_name","description":"Returns the name of a field from the statement","tag":"refentry","type":"Function","methodName":"oci_field_name"},{"id":"function.oci-field-precision","name":"oci_field_precision","description":"Tell the precision of a field","tag":"refentry","type":"Function","methodName":"oci_field_precision"},{"id":"function.oci-field-scale","name":"oci_field_scale","description":"Tell the scale of the field","tag":"refentry","type":"Function","methodName":"oci_field_scale"},{"id":"function.oci-field-size","name":"oci_field_size","description":"Returns field's size","tag":"refentry","type":"Function","methodName":"oci_field_size"},{"id":"function.oci-field-type","name":"oci_field_type","description":"Returns a field's data type name","tag":"refentry","type":"Function","methodName":"oci_field_type"},{"id":"function.oci-field-type-raw","name":"oci_field_type_raw","description":"Tell the raw Oracle data type of the field","tag":"refentry","type":"Function","methodName":"oci_field_type_raw"},{"id":"function.oci-free-descriptor","name":"oci_free_descriptor","description":"Frees a descriptor","tag":"refentry","type":"Function","methodName":"oci_free_descriptor"},{"id":"function.oci-free-statement","name":"oci_free_statement","description":"Frees all resources associated with statement or cursor","tag":"refentry","type":"Function","methodName":"oci_free_statement"},{"id":"function.oci-get-implicit-resultset","name":"oci_get_implicit_resultset","description":"Returns the next child statement resource from a parent statement resource that has Oracle Database Implicit Result Sets","tag":"refentry","type":"Function","methodName":"oci_get_implicit_resultset"},{"id":"function.oci-lob-copy","name":"oci_lob_copy","description":"Copies large object","tag":"refentry","type":"Function","methodName":"oci_lob_copy"},{"id":"function.oci-lob-is-equal","name":"oci_lob_is_equal","description":"Compares two LOB\/FILE locators for equality","tag":"refentry","type":"Function","methodName":"oci_lob_is_equal"},{"id":"function.oci-new-collection","name":"oci_new_collection","description":"Allocates new collection object","tag":"refentry","type":"Function","methodName":"oci_new_collection"},{"id":"function.oci-new-connect","name":"oci_new_connect","description":"Connect to the Oracle server using a unique connection","tag":"refentry","type":"Function","methodName":"oci_new_connect"},{"id":"function.oci-new-cursor","name":"oci_new_cursor","description":"Allocates and returns a new cursor (statement handle)","tag":"refentry","type":"Function","methodName":"oci_new_cursor"},{"id":"function.oci-new-descriptor","name":"oci_new_descriptor","description":"Initializes a new empty LOB or FILE descriptor","tag":"refentry","type":"Function","methodName":"oci_new_descriptor"},{"id":"function.oci-num-fields","name":"oci_num_fields","description":"Returns the number of result columns in a statement","tag":"refentry","type":"Function","methodName":"oci_num_fields"},{"id":"function.oci-num-rows","name":"oci_num_rows","description":"Returns number of rows affected during statement execution","tag":"refentry","type":"Function","methodName":"oci_num_rows"},{"id":"function.oci-parse","name":"oci_parse","description":"Prepares an Oracle statement for execution","tag":"refentry","type":"Function","methodName":"oci_parse"},{"id":"function.oci-password-change","name":"oci_password_change","description":"Changes password of Oracle's user","tag":"refentry","type":"Function","methodName":"oci_password_change"},{"id":"function.oci-pconnect","name":"oci_pconnect","description":"Connect to an Oracle database using a persistent connection","tag":"refentry","type":"Function","methodName":"oci_pconnect"},{"id":"function.oci-register-taf-callback","name":"oci_register_taf_callback","description":"Register a user-defined callback function for Oracle Database TAF","tag":"refentry","type":"Function","methodName":"oci_register_taf_callback"},{"id":"function.oci-result","name":"oci_result","description":"Returns field's value from the fetched row","tag":"refentry","type":"Function","methodName":"oci_result"},{"id":"function.oci-rollback","name":"oci_rollback","description":"Rolls back the outstanding database transaction","tag":"refentry","type":"Function","methodName":"oci_rollback"},{"id":"function.oci-server-version","name":"oci_server_version","description":"Returns the Oracle Database version","tag":"refentry","type":"Function","methodName":"oci_server_version"},{"id":"function.oci-set-action","name":"oci_set_action","description":"Sets the action name","tag":"refentry","type":"Function","methodName":"oci_set_action"},{"id":"function.oci-set-call-timout","name":"oci_set_call_timeout","description":"Sets a millisecond timeout for database calls","tag":"refentry","type":"Function","methodName":"oci_set_call_timeout"},{"id":"function.oci-set-client-identifier","name":"oci_set_client_identifier","description":"Sets the client identifier","tag":"refentry","type":"Function","methodName":"oci_set_client_identifier"},{"id":"function.oci-set-client-info","name":"oci_set_client_info","description":"Sets the client information","tag":"refentry","type":"Function","methodName":"oci_set_client_info"},{"id":"function.oci-set-db-operation","name":"oci_set_db_operation","description":"Sets the database operation","tag":"refentry","type":"Function","methodName":"oci_set_db_operation"},{"id":"function.oci-set-edition","name":"oci_set_edition","description":"Sets the database edition","tag":"refentry","type":"Function","methodName":"oci_set_edition"},{"id":"function.oci-set-module-name","name":"oci_set_module_name","description":"Sets the module name","tag":"refentry","type":"Function","methodName":"oci_set_module_name"},{"id":"function.oci-set-prefetch","name":"oci_set_prefetch","description":"Sets number of rows to be prefetched by queries","tag":"refentry","type":"Function","methodName":"oci_set_prefetch"},{"id":"function.oci-set-prefetch-lob","name":"oci_set_prefetch_lob","description":"Sets the amount of data prefetched for each CLOB or BLOB.","tag":"refentry","type":"Function","methodName":"oci_set_prefetch_lob"},{"id":"function.oci-statement-type","name":"oci_statement_type","description":"Returns the type of a statement","tag":"refentry","type":"Function","methodName":"oci_statement_type"},{"id":"function.oci-unregister-taf-callback","name":"oci_unregister_taf_callback","description":"Unregister a user-defined callback function for Oracle Database TAF","tag":"refentry","type":"Function","methodName":"oci_unregister_taf_callback"},{"id":"ref.oci8","name":"OCI8 Functions","description":"Oracle OCI8","tag":"reference","type":"Extension","methodName":"OCI8 Functions"},{"id":"ocicollection.append","name":"OCICollection::append","description":"Appends element to the collection","tag":"refentry","type":"Function","methodName":"append"},{"id":"ocicollection.assign","name":"OCICollection::assign","description":"Assigns a value to the collection from another existing collection","tag":"refentry","type":"Function","methodName":"assign"},{"id":"ocicollection.assignelem","name":"OCICollection::assignElem","description":"Assigns a value to the element of the collection","tag":"refentry","type":"Function","methodName":"assignElem"},{"id":"ocicollection.free","name":"OCICollection::free","description":"Frees the resources associated with the collection object","tag":"refentry","type":"Function","methodName":"free"},{"id":"ocicollection.getelem","name":"OCICollection::getElem","description":"Returns value of the element","tag":"refentry","type":"Function","methodName":"getElem"},{"id":"ocicollection.max","name":"OCICollection::max","description":"Returns the maximum number of elements in the collection","tag":"refentry","type":"Function","methodName":"max"},{"id":"ocicollection.size","name":"OCICollection::size","description":"Returns size of the collection","tag":"refentry","type":"Function","methodName":"size"},{"id":"ocicollection.trim","name":"OCICollection::trim","description":"Trims elements from the end of the collection","tag":"refentry","type":"Function","methodName":"trim"},{"id":"class.ocicollection","name":"OCICollection","description":"The OCICollection class","tag":"phpdoc:classref","type":"Class","methodName":"OCICollection"},{"id":"ocilob.append","name":"OCILob::append","description":"Appends data from the large object to another large object","tag":"refentry","type":"Function","methodName":"append"},{"id":"ocilob.close","name":"OCILob::close","description":"Closes LOB descriptor","tag":"refentry","type":"Function","methodName":"close"},{"id":"ocilob.eof","name":"OCILob::eof","description":"Tests for end-of-file on a large object's descriptor","tag":"refentry","type":"Function","methodName":"eof"},{"id":"ocilob.erase","name":"OCILob::erase","description":"Erases a specified portion of the internal LOB data","tag":"refentry","type":"Function","methodName":"erase"},{"id":"ocilob.export","name":"OCILob::export","description":"Exports LOB's contents to a file","tag":"refentry","type":"Function","methodName":"export"},{"id":"ocilob.flush","name":"OCILob::flush","description":"Flushes\/writes buffer of the LOB to the server","tag":"refentry","type":"Function","methodName":"flush"},{"id":"ocilob.free","name":"OCILob::free","description":"Frees resources associated with the LOB descriptor","tag":"refentry","type":"Function","methodName":"free"},{"id":"ocilob.getbuffering","name":"OCILob::getBuffering","description":"Returns current state of buffering for the large object","tag":"refentry","type":"Function","methodName":"getBuffering"},{"id":"ocilob.import","name":"OCILob::import","description":"Imports file data to the LOB","tag":"refentry","type":"Function","methodName":"import"},{"id":"ocilob.load","name":"OCILob::load","description":"Returns large object's contents","tag":"refentry","type":"Function","methodName":"load"},{"id":"ocilob.read","name":"OCILob::read","description":"Reads part of the large object","tag":"refentry","type":"Function","methodName":"read"},{"id":"ocilob.rewind","name":"OCILob::rewind","description":"Moves the internal pointer to the beginning of the large object","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"ocilob.save","name":"OCILob::save","description":"Saves data to the large object","tag":"refentry","type":"Function","methodName":"save"},{"id":"ocilob.savefile","name":"OCILob::saveFile","description":"Alias of OCILob::import","tag":"refentry","type":"Function","methodName":"saveFile"},{"id":"ocilob.seek","name":"OCILob::seek","description":"Sets the internal pointer of the large object","tag":"refentry","type":"Function","methodName":"seek"},{"id":"ocilob.setbuffering","name":"OCILob::setBuffering","description":"Changes current state of buffering for the large object","tag":"refentry","type":"Function","methodName":"setBuffering"},{"id":"ocilob.size","name":"OCILob::size","description":"Returns size of large object","tag":"refentry","type":"Function","methodName":"size"},{"id":"ocilob.tell","name":"OCILob::tell","description":"Returns the current position of internal pointer of large object","tag":"refentry","type":"Function","methodName":"tell"},{"id":"ocilob.truncate","name":"OCILob::truncate","description":"Truncates large object","tag":"refentry","type":"Function","methodName":"truncate"},{"id":"ocilob.write","name":"OCILob::write","description":"Writes data to the large object","tag":"refentry","type":"Function","methodName":"write"},{"id":"ocilob.writetemporary","name":"OCILob::writeTemporary","description":"Writes a temporary large object","tag":"refentry","type":"Function","methodName":"writeTemporary"},{"id":"ocilob.writetofile","name":"OCILob::writeToFile","description":"Alias of OCILob::export","tag":"refentry","type":"Function","methodName":"writeToFile"},{"id":"class.ocilob","name":"OCILob","description":"The OCILob class","tag":"phpdoc:classref","type":"Class","methodName":"OCILob"},{"id":"function.oci-internal-debug","name":"oci_internal_debug","description":"Enables or disables internal debug output","tag":"refentry","type":"Function","methodName":"oci_internal_debug"},{"id":"function.ocibindbyname","name":"ocibindbyname","description":"Alias of oci_bind_by_name","tag":"refentry","type":"Function","methodName":"ocibindbyname"},{"id":"function.ocicancel","name":"ocicancel","description":"Alias of oci_cancel","tag":"refentry","type":"Function","methodName":"ocicancel"},{"id":"function.ocicloselob","name":"ocicloselob","description":"Alias of OCILob::close","tag":"refentry","type":"Function","methodName":"ocicloselob"},{"id":"function.ocicollappend","name":"ocicollappend","description":"Alias of OCICollection::append","tag":"refentry","type":"Function","methodName":"ocicollappend"},{"id":"function.ocicollassign","name":"ocicollassign","description":"Alias of OCICollection::assign","tag":"refentry","type":"Function","methodName":"ocicollassign"},{"id":"function.ocicollassignelem","name":"ocicollassignelem","description":"Alias of OCICollection::assignElem","tag":"refentry","type":"Function","methodName":"ocicollassignelem"},{"id":"function.ocicollgetelem","name":"ocicollgetelem","description":"Alias of OCICollection::getElem","tag":"refentry","type":"Function","methodName":"ocicollgetelem"},{"id":"function.ocicollmax","name":"ocicollmax","description":"Alias of OCICollection::max","tag":"refentry","type":"Function","methodName":"ocicollmax"},{"id":"function.ocicollsize","name":"ocicollsize","description":"Alias of OCICollection::size","tag":"refentry","type":"Function","methodName":"ocicollsize"},{"id":"function.ocicolltrim","name":"ocicolltrim","description":"Alias of OCICollection::trim","tag":"refentry","type":"Function","methodName":"ocicolltrim"},{"id":"function.ocicolumnisnull","name":"ocicolumnisnull","description":"Alias of oci_field_is_null","tag":"refentry","type":"Function","methodName":"ocicolumnisnull"},{"id":"function.ocicolumnname","name":"ocicolumnname","description":"Alias of oci_field_name","tag":"refentry","type":"Function","methodName":"ocicolumnname"},{"id":"function.ocicolumnprecision","name":"ocicolumnprecision","description":"Alias of oci_field_precision","tag":"refentry","type":"Function","methodName":"ocicolumnprecision"},{"id":"function.ocicolumnscale","name":"ocicolumnscale","description":"Alias of oci_field_scale","tag":"refentry","type":"Function","methodName":"ocicolumnscale"},{"id":"function.ocicolumnsize","name":"ocicolumnsize","description":"Alias of oci_field_size","tag":"refentry","type":"Function","methodName":"ocicolumnsize"},{"id":"function.ocicolumntype","name":"ocicolumntype","description":"Alias of oci_field_type","tag":"refentry","type":"Function","methodName":"ocicolumntype"},{"id":"function.ocicolumntyperaw","name":"ocicolumntyperaw","description":"Alias of oci_field_type_raw","tag":"refentry","type":"Function","methodName":"ocicolumntyperaw"},{"id":"function.ocicommit","name":"ocicommit","description":"Alias of oci_commit","tag":"refentry","type":"Function","methodName":"ocicommit"},{"id":"function.ocidefinebyname","name":"ocidefinebyname","description":"Alias of oci_define_by_name","tag":"refentry","type":"Function","methodName":"ocidefinebyname"},{"id":"function.ocierror","name":"ocierror","description":"Alias of oci_error","tag":"refentry","type":"Function","methodName":"ocierror"},{"id":"function.ociexecute","name":"ociexecute","description":"Alias of oci_execute","tag":"refentry","type":"Function","methodName":"ociexecute"},{"id":"function.ocifetch","name":"ocifetch","description":"Alias of oci_fetch","tag":"refentry","type":"Function","methodName":"ocifetch"},{"id":"function.ocifetchinto","name":"ocifetchinto","description":"Obsolete variant of oci_fetch_array, oci_fetch_object,\n oci_fetch_assoc and\n oci_fetch_row","tag":"refentry","type":"Function","methodName":"ocifetchinto"},{"id":"function.ocifetchstatement","name":"ocifetchstatement","description":"Alias of oci_fetch_all","tag":"refentry","type":"Function","methodName":"ocifetchstatement"},{"id":"function.ocifreecollection","name":"ocifreecollection","description":"Alias of OCICollection::free","tag":"refentry","type":"Function","methodName":"ocifreecollection"},{"id":"function.ocifreecursor","name":"ocifreecursor","description":"Alias of oci_free_statement","tag":"refentry","type":"Function","methodName":"ocifreecursor"},{"id":"function.ocifreedesc","name":"ocifreedesc","description":"Alias of OCILob::free","tag":"refentry","type":"Function","methodName":"ocifreedesc"},{"id":"function.ocifreestatement","name":"ocifreestatement","description":"Alias of oci_free_statement","tag":"refentry","type":"Function","methodName":"ocifreestatement"},{"id":"function.ociinternaldebug","name":"ociinternaldebug","description":"Alias of oci_internal_debug","tag":"refentry","type":"Function","methodName":"ociinternaldebug"},{"id":"function.ociloadlob","name":"ociloadlob","description":"Alias of OCILob::load","tag":"refentry","type":"Function","methodName":"ociloadlob"},{"id":"function.ocilogoff","name":"ocilogoff","description":"Alias of oci_close","tag":"refentry","type":"Function","methodName":"ocilogoff"},{"id":"function.ocilogon","name":"ocilogon","description":"Alias of oci_connect","tag":"refentry","type":"Function","methodName":"ocilogon"},{"id":"function.ocinewcollection","name":"ocinewcollection","description":"Alias of oci_new_collection","tag":"refentry","type":"Function","methodName":"ocinewcollection"},{"id":"function.ocinewcursor","name":"ocinewcursor","description":"Alias of oci_new_cursor","tag":"refentry","type":"Function","methodName":"ocinewcursor"},{"id":"function.ocinewdescriptor","name":"ocinewdescriptor","description":"Alias of oci_new_descriptor","tag":"refentry","type":"Function","methodName":"ocinewdescriptor"},{"id":"function.ocinlogon","name":"ocinlogon","description":"Alias of oci_new_connect","tag":"refentry","type":"Function","methodName":"ocinlogon"},{"id":"function.ocinumcols","name":"ocinumcols","description":"Alias of oci_num_fields","tag":"refentry","type":"Function","methodName":"ocinumcols"},{"id":"function.ociparse","name":"ociparse","description":"Alias of oci_parse","tag":"refentry","type":"Function","methodName":"ociparse"},{"id":"function.ociplogon","name":"ociplogon","description":"Alias of oci_pconnect","tag":"refentry","type":"Function","methodName":"ociplogon"},{"id":"function.ociresult","name":"ociresult","description":"Alias of oci_result","tag":"refentry","type":"Function","methodName":"ociresult"},{"id":"function.ocirollback","name":"ocirollback","description":"Alias of oci_rollback","tag":"refentry","type":"Function","methodName":"ocirollback"},{"id":"function.ocirowcount","name":"ocirowcount","description":"Alias of oci_num_rows","tag":"refentry","type":"Function","methodName":"ocirowcount"},{"id":"function.ocisavelob","name":"ocisavelob","description":"Alias of OCILob::save","tag":"refentry","type":"Function","methodName":"ocisavelob"},{"id":"function.ocisavelobfile","name":"ocisavelobfile","description":"Alias of OCILob::import","tag":"refentry","type":"Function","methodName":"ocisavelobfile"},{"id":"function.ociserverversion","name":"ociserverversion","description":"Alias of oci_server_version","tag":"refentry","type":"Function","methodName":"ociserverversion"},{"id":"function.ocisetprefetch","name":"ocisetprefetch","description":"Alias of oci_set_prefetch","tag":"refentry","type":"Function","methodName":"ocisetprefetch"},{"id":"function.ocistatementtype","name":"ocistatementtype","description":"Alias of oci_statement_type","tag":"refentry","type":"Function","methodName":"ocistatementtype"},{"id":"function.ociwritelobtofile","name":"ociwritelobtofile","description":"Alias of OCILob::export","tag":"refentry","type":"Function","methodName":"ociwritelobtofile"},{"id":"function.ociwritetemporarylob","name":"ociwritetemporarylob","description":"Alias of OCILob::writeTemporary","tag":"refentry","type":"Function","methodName":"ociwritetemporarylob"},{"id":"oldaliases.oci8","name":"OCI8 Obsolete Aliases and Functions","description":"Oracle OCI8","tag":"reference","type":"Extension","methodName":"OCI8 Obsolete Aliases and Functions"},{"id":"book.oci8","name":"OCI8","description":"Oracle OCI8","tag":"book","type":"Extension","methodName":"OCI8"},{"id":"intro.pgsql","name":"Introduction","description":"PostgreSQL","tag":"preface","type":"General","methodName":"Introduction"},{"id":"pgsql.requirements","name":"Requirements","description":"PostgreSQL","tag":"section","type":"General","methodName":"Requirements"},{"id":"pgsql.installation","name":"Installation","description":"PostgreSQL","tag":"section","type":"General","methodName":"Installation"},{"id":"pgsql.configuration","name":"Runtime Configuration","description":"PostgreSQL","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"pgsql.resources","name":"Resource Types","description":"PostgreSQL","tag":"section","type":"General","methodName":"Resource Types"},{"id":"pgsql.setup","name":"Installing\/Configuring","description":"PostgreSQL","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"pgsql.constants","name":"Predefined Constants","description":"PostgreSQL","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"pgsql.examples-basic","name":"Basic usage","description":"PostgreSQL","tag":"section","type":"General","methodName":"Basic usage"},{"id":"pgsql.examples-queries","name":"Basic usage","description":"PostgreSQL","tag":"section","type":"General","methodName":"Basic usage"},{"id":"pgsql.examples","name":"Examples","description":"PostgreSQL","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.pg-affected-rows","name":"pg_affected_rows","description":"Returns number of affected records (tuples)","tag":"refentry","type":"Function","methodName":"pg_affected_rows"},{"id":"function.pg-cancel-query","name":"pg_cancel_query","description":"Cancel an asynchronous query","tag":"refentry","type":"Function","methodName":"pg_cancel_query"},{"id":"function.pg-client-encoding","name":"pg_client_encoding","description":"Gets the client encoding","tag":"refentry","type":"Function","methodName":"pg_client_encoding"},{"id":"function.pg-close","name":"pg_close","description":"Closes a PostgreSQL connection","tag":"refentry","type":"Function","methodName":"pg_close"},{"id":"function.pg-connect","name":"pg_connect","description":"Open a PostgreSQL connection","tag":"refentry","type":"Function","methodName":"pg_connect"},{"id":"function.pg-connect-poll","name":"pg_connect_poll","description":"Poll the status of an in-progress asynchronous PostgreSQL connection\n attempt","tag":"refentry","type":"Function","methodName":"pg_connect_poll"},{"id":"function.pg-connection-busy","name":"pg_connection_busy","description":"Get connection is busy or not","tag":"refentry","type":"Function","methodName":"pg_connection_busy"},{"id":"function.pg-connection-reset","name":"pg_connection_reset","description":"Reset connection (reconnect)","tag":"refentry","type":"Function","methodName":"pg_connection_reset"},{"id":"function.pg-connection-status","name":"pg_connection_status","description":"Get connection status","tag":"refentry","type":"Function","methodName":"pg_connection_status"},{"id":"function.pg-consume-input","name":"pg_consume_input","description":"Reads input on the connection","tag":"refentry","type":"Function","methodName":"pg_consume_input"},{"id":"function.pg-convert","name":"pg_convert","description":"Convert associative array values into forms suitable for SQL statements","tag":"refentry","type":"Function","methodName":"pg_convert"},{"id":"function.pg-copy-from","name":"pg_copy_from","description":"Insert records into a table from an array","tag":"refentry","type":"Function","methodName":"pg_copy_from"},{"id":"function.pg-copy-to","name":"pg_copy_to","description":"Copy a table to an array","tag":"refentry","type":"Function","methodName":"pg_copy_to"},{"id":"function.pg-dbname","name":"pg_dbname","description":"Get the database name","tag":"refentry","type":"Function","methodName":"pg_dbname"},{"id":"function.pg-delete","name":"pg_delete","description":"Deletes records","tag":"refentry","type":"Function","methodName":"pg_delete"},{"id":"function.pg-end-copy","name":"pg_end_copy","description":"Sync with PostgreSQL backend","tag":"refentry","type":"Function","methodName":"pg_end_copy"},{"id":"function.pg-escape-bytea","name":"pg_escape_bytea","description":"Escape a string for insertion into a bytea field","tag":"refentry","type":"Function","methodName":"pg_escape_bytea"},{"id":"function.pg-escape-identifier","name":"pg_escape_identifier","description":"Escape a identifier for insertion into a text field","tag":"refentry","type":"Function","methodName":"pg_escape_identifier"},{"id":"function.pg-escape-literal","name":"pg_escape_literal","description":"Escape a literal for insertion into a text field","tag":"refentry","type":"Function","methodName":"pg_escape_literal"},{"id":"function.pg-escape-string","name":"pg_escape_string","description":"Escape a string for query","tag":"refentry","type":"Function","methodName":"pg_escape_string"},{"id":"function.pg-execute","name":"pg_execute","description":"Sends a request to execute a prepared statement with given parameters, and waits for the result","tag":"refentry","type":"Function","methodName":"pg_execute"},{"id":"function.pg-fetch-all","name":"pg_fetch_all","description":"Fetches all rows from a result as an array","tag":"refentry","type":"Function","methodName":"pg_fetch_all"},{"id":"function.pg-fetch-all-columns","name":"pg_fetch_all_columns","description":"Fetches all rows in a particular result column as an array","tag":"refentry","type":"Function","methodName":"pg_fetch_all_columns"},{"id":"function.pg-fetch-array","name":"pg_fetch_array","description":"Fetch a row as an array","tag":"refentry","type":"Function","methodName":"pg_fetch_array"},{"id":"function.pg-fetch-assoc","name":"pg_fetch_assoc","description":"Fetch a row as an associative array","tag":"refentry","type":"Function","methodName":"pg_fetch_assoc"},{"id":"function.pg-fetch-object","name":"pg_fetch_object","description":"Fetch a row as an object","tag":"refentry","type":"Function","methodName":"pg_fetch_object"},{"id":"function.pg-fetch-result","name":"pg_fetch_result","description":"Returns values from a result instance","tag":"refentry","type":"Function","methodName":"pg_fetch_result"},{"id":"function.pg-fetch-row","name":"pg_fetch_row","description":"Get a row as an enumerated array","tag":"refentry","type":"Function","methodName":"pg_fetch_row"},{"id":"function.pg-field-is-null","name":"pg_field_is_null","description":"Test if a field is SQL NULL","tag":"refentry","type":"Function","methodName":"pg_field_is_null"},{"id":"function.pg-field-name","name":"pg_field_name","description":"Returns the name of a field","tag":"refentry","type":"Function","methodName":"pg_field_name"},{"id":"function.pg-field-num","name":"pg_field_num","description":"Returns the field number of the named field","tag":"refentry","type":"Function","methodName":"pg_field_num"},{"id":"function.pg-field-prtlen","name":"pg_field_prtlen","description":"Returns the printed length","tag":"refentry","type":"Function","methodName":"pg_field_prtlen"},{"id":"function.pg-field-size","name":"pg_field_size","description":"Returns the internal storage size of the named field","tag":"refentry","type":"Function","methodName":"pg_field_size"},{"id":"function.pg-field-table","name":"pg_field_table","description":"Returns the name or oid of the tables field","tag":"refentry","type":"Function","methodName":"pg_field_table"},{"id":"function.pg-field-type","name":"pg_field_type","description":"Returns the type name for the corresponding field number","tag":"refentry","type":"Function","methodName":"pg_field_type"},{"id":"function.pg-field-type-oid","name":"pg_field_type_oid","description":"Returns the type ID (OID) for the corresponding field number","tag":"refentry","type":"Function","methodName":"pg_field_type_oid"},{"id":"function.pg-flush","name":"pg_flush","description":"Flush outbound query data on the connection","tag":"refentry","type":"Function","methodName":"pg_flush"},{"id":"function.pg-free-result","name":"pg_free_result","description":"Free result memory","tag":"refentry","type":"Function","methodName":"pg_free_result"},{"id":"function.pg-get-notify","name":"pg_get_notify","description":"Gets SQL NOTIFY message","tag":"refentry","type":"Function","methodName":"pg_get_notify"},{"id":"function.pg-get-pid","name":"pg_get_pid","description":"Gets the backend's process ID","tag":"refentry","type":"Function","methodName":"pg_get_pid"},{"id":"function.pg-get-result","name":"pg_get_result","description":"Get asynchronous query result","tag":"refentry","type":"Function","methodName":"pg_get_result"},{"id":"function.pg-host","name":"pg_host","description":"Returns the host name associated with the connection","tag":"refentry","type":"Function","methodName":"pg_host"},{"id":"function.pg-insert","name":"pg_insert","description":"Insert array into table","tag":"refentry","type":"Function","methodName":"pg_insert"},{"id":"function.pg-last-error","name":"pg_last_error","description":"Get the last error message string of a connection","tag":"refentry","type":"Function","methodName":"pg_last_error"},{"id":"function.pg-last-notice","name":"pg_last_notice","description":"Returns the last notice message from PostgreSQL server","tag":"refentry","type":"Function","methodName":"pg_last_notice"},{"id":"function.pg-last-oid","name":"pg_last_oid","description":"Returns the last row's OID","tag":"refentry","type":"Function","methodName":"pg_last_oid"},{"id":"function.pg-lo-close","name":"pg_lo_close","description":"Close a large object","tag":"refentry","type":"Function","methodName":"pg_lo_close"},{"id":"function.pg-lo-create","name":"pg_lo_create","description":"Create a large object","tag":"refentry","type":"Function","methodName":"pg_lo_create"},{"id":"function.pg-lo-export","name":"pg_lo_export","description":"Export a large object to file","tag":"refentry","type":"Function","methodName":"pg_lo_export"},{"id":"function.pg-lo-import","name":"pg_lo_import","description":"Import a large object from file","tag":"refentry","type":"Function","methodName":"pg_lo_import"},{"id":"function.pg-lo-open","name":"pg_lo_open","description":"Open a large object","tag":"refentry","type":"Function","methodName":"pg_lo_open"},{"id":"function.pg-lo-read","name":"pg_lo_read","description":"Read a large object","tag":"refentry","type":"Function","methodName":"pg_lo_read"},{"id":"function.pg-lo-read-all","name":"pg_lo_read_all","description":"Reads an entire large object and send straight to browser","tag":"refentry","type":"Function","methodName":"pg_lo_read_all"},{"id":"function.pg-lo-seek","name":"pg_lo_seek","description":"Seeks position within a large object","tag":"refentry","type":"Function","methodName":"pg_lo_seek"},{"id":"function.pg-lo-tell","name":"pg_lo_tell","description":"Returns current seek position a of large object","tag":"refentry","type":"Function","methodName":"pg_lo_tell"},{"id":"function.pg-lo-truncate","name":"pg_lo_truncate","description":"Truncates a large object","tag":"refentry","type":"Function","methodName":"pg_lo_truncate"},{"id":"function.pg-lo-unlink","name":"pg_lo_unlink","description":"Delete a large object","tag":"refentry","type":"Function","methodName":"pg_lo_unlink"},{"id":"function.pg-lo-write","name":"pg_lo_write","description":"Write to a large object","tag":"refentry","type":"Function","methodName":"pg_lo_write"},{"id":"function.pg-meta-data","name":"pg_meta_data","description":"Get meta data for table","tag":"refentry","type":"Function","methodName":"pg_meta_data"},{"id":"function.pg-num-fields","name":"pg_num_fields","description":"Returns the number of fields in a result","tag":"refentry","type":"Function","methodName":"pg_num_fields"},{"id":"function.pg-num-rows","name":"pg_num_rows","description":"Returns the number of rows in a result","tag":"refentry","type":"Function","methodName":"pg_num_rows"},{"id":"function.pg-options","name":"pg_options","description":"Get the options associated with the connection","tag":"refentry","type":"Function","methodName":"pg_options"},{"id":"function.pg-parameter-status","name":"pg_parameter_status","description":"Looks up a current parameter setting of the server","tag":"refentry","type":"Function","methodName":"pg_parameter_status"},{"id":"function.pg-pconnect","name":"pg_pconnect","description":"Open a persistent PostgreSQL connection","tag":"refentry","type":"Function","methodName":"pg_pconnect"},{"id":"function.pg-ping","name":"pg_ping","description":"Ping database connection","tag":"refentry","type":"Function","methodName":"pg_ping"},{"id":"function.pg-port","name":"pg_port","description":"Return the port number associated with the connection","tag":"refentry","type":"Function","methodName":"pg_port"},{"id":"function.pg-prepare","name":"pg_prepare","description":"Submits a request to the server to create a prepared statement with the\n given parameters, and waits for completion","tag":"refentry","type":"Function","methodName":"pg_prepare"},{"id":"function.pg-put-line","name":"pg_put_line","description":"Send a NULL-terminated string to PostgreSQL backend","tag":"refentry","type":"Function","methodName":"pg_put_line"},{"id":"function.pg-query","name":"pg_query","description":"Execute a query","tag":"refentry","type":"Function","methodName":"pg_query"},{"id":"function.pg-query-params","name":"pg_query_params","description":"Submits a command to the server and waits for the result, with the ability to pass parameters separately from the SQL command text","tag":"refentry","type":"Function","methodName":"pg_query_params"},{"id":"function.pg-result-error","name":"pg_result_error","description":"Get error message associated with result","tag":"refentry","type":"Function","methodName":"pg_result_error"},{"id":"function.pg-result-error-field","name":"pg_result_error_field","description":"Returns an individual field of an error report","tag":"refentry","type":"Function","methodName":"pg_result_error_field"},{"id":"function.pg-result-memory-size","name":"pg_result_memory_size","description":"Returns the amount of memory allocated for a query result","tag":"refentry","type":"Function","methodName":"pg_result_memory_size"},{"id":"function.pg-result-seek","name":"pg_result_seek","description":"Set internal row offset in result instance","tag":"refentry","type":"Function","methodName":"pg_result_seek"},{"id":"function.pg-result-status","name":"pg_result_status","description":"Get status of query result","tag":"refentry","type":"Function","methodName":"pg_result_status"},{"id":"function.pg-select","name":"pg_select","description":"Select records","tag":"refentry","type":"Function","methodName":"pg_select"},{"id":"function.pg-send-execute","name":"pg_send_execute","description":"Sends a request to execute a prepared statement with given parameters, without waiting for the result(s)","tag":"refentry","type":"Function","methodName":"pg_send_execute"},{"id":"function.pg-send-prepare","name":"pg_send_prepare","description":"Sends a request to create a prepared statement with the given parameters, without waiting for completion","tag":"refentry","type":"Function","methodName":"pg_send_prepare"},{"id":"function.pg-send-query","name":"pg_send_query","description":"Sends asynchronous query","tag":"refentry","type":"Function","methodName":"pg_send_query"},{"id":"function.pg-send-query-params","name":"pg_send_query_params","description":"Submits a command and separate parameters to the server without waiting for the result(s)","tag":"refentry","type":"Function","methodName":"pg_send_query_params"},{"id":"function.pg-set-chunked-rows-size","name":"pg_set_chunked_rows_size","description":"Set the query results to be retrieved in chunk mode","tag":"refentry","type":"Function","methodName":"pg_set_chunked_rows_size"},{"id":"function.pg-set-client-encoding","name":"pg_set_client_encoding","description":"Set the client encoding","tag":"refentry","type":"Function","methodName":"pg_set_client_encoding"},{"id":"function.pg-set-error-context-visibility","name":"pg_set_error_context_visibility","description":"Determines the visibility of the context's error messages returned by pg_last_error\n and pg_result_error","tag":"refentry","type":"Function","methodName":"pg_set_error_context_visibility"},{"id":"function.pg-set-error-verbosity","name":"pg_set_error_verbosity","description":"Determines the verbosity of messages returned by pg_last_error \n and pg_result_error","tag":"refentry","type":"Function","methodName":"pg_set_error_verbosity"},{"id":"function.pg-socket","name":"pg_socket","description":"Get a read only handle to the socket underlying a PostgreSQL connection","tag":"refentry","type":"Function","methodName":"pg_socket"},{"id":"function.pg-trace","name":"pg_trace","description":"Enable tracing a PostgreSQL connection","tag":"refentry","type":"Function","methodName":"pg_trace"},{"id":"function.pg-transaction-status","name":"pg_transaction_status","description":"Returns the current in-transaction status of the server","tag":"refentry","type":"Function","methodName":"pg_transaction_status"},{"id":"function.pg-tty","name":"pg_tty","description":"Return the TTY name associated with the connection","tag":"refentry","type":"Function","methodName":"pg_tty"},{"id":"function.pg-unescape-bytea","name":"pg_unescape_bytea","description":"Unescape binary for bytea type","tag":"refentry","type":"Function","methodName":"pg_unescape_bytea"},{"id":"function.pg-untrace","name":"pg_untrace","description":"Disable tracing of a PostgreSQL connection","tag":"refentry","type":"Function","methodName":"pg_untrace"},{"id":"function.pg-update","name":"pg_update","description":"Update table","tag":"refentry","type":"Function","methodName":"pg_update"},{"id":"function.pg-version","name":"pg_version","description":"Returns an array with client, protocol and server version (when available)","tag":"refentry","type":"Function","methodName":"pg_version"},{"id":"ref.pgsql","name":"PostgreSQL Functions","description":"PostgreSQL","tag":"reference","type":"Extension","methodName":"PostgreSQL Functions"},{"id":"class.pgsql-connection","name":"PgSql\\Connection","description":"The PgSql\\Connection class","tag":"phpdoc:classref","type":"Class","methodName":"PgSql\\Connection"},{"id":"class.pgsql-result","name":"PgSql\\Result","description":"The PgSql\\Result class","tag":"phpdoc:classref","type":"Class","methodName":"PgSql\\Result"},{"id":"class.pgsql-lob","name":"PgSql\\Lob","description":"The PgSql\\Lob class","tag":"phpdoc:classref","type":"Class","methodName":"PgSql\\Lob"},{"id":"book.pgsql","name":"PostgreSQL","description":"Vendor Specific Database Extensions","tag":"book","type":"Extension","methodName":"PostgreSQL"},{"id":"intro.sqlite3","name":"Introduction","description":"SQLite3","tag":"preface","type":"General","methodName":"Introduction"},{"id":"sqlite3.requirements","name":"Requirements","description":"SQLite3","tag":"section","type":"General","methodName":"Requirements"},{"id":"sqlite3.installation","name":"Installation","description":"SQLite3","tag":"section","type":"General","methodName":"Installation"},{"id":"sqlite3.configuration","name":"Runtime Configuration","description":"SQLite3","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"sqlite3.setup","name":"Installing\/Configuring","description":"SQLite3","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"sqlite3.constants","name":"Predefined Constants","description":"SQLite3","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"sqlite3.backup","name":"SQLite3::backup","description":"Backup one database to another database","tag":"refentry","type":"Function","methodName":"backup"},{"id":"sqlite3.busytimeout","name":"SQLite3::busyTimeout","description":"Sets the busy connection handler","tag":"refentry","type":"Function","methodName":"busyTimeout"},{"id":"sqlite3.changes","name":"SQLite3::changes","description":"Returns the number of database rows that were changed (or inserted or\n deleted) by the most recent SQL statement","tag":"refentry","type":"Function","methodName":"changes"},{"id":"sqlite3.close","name":"SQLite3::close","description":"Closes the database connection","tag":"refentry","type":"Function","methodName":"close"},{"id":"sqlite3.construct","name":"SQLite3::__construct","description":"Instantiates an SQLite3 object and opens an SQLite 3 database","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"sqlite3.createaggregate","name":"SQLite3::createAggregate","description":"Registers a PHP function for use as an SQL aggregate function","tag":"refentry","type":"Function","methodName":"createAggregate"},{"id":"sqlite3.createcollation","name":"SQLite3::createCollation","description":"Registers a PHP function for use as an SQL collating function","tag":"refentry","type":"Function","methodName":"createCollation"},{"id":"sqlite3.createfunction","name":"SQLite3::createFunction","description":"Registers a PHP function for use as an SQL scalar function","tag":"refentry","type":"Function","methodName":"createFunction"},{"id":"sqlite3.enableexceptions","name":"SQLite3::enableExceptions","description":"Enable throwing exceptions","tag":"refentry","type":"Function","methodName":"enableExceptions"},{"id":"sqlite3.escapestring","name":"SQLite3::escapeString","description":"Returns a string that has been properly escaped","tag":"refentry","type":"Function","methodName":"escapeString"},{"id":"sqlite3.exec","name":"SQLite3::exec","description":"Executes a result-less query against a given database","tag":"refentry","type":"Function","methodName":"exec"},{"id":"sqlite3.lasterrorcode","name":"SQLite3::lastErrorCode","description":"Returns the numeric result code of the most recent failed SQLite request","tag":"refentry","type":"Function","methodName":"lastErrorCode"},{"id":"sqlite3.lasterrormsg","name":"SQLite3::lastErrorMsg","description":"Returns English text describing the most recent failed SQLite request","tag":"refentry","type":"Function","methodName":"lastErrorMsg"},{"id":"sqlite3.lastinsertrowid","name":"SQLite3::lastInsertRowID","description":"Returns the row ID of the most recent INSERT into the database","tag":"refentry","type":"Function","methodName":"lastInsertRowID"},{"id":"sqlite3.loadextension","name":"SQLite3::loadExtension","description":"Attempts to load an SQLite extension library","tag":"refentry","type":"Function","methodName":"loadExtension"},{"id":"sqlite3.open","name":"SQLite3::open","description":"Opens an SQLite database","tag":"refentry","type":"Function","methodName":"open"},{"id":"sqlite3.openblob","name":"SQLite3::openBlob","description":"Opens a stream resource to read a BLOB","tag":"refentry","type":"Function","methodName":"openBlob"},{"id":"sqlite3.prepare","name":"SQLite3::prepare","description":"Prepares an SQL statement for execution","tag":"refentry","type":"Function","methodName":"prepare"},{"id":"sqlite3.query","name":"SQLite3::query","description":"Executes an SQL query","tag":"refentry","type":"Function","methodName":"query"},{"id":"sqlite3.querysingle","name":"SQLite3::querySingle","description":"Executes a query and returns a single result","tag":"refentry","type":"Function","methodName":"querySingle"},{"id":"sqlite3.setauthorizer","name":"SQLite3::setAuthorizer","description":"Configures a callback to be used as an authorizer to limit what a statement can do","tag":"refentry","type":"Function","methodName":"setAuthorizer"},{"id":"sqlite3.version","name":"SQLite3::version","description":"Returns the SQLite3 library version as a string constant and as a number","tag":"refentry","type":"Function","methodName":"version"},{"id":"class.sqlite3","name":"SQLite3","description":"The SQLite3 class","tag":"phpdoc:classref","type":"Class","methodName":"SQLite3"},{"id":"class.sqlite3exception","name":"SQLite3Exception","description":"The SQLite3Exception class","tag":"phpdoc:classref","type":"Class","methodName":"SQLite3Exception"},{"id":"sqlite3stmt.bindparam","name":"SQLite3Stmt::bindParam","description":"Binds a parameter to a statement variable","tag":"refentry","type":"Function","methodName":"bindParam"},{"id":"sqlite3stmt.bindvalue","name":"SQLite3Stmt::bindValue","description":"Binds the value of a parameter to a statement variable","tag":"refentry","type":"Function","methodName":"bindValue"},{"id":"sqlite3stmt.clear","name":"SQLite3Stmt::clear","description":"Clears all current bound parameters","tag":"refentry","type":"Function","methodName":"clear"},{"id":"sqlite3stmt.close","name":"SQLite3Stmt::close","description":"Closes the prepared statement","tag":"refentry","type":"Function","methodName":"close"},{"id":"sqlite3stmt.construct","name":"SQLite3Stmt::__construct","description":"Constructs an SQLite3Stmt object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"sqlite3stmt.execute","name":"SQLite3Stmt::execute","description":"Executes a prepared statement and returns a result set object","tag":"refentry","type":"Function","methodName":"execute"},{"id":"sqlite3stmt.getsql","name":"SQLite3Stmt::getSQL","description":"Get the SQL of the statement","tag":"refentry","type":"Function","methodName":"getSQL"},{"id":"sqlite3stmt.paramcount","name":"SQLite3Stmt::paramCount","description":"Returns the number of parameters within the prepared statement","tag":"refentry","type":"Function","methodName":"paramCount"},{"id":"sqlite3stmt.readonly","name":"SQLite3Stmt::readOnly","description":"Returns whether a statement is definitely read only","tag":"refentry","type":"Function","methodName":"readOnly"},{"id":"sqlite3stmt.reset","name":"SQLite3Stmt::reset","description":"Resets the prepared statement","tag":"refentry","type":"Function","methodName":"reset"},{"id":"class.sqlite3stmt","name":"SQLite3Stmt","description":"The SQLite3Stmt class","tag":"phpdoc:classref","type":"Class","methodName":"SQLite3Stmt"},{"id":"sqlite3result.columnname","name":"SQLite3Result::columnName","description":"Returns the name of the nth column","tag":"refentry","type":"Function","methodName":"columnName"},{"id":"sqlite3result.columntype","name":"SQLite3Result::columnType","description":"Returns the type of the nth column","tag":"refentry","type":"Function","methodName":"columnType"},{"id":"sqlite3result.construct","name":"SQLite3Result::__construct","description":"Constructs an SQLite3Result","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"sqlite3result.fetcharray","name":"SQLite3Result::fetchArray","description":"Fetches a result row as an associative or numerically indexed array or both","tag":"refentry","type":"Function","methodName":"fetchArray"},{"id":"sqlite3result.finalize","name":"SQLite3Result::finalize","description":"Closes the result set","tag":"refentry","type":"Function","methodName":"finalize"},{"id":"sqlite3result.numcolumns","name":"SQLite3Result::numColumns","description":"Returns the number of columns in the result set","tag":"refentry","type":"Function","methodName":"numColumns"},{"id":"sqlite3result.reset","name":"SQLite3Result::reset","description":"Resets the result set back to the first row","tag":"refentry","type":"Function","methodName":"reset"},{"id":"class.sqlite3result","name":"SQLite3Result","description":"The SQLite3Result class","tag":"phpdoc:classref","type":"Class","methodName":"SQLite3Result"},{"id":"book.sqlite3","name":"SQLite3","description":"SQLite3","tag":"book","type":"Extension","methodName":"SQLite3"},{"id":"intro.sqlsrv","name":"Introduction","description":"Microsoft SQL Server Driver for PHP","tag":"preface","type":"General","methodName":"Introduction"},{"id":"sqlsrv.requirements","name":"Requirements","description":"Microsoft SQL Server Driver for PHP","tag":"section","type":"General","methodName":"Requirements"},{"id":"sqlsrv.installation","name":"Installation","description":"Microsoft SQL Server Driver for PHP","tag":"section","type":"General","methodName":"Installation"},{"id":"sqlsrv.configuration","name":"Runtime Configuration","description":"Microsoft SQL Server Driver for PHP","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"sqlsrv.resources","name":"Resource Types","description":"Microsoft SQL Server Driver for PHP","tag":"section","type":"General","methodName":"Resource Types"},{"id":"sqlsrv.setup","name":"Installing\/Configuring","description":"Microsoft SQL Server Driver for PHP","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"sqlsrv.constants","name":"Predefined Constants","description":"Microsoft SQL Server Driver for PHP","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.sqlsrv-begin-transaction","name":"sqlsrv_begin_transaction","description":"Begins a database transaction","tag":"refentry","type":"Function","methodName":"sqlsrv_begin_transaction"},{"id":"function.sqlsrv-cancel","name":"sqlsrv_cancel","description":"Cancels a statement","tag":"refentry","type":"Function","methodName":"sqlsrv_cancel"},{"id":"function.sqlsrv-client-info","name":"sqlsrv_client_info","description":"Returns information about the client and specified connection","tag":"refentry","type":"Function","methodName":"sqlsrv_client_info"},{"id":"function.sqlsrv-close","name":"sqlsrv_close","description":"Closes an open connection and releases resourses associated with the connection","tag":"refentry","type":"Function","methodName":"sqlsrv_close"},{"id":"function.sqlsrv-commit","name":"sqlsrv_commit","description":"Commits a transaction that was begun with sqlsrv_begin_transaction","tag":"refentry","type":"Function","methodName":"sqlsrv_commit"},{"id":"function.sqlsrv-configure","name":"sqlsrv_configure","description":"Changes the driver error handling and logging configurations","tag":"refentry","type":"Function","methodName":"sqlsrv_configure"},{"id":"function.sqlsrv-connect","name":"sqlsrv_connect","description":"Opens a connection to a Microsoft SQL Server database","tag":"refentry","type":"Function","methodName":"sqlsrv_connect"},{"id":"function.sqlsrv-errors","name":"sqlsrv_errors","description":"Returns error and warning information about the last SQLSRV operation performed","tag":"refentry","type":"Function","methodName":"sqlsrv_errors"},{"id":"function.sqlsrv-execute","name":"sqlsrv_execute","description":"Executes a statement prepared with sqlsrv_prepare","tag":"refentry","type":"Function","methodName":"sqlsrv_execute"},{"id":"function.sqlsrv-fetch","name":"sqlsrv_fetch","description":"Makes the next row in a result set available for reading","tag":"refentry","type":"Function","methodName":"sqlsrv_fetch"},{"id":"function.sqlsrv-fetch-array","name":"sqlsrv_fetch_array","description":"Returns a row as an array","tag":"refentry","type":"Function","methodName":"sqlsrv_fetch_array"},{"id":"function.sqlsrv-fetch-object","name":"sqlsrv_fetch_object","description":"Retrieves the next row of data in a result set as an object","tag":"refentry","type":"Function","methodName":"sqlsrv_fetch_object"},{"id":"function.sqlsrv-field-metadata","name":"sqlsrv_field_metadata","description":"Retrieves metadata for the fields of a statement prepared by \n sqlsrv_prepare or sqlsrv_query","tag":"refentry","type":"Function","methodName":"sqlsrv_field_metadata"},{"id":"function.sqlsrv-free-stmt","name":"sqlsrv_free_stmt","description":"Frees all resources for the specified statement","tag":"refentry","type":"Function","methodName":"sqlsrv_free_stmt"},{"id":"function.sqlsrv-get-config","name":"sqlsrv_get_config","description":"Returns the value of the specified configuration setting","tag":"refentry","type":"Function","methodName":"sqlsrv_get_config"},{"id":"function.sqlsrv-get-field","name":"sqlsrv_get_field","description":"Gets field data from the currently selected row","tag":"refentry","type":"Function","methodName":"sqlsrv_get_field"},{"id":"function.sqlsrv-has-rows","name":"sqlsrv_has_rows","description":"Indicates whether the specified statement has rows","tag":"refentry","type":"Function","methodName":"sqlsrv_has_rows"},{"id":"function.sqlsrv-next-result","name":"sqlsrv_next_result","description":"Makes the next result of the specified statement active","tag":"refentry","type":"Function","methodName":"sqlsrv_next_result"},{"id":"function.sqlsrv-num-fields","name":"sqlsrv_num_fields","description":"Retrieves the number of fields (columns) on a statement","tag":"refentry","type":"Function","methodName":"sqlsrv_num_fields"},{"id":"function.sqlsrv-num-rows","name":"sqlsrv_num_rows","description":"Retrieves the number of rows in a result set","tag":"refentry","type":"Function","methodName":"sqlsrv_num_rows"},{"id":"function.sqlsrv-prepare","name":"sqlsrv_prepare","description":"Prepares a query for execution","tag":"refentry","type":"Function","methodName":"sqlsrv_prepare"},{"id":"function.sqlsrv-query","name":"sqlsrv_query","description":"Prepares and executes a query","tag":"refentry","type":"Function","methodName":"sqlsrv_query"},{"id":"function.sqlsrv-rollback","name":"sqlsrv_rollback","description":"Rolls back a transaction that was begun with \n sqlsrv_begin_transaction","tag":"refentry","type":"Function","methodName":"sqlsrv_rollback"},{"id":"function.sqlsrv-rows-affected","name":"sqlsrv_rows_affected","description":"Returns the number of rows modified by the last INSERT, UPDATE, or \n DELETE query executed","tag":"refentry","type":"Function","methodName":"sqlsrv_rows_affected"},{"id":"function.sqlsrv-send-stream-data","name":"sqlsrv_send_stream_data","description":"Sends data from parameter streams to the server","tag":"refentry","type":"Function","methodName":"sqlsrv_send_stream_data"},{"id":"function.sqlsrv-server-info","name":"sqlsrv_server_info","description":"Returns information about the server","tag":"refentry","type":"Function","methodName":"sqlsrv_server_info"},{"id":"ref.sqlsrv","name":"SQLSRV Functions","description":"Microsoft SQL Server Driver for PHP","tag":"reference","type":"Extension","methodName":"SQLSRV Functions"},{"id":"book.sqlsrv","name":"SQLSRV","description":"Microsoft SQL Server Driver for PHP","tag":"book","type":"Extension","methodName":"SQLSRV"},{"id":"refs.database.vendors","name":"Vendor Specific Database Extensions","description":"Database Extensions","tag":"set","type":"Extension","methodName":"Vendor Specific Database Extensions"},{"id":"refs.database","name":"Database Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"Database Extensions"},{"id":"intro.calendar","name":"Introduction","description":"Calendar","tag":"preface","type":"General","methodName":"Introduction"},{"id":"calendar.installation","name":"Installation","description":"Calendar","tag":"section","type":"General","methodName":"Installation"},{"id":"calendar.setup","name":"Installing\/Configuring","description":"Calendar","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"calendar.constants","name":"Predefined Constants","description":"Calendar","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.cal-days-in-month","name":"cal_days_in_month","description":"Return the number of days in a month for a given year and calendar","tag":"refentry","type":"Function","methodName":"cal_days_in_month"},{"id":"function.cal-from-jd","name":"cal_from_jd","description":"Converts from Julian Day Count to a supported calendar","tag":"refentry","type":"Function","methodName":"cal_from_jd"},{"id":"function.cal-info","name":"cal_info","description":"Returns information about a particular calendar","tag":"refentry","type":"Function","methodName":"cal_info"},{"id":"function.cal-to-jd","name":"cal_to_jd","description":"Converts from a supported calendar to Julian Day Count","tag":"refentry","type":"Function","methodName":"cal_to_jd"},{"id":"function.easter-date","name":"easter_date","description":"Get Unix timestamp for local midnight on Easter of a given year","tag":"refentry","type":"Function","methodName":"easter_date"},{"id":"function.easter-days","name":"easter_days","description":"Get number of days after March 21 on which Easter falls for a given year","tag":"refentry","type":"Function","methodName":"easter_days"},{"id":"function.frenchtojd","name":"frenchtojd","description":"Converts a date from the French Republican Calendar to a Julian Day Count","tag":"refentry","type":"Function","methodName":"frenchtojd"},{"id":"function.gregoriantojd","name":"gregoriantojd","description":"Converts a Gregorian date to Julian Day Count","tag":"refentry","type":"Function","methodName":"gregoriantojd"},{"id":"function.jddayofweek","name":"jddayofweek","description":"Returns the day of the week","tag":"refentry","type":"Function","methodName":"jddayofweek"},{"id":"function.jdmonthname","name":"jdmonthname","description":"Returns a month name","tag":"refentry","type":"Function","methodName":"jdmonthname"},{"id":"function.jdtofrench","name":"jdtofrench","description":"Converts a Julian Day Count to the French Republican Calendar","tag":"refentry","type":"Function","methodName":"jdtofrench"},{"id":"function.jdtogregorian","name":"jdtogregorian","description":"Converts Julian Day Count to Gregorian date","tag":"refentry","type":"Function","methodName":"jdtogregorian"},{"id":"function.jdtojewish","name":"jdtojewish","description":"Converts a Julian day count to a Jewish calendar date","tag":"refentry","type":"Function","methodName":"jdtojewish"},{"id":"function.jdtojulian","name":"jdtojulian","description":"Converts a Julian Day Count to a Julian Calendar Date","tag":"refentry","type":"Function","methodName":"jdtojulian"},{"id":"function.jdtounix","name":"jdtounix","description":"Convert Julian Day to Unix timestamp","tag":"refentry","type":"Function","methodName":"jdtounix"},{"id":"function.jewishtojd","name":"jewishtojd","description":"Converts a date in the Jewish Calendar to Julian Day Count","tag":"refentry","type":"Function","methodName":"jewishtojd"},{"id":"function.juliantojd","name":"juliantojd","description":"Converts a Julian Calendar date to Julian Day Count","tag":"refentry","type":"Function","methodName":"juliantojd"},{"id":"function.unixtojd","name":"unixtojd","description":"Convert Unix timestamp to Julian Day","tag":"refentry","type":"Function","methodName":"unixtojd"},{"id":"ref.calendar","name":"Calendar Functions","description":"Calendar","tag":"reference","type":"Extension","methodName":"Calendar Functions"},{"id":"book.calendar","name":"Calendar","description":"Date and Time Related Extensions","tag":"book","type":"Extension","methodName":"Calendar"},{"id":"intro.datetime","name":"Introduction","description":"Date and Time","tag":"preface","type":"General","methodName":"Introduction"},{"id":"datetime.installation","name":"Installation","description":"Date and Time","tag":"section","type":"General","methodName":"Installation"},{"id":"datetime.configuration","name":"Runtime Configuration","description":"Date and Time","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"datetime.setup","name":"Installing\/Configuring","description":"Date and Time","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"datetime.constants","name":"Predefined Constants","description":"Date and Time","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"datetime.examples-arithmetic","name":"Date\/Time Arithmetic","description":"Date and Time","tag":"section","type":"General","methodName":"Date\/Time Arithmetic"},{"id":"datetime.examples","name":"Examples","description":"Date and Time","tag":"chapter","type":"General","methodName":"Examples"},{"id":"datetime.add","name":"date_add","description":"Modifies a DateTime object, with added amount of days, months, years, hours, minutes and seconds","tag":"refentry","type":"Function","methodName":"date_add"},{"id":"datetime.add","name":"DateTime::add","description":"Modifies a DateTime object, with added amount of days, months, years, hours, minutes and seconds","tag":"refentry","type":"Function","methodName":"add"},{"id":"datetime.construct","name":"DateTime::__construct","description":"Returns new DateTime object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"datetime.createfromformat","name":"date_create_from_format","description":"Parses a time string according to a specified format","tag":"refentry","type":"Function","methodName":"date_create_from_format"},{"id":"datetime.createfromformat","name":"DateTime::createFromFormat","description":"Parses a time string according to a specified format","tag":"refentry","type":"Function","methodName":"createFromFormat"},{"id":"datetime.createfromimmutable","name":"DateTime::createFromImmutable","description":"Returns new DateTime instance encapsulating the given DateTimeImmutable object","tag":"refentry","type":"Function","methodName":"createFromImmutable"},{"id":"datetime.createfrominterface","name":"DateTime::createFromInterface","description":"Returns new DateTime object encapsulating the given DateTimeInterface object","tag":"refentry","type":"Function","methodName":"createFromInterface"},{"id":"datetime.getlasterrors","name":"DateTime::getLastErrors","description":"Alias of DateTimeImmutable::getLastErrors","tag":"refentry","type":"Function","methodName":"getLastErrors"},{"id":"datetime.modify","name":"date_modify","description":"Alters the timestamp","tag":"refentry","type":"Function","methodName":"date_modify"},{"id":"datetime.modify","name":"DateTime::modify","description":"Alters the timestamp","tag":"refentry","type":"Function","methodName":"modify"},{"id":"datetime.set-state","name":"DateTime::__set_state","description":"The __set_state handler","tag":"refentry","type":"Function","methodName":"__set_state"},{"id":"datetime.setdate","name":"date_date_set","description":"Sets the date","tag":"refentry","type":"Function","methodName":"date_date_set"},{"id":"datetime.setdate","name":"DateTime::setDate","description":"Sets the date","tag":"refentry","type":"Function","methodName":"setDate"},{"id":"datetime.setisodate","name":"date_isodate_set","description":"Sets the ISO date","tag":"refentry","type":"Function","methodName":"date_isodate_set"},{"id":"datetime.setisodate","name":"DateTime::setISODate","description":"Sets the ISO date","tag":"refentry","type":"Function","methodName":"setISODate"},{"id":"datetime.settime","name":"date_time_set","description":"Sets the time","tag":"refentry","type":"Function","methodName":"date_time_set"},{"id":"datetime.settime","name":"DateTime::setTime","description":"Sets the time","tag":"refentry","type":"Function","methodName":"setTime"},{"id":"datetime.settimestamp","name":"date_timestamp_set","description":"Sets the date and time based on an Unix timestamp","tag":"refentry","type":"Function","methodName":"date_timestamp_set"},{"id":"datetime.settimestamp","name":"DateTime::setTimestamp","description":"Sets the date and time based on an Unix timestamp","tag":"refentry","type":"Function","methodName":"setTimestamp"},{"id":"datetime.settimezone","name":"date_timezone_set","description":"Sets the time zone for the DateTime object","tag":"refentry","type":"Function","methodName":"date_timezone_set"},{"id":"datetime.settimezone","name":"DateTime::setTimezone","description":"Sets the time zone for the DateTime object","tag":"refentry","type":"Function","methodName":"setTimezone"},{"id":"datetime.sub","name":"date_sub","description":"Subtracts an amount of days, months, years, hours, minutes and seconds from\n a DateTime object","tag":"refentry","type":"Function","methodName":"date_sub"},{"id":"datetime.sub","name":"DateTime::sub","description":"Subtracts an amount of days, months, years, hours, minutes and seconds from\n a DateTime object","tag":"refentry","type":"Function","methodName":"sub"},{"id":"class.datetime","name":"DateTime","description":"The DateTime class","tag":"phpdoc:classref","type":"Class","methodName":"DateTime"},{"id":"datetimeimmutable.add","name":"DateTimeImmutable::add","description":"Returns a new object, with added amount of days, months, years, hours, minutes and seconds","tag":"refentry","type":"Function","methodName":"add"},{"id":"datetimeimmutable.construct","name":"date_create_immutable","description":"Returns new DateTimeImmutable object","tag":"refentry","type":"Function","methodName":"date_create_immutable"},{"id":"datetimeimmutable.construct","name":"DateTimeImmutable::__construct","description":"Returns new DateTimeImmutable object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"datetimeimmutable.createfromformat","name":"date_create_immutable_from_format","description":"Parses a time string according to a specified format","tag":"refentry","type":"Function","methodName":"date_create_immutable_from_format"},{"id":"datetimeimmutable.createfromformat","name":"DateTimeImmutable::createFromFormat","description":"Parses a time string according to a specified format","tag":"refentry","type":"Function","methodName":"createFromFormat"},{"id":"datetimeimmutable.createfrominterface","name":"DateTimeImmutable::createFromInterface","description":"Returns new DateTimeImmutable object encapsulating the given DateTimeInterface object","tag":"refentry","type":"Function","methodName":"createFromInterface"},{"id":"datetimeimmutable.createfrommutable","name":"DateTimeImmutable::createFromMutable","description":"Returns new DateTimeImmutable instance encapsulating the given DateTime object","tag":"refentry","type":"Function","methodName":"createFromMutable"},{"id":"datetimeimmutable.getlasterrors","name":"DateTimeImmutable::getLastErrors","description":"Returns the warnings and errors","tag":"refentry","type":"Function","methodName":"getLastErrors"},{"id":"datetimeimmutable.modify","name":"DateTimeImmutable::modify","description":"Creates a new object with modified timestamp","tag":"refentry","type":"Function","methodName":"modify"},{"id":"datetimeimmutable.set-state","name":"DateTimeImmutable::__set_state","description":"The __set_state handler","tag":"refentry","type":"Function","methodName":"__set_state"},{"id":"datetimeimmutable.setdate","name":"DateTimeImmutable::setDate","description":"Sets the date","tag":"refentry","type":"Function","methodName":"setDate"},{"id":"datetimeimmutable.setisodate","name":"DateTimeImmutable::setISODate","description":"Sets the ISO date","tag":"refentry","type":"Function","methodName":"setISODate"},{"id":"datetimeimmutable.settime","name":"DateTimeImmutable::setTime","description":"Sets the time","tag":"refentry","type":"Function","methodName":"setTime"},{"id":"datetimeimmutable.settimestamp","name":"DateTimeImmutable::setTimestamp","description":"Sets the date and time based on a Unix timestamp","tag":"refentry","type":"Function","methodName":"setTimestamp"},{"id":"datetimeimmutable.settimezone","name":"DateTimeImmutable::setTimezone","description":"Sets the time zone","tag":"refentry","type":"Function","methodName":"setTimezone"},{"id":"datetimeimmutable.sub","name":"DateTimeImmutable::sub","description":"Subtracts an amount of days, months, years, hours, minutes and seconds","tag":"refentry","type":"Function","methodName":"sub"},{"id":"class.datetimeimmutable","name":"DateTimeImmutable","description":"The DateTimeImmutable class","tag":"phpdoc:classref","type":"Class","methodName":"DateTimeImmutable"},{"id":"datetime.diff","name":"date_diff","description":"Returns the difference between two DateTime objects","tag":"refentry","type":"Function","methodName":"date_diff"},{"id":"datetime.diff","name":"DateTime::diff","description":"Returns the difference between two DateTime objects","tag":"refentry","type":"Function","methodName":"diff"},{"id":"datetime.diff","name":"DateTimeImmutable::diff","description":"Returns the difference between two DateTime objects","tag":"refentry","type":"Function","methodName":"diff"},{"id":"datetime.diff","name":"DateTimeInterface::diff","description":"Returns the difference between two DateTime objects","tag":"refentry","type":"Function","methodName":"diff"},{"id":"datetime.format","name":"date_format","description":"Returns date formatted according to given format","tag":"refentry","type":"Function","methodName":"date_format"},{"id":"datetime.format","name":"DateTime::format","description":"Returns date formatted according to given format","tag":"refentry","type":"Function","methodName":"format"},{"id":"datetime.format","name":"DateTimeImmutable::format","description":"Returns date formatted according to given format","tag":"refentry","type":"Function","methodName":"format"},{"id":"datetime.format","name":"DateTimeInterface::format","description":"Returns date formatted according to given format","tag":"refentry","type":"Function","methodName":"format"},{"id":"datetime.getoffset","name":"date_offset_get","description":"Returns the timezone offset","tag":"refentry","type":"Function","methodName":"date_offset_get"},{"id":"datetime.getoffset","name":"DateTime::getOffset","description":"Returns the timezone offset","tag":"refentry","type":"Function","methodName":"getOffset"},{"id":"datetime.getoffset","name":"DateTimeImmutable::getOffset","description":"Returns the timezone offset","tag":"refentry","type":"Function","methodName":"getOffset"},{"id":"datetime.getoffset","name":"DateTimeInterface::getOffset","description":"Returns the timezone offset","tag":"refentry","type":"Function","methodName":"getOffset"},{"id":"datetime.gettimestamp","name":"date_timestamp_get","description":"Gets the Unix timestamp","tag":"refentry","type":"Function","methodName":"date_timestamp_get"},{"id":"datetime.gettimestamp","name":"DateTime::getTimestamp","description":"Gets the Unix timestamp","tag":"refentry","type":"Function","methodName":"getTimestamp"},{"id":"datetime.gettimestamp","name":"DateTimeImmutable::getTimestamp","description":"Gets the Unix timestamp","tag":"refentry","type":"Function","methodName":"getTimestamp"},{"id":"datetime.gettimestamp","name":"DateTimeInterface::getTimestamp","description":"Gets the Unix timestamp","tag":"refentry","type":"Function","methodName":"getTimestamp"},{"id":"datetime.gettimezone","name":"date_timezone_get","description":"Return time zone relative to given DateTime","tag":"refentry","type":"Function","methodName":"date_timezone_get"},{"id":"datetime.gettimezone","name":"DateTime::getTimezone","description":"Return time zone relative to given DateTime","tag":"refentry","type":"Function","methodName":"getTimezone"},{"id":"datetime.gettimezone","name":"DateTimeImmutable::getTimezone","description":"Return time zone relative to given DateTime","tag":"refentry","type":"Function","methodName":"getTimezone"},{"id":"datetime.gettimezone","name":"DateTimeInterface::getTimezone","description":"Return time zone relative to given DateTime","tag":"refentry","type":"Function","methodName":"getTimezone"},{"id":"datetime.serialize","name":"DateTimeInterface::__serialize","description":"Serialize a DateTime","tag":"refentry","type":"Function","methodName":"__serialize"},{"id":"datetime.serialize","name":"DateTimeImmutable::__serialize","description":"Serialize a DateTime","tag":"refentry","type":"Function","methodName":"__serialize"},{"id":"datetime.serialize","name":"DateTime::__serialize","description":"Serialize a DateTime","tag":"refentry","type":"Function","methodName":"__serialize"},{"id":"datetime.unserialize","name":"DateTimeInterface::__unserialize","description":"Unserialize an Datetime","tag":"refentry","type":"Function","methodName":"__unserialize"},{"id":"datetime.unserialize","name":"DateTimeImmutable::__unserialize","description":"Unserialize an Datetime","tag":"refentry","type":"Function","methodName":"__unserialize"},{"id":"datetime.unserialize","name":"DateTime::__unserialize","description":"Unserialize an Datetime","tag":"refentry","type":"Function","methodName":"__unserialize"},{"id":"datetime.wakeup","name":"DateTimeInterface::__wakeup","description":"The __wakeup handler","tag":"refentry","type":"Function","methodName":"__wakeup"},{"id":"datetime.wakeup","name":"DateTimeImmutable::__wakeup","description":"The __wakeup handler","tag":"refentry","type":"Function","methodName":"__wakeup"},{"id":"datetime.wakeup","name":"DateTime::__wakeup","description":"The __wakeup handler","tag":"refentry","type":"Function","methodName":"__wakeup"},{"id":"class.datetimeinterface","name":"DateTimeInterface","description":"The DateTimeInterface interface","tag":"phpdoc:classref","type":"Class","methodName":"DateTimeInterface"},{"id":"datetimezone.construct","name":"timezone_open","description":"Creates new DateTimeZone object","tag":"refentry","type":"Function","methodName":"timezone_open"},{"id":"datetimezone.construct","name":"DateTimeZone::__construct","description":"Creates new DateTimeZone object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"datetimezone.getlocation","name":"timezone_location_get","description":"Returns location information for a timezone","tag":"refentry","type":"Function","methodName":"timezone_location_get"},{"id":"datetimezone.getlocation","name":"DateTimeZone::getLocation","description":"Returns location information for a timezone","tag":"refentry","type":"Function","methodName":"getLocation"},{"id":"datetimezone.getname","name":"timezone_name_get","description":"Returns the name of the timezone","tag":"refentry","type":"Function","methodName":"timezone_name_get"},{"id":"datetimezone.getname","name":"DateTimeZone::getName","description":"Returns the name of the timezone","tag":"refentry","type":"Function","methodName":"getName"},{"id":"datetimezone.getoffset","name":"timezone_offset_get","description":"Returns the timezone offset from GMT","tag":"refentry","type":"Function","methodName":"timezone_offset_get"},{"id":"datetimezone.getoffset","name":"DateTimeZone::getOffset","description":"Returns the timezone offset from GMT","tag":"refentry","type":"Function","methodName":"getOffset"},{"id":"datetimezone.gettransitions","name":"timezone_transitions_get","description":"Returns all transitions for the timezone","tag":"refentry","type":"Function","methodName":"timezone_transitions_get"},{"id":"datetimezone.gettransitions","name":"DateTimeZone::getTransitions","description":"Returns all transitions for the timezone","tag":"refentry","type":"Function","methodName":"getTransitions"},{"id":"datetimezone.listabbreviations","name":"timezone_abbreviations_list","description":"Returns associative array containing dst, offset and the timezone name","tag":"refentry","type":"Function","methodName":"timezone_abbreviations_list"},{"id":"datetimezone.listabbreviations","name":"DateTimeZone::listAbbreviations","description":"Returns associative array containing dst, offset and the timezone name","tag":"refentry","type":"Function","methodName":"listAbbreviations"},{"id":"datetimezone.listidentifiers","name":"timezone_identifiers_list","description":"Returns a numerically indexed array containing all defined timezone identifiers","tag":"refentry","type":"Function","methodName":"timezone_identifiers_list"},{"id":"datetimezone.listidentifiers","name":"DateTimeZone::listIdentifiers","description":"Returns a numerically indexed array containing all defined timezone identifiers","tag":"refentry","type":"Function","methodName":"listIdentifiers"},{"id":"class.datetimezone","name":"DateTimeZone","description":"The DateTimeZone class","tag":"phpdoc:classref","type":"Class","methodName":"DateTimeZone"},{"id":"dateinterval.construct","name":"DateInterval::__construct","description":"Creates a new DateInterval object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"dateinterval.createfromdatestring","name":"DateInterval::createFromDateString","description":"Sets up a DateInterval from the relative parts of the string","tag":"refentry","type":"Function","methodName":"createFromDateString"},{"id":"dateinterval.format","name":"DateInterval::format","description":"Formats the interval","tag":"refentry","type":"Function","methodName":"format"},{"id":"class.dateinterval","name":"DateInterval","description":"The DateInterval class","tag":"phpdoc:classref","type":"Class","methodName":"DateInterval"},{"id":"dateperiod.construct","name":"DatePeriod::__construct","description":"Creates a new DatePeriod object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"dateperiod.createfromiso8601string","name":"DatePeriod::createFromISO8601String","description":"Creates a new DatePeriod object from an ISO8601 string","tag":"refentry","type":"Function","methodName":"createFromISO8601String"},{"id":"dateperiod.getdateinterval","name":"DatePeriod::getDateInterval","description":"Gets the interval","tag":"refentry","type":"Function","methodName":"getDateInterval"},{"id":"dateperiod.getenddate","name":"DatePeriod::getEndDate","description":"Gets the end date","tag":"refentry","type":"Function","methodName":"getEndDate"},{"id":"dateperiod.getrecurrences","name":"DatePeriod::getRecurrences","description":"Gets the number of recurrences","tag":"refentry","type":"Function","methodName":"getRecurrences"},{"id":"dateperiod.getstartdate","name":"DatePeriod::getStartDate","description":"Gets the start date","tag":"refentry","type":"Function","methodName":"getStartDate"},{"id":"class.dateperiod","name":"DatePeriod","description":"The DatePeriod class","tag":"phpdoc:classref","type":"Class","methodName":"DatePeriod"},{"id":"function.checkdate","name":"checkdate","description":"Validate a Gregorian date","tag":"refentry","type":"Function","methodName":"checkdate"},{"id":"function.date","name":"date","description":"Format a Unix timestamp","tag":"refentry","type":"Function","methodName":"date"},{"id":"function.date-add","name":"date_add","description":"Alias of DateTime::add","tag":"refentry","type":"Function","methodName":"date_add"},{"id":"function.date-create","name":"date_create","description":"create a new DateTime object","tag":"refentry","type":"Function","methodName":"date_create"},{"id":"function.date-create-from-format","name":"date_create_from_format","description":"Alias of DateTime::createFromFormat","tag":"refentry","type":"Function","methodName":"date_create_from_format"},{"id":"function.date-create-immutable","name":"date_create_immutable","description":"create a new DateTimeImmutable object","tag":"refentry","type":"Function","methodName":"date_create_immutable"},{"id":"function.date-create-immutable-from-format","name":"date_create_immutable_from_format","description":"Alias of DateTimeImmutable::createFromFormat","tag":"refentry","type":"Function","methodName":"date_create_immutable_from_format"},{"id":"function.date-date-set","name":"date_date_set","description":"Alias of DateTime::setDate","tag":"refentry","type":"Function","methodName":"date_date_set"},{"id":"function.date-default-timezone-get","name":"date_default_timezone_get","description":"Gets the default timezone used by all date\/time functions in a script","tag":"refentry","type":"Function","methodName":"date_default_timezone_get"},{"id":"function.date-default-timezone-set","name":"date_default_timezone_set","description":"Sets the default timezone used by all date\/time functions in a script","tag":"refentry","type":"Function","methodName":"date_default_timezone_set"},{"id":"function.date-diff","name":"date_diff","description":"Alias of DateTime::diff","tag":"refentry","type":"Function","methodName":"date_diff"},{"id":"function.date-format","name":"date_format","description":"Alias of DateTime::format","tag":"refentry","type":"Function","methodName":"date_format"},{"id":"function.date-get-last-errors","name":"date_get_last_errors","description":"Alias of DateTimeImmutable::getLastErrors","tag":"refentry","type":"Function","methodName":"date_get_last_errors"},{"id":"function.date-interval-create-from-date-string","name":"date_interval_create_from_date_string","description":"Alias of DateInterval::createFromDateString","tag":"refentry","type":"Function","methodName":"date_interval_create_from_date_string"},{"id":"function.date-interval-format","name":"date_interval_format","description":"Alias of DateInterval::format","tag":"refentry","type":"Function","methodName":"date_interval_format"},{"id":"function.date-isodate-set","name":"date_isodate_set","description":"Alias of DateTime::setISODate","tag":"refentry","type":"Function","methodName":"date_isodate_set"},{"id":"function.date-modify","name":"date_modify","description":"Alias of DateTime::modify","tag":"refentry","type":"Function","methodName":"date_modify"},{"id":"function.date-offset-get","name":"date_offset_get","description":"Alias of DateTime::getOffset","tag":"refentry","type":"Function","methodName":"date_offset_get"},{"id":"function.date-parse","name":"date_parse","description":"Returns associative array with detailed info about given date\/time","tag":"refentry","type":"Function","methodName":"date_parse"},{"id":"function.date-parse-from-format","name":"date_parse_from_format","description":"Get info about given date formatted according to the specified format","tag":"refentry","type":"Function","methodName":"date_parse_from_format"},{"id":"function.date-sub","name":"date_sub","description":"Alias of DateTime::sub","tag":"refentry","type":"Function","methodName":"date_sub"},{"id":"function.date-sun-info","name":"date_sun_info","description":"Returns an array with information about sunset\/sunrise and twilight begin\/end","tag":"refentry","type":"Function","methodName":"date_sun_info"},{"id":"function.date-sunrise","name":"date_sunrise","description":"Returns time of sunrise for a given day and location","tag":"refentry","type":"Function","methodName":"date_sunrise"},{"id":"function.date-sunset","name":"date_sunset","description":"Returns time of sunset for a given day and location","tag":"refentry","type":"Function","methodName":"date_sunset"},{"id":"function.date-time-set","name":"date_time_set","description":"Alias of DateTime::setTime","tag":"refentry","type":"Function","methodName":"date_time_set"},{"id":"function.date-timestamp-get","name":"date_timestamp_get","description":"Alias of DateTime::getTimestamp","tag":"refentry","type":"Function","methodName":"date_timestamp_get"},{"id":"function.date-timestamp-set","name":"date_timestamp_set","description":"Alias of DateTime::setTimestamp","tag":"refentry","type":"Function","methodName":"date_timestamp_set"},{"id":"function.date-timezone-get","name":"date_timezone_get","description":"Alias of DateTime::getTimezone","tag":"refentry","type":"Function","methodName":"date_timezone_get"},{"id":"function.date-timezone-set","name":"date_timezone_set","description":"Alias of DateTime::setTimezone","tag":"refentry","type":"Function","methodName":"date_timezone_set"},{"id":"function.getdate","name":"getdate","description":"Get date\/time information","tag":"refentry","type":"Function","methodName":"getdate"},{"id":"function.gettimeofday","name":"gettimeofday","description":"Get current time","tag":"refentry","type":"Function","methodName":"gettimeofday"},{"id":"function.gmdate","name":"gmdate","description":"Format a GMT\/UTC date\/time","tag":"refentry","type":"Function","methodName":"gmdate"},{"id":"function.gmmktime","name":"gmmktime","description":"Get Unix timestamp for a GMT date","tag":"refentry","type":"Function","methodName":"gmmktime"},{"id":"function.gmstrftime","name":"gmstrftime","description":"Format a GMT\/UTC time\/date according to locale settings","tag":"refentry","type":"Function","methodName":"gmstrftime"},{"id":"function.idate","name":"idate","description":"Format a local time\/date part as integer","tag":"refentry","type":"Function","methodName":"idate"},{"id":"function.localtime","name":"localtime","description":"Get the local time","tag":"refentry","type":"Function","methodName":"localtime"},{"id":"function.microtime","name":"microtime","description":"Return current Unix timestamp with microseconds","tag":"refentry","type":"Function","methodName":"microtime"},{"id":"function.mktime","name":"mktime","description":"Get Unix timestamp for a date","tag":"refentry","type":"Function","methodName":"mktime"},{"id":"function.strftime","name":"strftime","description":"Format a local time\/date according to locale settings","tag":"refentry","type":"Function","methodName":"strftime"},{"id":"function.strptime","name":"strptime","description":"Parse a time\/date generated with strftime","tag":"refentry","type":"Function","methodName":"strptime"},{"id":"function.strtotime","name":"strtotime","description":"Parse about any English textual datetime description into a Unix timestamp","tag":"refentry","type":"Function","methodName":"strtotime"},{"id":"function.time","name":"time","description":"Return current Unix timestamp","tag":"refentry","type":"Function","methodName":"time"},{"id":"function.timezone-abbreviations-list","name":"timezone_abbreviations_list","description":"Alias of DateTimeZone::listAbbreviations","tag":"refentry","type":"Function","methodName":"timezone_abbreviations_list"},{"id":"function.timezone-identifiers-list","name":"timezone_identifiers_list","description":"Alias of DateTimeZone::listIdentifiers","tag":"refentry","type":"Function","methodName":"timezone_identifiers_list"},{"id":"function.timezone-location-get","name":"timezone_location_get","description":"Alias of DateTimeZone::getLocation","tag":"refentry","type":"Function","methodName":"timezone_location_get"},{"id":"function.timezone-name-from-abbr","name":"timezone_name_from_abbr","description":"Returns a timezone name by guessing from abbreviation and UTC offset","tag":"refentry","type":"Function","methodName":"timezone_name_from_abbr"},{"id":"function.timezone-name-get","name":"timezone_name_get","description":"Alias of DateTimeZone::getName","tag":"refentry","type":"Function","methodName":"timezone_name_get"},{"id":"function.timezone-offset-get","name":"timezone_offset_get","description":"Alias of DateTimeZone::getOffset","tag":"refentry","type":"Function","methodName":"timezone_offset_get"},{"id":"function.timezone-open","name":"timezone_open","description":"Alias of DateTimeZone::__construct","tag":"refentry","type":"Function","methodName":"timezone_open"},{"id":"function.timezone-transitions-get","name":"timezone_transitions_get","description":"Alias of DateTimeZone::getTransitions","tag":"refentry","type":"Function","methodName":"timezone_transitions_get"},{"id":"function.timezone-version-get","name":"timezone_version_get","description":"Gets the version of the timezonedb","tag":"refentry","type":"Function","methodName":"timezone_version_get"},{"id":"ref.datetime","name":"Date\/Time Functions","description":"Date and Time","tag":"reference","type":"Extension","methodName":"Date\/Time Functions"},{"id":"datetime.error.tree","name":"Date\/Time Errors and Exceptions","description":"Date and Time","tag":"article","type":"General","methodName":"Date\/Time Errors and Exceptions"},{"id":"datetime.formats","name":"Supported Date and Time Formats","description":"Date and Time","tag":"chapter","type":"General","methodName":"Supported Date and Time Formats"},{"id":"timezones.africa","name":"Africa","description":"Date and Time","tag":"sect1","type":"General","methodName":"Africa"},{"id":"timezones.america","name":"America","description":"Date and Time","tag":"sect1","type":"General","methodName":"America"},{"id":"timezones.antarctica","name":"Antarctica","description":"Date and Time","tag":"sect1","type":"General","methodName":"Antarctica"},{"id":"timezones.arctic","name":"Arctic","description":"Date and Time","tag":"sect1","type":"General","methodName":"Arctic"},{"id":"timezones.asia","name":"Asia","description":"Date and Time","tag":"sect1","type":"General","methodName":"Asia"},{"id":"timezones.atlantic","name":"Atlantic","description":"Date and Time","tag":"sect1","type":"General","methodName":"Atlantic"},{"id":"timezones.australia","name":"Australia","description":"Date and Time","tag":"sect1","type":"General","methodName":"Australia"},{"id":"timezones.europe","name":"Europe","description":"Date and Time","tag":"sect1","type":"General","methodName":"Europe"},{"id":"timezones.indian","name":"Indian","description":"Date and Time","tag":"sect1","type":"General","methodName":"Indian"},{"id":"timezones.pacific","name":"Pacific","description":"Date and Time","tag":"sect1","type":"General","methodName":"Pacific"},{"id":"timezones.others","name":"Others","description":"Date and Time","tag":"sect1","type":"General","methodName":"Others"},{"id":"timezones","name":"List of Supported Timezones","description":"Date and Time","tag":"appendix","type":"General","methodName":"List of Supported Timezones"},{"id":"class.dateerror","name":"DateError","description":"The DateError class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"DateError"},{"id":"class.dateobjecterror","name":"DateObjectError","description":"The DateObjectError class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"DateObjectError"},{"id":"class.daterangeerror","name":"DateRangeError","description":"The DateRangeError class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"DateRangeError"},{"id":"class.dateexception","name":"DateException","description":"The DateException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"DateException"},{"id":"class.dateinvalidoperationexception","name":"DateInvalidOperationException","description":"The DateInvalidOperationException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"DateInvalidOperationException"},{"id":"class.dateinvalidtimezoneexception","name":"DateInvalidTimeZoneException","description":"The DateInvalidTimeZoneException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"DateInvalidTimeZoneException"},{"id":"class.datemalformedintervalstringexception","name":"DateMalformedIntervalStringException","description":"The DateMalformedIntervalStringException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"DateMalformedIntervalStringException"},{"id":"class.datemalformedperiodstringexception","name":"DateMalformedPeriodStringException","description":"The DateMalformedPeriodStringException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"DateMalformedPeriodStringException"},{"id":"class.datemalformedstringexception","name":"DateMalformedStringException","description":"The DateMalformedStringException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"DateMalformedStringException"},{"id":"book.datetime","name":"Date\/Time","description":"Date and Time","tag":"book","type":"Extension","methodName":"Date\/Time"},{"id":"intro.hrtime","name":"Introduction","description":"High resolution timing","tag":"preface","type":"General","methodName":"Introduction"},{"id":"hrtime.installation","name":"Installation","description":"High resolution timing","tag":"section","type":"General","methodName":"Installation"},{"id":"hrtime.setup","name":"Installing\/Configuring","description":"High resolution timing","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"hrtime.example.basic","name":"Basic usage","description":"High resolution timing","tag":"section","type":"General","methodName":"Basic usage"},{"id":"hrtime.examples","name":"Examples","description":"High resolution timing","tag":"chapter","type":"General","methodName":"Examples"},{"id":"hrtime-performancecounter.getfrequency","name":"HRTime\\PerformanceCounter::getFrequency","description":"Timer frequency in ticks per second","tag":"refentry","type":"Function","methodName":"getFrequency"},{"id":"hrtime-performancecounter.getticks","name":"HRTime\\PerformanceCounter::getTicks","description":"Current ticks from the system","tag":"refentry","type":"Function","methodName":"getTicks"},{"id":"hrtime-performancecounter.gettickssince","name":"HRTime\\PerformanceCounter::getTicksSince","description":"Ticks elapsed since the given value","tag":"refentry","type":"Function","methodName":"getTicksSince"},{"id":"class.hrtime-performancecounter","name":"HRTime\\PerformanceCounter","description":"The HRTime\\PerformanceCounter class","tag":"phpdoc:classref","type":"Class","methodName":"HRTime\\PerformanceCounter"},{"id":"hrtime-stopwatch.getelapsedticks","name":"HRTime\\StopWatch::getElapsedTicks","description":"Get elapsed ticks for all intervals","tag":"refentry","type":"Function","methodName":"getElapsedTicks"},{"id":"hrtime-stopwatch.getelapsedtime","name":"HRTime\\StopWatch::getElapsedTime","description":"Get elapsed time for all intervals","tag":"refentry","type":"Function","methodName":"getElapsedTime"},{"id":"hrtime-stopwatch.getlastelapsedticks","name":"HRTime\\StopWatch::getLastElapsedTicks","description":"Get elapsed ticks for the last interval","tag":"refentry","type":"Function","methodName":"getLastElapsedTicks"},{"id":"hrtime-stopwatch.getlastelapsedtime","name":"HRTime\\StopWatch::getLastElapsedTime","description":"Get elapsed time for the last interval","tag":"refentry","type":"Function","methodName":"getLastElapsedTime"},{"id":"hrtime-stopwatch.isrunning","name":"HRTime\\StopWatch::isRunning","description":"Whether the measurement is running","tag":"refentry","type":"Function","methodName":"isRunning"},{"id":"hrtime-stopwatch.start","name":"HRTime\\StopWatch::start","description":"Start time measurement","tag":"refentry","type":"Function","methodName":"start"},{"id":"hrtime-stopwatch.stop","name":"HRTime\\StopWatch::stop","description":"Stop time measurement","tag":"refentry","type":"Function","methodName":"stop"},{"id":"class.hrtime-stopwatch","name":"HRTime\\StopWatch","description":"The HRTime\\StopWatch class","tag":"phpdoc:classref","type":"Class","methodName":"HRTime\\StopWatch"},{"id":"class.hrtime-unit","name":"HRTime\\Unit","description":"The HRTime\\Unit class","tag":"phpdoc:classref","type":"Class","methodName":"HRTime\\Unit"},{"id":"book.hrtime","name":"HRTime","description":"High resolution timing","tag":"book","type":"Extension","methodName":"HRTime"},{"id":"refs.calendar","name":"Date and Time Related Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"Date and Time Related Extensions"},{"id":"intro.dio","name":"Introduction","description":"Direct IO","tag":"preface","type":"General","methodName":"Introduction"},{"id":"dio.installation","name":"Installation","description":"Direct IO","tag":"section","type":"General","methodName":"Installation"},{"id":"dio.resources","name":"Resource Types","description":"Direct IO","tag":"section","type":"General","methodName":"Resource Types"},{"id":"dio.setup","name":"Installing\/Configuring","description":"Direct IO","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"dio.constants","name":"Predefined Constants","description":"Direct IO","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.dio-close","name":"dio_close","description":"Closes the file descriptor given by fd","tag":"refentry","type":"Function","methodName":"dio_close"},{"id":"function.dio-fcntl","name":"dio_fcntl","description":"Performs a c library fcntl on fd","tag":"refentry","type":"Function","methodName":"dio_fcntl"},{"id":"function.dio-open","name":"dio_open","description":"Opens a file (creating it if necessary) at a lower level than the\n C library input\/ouput stream functions allow","tag":"refentry","type":"Function","methodName":"dio_open"},{"id":"function.dio-read","name":"dio_read","description":"Reads bytes from a file descriptor","tag":"refentry","type":"Function","methodName":"dio_read"},{"id":"function.dio-seek","name":"dio_seek","description":"Seeks to pos on fd from whence","tag":"refentry","type":"Function","methodName":"dio_seek"},{"id":"function.dio-stat","name":"dio_stat","description":"Gets stat information about the file descriptor fd","tag":"refentry","type":"Function","methodName":"dio_stat"},{"id":"function.dio-tcsetattr","name":"dio_tcsetattr","description":"Sets terminal attributes and baud rate for a serial port","tag":"refentry","type":"Function","methodName":"dio_tcsetattr"},{"id":"function.dio-truncate","name":"dio_truncate","description":"Truncates file descriptor fd to offset bytes","tag":"refentry","type":"Function","methodName":"dio_truncate"},{"id":"function.dio-write","name":"dio_write","description":"Writes data to fd with optional truncation at length","tag":"refentry","type":"Function","methodName":"dio_write"},{"id":"ref.dio","name":"Direct IO Functions","description":"Direct IO","tag":"reference","type":"Extension","methodName":"Direct IO Functions"},{"id":"book.dio","name":"Direct IO","description":"File System Related Extensions","tag":"book","type":"Extension","methodName":"Direct IO"},{"id":"dir.constants","name":"Predefined Constants","description":"Directories","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"directory.close","name":"Directory::close","description":"Close directory handle","tag":"refentry","type":"Function","methodName":"close"},{"id":"directory.read","name":"Directory::read","description":"Read entry from directory handle","tag":"refentry","type":"Function","methodName":"read"},{"id":"directory.rewind","name":"Directory::rewind","description":"Rewind directory handle","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"class.directory","name":"Directory","description":"The Directory class","tag":"phpdoc:classref","type":"Class","methodName":"Directory"},{"id":"function.chdir","name":"chdir","description":"Change directory","tag":"refentry","type":"Function","methodName":"chdir"},{"id":"function.chroot","name":"chroot","description":"Change the root directory","tag":"refentry","type":"Function","methodName":"chroot"},{"id":"function.closedir","name":"closedir","description":"Close directory handle","tag":"refentry","type":"Function","methodName":"closedir"},{"id":"function.dir","name":"dir","description":"Return an instance of the Directory class","tag":"refentry","type":"Function","methodName":"dir"},{"id":"function.getcwd","name":"getcwd","description":"Gets the current working directory","tag":"refentry","type":"Function","methodName":"getcwd"},{"id":"function.opendir","name":"opendir","description":"Open directory handle","tag":"refentry","type":"Function","methodName":"opendir"},{"id":"function.readdir","name":"readdir","description":"Read entry from directory handle","tag":"refentry","type":"Function","methodName":"readdir"},{"id":"function.rewinddir","name":"rewinddir","description":"Rewind directory handle","tag":"refentry","type":"Function","methodName":"rewinddir"},{"id":"function.scandir","name":"scandir","description":"List files and directories inside the specified path","tag":"refentry","type":"Function","methodName":"scandir"},{"id":"ref.dir","name":"Directory Functions","description":"Directories","tag":"reference","type":"Extension","methodName":"Directory Functions"},{"id":"book.dir","name":"Directories","description":"File System Related Extensions","tag":"book","type":"Extension","methodName":"Directories"},{"id":"intro.fileinfo","name":"Introduction","description":"File Information","tag":"preface","type":"General","methodName":"Introduction"},{"id":"fileinfo.installation","name":"Installation","description":"File Information","tag":"section","type":"General","methodName":"Installation"},{"id":"fileinfo.resources","name":"Resource Types","description":"File Information","tag":"section","type":"General","methodName":"Resource Types"},{"id":"fileinfo.setup","name":"Installing\/Configuring","description":"File Information","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"fileinfo.constants","name":"Predefined Constants","description":"File Information","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.finfo-buffer","name":"finfo::buffer","description":"Return information about a string buffer","tag":"refentry","type":"Function","methodName":"buffer"},{"id":"function.finfo-buffer","name":"finfo_buffer","description":"Return information about a string buffer","tag":"refentry","type":"Function","methodName":"finfo_buffer"},{"id":"function.finfo-close","name":"finfo_close","description":"Close finfo instance","tag":"refentry","type":"Function","methodName":"finfo_close"},{"id":"function.finfo-file","name":"finfo::file","description":"Return information about a file","tag":"refentry","type":"Function","methodName":"file"},{"id":"function.finfo-file","name":"finfo_file","description":"Return information about a file","tag":"refentry","type":"Function","methodName":"finfo_file"},{"id":"function.finfo-open","name":"finfo::__construct","description":"Create a new finfo instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"function.finfo-open","name":"finfo_open","description":"Create a new finfo instance","tag":"refentry","type":"Function","methodName":"finfo_open"},{"id":"function.finfo-set-flags","name":"finfo::set_flags","description":"Set libmagic configuration options","tag":"refentry","type":"Function","methodName":"set_flags"},{"id":"function.finfo-set-flags","name":"finfo_set_flags","description":"Set libmagic configuration options","tag":"refentry","type":"Function","methodName":"finfo_set_flags"},{"id":"function.mime-content-type","name":"mime_content_type","description":"Detect MIME Content-type for a file","tag":"refentry","type":"Function","methodName":"mime_content_type"},{"id":"ref.fileinfo","name":"Fileinfo Functions","description":"File Information","tag":"reference","type":"Extension","methodName":"Fileinfo Functions"},{"id":"finfo.buffer","name":"finfo::buffer","description":"Alias of finfo_buffer()","tag":"refentry","type":"Function","methodName":"buffer"},{"id":"finfo.construct","name":"finfo::__construct","description":"Alias of finfo_open","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"finfo.file","name":"finfo::file","description":"Alias of finfo_file()","tag":"refentry","type":"Function","methodName":"file"},{"id":"finfo.set-flags","name":"finfo::set_flags","description":"Alias of finfo_set_flags()","tag":"refentry","type":"Function","methodName":"set_flags"},{"id":"class.finfo","name":"finfo","description":"The finfo class","tag":"phpdoc:classref","type":"Class","methodName":"finfo"},{"id":"book.fileinfo","name":"Fileinfo","description":"File Information","tag":"book","type":"Extension","methodName":"Fileinfo"},{"id":"intro.filesystem","name":"Introduction","description":"Filesystem","tag":"preface","type":"General","methodName":"Introduction"},{"id":"filesystem.configuration","name":"Runtime Configuration","description":"Filesystem","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"filesystem.resources","name":"Resource Types","description":"Filesystem","tag":"section","type":"General","methodName":"Resource Types"},{"id":"filesystem.setup","name":"Installing\/Configuring","description":"Filesystem","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"filesystem.constants","name":"Predefined Constants","description":"Filesystem","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.basename","name":"basename","description":"Returns trailing name component of path","tag":"refentry","type":"Function","methodName":"basename"},{"id":"function.chgrp","name":"chgrp","description":"Changes file group","tag":"refentry","type":"Function","methodName":"chgrp"},{"id":"function.chmod","name":"chmod","description":"Changes file mode","tag":"refentry","type":"Function","methodName":"chmod"},{"id":"function.chown","name":"chown","description":"Changes file owner","tag":"refentry","type":"Function","methodName":"chown"},{"id":"function.clearstatcache","name":"clearstatcache","description":"Clears file status cache","tag":"refentry","type":"Function","methodName":"clearstatcache"},{"id":"function.copy","name":"copy","description":"Copies file","tag":"refentry","type":"Function","methodName":"copy"},{"id":"function.delete","name":"delete","description":"See unlink or unset","tag":"refentry","type":"Function","methodName":"delete"},{"id":"function.dirname","name":"dirname","description":"Returns a parent directory's path","tag":"refentry","type":"Function","methodName":"dirname"},{"id":"function.disk-free-space","name":"disk_free_space","description":"Returns available space on filesystem or disk partition","tag":"refentry","type":"Function","methodName":"disk_free_space"},{"id":"function.disk-total-space","name":"disk_total_space","description":"Returns the total size of a filesystem or disk partition","tag":"refentry","type":"Function","methodName":"disk_total_space"},{"id":"function.diskfreespace","name":"diskfreespace","description":"Alias of disk_free_space","tag":"refentry","type":"Function","methodName":"diskfreespace"},{"id":"function.fclose","name":"fclose","description":"Closes an open file pointer","tag":"refentry","type":"Function","methodName":"fclose"},{"id":"function.fdatasync","name":"fdatasync","description":"Synchronizes data (but not meta-data) to the file","tag":"refentry","type":"Function","methodName":"fdatasync"},{"id":"function.feof","name":"feof","description":"Tests for end-of-file on a file pointer","tag":"refentry","type":"Function","methodName":"feof"},{"id":"function.fflush","name":"fflush","description":"Flushes the output to a file","tag":"refentry","type":"Function","methodName":"fflush"},{"id":"function.fgetc","name":"fgetc","description":"Gets character from file pointer","tag":"refentry","type":"Function","methodName":"fgetc"},{"id":"function.fgetcsv","name":"fgetcsv","description":"Gets line from file pointer and parse for CSV fields","tag":"refentry","type":"Function","methodName":"fgetcsv"},{"id":"function.fgets","name":"fgets","description":"Gets line from file pointer","tag":"refentry","type":"Function","methodName":"fgets"},{"id":"function.fgetss","name":"fgetss","description":"Gets line from file pointer and strip HTML tags","tag":"refentry","type":"Function","methodName":"fgetss"},{"id":"function.file","name":"file","description":"Reads entire file into an array","tag":"refentry","type":"Function","methodName":"file"},{"id":"function.file-exists","name":"file_exists","description":"Checks whether a file or directory exists","tag":"refentry","type":"Function","methodName":"file_exists"},{"id":"function.file-get-contents","name":"file_get_contents","description":"Reads entire file into a string","tag":"refentry","type":"Function","methodName":"file_get_contents"},{"id":"function.file-put-contents","name":"file_put_contents","description":"Write data to a file","tag":"refentry","type":"Function","methodName":"file_put_contents"},{"id":"function.fileatime","name":"fileatime","description":"Gets last access time of file","tag":"refentry","type":"Function","methodName":"fileatime"},{"id":"function.filectime","name":"filectime","description":"Gets inode change time of file","tag":"refentry","type":"Function","methodName":"filectime"},{"id":"function.filegroup","name":"filegroup","description":"Gets file group","tag":"refentry","type":"Function","methodName":"filegroup"},{"id":"function.fileinode","name":"fileinode","description":"Gets file inode","tag":"refentry","type":"Function","methodName":"fileinode"},{"id":"function.filemtime","name":"filemtime","description":"Gets file modification time","tag":"refentry","type":"Function","methodName":"filemtime"},{"id":"function.fileowner","name":"fileowner","description":"Gets file owner","tag":"refentry","type":"Function","methodName":"fileowner"},{"id":"function.fileperms","name":"fileperms","description":"Gets file permissions","tag":"refentry","type":"Function","methodName":"fileperms"},{"id":"function.filesize","name":"filesize","description":"Gets file size","tag":"refentry","type":"Function","methodName":"filesize"},{"id":"function.filetype","name":"filetype","description":"Gets file type","tag":"refentry","type":"Function","methodName":"filetype"},{"id":"function.flock","name":"flock","description":"Portable advisory file locking","tag":"refentry","type":"Function","methodName":"flock"},{"id":"function.fnmatch","name":"fnmatch","description":"Match filename against a pattern","tag":"refentry","type":"Function","methodName":"fnmatch"},{"id":"function.fopen","name":"fopen","description":"Opens file or URL","tag":"refentry","type":"Function","methodName":"fopen"},{"id":"function.fpassthru","name":"fpassthru","description":"Output all remaining data on a file pointer","tag":"refentry","type":"Function","methodName":"fpassthru"},{"id":"function.fputcsv","name":"fputcsv","description":"Format line as CSV and write to file pointer","tag":"refentry","type":"Function","methodName":"fputcsv"},{"id":"function.fputs","name":"fputs","description":"Alias of fwrite","tag":"refentry","type":"Function","methodName":"fputs"},{"id":"function.fread","name":"fread","description":"Binary-safe file read","tag":"refentry","type":"Function","methodName":"fread"},{"id":"function.fscanf","name":"fscanf","description":"Parses input from a file according to a format","tag":"refentry","type":"Function","methodName":"fscanf"},{"id":"function.fseek","name":"fseek","description":"Seeks on a file pointer","tag":"refentry","type":"Function","methodName":"fseek"},{"id":"function.fstat","name":"fstat","description":"Gets information about a file using an open file pointer","tag":"refentry","type":"Function","methodName":"fstat"},{"id":"function.fsync","name":"fsync","description":"Synchronizes changes to the file (including meta-data)","tag":"refentry","type":"Function","methodName":"fsync"},{"id":"function.ftell","name":"ftell","description":"Returns the current position of the file read\/write pointer","tag":"refentry","type":"Function","methodName":"ftell"},{"id":"function.ftruncate","name":"ftruncate","description":"Truncates a file to a given length","tag":"refentry","type":"Function","methodName":"ftruncate"},{"id":"function.fwrite","name":"fwrite","description":"Binary-safe file write","tag":"refentry","type":"Function","methodName":"fwrite"},{"id":"function.glob","name":"glob","description":"Find pathnames matching a pattern","tag":"refentry","type":"Function","methodName":"glob"},{"id":"function.is-dir","name":"is_dir","description":"Tells whether the filename is a directory","tag":"refentry","type":"Function","methodName":"is_dir"},{"id":"function.is-executable","name":"is_executable","description":"Tells whether the filename is executable","tag":"refentry","type":"Function","methodName":"is_executable"},{"id":"function.is-file","name":"is_file","description":"Tells whether the filename is a regular file","tag":"refentry","type":"Function","methodName":"is_file"},{"id":"function.is-link","name":"is_link","description":"Tells whether the filename is a symbolic link","tag":"refentry","type":"Function","methodName":"is_link"},{"id":"function.is-readable","name":"is_readable","description":"Tells whether a file exists and is readable","tag":"refentry","type":"Function","methodName":"is_readable"},{"id":"function.is-uploaded-file","name":"is_uploaded_file","description":"Tells whether the file was uploaded via HTTP POST","tag":"refentry","type":"Function","methodName":"is_uploaded_file"},{"id":"function.is-writable","name":"is_writable","description":"Tells whether the filename is writable","tag":"refentry","type":"Function","methodName":"is_writable"},{"id":"function.is-writeable","name":"is_writeable","description":"Alias of is_writable","tag":"refentry","type":"Function","methodName":"is_writeable"},{"id":"function.lchgrp","name":"lchgrp","description":"Changes group ownership of symlink","tag":"refentry","type":"Function","methodName":"lchgrp"},{"id":"function.lchown","name":"lchown","description":"Changes user ownership of symlink","tag":"refentry","type":"Function","methodName":"lchown"},{"id":"function.link","name":"link","description":"Create a hard link","tag":"refentry","type":"Function","methodName":"link"},{"id":"function.linkinfo","name":"linkinfo","description":"Gets information about a link","tag":"refentry","type":"Function","methodName":"linkinfo"},{"id":"function.lstat","name":"lstat","description":"Gives information about a file or symbolic link","tag":"refentry","type":"Function","methodName":"lstat"},{"id":"function.mkdir","name":"mkdir","description":"Makes directory","tag":"refentry","type":"Function","methodName":"mkdir"},{"id":"function.move-uploaded-file","name":"move_uploaded_file","description":"Moves an uploaded file to a new location","tag":"refentry","type":"Function","methodName":"move_uploaded_file"},{"id":"function.parse-ini-file","name":"parse_ini_file","description":"Parse a configuration file","tag":"refentry","type":"Function","methodName":"parse_ini_file"},{"id":"function.parse-ini-string","name":"parse_ini_string","description":"Parse a configuration string","tag":"refentry","type":"Function","methodName":"parse_ini_string"},{"id":"function.pathinfo","name":"pathinfo","description":"Returns information about a file path","tag":"refentry","type":"Function","methodName":"pathinfo"},{"id":"function.pclose","name":"pclose","description":"Closes process file pointer","tag":"refentry","type":"Function","methodName":"pclose"},{"id":"function.popen","name":"popen","description":"Opens process file pointer","tag":"refentry","type":"Function","methodName":"popen"},{"id":"function.readfile","name":"readfile","description":"Outputs a file","tag":"refentry","type":"Function","methodName":"readfile"},{"id":"function.readlink","name":"readlink","description":"Returns the target of a symbolic link","tag":"refentry","type":"Function","methodName":"readlink"},{"id":"function.realpath","name":"realpath","description":"Returns canonicalized absolute pathname","tag":"refentry","type":"Function","methodName":"realpath"},{"id":"function.realpath-cache-get","name":"realpath_cache_get","description":"Get realpath cache entries","tag":"refentry","type":"Function","methodName":"realpath_cache_get"},{"id":"function.realpath-cache-size","name":"realpath_cache_size","description":"Get realpath cache size","tag":"refentry","type":"Function","methodName":"realpath_cache_size"},{"id":"function.rename","name":"rename","description":"Renames a file or directory","tag":"refentry","type":"Function","methodName":"rename"},{"id":"function.rewind","name":"rewind","description":"Rewind the position of a file pointer","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"function.rmdir","name":"rmdir","description":"Removes directory","tag":"refentry","type":"Function","methodName":"rmdir"},{"id":"function.set-file-buffer","name":"set_file_buffer","description":"Alias of stream_set_write_buffer","tag":"refentry","type":"Function","methodName":"set_file_buffer"},{"id":"function.stat","name":"stat","description":"Gives information about a file","tag":"refentry","type":"Function","methodName":"stat"},{"id":"function.symlink","name":"symlink","description":"Creates a symbolic link","tag":"refentry","type":"Function","methodName":"symlink"},{"id":"function.tempnam","name":"tempnam","description":"Create file with unique file name","tag":"refentry","type":"Function","methodName":"tempnam"},{"id":"function.tmpfile","name":"tmpfile","description":"Creates a temporary file","tag":"refentry","type":"Function","methodName":"tmpfile"},{"id":"function.touch","name":"touch","description":"Sets access and modification time of file","tag":"refentry","type":"Function","methodName":"touch"},{"id":"function.umask","name":"umask","description":"Changes the current umask","tag":"refentry","type":"Function","methodName":"umask"},{"id":"function.unlink","name":"unlink","description":"Deletes a file","tag":"refentry","type":"Function","methodName":"unlink"},{"id":"ref.filesystem","name":"Filesystem Functions","description":"Filesystem","tag":"reference","type":"Extension","methodName":"Filesystem Functions"},{"id":"book.filesystem","name":"Filesystem","description":"File System Related Extensions","tag":"book","type":"Extension","methodName":"Filesystem"},{"id":"intro.inotify","name":"Introduction","description":"Inotify","tag":"preface","type":"General","methodName":"Introduction"},{"id":"inotify.install","name":"Installing\/Configuring","description":"Inotify","tag":"section","type":"General","methodName":"Installing\/Configuring"},{"id":"inotify.resources","name":"Resource Types","description":"Inotify","tag":"section","type":"General","methodName":"Resource Types"},{"id":"inotify.setup","name":"Installing\/Configuring","description":"Inotify","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"inotify.constants","name":"Predefined Constants","description":"Inotify","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.inotify-add-watch","name":"inotify_add_watch","description":"Add a watch to an initialized inotify instance","tag":"refentry","type":"Function","methodName":"inotify_add_watch"},{"id":"function.inotify-init","name":"inotify_init","description":"Initialize an inotify instance","tag":"refentry","type":"Function","methodName":"inotify_init"},{"id":"function.inotify-queue-len","name":"inotify_queue_len","description":"Return a number upper than zero if there are pending events","tag":"refentry","type":"Function","methodName":"inotify_queue_len"},{"id":"function.inotify-read","name":"inotify_read","description":"Read events from an inotify instance","tag":"refentry","type":"Function","methodName":"inotify_read"},{"id":"function.inotify-rm-watch","name":"inotify_rm_watch","description":"Remove an existing watch from an inotify instance","tag":"refentry","type":"Function","methodName":"inotify_rm_watch"},{"id":"ref.inotify","name":"Inotify Functions","description":"Inotify","tag":"reference","type":"Extension","methodName":"Inotify Functions"},{"id":"book.inotify","name":"Inotify","description":"File System Related Extensions","tag":"book","type":"Extension","methodName":"Inotify"},{"id":"intro.xattr","name":"Introduction","description":"xattr","tag":"preface","type":"General","methodName":"Introduction"},{"id":"xattr.requirements","name":"Requirements","description":"xattr","tag":"section","type":"General","methodName":"Requirements"},{"id":"xattr.installation","name":"Installation","description":"xattr","tag":"section","type":"General","methodName":"Installation"},{"id":"xattr.setup","name":"Installing\/Configuring","description":"xattr","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"xattr.constants","name":"Predefined Constants","description":"xattr","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.xattr-get","name":"xattr_get","description":"Get an extended attribute","tag":"refentry","type":"Function","methodName":"xattr_get"},{"id":"function.xattr-list","name":"xattr_list","description":"Get a list of extended attributes","tag":"refentry","type":"Function","methodName":"xattr_list"},{"id":"function.xattr-remove","name":"xattr_remove","description":"Remove an extended attribute","tag":"refentry","type":"Function","methodName":"xattr_remove"},{"id":"function.xattr-set","name":"xattr_set","description":"Set an extended attribute","tag":"refentry","type":"Function","methodName":"xattr_set"},{"id":"function.xattr-supported","name":"xattr_supported","description":"Check if filesystem supports extended attributes","tag":"refentry","type":"Function","methodName":"xattr_supported"},{"id":"ref.xattr","name":"xattr Functions","description":"xattr","tag":"reference","type":"Extension","methodName":"xattr Functions"},{"id":"book.xattr","name":"xattr","description":"File System Related Extensions","tag":"book","type":"Extension","methodName":"xattr"},{"id":"intro.xdiff","name":"Introduction","description":"xdiff","tag":"preface","type":"General","methodName":"Introduction"},{"id":"xdiff.requirements","name":"Requirements","description":"xdiff","tag":"section","type":"General","methodName":"Requirements"},{"id":"xdiff.installation","name":"Installation","description":"xdiff","tag":"section","type":"General","methodName":"Installation"},{"id":"xdiff.setup","name":"Installing\/Configuring","description":"xdiff","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"xdiff.constants","name":"Predefined Constants","description":"xdiff","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.xdiff-file-bdiff","name":"xdiff_file_bdiff","description":"Make binary diff of two files","tag":"refentry","type":"Function","methodName":"xdiff_file_bdiff"},{"id":"function.xdiff-file-bdiff-size","name":"xdiff_file_bdiff_size","description":"Read a size of file created by applying a binary diff","tag":"refentry","type":"Function","methodName":"xdiff_file_bdiff_size"},{"id":"function.xdiff-file-bpatch","name":"xdiff_file_bpatch","description":"Patch a file with a binary diff","tag":"refentry","type":"Function","methodName":"xdiff_file_bpatch"},{"id":"function.xdiff-file-diff","name":"xdiff_file_diff","description":"Make unified diff of two files","tag":"refentry","type":"Function","methodName":"xdiff_file_diff"},{"id":"function.xdiff-file-diff-binary","name":"xdiff_file_diff_binary","description":"Alias of xdiff_file_bdiff","tag":"refentry","type":"Function","methodName":"xdiff_file_diff_binary"},{"id":"function.xdiff-file-merge3","name":"xdiff_file_merge3","description":"Merge 3 files into one","tag":"refentry","type":"Function","methodName":"xdiff_file_merge3"},{"id":"function.xdiff-file-patch","name":"xdiff_file_patch","description":"Patch a file with an unified diff","tag":"refentry","type":"Function","methodName":"xdiff_file_patch"},{"id":"function.xdiff-file-patch-binary","name":"xdiff_file_patch_binary","description":"Alias of xdiff_file_bpatch","tag":"refentry","type":"Function","methodName":"xdiff_file_patch_binary"},{"id":"function.xdiff-file-rabdiff","name":"xdiff_file_rabdiff","description":"Make binary diff of two files using the Rabin's polynomial fingerprinting algorithm","tag":"refentry","type":"Function","methodName":"xdiff_file_rabdiff"},{"id":"function.xdiff-string-bdiff","name":"xdiff_string_bdiff","description":"Make binary diff of two strings","tag":"refentry","type":"Function","methodName":"xdiff_string_bdiff"},{"id":"function.xdiff-string-bdiff-size","name":"xdiff_string_bdiff_size","description":"Read a size of file created by applying a binary diff","tag":"refentry","type":"Function","methodName":"xdiff_string_bdiff_size"},{"id":"function.xdiff-string-bpatch","name":"xdiff_string_bpatch","description":"Patch a string with a binary diff","tag":"refentry","type":"Function","methodName":"xdiff_string_bpatch"},{"id":"function.xdiff-string-diff","name":"xdiff_string_diff","description":"Make unified diff of two strings","tag":"refentry","type":"Function","methodName":"xdiff_string_diff"},{"id":"function.xdiff-string-diff-binary","name":"xdiff_string_diff_binary","description":"Alias of xdiff_string_bdiff","tag":"refentry","type":"Function","methodName":"xdiff_string_diff_binary"},{"id":"function.xdiff-string-merge3","name":"xdiff_string_merge3","description":"Merge 3 strings into one","tag":"refentry","type":"Function","methodName":"xdiff_string_merge3"},{"id":"function.xdiff-string-patch","name":"xdiff_string_patch","description":"Patch a string with an unified diff","tag":"refentry","type":"Function","methodName":"xdiff_string_patch"},{"id":"function.xdiff-string-patch-binary","name":"xdiff_string_patch_binary","description":"Alias of xdiff_string_bpatch","tag":"refentry","type":"Function","methodName":"xdiff_string_patch_binary"},{"id":"function.xdiff-string-rabdiff","name":"xdiff_string_rabdiff","description":"Make binary diff of two strings using the Rabin's polynomial fingerprinting algorithm","tag":"refentry","type":"Function","methodName":"xdiff_string_rabdiff"},{"id":"ref.xdiff","name":"xdiff Functions","description":"xdiff","tag":"reference","type":"Extension","methodName":"xdiff Functions"},{"id":"book.xdiff","name":"xdiff","description":"File System Related Extensions","tag":"book","type":"Extension","methodName":"xdiff"},{"id":"refs.fileprocess.file","name":"File System Related Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"File System Related Extensions"},{"id":"intro.enchant","name":"Introduction","description":"Enchant spelling library","tag":"preface","type":"General","methodName":"Introduction"},{"id":"enchant.requirements","name":"Requirements","description":"Enchant spelling library","tag":"section","type":"General","methodName":"Requirements"},{"id":"enchant.installation","name":"Installation","description":"Enchant spelling library","tag":"section","type":"General","methodName":"Installation"},{"id":"enchant.resources","name":"Resource Types","description":"Enchant spelling library","tag":"section","type":"General","methodName":"Resource Types"},{"id":"enchant.setup","name":"Installing\/Configuring","description":"Enchant spelling library","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"enchant.constants","name":"Predefined Constants","description":"Enchant spelling library","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"enchant.examples","name":"Examples","description":"Enchant spelling library","tag":"appendix","type":"General","methodName":"Examples"},{"id":"function.enchant-broker-describe","name":"enchant_broker_describe","description":"Enumerates the Enchant providers","tag":"refentry","type":"Function","methodName":"enchant_broker_describe"},{"id":"function.enchant-broker-dict-exists","name":"enchant_broker_dict_exists","description":"Whether a dictionary exists or not. Using non-empty tag","tag":"refentry","type":"Function","methodName":"enchant_broker_dict_exists"},{"id":"function.enchant-broker-free","name":"enchant_broker_free","description":"Free the broker resource and its dictionaries","tag":"refentry","type":"Function","methodName":"enchant_broker_free"},{"id":"function.enchant-broker-free-dict","name":"enchant_broker_free_dict","description":"Free a dictionary resource","tag":"refentry","type":"Function","methodName":"enchant_broker_free_dict"},{"id":"function.enchant-broker-get-dict-path","name":"enchant_broker_get_dict_path","description":"Get the directory path for a given backend","tag":"refentry","type":"Function","methodName":"enchant_broker_get_dict_path"},{"id":"function.enchant-broker-get-error","name":"enchant_broker_get_error","description":"Returns the last error of the broker","tag":"refentry","type":"Function","methodName":"enchant_broker_get_error"},{"id":"function.enchant-broker-init","name":"enchant_broker_init","description":"Create a new broker object capable of requesting","tag":"refentry","type":"Function","methodName":"enchant_broker_init"},{"id":"function.enchant-broker-list-dicts","name":"enchant_broker_list_dicts","description":"Returns a list of available dictionaries","tag":"refentry","type":"Function","methodName":"enchant_broker_list_dicts"},{"id":"function.enchant-broker-request-dict","name":"enchant_broker_request_dict","description":"Create a new dictionary using a tag","tag":"refentry","type":"Function","methodName":"enchant_broker_request_dict"},{"id":"function.enchant-broker-request-pwl-dict","name":"enchant_broker_request_pwl_dict","description":"Creates a dictionary using a PWL file","tag":"refentry","type":"Function","methodName":"enchant_broker_request_pwl_dict"},{"id":"function.enchant-broker-set-dict-path","name":"enchant_broker_set_dict_path","description":"Set the directory path for a given backend","tag":"refentry","type":"Function","methodName":"enchant_broker_set_dict_path"},{"id":"function.enchant-broker-set-ordering","name":"enchant_broker_set_ordering","description":"Declares a preference of dictionaries to use for the language","tag":"refentry","type":"Function","methodName":"enchant_broker_set_ordering"},{"id":"function.enchant-dict-add","name":"enchant_dict_add","description":"Add a word to personal word list","tag":"refentry","type":"Function","methodName":"enchant_dict_add"},{"id":"function.enchant-dict-add-to-personal","name":"enchant_dict_add_to_personal","description":"Alias of enchant_dict_add","tag":"refentry","type":"Function","methodName":"enchant_dict_add_to_personal"},{"id":"function.enchant-dict-add-to-session","name":"enchant_dict_add_to_session","description":"Add 'word' to this spell-checking session","tag":"refentry","type":"Function","methodName":"enchant_dict_add_to_session"},{"id":"function.enchant-dict-check","name":"enchant_dict_check","description":"Check whether a word is correctly spelled or not","tag":"refentry","type":"Function","methodName":"enchant_dict_check"},{"id":"function.enchant-dict-describe","name":"enchant_dict_describe","description":"Describes an individual dictionary","tag":"refentry","type":"Function","methodName":"enchant_dict_describe"},{"id":"function.enchant-dict-get-error","name":"enchant_dict_get_error","description":"Returns the last error of the current spelling-session","tag":"refentry","type":"Function","methodName":"enchant_dict_get_error"},{"id":"function.enchant-dict-is-added","name":"enchant_dict_is_added","description":"Whether or not 'word' exists in this spelling-session","tag":"refentry","type":"Function","methodName":"enchant_dict_is_added"},{"id":"function.enchant-dict-is-in-session","name":"enchant_dict_is_in_session","description":"Alias of enchant_dict_is_added","tag":"refentry","type":"Function","methodName":"enchant_dict_is_in_session"},{"id":"function.enchant-dict-quick-check","name":"enchant_dict_quick_check","description":"Check the word is correctly spelled and provide suggestions","tag":"refentry","type":"Function","methodName":"enchant_dict_quick_check"},{"id":"function.enchant-dict-store-replacement","name":"enchant_dict_store_replacement","description":"Add a correction for a word","tag":"refentry","type":"Function","methodName":"enchant_dict_store_replacement"},{"id":"function.enchant-dict-suggest","name":"enchant_dict_suggest","description":"Will return a list of values if any of those pre-conditions are not met","tag":"refentry","type":"Function","methodName":"enchant_dict_suggest"},{"id":"ref.enchant","name":"Enchant Functions","description":"Enchant spelling library","tag":"reference","type":"Extension","methodName":"Enchant Functions"},{"id":"class.enchantbroker","name":"EnchantBroker","description":"The EnchantBroker class","tag":"phpdoc:classref","type":"Class","methodName":"EnchantBroker"},{"id":"class.enchantdictionary","name":"EnchantDictionary","description":"The EnchantDictionary class","tag":"phpdoc:classref","type":"Class","methodName":"EnchantDictionary"},{"id":"book.enchant","name":"Enchant","description":"Enchant spelling library","tag":"book","type":"Extension","methodName":"Enchant"},{"id":"intro.gender","name":"Introduction","description":"Determine gender of firstnames","tag":"preface","type":"General","methodName":"Introduction"},{"id":"gender.installation","name":"Installation","description":"Determine gender of firstnames","tag":"section","type":"General","methodName":"Installation"},{"id":"gender.setup","name":"Installing\/Configuring","description":"Determine gender of firstnames","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"gender.example.admin","name":"Usage example.","description":"Determine gender of firstnames","tag":"section","type":"General","methodName":"Usage example."},{"id":"gender.examples","name":"Examples","description":"Determine gender of firstnames","tag":"chapter","type":"General","methodName":"Examples"},{"id":"gender-gender.connect","name":"Gender\\Gender::connect","description":"Connect to an external name dictionary","tag":"refentry","type":"Function","methodName":"connect"},{"id":"gender-gender.construct","name":"Gender\\Gender::__construct","description":"Construct the Gender object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"gender-gender.country","name":"Gender\\Gender::country","description":"Get textual country representation","tag":"refentry","type":"Function","methodName":"country"},{"id":"gender-gender.get","name":"Gender\\Gender::get","description":"Get gender of a name","tag":"refentry","type":"Function","methodName":"get"},{"id":"gender-gender.isnick","name":"Gender\\Gender::isNick","description":"Check if the name0 is an alias of the name1","tag":"refentry","type":"Function","methodName":"isNick"},{"id":"gender-gender.similarnames","name":"Gender\\Gender::similarNames","description":"Get similar names","tag":"refentry","type":"Function","methodName":"similarNames"},{"id":"class.gender","name":"Gender\\Gender","description":"The Gender\\Gender class","tag":"phpdoc:classref","type":"Class","methodName":"Gender\\Gender"},{"id":"book.gender","name":"Gender","description":"Determine gender of firstnames","tag":"book","type":"Extension","methodName":"Gender"},{"id":"intro.gettext","name":"Introduction","description":"Gettext","tag":"preface","type":"General","methodName":"Introduction"},{"id":"gettext.requirements","name":"Requirements","description":"Gettext","tag":"section","type":"General","methodName":"Requirements"},{"id":"gettext.installation","name":"Installation","description":"Gettext","tag":"section","type":"General","methodName":"Installation"},{"id":"gettext.setup","name":"Installing\/Configuring","description":"Gettext","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.-","name":"_","description":"Alias of gettext","tag":"refentry","type":"Function","methodName":"_"},{"id":"function.bind-textdomain-codeset","name":"bind_textdomain_codeset","description":"Specify or get the character encoding in which the messages from the DOMAIN message catalog will be returned","tag":"refentry","type":"Function","methodName":"bind_textdomain_codeset"},{"id":"function.bindtextdomain","name":"bindtextdomain","description":"Sets or gets the path for a domain","tag":"refentry","type":"Function","methodName":"bindtextdomain"},{"id":"function.dcgettext","name":"dcgettext","description":"Overrides the domain for a single lookup","tag":"refentry","type":"Function","methodName":"dcgettext"},{"id":"function.dcngettext","name":"dcngettext","description":"Plural version of dcgettext","tag":"refentry","type":"Function","methodName":"dcngettext"},{"id":"function.dgettext","name":"dgettext","description":"Override the current domain","tag":"refentry","type":"Function","methodName":"dgettext"},{"id":"function.dngettext","name":"dngettext","description":"Plural version of dgettext","tag":"refentry","type":"Function","methodName":"dngettext"},{"id":"function.gettext","name":"gettext","description":"Lookup a message in the current domain","tag":"refentry","type":"Function","methodName":"gettext"},{"id":"function.ngettext","name":"ngettext","description":"Plural version of gettext","tag":"refentry","type":"Function","methodName":"ngettext"},{"id":"function.textdomain","name":"textdomain","description":"Sets the default domain","tag":"refentry","type":"Function","methodName":"textdomain"},{"id":"ref.gettext","name":"Gettext Functions","description":"Gettext","tag":"reference","type":"Extension","methodName":"Gettext Functions"},{"id":"book.gettext","name":"Gettext","description":"Human Language and Character Encoding Support","tag":"book","type":"Extension","methodName":"Gettext"},{"id":"intro.iconv","name":"Introduction","description":"iconv","tag":"preface","type":"General","methodName":"Introduction"},{"id":"iconv.requirements","name":"Requirements","description":"iconv","tag":"section","type":"General","methodName":"Requirements"},{"id":"iconv.installation","name":"Installation","description":"iconv","tag":"section","type":"General","methodName":"Installation"},{"id":"iconv.configuration","name":"Runtime Configuration","description":"iconv","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"iconv.setup","name":"Installing\/Configuring","description":"iconv","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"iconv.constants","name":"Predefined Constants","description":"iconv","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.iconv","name":"iconv","description":"Convert a string from one character encoding to another","tag":"refentry","type":"Function","methodName":"iconv"},{"id":"function.iconv-get-encoding","name":"iconv_get_encoding","description":"Retrieve internal configuration variables of iconv extension","tag":"refentry","type":"Function","methodName":"iconv_get_encoding"},{"id":"function.iconv-mime-decode","name":"iconv_mime_decode","description":"Decodes a MIME header field","tag":"refentry","type":"Function","methodName":"iconv_mime_decode"},{"id":"function.iconv-mime-decode-headers","name":"iconv_mime_decode_headers","description":"Decodes multiple MIME header fields at once","tag":"refentry","type":"Function","methodName":"iconv_mime_decode_headers"},{"id":"function.iconv-mime-encode","name":"iconv_mime_encode","description":"Composes a MIME header field","tag":"refentry","type":"Function","methodName":"iconv_mime_encode"},{"id":"function.iconv-set-encoding","name":"iconv_set_encoding","description":"Set current setting for character encoding conversion","tag":"refentry","type":"Function","methodName":"iconv_set_encoding"},{"id":"function.iconv-strlen","name":"iconv_strlen","description":"Returns the character count of string","tag":"refentry","type":"Function","methodName":"iconv_strlen"},{"id":"function.iconv-strpos","name":"iconv_strpos","description":"Finds position of first occurrence of a needle within a haystack","tag":"refentry","type":"Function","methodName":"iconv_strpos"},{"id":"function.iconv-strrpos","name":"iconv_strrpos","description":"Finds the last occurrence of a needle within a haystack","tag":"refentry","type":"Function","methodName":"iconv_strrpos"},{"id":"function.iconv-substr","name":"iconv_substr","description":"Cut out part of a string","tag":"refentry","type":"Function","methodName":"iconv_substr"},{"id":"function.ob-iconv-handler","name":"ob_iconv_handler","description":"Convert character encoding as output buffer handler","tag":"refentry","type":"Function","methodName":"ob_iconv_handler"},{"id":"ref.iconv","name":"iconv Functions","description":"iconv","tag":"reference","type":"Extension","methodName":"iconv Functions"},{"id":"book.iconv","name":"iconv","description":"Human Language and Character Encoding Support","tag":"book","type":"Extension","methodName":"iconv"},{"id":"intro.intl","name":"Introduction","description":"Internationalization Functions","tag":"preface","type":"General","methodName":"Introduction"},{"id":"intl.requirements","name":"Requirements","description":"Internationalization Functions","tag":"section","type":"General","methodName":"Requirements"},{"id":"intl.installation","name":"Installation","description":"Internationalization Functions","tag":"section","type":"General","methodName":"Installation"},{"id":"intl.configuration","name":"Runtime Configuration","description":"Internationalization Functions","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"intl.setup","name":"Installing\/Configuring","description":"Internationalization Functions","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"intl.constants","name":"Predefined Constants","description":"Internationalization Functions","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"intl.examples.basic","name":"Basic usage of this extension","description":"Internationalization Functions","tag":"section","type":"General","methodName":"Basic usage of this extension"},{"id":"intl.examples","name":"Examples","description":"Internationalization Functions","tag":"chapter","type":"General","methodName":"Examples"},{"id":"collator.asort","name":"collator_asort","description":"Sort array maintaining index association","tag":"refentry","type":"Function","methodName":"collator_asort"},{"id":"collator.asort","name":"Collator::asort","description":"Sort array maintaining index association","tag":"refentry","type":"Function","methodName":"asort"},{"id":"collator.compare","name":"collator_compare","description":"Compare two Unicode strings","tag":"refentry","type":"Function","methodName":"collator_compare"},{"id":"collator.compare","name":"Collator::compare","description":"Compare two Unicode strings","tag":"refentry","type":"Function","methodName":"compare"},{"id":"collator.construct","name":"Collator::__construct","description":"Create a collator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"collator.create","name":"collator_create","description":"Create a collator","tag":"refentry","type":"Function","methodName":"collator_create"},{"id":"collator.create","name":"Collator::create","description":"Create a collator","tag":"refentry","type":"Function","methodName":"create"},{"id":"collator.getattribute","name":"collator_get_attribute","description":"Get collation attribute value","tag":"refentry","type":"Function","methodName":"collator_get_attribute"},{"id":"collator.getattribute","name":"Collator::getAttribute","description":"Get collation attribute value","tag":"refentry","type":"Function","methodName":"getAttribute"},{"id":"collator.geterrorcode","name":"collator_get_error_code","description":"Get collator's last error code","tag":"refentry","type":"Function","methodName":"collator_get_error_code"},{"id":"collator.geterrorcode","name":"Collator::getErrorCode","description":"Get collator's last error code","tag":"refentry","type":"Function","methodName":"getErrorCode"},{"id":"collator.geterrormessage","name":"collator_get_error_message","description":"Get text for collator's last error code","tag":"refentry","type":"Function","methodName":"collator_get_error_message"},{"id":"collator.geterrormessage","name":"Collator::getErrorMessage","description":"Get text for collator's last error code","tag":"refentry","type":"Function","methodName":"getErrorMessage"},{"id":"collator.getlocale","name":"collator_get_locale","description":"Get the locale name of the collator","tag":"refentry","type":"Function","methodName":"collator_get_locale"},{"id":"collator.getlocale","name":"Collator::getLocale","description":"Get the locale name of the collator","tag":"refentry","type":"Function","methodName":"getLocale"},{"id":"collator.getsortkey","name":"collator_get_sort_key","description":"Get sorting key for a string","tag":"refentry","type":"Function","methodName":"collator_get_sort_key"},{"id":"collator.getsortkey","name":"Collator::getSortKey","description":"Get sorting key for a string","tag":"refentry","type":"Function","methodName":"getSortKey"},{"id":"collator.getstrength","name":"collator_get_strength","description":"Get current collation strength","tag":"refentry","type":"Function","methodName":"collator_get_strength"},{"id":"collator.getstrength","name":"Collator::getStrength","description":"Get current collation strength","tag":"refentry","type":"Function","methodName":"getStrength"},{"id":"collator.setattribute","name":"collator_set_attribute","description":"Set collation attribute","tag":"refentry","type":"Function","methodName":"collator_set_attribute"},{"id":"collator.setattribute","name":"Collator::setAttribute","description":"Set collation attribute","tag":"refentry","type":"Function","methodName":"setAttribute"},{"id":"collator.setstrength","name":"collator_set_strength","description":"Set collation strength","tag":"refentry","type":"Function","methodName":"collator_set_strength"},{"id":"collator.setstrength","name":"Collator::setStrength","description":"Set collation strength","tag":"refentry","type":"Function","methodName":"setStrength"},{"id":"collator.sort","name":"collator_sort","description":"Sort array using specified collator","tag":"refentry","type":"Function","methodName":"collator_sort"},{"id":"collator.sort","name":"Collator::sort","description":"Sort array using specified collator","tag":"refentry","type":"Function","methodName":"sort"},{"id":"collator.sortwithsortkeys","name":"collator_sort_with_sort_keys","description":"Sort array using specified collator and sort keys","tag":"refentry","type":"Function","methodName":"collator_sort_with_sort_keys"},{"id":"collator.sortwithsortkeys","name":"Collator::sortWithSortKeys","description":"Sort array using specified collator and sort keys","tag":"refentry","type":"Function","methodName":"sortWithSortKeys"},{"id":"class.collator","name":"Collator","description":"The Collator class","tag":"phpdoc:classref","type":"Class","methodName":"Collator"},{"id":"numberformatter.create","name":"NumberFormatter::__construct","description":"Create a number formatter","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"numberformatter.create","name":"numfmt_create","description":"Create a number formatter","tag":"refentry","type":"Function","methodName":"numfmt_create"},{"id":"numberformatter.create","name":"NumberFormatter::create","description":"Create a number formatter","tag":"refentry","type":"Function","methodName":"create"},{"id":"numberformatter.format","name":"numfmt_format","description":"Format a number","tag":"refentry","type":"Function","methodName":"numfmt_format"},{"id":"numberformatter.format","name":"NumberFormatter::format","description":"Format a number","tag":"refentry","type":"Function","methodName":"format"},{"id":"numberformatter.formatcurrency","name":"numfmt_format_currency","description":"Format a currency value","tag":"refentry","type":"Function","methodName":"numfmt_format_currency"},{"id":"numberformatter.formatcurrency","name":"NumberFormatter::formatCurrency","description":"Format a currency value","tag":"refentry","type":"Function","methodName":"formatCurrency"},{"id":"numberformatter.getattribute","name":"numfmt_get_attribute","description":"Get an attribute","tag":"refentry","type":"Function","methodName":"numfmt_get_attribute"},{"id":"numberformatter.getattribute","name":"NumberFormatter::getAttribute","description":"Get an attribute","tag":"refentry","type":"Function","methodName":"getAttribute"},{"id":"numberformatter.geterrorcode","name":"numfmt_get_error_code","description":"Get formatter's last error code","tag":"refentry","type":"Function","methodName":"numfmt_get_error_code"},{"id":"numberformatter.geterrorcode","name":"NumberFormatter::getErrorCode","description":"Get formatter's last error code","tag":"refentry","type":"Function","methodName":"getErrorCode"},{"id":"numberformatter.geterrormessage","name":"numfmt_get_error_message","description":"Get formatter's last error message","tag":"refentry","type":"Function","methodName":"numfmt_get_error_message"},{"id":"numberformatter.geterrormessage","name":"NumberFormatter::getErrorMessage","description":"Get formatter's last error message","tag":"refentry","type":"Function","methodName":"getErrorMessage"},{"id":"numberformatter.getlocale","name":"numfmt_get_locale","description":"Get formatter locale","tag":"refentry","type":"Function","methodName":"numfmt_get_locale"},{"id":"numberformatter.getlocale","name":"NumberFormatter::getLocale","description":"Get formatter locale","tag":"refentry","type":"Function","methodName":"getLocale"},{"id":"numberformatter.getpattern","name":"numfmt_get_pattern","description":"Get formatter pattern","tag":"refentry","type":"Function","methodName":"numfmt_get_pattern"},{"id":"numberformatter.getpattern","name":"NumberFormatter::getPattern","description":"Get formatter pattern","tag":"refentry","type":"Function","methodName":"getPattern"},{"id":"numberformatter.getsymbol","name":"numfmt_get_symbol","description":"Get a symbol value","tag":"refentry","type":"Function","methodName":"numfmt_get_symbol"},{"id":"numberformatter.getsymbol","name":"NumberFormatter::getSymbol","description":"Get a symbol value","tag":"refentry","type":"Function","methodName":"getSymbol"},{"id":"numberformatter.gettextattribute","name":"numfmt_get_text_attribute","description":"Get a text attribute","tag":"refentry","type":"Function","methodName":"numfmt_get_text_attribute"},{"id":"numberformatter.gettextattribute","name":"NumberFormatter::getTextAttribute","description":"Get a text attribute","tag":"refentry","type":"Function","methodName":"getTextAttribute"},{"id":"numberformatter.parse","name":"numfmt_parse","description":"Parse a number","tag":"refentry","type":"Function","methodName":"numfmt_parse"},{"id":"numberformatter.parse","name":"NumberFormatter::parse","description":"Parse a number","tag":"refentry","type":"Function","methodName":"parse"},{"id":"numberformatter.parsecurrency","name":"numfmt_parse_currency","description":"Parse a currency number","tag":"refentry","type":"Function","methodName":"numfmt_parse_currency"},{"id":"numberformatter.parsecurrency","name":"NumberFormatter::parseCurrency","description":"Parse a currency number","tag":"refentry","type":"Function","methodName":"parseCurrency"},{"id":"numberformatter.setattribute","name":"numfmt_set_attribute","description":"Set an attribute","tag":"refentry","type":"Function","methodName":"numfmt_set_attribute"},{"id":"numberformatter.setattribute","name":"NumberFormatter::setAttribute","description":"Set an attribute","tag":"refentry","type":"Function","methodName":"setAttribute"},{"id":"numberformatter.setpattern","name":"numfmt_set_pattern","description":"Set formatter pattern","tag":"refentry","type":"Function","methodName":"numfmt_set_pattern"},{"id":"numberformatter.setpattern","name":"NumberFormatter::setPattern","description":"Set formatter pattern","tag":"refentry","type":"Function","methodName":"setPattern"},{"id":"numberformatter.setsymbol","name":"numfmt_set_symbol","description":"Set a symbol value","tag":"refentry","type":"Function","methodName":"numfmt_set_symbol"},{"id":"numberformatter.setsymbol","name":"NumberFormatter::setSymbol","description":"Set a symbol value","tag":"refentry","type":"Function","methodName":"setSymbol"},{"id":"numberformatter.settextattribute","name":"numfmt_set_text_attribute","description":"Set a text attribute","tag":"refentry","type":"Function","methodName":"numfmt_set_text_attribute"},{"id":"numberformatter.settextattribute","name":"NumberFormatter::setTextAttribute","description":"Set a text attribute","tag":"refentry","type":"Function","methodName":"setTextAttribute"},{"id":"class.numberformatter","name":"NumberFormatter","description":"The NumberFormatter class","tag":"phpdoc:classref","type":"Class","methodName":"NumberFormatter"},{"id":"locale.acceptfromhttp","name":"locale_accept_from_http","description":"Tries to find out best available locale based on HTTP \"Accept-Language\" header","tag":"refentry","type":"Function","methodName":"locale_accept_from_http"},{"id":"locale.acceptfromhttp","name":"Locale::acceptFromHttp","description":"Tries to find out best available locale based on HTTP \"Accept-Language\" header","tag":"refentry","type":"Function","methodName":"acceptFromHttp"},{"id":"locale.canonicalize","name":"locale_canonicalize","description":"Canonicalize the locale string","tag":"refentry","type":"Function","methodName":"locale_canonicalize"},{"id":"locale.canonicalize","name":"Locale::canonicalize","description":"Canonicalize the locale string","tag":"refentry","type":"Function","methodName":"canonicalize"},{"id":"locale.composelocale","name":"locale_compose","description":"Returns a correctly ordered and delimited locale ID","tag":"refentry","type":"Function","methodName":"locale_compose"},{"id":"locale.composelocale","name":"Locale::composeLocale","description":"Returns a correctly ordered and delimited locale ID","tag":"refentry","type":"Function","methodName":"composeLocale"},{"id":"locale.filtermatches","name":"locale_filter_matches","description":"Checks if a language tag filter matches with locale","tag":"refentry","type":"Function","methodName":"locale_filter_matches"},{"id":"locale.filtermatches","name":"Locale::filterMatches","description":"Checks if a language tag filter matches with locale","tag":"refentry","type":"Function","methodName":"filterMatches"},{"id":"locale.getallvariants","name":"locale_get_all_variants","description":"Gets the variants for the input locale","tag":"refentry","type":"Function","methodName":"locale_get_all_variants"},{"id":"locale.getallvariants","name":"Locale::getAllVariants","description":"Gets the variants for the input locale","tag":"refentry","type":"Function","methodName":"getAllVariants"},{"id":"locale.getdefault","name":"locale_get_default","description":"Gets the default locale value from the INTL global 'default_locale'","tag":"refentry","type":"Function","methodName":"locale_get_default"},{"id":"locale.getdefault","name":"Locale::getDefault","description":"Gets the default locale value from the INTL global 'default_locale'","tag":"refentry","type":"Function","methodName":"getDefault"},{"id":"locale.getdisplaylanguage","name":"locale_get_display_language","description":"Returns an appropriately localized display name for language of the inputlocale","tag":"refentry","type":"Function","methodName":"locale_get_display_language"},{"id":"locale.getdisplaylanguage","name":"Locale::getDisplayLanguage","description":"Returns an appropriately localized display name for language of the inputlocale","tag":"refentry","type":"Function","methodName":"getDisplayLanguage"},{"id":"locale.getdisplayname","name":"locale_get_display_name","description":"Returns an appropriately localized display name for the input locale","tag":"refentry","type":"Function","methodName":"locale_get_display_name"},{"id":"locale.getdisplayname","name":"Locale::getDisplayName","description":"Returns an appropriately localized display name for the input locale","tag":"refentry","type":"Function","methodName":"getDisplayName"},{"id":"locale.getdisplayregion","name":"locale_get_display_region","description":"Returns an appropriately localized display name for region of the input locale","tag":"refentry","type":"Function","methodName":"locale_get_display_region"},{"id":"locale.getdisplayregion","name":"Locale::getDisplayRegion","description":"Returns an appropriately localized display name for region of the input locale","tag":"refentry","type":"Function","methodName":"getDisplayRegion"},{"id":"locale.getdisplayscript","name":"locale_get_display_script","description":"Returns an appropriately localized display name for script of the input locale","tag":"refentry","type":"Function","methodName":"locale_get_display_script"},{"id":"locale.getdisplayscript","name":"Locale::getDisplayScript","description":"Returns an appropriately localized display name for script of the input locale","tag":"refentry","type":"Function","methodName":"getDisplayScript"},{"id":"locale.getdisplayvariant","name":"locale_get_display_variant","description":"Returns an appropriately localized display name for variants of the input locale","tag":"refentry","type":"Function","methodName":"locale_get_display_variant"},{"id":"locale.getdisplayvariant","name":"Locale::getDisplayVariant","description":"Returns an appropriately localized display name for variants of the input locale","tag":"refentry","type":"Function","methodName":"getDisplayVariant"},{"id":"locale.getkeywords","name":"locale_get_keywords","description":"Gets the keywords for the input locale","tag":"refentry","type":"Function","methodName":"locale_get_keywords"},{"id":"locale.getkeywords","name":"Locale::getKeywords","description":"Gets the keywords for the input locale","tag":"refentry","type":"Function","methodName":"getKeywords"},{"id":"locale.getprimarylanguage","name":"locale_get_primary_language","description":"Gets the primary language for the input locale","tag":"refentry","type":"Function","methodName":"locale_get_primary_language"},{"id":"locale.getprimarylanguage","name":"Locale::getPrimaryLanguage","description":"Gets the primary language for the input locale","tag":"refentry","type":"Function","methodName":"getPrimaryLanguage"},{"id":"locale.getregion","name":"locale_get_region","description":"Gets the region for the input locale","tag":"refentry","type":"Function","methodName":"locale_get_region"},{"id":"locale.getregion","name":"Locale::getRegion","description":"Gets the region for the input locale","tag":"refentry","type":"Function","methodName":"getRegion"},{"id":"locale.getscript","name":"locale_get_script","description":"Gets the script for the input locale","tag":"refentry","type":"Function","methodName":"locale_get_script"},{"id":"locale.getscript","name":"Locale::getScript","description":"Gets the script for the input locale","tag":"refentry","type":"Function","methodName":"getScript"},{"id":"locale.lookup","name":"locale_lookup","description":"Searches the language tag list for the best match to the language","tag":"refentry","type":"Function","methodName":"locale_lookup"},{"id":"locale.lookup","name":"Locale::lookup","description":"Searches the language tag list for the best match to the language","tag":"refentry","type":"Function","methodName":"lookup"},{"id":"locale.parselocale","name":"locale_parse","description":"Returns a key-value array of locale ID subtag elements","tag":"refentry","type":"Function","methodName":"locale_parse"},{"id":"locale.parselocale","name":"Locale::parseLocale","description":"Returns a key-value array of locale ID subtag elements","tag":"refentry","type":"Function","methodName":"parseLocale"},{"id":"locale.setdefault","name":"locale_set_default","description":"Sets the default runtime locale","tag":"refentry","type":"Function","methodName":"locale_set_default"},{"id":"locale.setdefault","name":"Locale::setDefault","description":"Sets the default runtime locale","tag":"refentry","type":"Function","methodName":"setDefault"},{"id":"class.locale","name":"Locale","description":"The Locale class","tag":"phpdoc:classref","type":"Class","methodName":"Locale"},{"id":"normalizer.getrawdecomposition","name":"normalizer_get_raw_decomposition","description":"Gets the Decomposition_Mapping property for the given UTF-8 encoded code point","tag":"refentry","type":"Function","methodName":"normalizer_get_raw_decomposition"},{"id":"normalizer.getrawdecomposition","name":"Normalizer::getRawDecomposition","description":"Gets the Decomposition_Mapping property for the given UTF-8 encoded code point","tag":"refentry","type":"Function","methodName":"getRawDecomposition"},{"id":"normalizer.isnormalized","name":"normalizer_is_normalized","description":"Checks if the provided string is already in the specified normalization\n form","tag":"refentry","type":"Function","methodName":"normalizer_is_normalized"},{"id":"normalizer.isnormalized","name":"Normalizer::isNormalized","description":"Checks if the provided string is already in the specified normalization\n form","tag":"refentry","type":"Function","methodName":"isNormalized"},{"id":"normalizer.normalize","name":"normalizer_normalize","description":"Normalizes the input provided and returns the normalized string","tag":"refentry","type":"Function","methodName":"normalizer_normalize"},{"id":"normalizer.normalize","name":"Normalizer::normalize","description":"Normalizes the input provided and returns the normalized string","tag":"refentry","type":"Function","methodName":"normalize"},{"id":"class.normalizer","name":"Normalizer","description":"The Normalizer class","tag":"phpdoc:classref","type":"Class","methodName":"Normalizer"},{"id":"messageformatter.create","name":"msgfmt_create","description":"Constructs a new Message Formatter","tag":"refentry","type":"Function","methodName":"msgfmt_create"},{"id":"messageformatter.create","name":"MessageFormatter::__construct","description":"Constructs a new Message Formatter","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"messageformatter.create","name":"MessageFormatter::create","description":"Constructs a new Message Formatter","tag":"refentry","type":"Function","methodName":"create"},{"id":"messageformatter.format","name":"msgfmt_format","description":"Format the message","tag":"refentry","type":"Function","methodName":"msgfmt_format"},{"id":"messageformatter.format","name":"MessageFormatter::format","description":"Format the message","tag":"refentry","type":"Function","methodName":"format"},{"id":"messageformatter.formatmessage","name":"msgfmt_format_message","description":"Quick format message","tag":"refentry","type":"Function","methodName":"msgfmt_format_message"},{"id":"messageformatter.formatmessage","name":"MessageFormatter::formatMessage","description":"Quick format message","tag":"refentry","type":"Function","methodName":"formatMessage"},{"id":"messageformatter.geterrorcode","name":"msgfmt_get_error_code","description":"Get the error code from last operation","tag":"refentry","type":"Function","methodName":"msgfmt_get_error_code"},{"id":"messageformatter.geterrorcode","name":"MessageFormatter::getErrorCode","description":"Get the error code from last operation","tag":"refentry","type":"Function","methodName":"getErrorCode"},{"id":"messageformatter.geterrormessage","name":"msgfmt_get_error_message","description":"Get the error text from the last operation","tag":"refentry","type":"Function","methodName":"msgfmt_get_error_message"},{"id":"messageformatter.geterrormessage","name":"MessageFormatter::getErrorMessage","description":"Get the error text from the last operation","tag":"refentry","type":"Function","methodName":"getErrorMessage"},{"id":"messageformatter.getlocale","name":"msgfmt_get_locale","description":"Get the locale for which the formatter was created","tag":"refentry","type":"Function","methodName":"msgfmt_get_locale"},{"id":"messageformatter.getlocale","name":"MessageFormatter::getLocale","description":"Get the locale for which the formatter was created","tag":"refentry","type":"Function","methodName":"getLocale"},{"id":"messageformatter.getpattern","name":"msgfmt_get_pattern","description":"Get the pattern used by the formatter","tag":"refentry","type":"Function","methodName":"msgfmt_get_pattern"},{"id":"messageformatter.getpattern","name":"MessageFormatter::getPattern","description":"Get the pattern used by the formatter","tag":"refentry","type":"Function","methodName":"getPattern"},{"id":"messageformatter.parse","name":"msgfmt_parse","description":"Parse input string according to pattern","tag":"refentry","type":"Function","methodName":"msgfmt_parse"},{"id":"messageformatter.parse","name":"MessageFormatter::parse","description":"Parse input string according to pattern","tag":"refentry","type":"Function","methodName":"parse"},{"id":"messageformatter.parsemessage","name":"msgfmt_parse_message","description":"Quick parse input string","tag":"refentry","type":"Function","methodName":"msgfmt_parse_message"},{"id":"messageformatter.parsemessage","name":"MessageFormatter::parseMessage","description":"Quick parse input string","tag":"refentry","type":"Function","methodName":"parseMessage"},{"id":"messageformatter.setpattern","name":"msgfmt_set_pattern","description":"Set the pattern used by the formatter","tag":"refentry","type":"Function","methodName":"msgfmt_set_pattern"},{"id":"messageformatter.setpattern","name":"MessageFormatter::setPattern","description":"Set the pattern used by the formatter","tag":"refentry","type":"Function","methodName":"setPattern"},{"id":"class.messageformatter","name":"MessageFormatter","description":"The MessageFormatter class","tag":"phpdoc:classref","type":"Class","methodName":"MessageFormatter"},{"id":"intlcalendar.add","name":"IntlCalendar::add","description":"Add a (signed) amount of time to a field","tag":"refentry","type":"Function","methodName":"add"},{"id":"intlcalendar.after","name":"IntlCalendar::after","description":"Whether this object\u02bcs time is after that of the passed object","tag":"refentry","type":"Function","methodName":"after"},{"id":"intlcalendar.before","name":"IntlCalendar::before","description":"Whether this object\u02bcs time is before that of the passed object","tag":"refentry","type":"Function","methodName":"before"},{"id":"intlcalendar.clear","name":"IntlCalendar::clear","description":"Clear a field or all fields","tag":"refentry","type":"Function","methodName":"clear"},{"id":"intlcalendar.construct","name":"IntlCalendar::__construct","description":"Private constructor for disallowing instantiation","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"intlcalendar.createinstance","name":"IntlCalendar::createInstance","description":"Create a new IntlCalendar","tag":"refentry","type":"Function","methodName":"createInstance"},{"id":"intlcalendar.equals","name":"IntlCalendar::equals","description":"Compare time of two IntlCalendar objects for equality","tag":"refentry","type":"Function","methodName":"equals"},{"id":"intlcalendar.fielddifference","name":"IntlCalendar::fieldDifference","description":"Calculate difference between given time and this object\u02bcs time","tag":"refentry","type":"Function","methodName":"fieldDifference"},{"id":"intlcalendar.fromdatetime","name":"IntlCalendar::fromDateTime","description":"Create an IntlCalendar from a DateTime object or string","tag":"refentry","type":"Function","methodName":"fromDateTime"},{"id":"intlcalendar.get","name":"IntlCalendar::get","description":"Get the value for a field","tag":"refentry","type":"Function","methodName":"get"},{"id":"intlcalendar.getactualmaximum","name":"IntlCalendar::getActualMaximum","description":"The maximum value for a field, considering the object\u02bcs current time","tag":"refentry","type":"Function","methodName":"getActualMaximum"},{"id":"intlcalendar.getactualminimum","name":"IntlCalendar::getActualMinimum","description":"The minimum value for a field, considering the object\u02bcs current time","tag":"refentry","type":"Function","methodName":"getActualMinimum"},{"id":"intlcalendar.getavailablelocales","name":"IntlCalendar::getAvailableLocales","description":"Get array of locales for which there is data","tag":"refentry","type":"Function","methodName":"getAvailableLocales"},{"id":"intlcalendar.getdayofweektype","name":"IntlCalendar::getDayOfWeekType","description":"Tell whether a day is a weekday, weekend or a day that has a transition between the two","tag":"refentry","type":"Function","methodName":"getDayOfWeekType"},{"id":"intlcalendar.geterrorcode","name":"intlcal_get_error_code","description":"Get last error code on the object","tag":"refentry","type":"Function","methodName":"intlcal_get_error_code"},{"id":"intlcalendar.geterrorcode","name":"IntlCalendar::getErrorCode","description":"Get last error code on the object","tag":"refentry","type":"Function","methodName":"getErrorCode"},{"id":"intlcalendar.geterrormessage","name":"intlcal_get_error_message","description":"Get last error message on the object","tag":"refentry","type":"Function","methodName":"intlcal_get_error_message"},{"id":"intlcalendar.geterrormessage","name":"IntlCalendar::getErrorMessage","description":"Get last error message on the object","tag":"refentry","type":"Function","methodName":"getErrorMessage"},{"id":"intlcalendar.getfirstdayofweek","name":"IntlCalendar::getFirstDayOfWeek","description":"Get the first day of the week for the calendar\u02bcs locale","tag":"refentry","type":"Function","methodName":"getFirstDayOfWeek"},{"id":"intlcalendar.getgreatestminimum","name":"IntlCalendar::getGreatestMinimum","description":"Get the largest local minimum value for a field","tag":"refentry","type":"Function","methodName":"getGreatestMinimum"},{"id":"intlcalendar.getkeywordvaluesforlocale","name":"IntlCalendar::getKeywordValuesForLocale","description":"Get set of locale keyword values","tag":"refentry","type":"Function","methodName":"getKeywordValuesForLocale"},{"id":"intlcalendar.getleastmaximum","name":"IntlCalendar::getLeastMaximum","description":"Get the smallest local maximum for a field","tag":"refentry","type":"Function","methodName":"getLeastMaximum"},{"id":"intlcalendar.getlocale","name":"IntlCalendar::getLocale","description":"Get the locale associated with the object","tag":"refentry","type":"Function","methodName":"getLocale"},{"id":"intlcalendar.getmaximum","name":"IntlCalendar::getMaximum","description":"Get the global maximum value for a field","tag":"refentry","type":"Function","methodName":"getMaximum"},{"id":"intlcalendar.getminimaldaysinfirstweek","name":"IntlCalendar::getMinimalDaysInFirstWeek","description":"Get minimal number of days the first week in a year or month can have","tag":"refentry","type":"Function","methodName":"getMinimalDaysInFirstWeek"},{"id":"intlcalendar.getminimum","name":"IntlCalendar::getMinimum","description":"Get the global minimum value for a field","tag":"refentry","type":"Function","methodName":"getMinimum"},{"id":"intlcalendar.getnow","name":"IntlCalendar::getNow","description":"Get number representing the current time","tag":"refentry","type":"Function","methodName":"getNow"},{"id":"intlcalendar.getrepeatedwalltimeoption","name":"IntlCalendar::getRepeatedWallTimeOption","description":"Get behavior for handling repeating wall time","tag":"refentry","type":"Function","methodName":"getRepeatedWallTimeOption"},{"id":"intlcalendar.getskippedwalltimeoption","name":"IntlCalendar::getSkippedWallTimeOption","description":"Get behavior for handling skipped wall time","tag":"refentry","type":"Function","methodName":"getSkippedWallTimeOption"},{"id":"intlcalendar.gettime","name":"IntlCalendar::getTime","description":"Get time currently represented by the object","tag":"refentry","type":"Function","methodName":"getTime"},{"id":"intlcalendar.gettimezone","name":"IntlCalendar::getTimeZone","description":"Get the object\u02bcs timezone","tag":"refentry","type":"Function","methodName":"getTimeZone"},{"id":"intlcalendar.gettype","name":"IntlCalendar::getType","description":"Get the calendar type","tag":"refentry","type":"Function","methodName":"getType"},{"id":"intlcalendar.getweekendtransition","name":"IntlCalendar::getWeekendTransition","description":"Get time of the day at which weekend begins or ends","tag":"refentry","type":"Function","methodName":"getWeekendTransition"},{"id":"intlcalendar.indaylighttime","name":"IntlCalendar::inDaylightTime","description":"Whether the object\u02bcs time is in Daylight Savings Time","tag":"refentry","type":"Function","methodName":"inDaylightTime"},{"id":"intlcalendar.isequivalentto","name":"IntlCalendar::isEquivalentTo","description":"Whether another calendar is equal but for a different time","tag":"refentry","type":"Function","methodName":"isEquivalentTo"},{"id":"intlcalendar.islenient","name":"IntlCalendar::isLenient","description":"Whether date\/time interpretation is in lenient mode","tag":"refentry","type":"Function","methodName":"isLenient"},{"id":"intlcalendar.isset","name":"IntlCalendar::isSet","description":"Whether a field is set","tag":"refentry","type":"Function","methodName":"isSet"},{"id":"intlcalendar.isweekend","name":"IntlCalendar::isWeekend","description":"Whether a certain date\/time is in the weekend","tag":"refentry","type":"Function","methodName":"isWeekend"},{"id":"intlcalendar.roll","name":"IntlCalendar::roll","description":"Add value to field without carrying into more significant fields","tag":"refentry","type":"Function","methodName":"roll"},{"id":"intlcalendar.set","name":"IntlCalendar::set","description":"Set a time field or several common fields at once","tag":"refentry","type":"Function","methodName":"set"},{"id":"intlcalendar.setdate","name":"IntlCalendar::setDate","description":"Set a date fields","tag":"refentry","type":"Function","methodName":"setDate"},{"id":"intlcalendar.setdatetime","name":"IntlCalendar::setDateTime","description":"Set a date and time fields","tag":"refentry","type":"Function","methodName":"setDateTime"},{"id":"intlcalendar.setfirstdayofweek","name":"IntlCalendar::setFirstDayOfWeek","description":"Set the day on which the week is deemed to start","tag":"refentry","type":"Function","methodName":"setFirstDayOfWeek"},{"id":"intlcalendar.setlenient","name":"IntlCalendar::setLenient","description":"Set whether date\/time interpretation is to be lenient","tag":"refentry","type":"Function","methodName":"setLenient"},{"id":"intlcalendar.setminimaldaysinfirstweek","name":"IntlCalendar::setMinimalDaysInFirstWeek","description":"Set minimal number of days the first week in a year or month can have","tag":"refentry","type":"Function","methodName":"setMinimalDaysInFirstWeek"},{"id":"intlcalendar.setrepeatedwalltimeoption","name":"IntlCalendar::setRepeatedWallTimeOption","description":"Set behavior for handling repeating wall times at negative timezone offset transitions","tag":"refentry","type":"Function","methodName":"setRepeatedWallTimeOption"},{"id":"intlcalendar.setskippedwalltimeoption","name":"IntlCalendar::setSkippedWallTimeOption","description":"Set behavior for handling skipped wall times at positive timezone offset transitions","tag":"refentry","type":"Function","methodName":"setSkippedWallTimeOption"},{"id":"intlcalendar.settime","name":"IntlCalendar::setTime","description":"Set the calendar time in milliseconds since the epoch","tag":"refentry","type":"Function","methodName":"setTime"},{"id":"intlcalendar.settimezone","name":"IntlCalendar::setTimeZone","description":"Set the timezone used by this calendar","tag":"refentry","type":"Function","methodName":"setTimeZone"},{"id":"intlcalendar.todatetime","name":"IntlCalendar::toDateTime","description":"Convert an IntlCalendar into a DateTime object","tag":"refentry","type":"Function","methodName":"toDateTime"},{"id":"class.intlcalendar","name":"IntlCalendar","description":"The IntlCalendar class","tag":"phpdoc:classref","type":"Class","methodName":"IntlCalendar"},{"id":"intlgregoriancalendar.construct","name":"IntlGregorianCalendar::__construct","description":"Create the Gregorian Calendar class","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"intlgregoriancalendar.createfromdate","name":"IntlGregorianCalendar::createFromDate","description":"Create a new IntlGregorianCalendar instance from date","tag":"refentry","type":"Function","methodName":"createFromDate"},{"id":"intlgregoriancalendar.createfromdatetime","name":"IntlGregorianCalendar::createFromDateTime","description":"Create a new IntlGregorianCalendar instance from date and time","tag":"refentry","type":"Function","methodName":"createFromDateTime"},{"id":"intlgregoriancalendar.getgregorianchange","name":"IntlGregorianCalendar::getGregorianChange","description":"Get the Gregorian Calendar change date","tag":"refentry","type":"Function","methodName":"getGregorianChange"},{"id":"intlgregoriancalendar.isleapyear","name":"IntlGregorianCalendar::isLeapYear","description":"Determine if the given year is a leap year","tag":"refentry","type":"Function","methodName":"isLeapYear"},{"id":"intlgregoriancalendar.setgregorianchange","name":"IntlGregorianCalendar::setGregorianChange","description":"Set the Gregorian Calendar the change date","tag":"refentry","type":"Function","methodName":"setGregorianChange"},{"id":"class.intlgregoriancalendar","name":"IntlGregorianCalendar","description":"The IntlGregorianCalendar class","tag":"phpdoc:classref","type":"Class","methodName":"IntlGregorianCalendar"},{"id":"intltimezone.construct","name":"IntlTimeZone::__construct","description":"Private constructor to disallow direct instantiation","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"intltimezone.countequivalentids","name":"intltz_count_equivalent_ids","description":"Get the number of IDs in the equivalency group that includes the given ID","tag":"refentry","type":"Function","methodName":"intltz_count_equivalent_ids"},{"id":"intltimezone.countequivalentids","name":"IntlTimeZone::countEquivalentIDs","description":"Get the number of IDs in the equivalency group that includes the given ID","tag":"refentry","type":"Function","methodName":"countEquivalentIDs"},{"id":"intltimezone.createdefault","name":"intltz_create_default","description":"Create a new copy of the default timezone for this host","tag":"refentry","type":"Function","methodName":"intltz_create_default"},{"id":"intltimezone.createdefault","name":"IntlTimeZone::createDefault","description":"Create a new copy of the default timezone for this host","tag":"refentry","type":"Function","methodName":"createDefault"},{"id":"intltimezone.createenumeration","name":"intltz_create_enumeration","description":"Get an enumeration over time zone IDs associated with the\n given country or offset","tag":"refentry","type":"Function","methodName":"intltz_create_enumeration"},{"id":"intltimezone.createenumeration","name":"IntlTimeZone::createEnumeration","description":"Get an enumeration over time zone IDs associated with the\n given country or offset","tag":"refentry","type":"Function","methodName":"createEnumeration"},{"id":"intltimezone.createtimezone","name":"intltz_create_time_zone","description":"Create a timezone object for the given ID","tag":"refentry","type":"Function","methodName":"intltz_create_time_zone"},{"id":"intltimezone.createtimezone","name":"IntlTimeZone::createTimeZone","description":"Create a timezone object for the given ID","tag":"refentry","type":"Function","methodName":"createTimeZone"},{"id":"intltimezone.createtimezoneidenumeration","name":"intltz_create_time_zone_id_enumeration","description":"Get an enumeration over system time zone IDs with the given filter conditions","tag":"refentry","type":"Function","methodName":"intltz_create_time_zone_id_enumeration"},{"id":"intltimezone.createtimezoneidenumeration","name":"IntlTimeZone::createTimeZoneIDEnumeration","description":"Get an enumeration over system time zone IDs with the given filter conditions","tag":"refentry","type":"Function","methodName":"createTimeZoneIDEnumeration"},{"id":"intltimezone.fromdatetimezone","name":"intltz_from_date_time_zone","description":"Create a timezone object from DateTimeZone","tag":"refentry","type":"Function","methodName":"intltz_from_date_time_zone"},{"id":"intltimezone.fromdatetimezone","name":"IntlTimeZone::fromDateTimeZone","description":"Create a timezone object from DateTimeZone","tag":"refentry","type":"Function","methodName":"fromDateTimeZone"},{"id":"intltimezone.getcanonicalid","name":"intltz_get_canonical_id","description":"Get the canonical system timezone ID or the normalized custom time zone ID for the given time zone ID","tag":"refentry","type":"Function","methodName":"intltz_get_canonical_id"},{"id":"intltimezone.getcanonicalid","name":"IntlTimeZone::getCanonicalID","description":"Get the canonical system timezone ID or the normalized custom time zone ID for the given time zone ID","tag":"refentry","type":"Function","methodName":"getCanonicalID"},{"id":"intltimezone.getdisplayname","name":"intltz_get_display_name","description":"Get a name of this time zone suitable for presentation to the user","tag":"refentry","type":"Function","methodName":"intltz_get_display_name"},{"id":"intltimezone.getdisplayname","name":"IntlTimeZone::getDisplayName","description":"Get a name of this time zone suitable for presentation to the user","tag":"refentry","type":"Function","methodName":"getDisplayName"},{"id":"intltimezone.getdstsavings","name":"intltz_get_dst_savings","description":"Get the amount of time to be added to local standard time to get local wall clock time","tag":"refentry","type":"Function","methodName":"intltz_get_dst_savings"},{"id":"intltimezone.getdstsavings","name":"IntlTimeZone::getDSTSavings","description":"Get the amount of time to be added to local standard time to get local wall clock time","tag":"refentry","type":"Function","methodName":"getDSTSavings"},{"id":"intltimezone.getequivalentid","name":"intltz_get_equivalent_id","description":"Get an ID in the equivalency group that includes the given ID","tag":"refentry","type":"Function","methodName":"intltz_get_equivalent_id"},{"id":"intltimezone.getequivalentid","name":"IntlTimeZone::getEquivalentID","description":"Get an ID in the equivalency group that includes the given ID","tag":"refentry","type":"Function","methodName":"getEquivalentID"},{"id":"intltimezone.geterrorcode","name":"intltz_get_error_code","description":"Get last error code on the object","tag":"refentry","type":"Function","methodName":"intltz_get_error_code"},{"id":"intltimezone.geterrorcode","name":"IntlTimeZone::getErrorCode","description":"Get last error code on the object","tag":"refentry","type":"Function","methodName":"getErrorCode"},{"id":"intltimezone.geterrormessage","name":"intltz_get_error_message","description":"Get last error message on the object","tag":"refentry","type":"Function","methodName":"intltz_get_error_message"},{"id":"intltimezone.geterrormessage","name":"IntlTimeZone::getErrorMessage","description":"Get last error message on the object","tag":"refentry","type":"Function","methodName":"getErrorMessage"},{"id":"intltimezone.getgmt","name":"intltz_get_gmt","description":"Create GMT (UTC) timezone","tag":"refentry","type":"Function","methodName":"intltz_get_gmt"},{"id":"intltimezone.getgmt","name":"IntlTimeZone::getGMT","description":"Create GMT (UTC) timezone","tag":"refentry","type":"Function","methodName":"getGMT"},{"id":"intltimezone.getid","name":"intltz_get_id","description":"Get timezone ID","tag":"refentry","type":"Function","methodName":"intltz_get_id"},{"id":"intltimezone.getid","name":"IntlTimeZone::getID","description":"Get timezone ID","tag":"refentry","type":"Function","methodName":"getID"},{"id":"intltimezone.getidforwindowsid","name":"intltz_get_id_for_windows_id","description":"Translate a Windows timezone into a system timezone","tag":"refentry","type":"Function","methodName":"intltz_get_id_for_windows_id"},{"id":"intltimezone.getidforwindowsid","name":"IntlTimeZone::getIDForWindowsID","description":"Translate a Windows timezone into a system timezone","tag":"refentry","type":"Function","methodName":"getIDForWindowsID"},{"id":"intltimezone.getoffset","name":"intltz_get_offset","description":"Get the time zone raw and GMT offset for the given moment in time","tag":"refentry","type":"Function","methodName":"intltz_get_offset"},{"id":"intltimezone.getoffset","name":"IntlTimeZone::getOffset","description":"Get the time zone raw and GMT offset for the given moment in time","tag":"refentry","type":"Function","methodName":"getOffset"},{"id":"intltimezone.getrawoffset","name":"intltz_get_raw_offset","description":"Get the raw GMT offset (before taking daylight savings time into account","tag":"refentry","type":"Function","methodName":"intltz_get_raw_offset"},{"id":"intltimezone.getrawoffset","name":"IntlTimeZone::getRawOffset","description":"Get the raw GMT offset (before taking daylight savings time into account","tag":"refentry","type":"Function","methodName":"getRawOffset"},{"id":"intltimezone.getregion","name":"intltz_get_region","description":"Get the region code associated with the given system time zone ID","tag":"refentry","type":"Function","methodName":"intltz_get_region"},{"id":"intltimezone.getregion","name":"IntlTimeZone::getRegion","description":"Get the region code associated with the given system time zone ID","tag":"refentry","type":"Function","methodName":"getRegion"},{"id":"intltimezone.gettzdataversion","name":"intltz_get_tz_data_version","description":"Get the timezone data version currently used by ICU","tag":"refentry","type":"Function","methodName":"intltz_get_tz_data_version"},{"id":"intltimezone.gettzdataversion","name":"IntlTimeZone::getTZDataVersion","description":"Get the timezone data version currently used by ICU","tag":"refentry","type":"Function","methodName":"getTZDataVersion"},{"id":"intltimezone.getunknown","name":"intltz_get_unknown","description":"Get the \"unknown\" time zone","tag":"refentry","type":"Function","methodName":"intltz_get_unknown"},{"id":"intltimezone.getunknown","name":"IntlTimeZone::getUnknown","description":"Get the \"unknown\" time zone","tag":"refentry","type":"Function","methodName":"getUnknown"},{"id":"intltimezone.getwindowsid","name":"intltz_get_windows_id","description":"Translate a system timezone into a Windows timezone","tag":"refentry","type":"Function","methodName":"intltz_get_windows_id"},{"id":"intltimezone.getwindowsid","name":"IntlTimeZone::getWindowsID","description":"Translate a system timezone into a Windows timezone","tag":"refentry","type":"Function","methodName":"getWindowsID"},{"id":"intltimezone.hassamerules","name":"intltz_has_same_rules","description":"Check if this zone has the same rules and offset as another zone","tag":"refentry","type":"Function","methodName":"intltz_has_same_rules"},{"id":"intltimezone.hassamerules","name":"IntlTimeZone::hasSameRules","description":"Check if this zone has the same rules and offset as another zone","tag":"refentry","type":"Function","methodName":"hasSameRules"},{"id":"intltimezone.todatetimezone","name":"intltz_to_date_time_zone","description":"Convert to DateTimeZone object","tag":"refentry","type":"Function","methodName":"intltz_to_date_time_zone"},{"id":"intltimezone.todatetimezone","name":"IntlTimeZone::toDateTimeZone","description":"Convert to DateTimeZone object","tag":"refentry","type":"Function","methodName":"toDateTimeZone"},{"id":"intltimezone.usedaylighttime","name":"intltz_use_daylight_time","description":"Check if this time zone uses daylight savings time","tag":"refentry","type":"Function","methodName":"intltz_use_daylight_time"},{"id":"intltimezone.usedaylighttime","name":"IntlTimeZone::useDaylightTime","description":"Check if this time zone uses daylight savings time","tag":"refentry","type":"Function","methodName":"useDaylightTime"},{"id":"class.intltimezone","name":"IntlTimeZone","description":"The IntlTimeZone class","tag":"phpdoc:classref","type":"Class","methodName":"IntlTimeZone"},{"id":"intldateformatter.create","name":"IntlDateFormatter::__construct","description":"Create a date formatter","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"intldateformatter.create","name":"datefmt_create","description":"Create a date formatter","tag":"refentry","type":"Function","methodName":"datefmt_create"},{"id":"intldateformatter.create","name":"IntlDateFormatter::create","description":"Create a date formatter","tag":"refentry","type":"Function","methodName":"create"},{"id":"intldateformatter.format","name":"datefmt_format","description":"Format the date\/time value as a string","tag":"refentry","type":"Function","methodName":"datefmt_format"},{"id":"intldateformatter.format","name":"IntlDateFormatter::format","description":"Format the date\/time value as a string","tag":"refentry","type":"Function","methodName":"format"},{"id":"intldateformatter.formatobject","name":"datefmt_format_object","description":"Formats an object","tag":"refentry","type":"Function","methodName":"datefmt_format_object"},{"id":"intldateformatter.formatobject","name":"IntlDateFormatter::formatObject","description":"Formats an object","tag":"refentry","type":"Function","methodName":"formatObject"},{"id":"intldateformatter.getcalendar","name":"datefmt_get_calendar","description":"Get the calendar type used for the IntlDateFormatter","tag":"refentry","type":"Function","methodName":"datefmt_get_calendar"},{"id":"intldateformatter.getcalendar","name":"IntlDateFormatter::getCalendar","description":"Get the calendar type used for the IntlDateFormatter","tag":"refentry","type":"Function","methodName":"getCalendar"},{"id":"intldateformatter.getdatetype","name":"datefmt_get_datetype","description":"Get the datetype used for the IntlDateFormatter","tag":"refentry","type":"Function","methodName":"datefmt_get_datetype"},{"id":"intldateformatter.getdatetype","name":"IntlDateFormatter::getDateType","description":"Get the datetype used for the IntlDateFormatter","tag":"refentry","type":"Function","methodName":"getDateType"},{"id":"intldateformatter.geterrorcode","name":"datefmt_get_error_code","description":"Get the error code from last operation","tag":"refentry","type":"Function","methodName":"datefmt_get_error_code"},{"id":"intldateformatter.geterrorcode","name":"IntlDateFormatter::getErrorCode","description":"Get the error code from last operation","tag":"refentry","type":"Function","methodName":"getErrorCode"},{"id":"intldateformatter.geterrormessage","name":"datefmt_get_error_message","description":"Get the error text from the last operation","tag":"refentry","type":"Function","methodName":"datefmt_get_error_message"},{"id":"intldateformatter.geterrormessage","name":"IntlDateFormatter::getErrorMessage","description":"Get the error text from the last operation","tag":"refentry","type":"Function","methodName":"getErrorMessage"},{"id":"intldateformatter.getlocale","name":"datefmt_get_locale","description":"Get the locale used by formatter","tag":"refentry","type":"Function","methodName":"datefmt_get_locale"},{"id":"intldateformatter.getlocale","name":"IntlDateFormatter::getLocale","description":"Get the locale used by formatter","tag":"refentry","type":"Function","methodName":"getLocale"},{"id":"intldateformatter.getpattern","name":"datefmt_get_pattern","description":"Get the pattern used for the IntlDateFormatter","tag":"refentry","type":"Function","methodName":"datefmt_get_pattern"},{"id":"intldateformatter.getpattern","name":"IntlDateFormatter::getPattern","description":"Get the pattern used for the IntlDateFormatter","tag":"refentry","type":"Function","methodName":"getPattern"},{"id":"intldateformatter.gettimetype","name":"datefmt_get_timetype","description":"Get the timetype used for the IntlDateFormatter","tag":"refentry","type":"Function","methodName":"datefmt_get_timetype"},{"id":"intldateformatter.gettimetype","name":"IntlDateFormatter::getTimeType","description":"Get the timetype used for the IntlDateFormatter","tag":"refentry","type":"Function","methodName":"getTimeType"},{"id":"intldateformatter.gettimezoneid","name":"datefmt_get_timezone_id","description":"Get the timezone-id used for the IntlDateFormatter","tag":"refentry","type":"Function","methodName":"datefmt_get_timezone_id"},{"id":"intldateformatter.gettimezoneid","name":"IntlDateFormatter::getTimeZoneId","description":"Get the timezone-id used for the IntlDateFormatter","tag":"refentry","type":"Function","methodName":"getTimeZoneId"},{"id":"intldateformatter.getcalendarobject","name":"datefmt_get_calendar_object","description":"Get copy of formatter\u02bcs calendar object","tag":"refentry","type":"Function","methodName":"datefmt_get_calendar_object"},{"id":"intldateformatter.getcalendarobject","name":"IntlDateFormatter::getCalendarObject","description":"Get copy of formatter\u02bcs calendar object","tag":"refentry","type":"Function","methodName":"getCalendarObject"},{"id":"intldateformatter.gettimezone","name":"datefmt_get_timezone","description":"Get formatter\u02bcs timezone","tag":"refentry","type":"Function","methodName":"datefmt_get_timezone"},{"id":"intldateformatter.gettimezone","name":"IntlDateFormatter::getTimeZone","description":"Get formatter\u02bcs timezone","tag":"refentry","type":"Function","methodName":"getTimeZone"},{"id":"intldateformatter.islenient","name":"datefmt_is_lenient","description":"Get the lenient used for the IntlDateFormatter","tag":"refentry","type":"Function","methodName":"datefmt_is_lenient"},{"id":"intldateformatter.islenient","name":"IntlDateFormatter::isLenient","description":"Get the lenient used for the IntlDateFormatter","tag":"refentry","type":"Function","methodName":"isLenient"},{"id":"intldateformatter.localtime","name":"datefmt_localtime","description":"Parse string to a field-based time value","tag":"refentry","type":"Function","methodName":"datefmt_localtime"},{"id":"intldateformatter.localtime","name":"IntlDateFormatter::localtime","description":"Parse string to a field-based time value","tag":"refentry","type":"Function","methodName":"localtime"},{"id":"intldateformatter.parse","name":"datefmt_parse","description":"Parse string to a timestamp value","tag":"refentry","type":"Function","methodName":"datefmt_parse"},{"id":"intldateformatter.parse","name":"IntlDateFormatter::parse","description":"Parse string to a timestamp value","tag":"refentry","type":"Function","methodName":"parse"},{"id":"intldateformatter.setcalendar","name":"datefmt_set_calendar","description":"Sets the calendar type used by the formatter","tag":"refentry","type":"Function","methodName":"datefmt_set_calendar"},{"id":"intldateformatter.setcalendar","name":"IntlDateFormatter::setCalendar","description":"Sets the calendar type used by the formatter","tag":"refentry","type":"Function","methodName":"setCalendar"},{"id":"intldateformatter.setlenient","name":"datefmt_set_lenient","description":"Set the leniency of the parser","tag":"refentry","type":"Function","methodName":"datefmt_set_lenient"},{"id":"intldateformatter.setlenient","name":"IntlDateFormatter::setLenient","description":"Set the leniency of the parser","tag":"refentry","type":"Function","methodName":"setLenient"},{"id":"intldateformatter.setpattern","name":"datefmt_set_pattern","description":"Set the pattern used for the IntlDateFormatter","tag":"refentry","type":"Function","methodName":"datefmt_set_pattern"},{"id":"intldateformatter.setpattern","name":"IntlDateFormatter::setPattern","description":"Set the pattern used for the IntlDateFormatter","tag":"refentry","type":"Function","methodName":"setPattern"},{"id":"intldateformatter.settimezone","name":"datefmt_set_timezone","description":"Sets formatter\u02bcs timezone","tag":"refentry","type":"Function","methodName":"datefmt_set_timezone"},{"id":"intldateformatter.settimezone","name":"IntlDateFormatter::setTimeZone","description":"Sets formatter\u02bcs timezone","tag":"refentry","type":"Function","methodName":"setTimeZone"},{"id":"class.intldateformatter","name":"IntlDateFormatter","description":"The IntlDateFormatter class","tag":"phpdoc:classref","type":"Class","methodName":"IntlDateFormatter"},{"id":"resourcebundle.count","name":"resourcebundle_count","description":"Get number of elements in the bundle","tag":"refentry","type":"Function","methodName":"resourcebundle_count"},{"id":"resourcebundle.count","name":"ResourceBundle::count","description":"Get number of elements in the bundle","tag":"refentry","type":"Function","methodName":"count"},{"id":"resourcebundle.create","name":"ResourceBundle::__construct","description":"Create a resource bundle","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"resourcebundle.create","name":"resourcebundle_create","description":"Create a resource bundle","tag":"refentry","type":"Function","methodName":"resourcebundle_create"},{"id":"resourcebundle.create","name":"ResourceBundle::create","description":"Create a resource bundle","tag":"refentry","type":"Function","methodName":"create"},{"id":"resourcebundle.get","name":"resourcebundle_get","description":"Get data from the bundle","tag":"refentry","type":"Function","methodName":"resourcebundle_get"},{"id":"resourcebundle.get","name":"ResourceBundle::get","description":"Get data from the bundle","tag":"refentry","type":"Function","methodName":"get"},{"id":"resourcebundle.geterrorcode","name":"resourcebundle_get_error_code","description":"Get bundle's last error code","tag":"refentry","type":"Function","methodName":"resourcebundle_get_error_code"},{"id":"resourcebundle.geterrorcode","name":"ResourceBundle::getErrorCode","description":"Get bundle's last error code","tag":"refentry","type":"Function","methodName":"getErrorCode"},{"id":"resourcebundle.geterrormessage","name":"resourcebundle_get_error_message","description":"Get bundle's last error message","tag":"refentry","type":"Function","methodName":"resourcebundle_get_error_message"},{"id":"resourcebundle.geterrormessage","name":"ResourceBundle::getErrorMessage","description":"Get bundle's last error message","tag":"refentry","type":"Function","methodName":"getErrorMessage"},{"id":"resourcebundle.locales","name":"resourcebundle_locales","description":"Get supported locales","tag":"refentry","type":"Function","methodName":"resourcebundle_locales"},{"id":"resourcebundle.locales","name":"ResourceBundle::getLocales","description":"Get supported locales","tag":"refentry","type":"Function","methodName":"getLocales"},{"id":"class.resourcebundle","name":"ResourceBundle","description":"The ResourceBundle class","tag":"phpdoc:classref","type":"Class","methodName":"ResourceBundle"},{"id":"spoofchecker.areconfusable","name":"Spoofchecker::areConfusable","description":"Checks if given strings can be confused","tag":"refentry","type":"Function","methodName":"areConfusable"},{"id":"spoofchecker.construct","name":"Spoofchecker::__construct","description":"Constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"spoofchecker.issuspicious","name":"Spoofchecker::isSuspicious","description":"Checks if a given text contains any suspicious characters","tag":"refentry","type":"Function","methodName":"isSuspicious"},{"id":"spoofchecker.setallowedlocales","name":"Spoofchecker::setAllowedLocales","description":"Locales to use when running checks","tag":"refentry","type":"Function","methodName":"setAllowedLocales"},{"id":"spoofchecker.setchecks","name":"Spoofchecker::setChecks","description":"Set the checks to run","tag":"refentry","type":"Function","methodName":"setChecks"},{"id":"spoofchecker.setrestrictionlevel","name":"Spoofchecker::setRestrictionLevel","description":"Set the restriction level","tag":"refentry","type":"Function","methodName":"setRestrictionLevel"},{"id":"class.spoofchecker","name":"Spoofchecker","description":"The Spoofchecker class","tag":"phpdoc:classref","type":"Class","methodName":"Spoofchecker"},{"id":"transliterator.construct","name":"Transliterator::__construct","description":"Private constructor to deny instantiation","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"transliterator.create","name":"transliterator_create","description":"Create a transliterator","tag":"refentry","type":"Function","methodName":"transliterator_create"},{"id":"transliterator.create","name":"Transliterator::create","description":"Create a transliterator","tag":"refentry","type":"Function","methodName":"create"},{"id":"transliterator.createfromrules","name":"transliterator_create_from_rules","description":"Create transliterator from rules","tag":"refentry","type":"Function","methodName":"transliterator_create_from_rules"},{"id":"transliterator.createfromrules","name":"Transliterator::createFromRules","description":"Create transliterator from rules","tag":"refentry","type":"Function","methodName":"createFromRules"},{"id":"transliterator.createinverse","name":"transliterator_create_inverse","description":"Create an inverse transliterator","tag":"refentry","type":"Function","methodName":"transliterator_create_inverse"},{"id":"transliterator.createinverse","name":"Transliterator::createInverse","description":"Create an inverse transliterator","tag":"refentry","type":"Function","methodName":"createInverse"},{"id":"transliterator.geterrorcode","name":"transliterator_get_error_code","description":"Get last error code","tag":"refentry","type":"Function","methodName":"transliterator_get_error_code"},{"id":"transliterator.geterrorcode","name":"Transliterator::getErrorCode","description":"Get last error code","tag":"refentry","type":"Function","methodName":"getErrorCode"},{"id":"transliterator.geterrormessage","name":"transliterator_get_error_message","description":"Get last error message","tag":"refentry","type":"Function","methodName":"transliterator_get_error_message"},{"id":"transliterator.geterrormessage","name":"Transliterator::getErrorMessage","description":"Get last error message","tag":"refentry","type":"Function","methodName":"getErrorMessage"},{"id":"transliterator.listids","name":"transliterator_list_ids","description":"Get transliterator IDs","tag":"refentry","type":"Function","methodName":"transliterator_list_ids"},{"id":"transliterator.listids","name":"Transliterator::listIDs","description":"Get transliterator IDs","tag":"refentry","type":"Function","methodName":"listIDs"},{"id":"transliterator.transliterate","name":"transliterator_transliterate","description":"Transliterate a string","tag":"refentry","type":"Function","methodName":"transliterator_transliterate"},{"id":"transliterator.transliterate","name":"Transliterator::transliterate","description":"Transliterate a string","tag":"refentry","type":"Function","methodName":"transliterate"},{"id":"class.transliterator","name":"Transliterator","description":"The Transliterator class","tag":"phpdoc:classref","type":"Class","methodName":"Transliterator"},{"id":"intlbreakiterator.construct","name":"IntlBreakIterator::__construct","description":"Private constructor for disallowing instantiation","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"intlbreakiterator.createcharacterinstance","name":"IntlBreakIterator::createCharacterInstance","description":"Create break iterator for boundaries of combining character sequences","tag":"refentry","type":"Function","methodName":"createCharacterInstance"},{"id":"intlbreakiterator.createcodepointinstance","name":"IntlBreakIterator::createCodePointInstance","description":"Create break iterator for boundaries of code points","tag":"refentry","type":"Function","methodName":"createCodePointInstance"},{"id":"intlbreakiterator.createlineinstance","name":"IntlBreakIterator::createLineInstance","description":"Create break iterator for logically possible line breaks","tag":"refentry","type":"Function","methodName":"createLineInstance"},{"id":"intlbreakiterator.createsentenceinstance","name":"IntlBreakIterator::createSentenceInstance","description":"Create break iterator for sentence breaks","tag":"refentry","type":"Function","methodName":"createSentenceInstance"},{"id":"intlbreakiterator.createtitleinstance","name":"IntlBreakIterator::createTitleInstance","description":"Create break iterator for title-casing breaks","tag":"refentry","type":"Function","methodName":"createTitleInstance"},{"id":"intlbreakiterator.createwordinstance","name":"IntlBreakIterator::createWordInstance","description":"Create break iterator for word breaks","tag":"refentry","type":"Function","methodName":"createWordInstance"},{"id":"intlbreakiterator.current","name":"IntlBreakIterator::current","description":"Get index of current position","tag":"refentry","type":"Function","methodName":"current"},{"id":"intlbreakiterator.first","name":"IntlBreakIterator::first","description":"Set position to the first character in the text","tag":"refentry","type":"Function","methodName":"first"},{"id":"intlbreakiterator.following","name":"IntlBreakIterator::following","description":"Advance the iterator to the first boundary following specified offset","tag":"refentry","type":"Function","methodName":"following"},{"id":"intlbreakiterator.geterrorcode","name":"intl_get_error_code","description":"Get last error code on the object","tag":"refentry","type":"Function","methodName":"intl_get_error_code"},{"id":"intlbreakiterator.geterrorcode","name":"IntlBreakIterator::getErrorCode","description":"Get last error code on the object","tag":"refentry","type":"Function","methodName":"getErrorCode"},{"id":"intlbreakiterator.geterrormessage","name":"intl_get_error_message","description":"Get last error message on the object","tag":"refentry","type":"Function","methodName":"intl_get_error_message"},{"id":"intlbreakiterator.geterrormessage","name":"IntlBreakIterator::getErrorMessage","description":"Get last error message on the object","tag":"refentry","type":"Function","methodName":"getErrorMessage"},{"id":"intlbreakiterator.getlocale","name":"IntlBreakIterator::getLocale","description":"Get the locale associated with the object","tag":"refentry","type":"Function","methodName":"getLocale"},{"id":"intlbreakiterator.getpartsiterator","name":"IntlBreakIterator::getPartsIterator","description":"Create iterator for navigating fragments between boundaries","tag":"refentry","type":"Function","methodName":"getPartsIterator"},{"id":"intlbreakiterator.gettext","name":"IntlBreakIterator::getText","description":"Get the text being scanned","tag":"refentry","type":"Function","methodName":"getText"},{"id":"intlbreakiterator.isboundary","name":"IntlBreakIterator::isBoundary","description":"Tell whether an offset is a boundary\u02bcs offset","tag":"refentry","type":"Function","methodName":"isBoundary"},{"id":"intlbreakiterator.last","name":"IntlBreakIterator::last","description":"Set the iterator position to index beyond the last character","tag":"refentry","type":"Function","methodName":"last"},{"id":"intlbreakiterator.next","name":"IntlBreakIterator::next","description":"Advance the iterator the next boundary","tag":"refentry","type":"Function","methodName":"next"},{"id":"intlbreakiterator.preceding","name":"IntlBreakIterator::preceding","description":"Set the iterator position to the first boundary before an offset","tag":"refentry","type":"Function","methodName":"preceding"},{"id":"intlbreakiterator.previous","name":"IntlBreakIterator::previous","description":"Set the iterator position to the boundary immediately before the current","tag":"refentry","type":"Function","methodName":"previous"},{"id":"intlbreakiterator.settext","name":"IntlBreakIterator::setText","description":"Set the text being scanned","tag":"refentry","type":"Function","methodName":"setText"},{"id":"class.intlbreakiterator","name":"IntlBreakIterator","description":"The IntlBreakIterator class","tag":"phpdoc:classref","type":"Class","methodName":"IntlBreakIterator"},{"id":"intlrulebasedbreakiterator.construct","name":"IntlRuleBasedBreakIterator::__construct","description":"Create iterator from ruleset","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"intlrulebasedbreakiterator.getbinaryrules","name":"IntlRuleBasedBreakIterator::getBinaryRules","description":"Get the binary form of compiled rules","tag":"refentry","type":"Function","methodName":"getBinaryRules"},{"id":"intlrulebasedbreakiterator.getrules","name":"IntlRuleBasedBreakIterator::getRules","description":"Get the rule set used to create this object","tag":"refentry","type":"Function","methodName":"getRules"},{"id":"intlrulebasedbreakiterator.getrulestatus","name":"IntlRuleBasedBreakIterator::getRuleStatus","description":"Get the largest status value from the break rules that determined the current break position","tag":"refentry","type":"Function","methodName":"getRuleStatus"},{"id":"intlrulebasedbreakiterator.getrulestatusvec","name":"IntlRuleBasedBreakIterator::getRuleStatusVec","description":"Get the status values from the break rules that determined the current break position","tag":"refentry","type":"Function","methodName":"getRuleStatusVec"},{"id":"class.intlrulebasedbreakiterator","name":"IntlRuleBasedBreakIterator","description":"The IntlRuleBasedBreakIterator class","tag":"phpdoc:classref","type":"Class","methodName":"IntlRuleBasedBreakIterator"},{"id":"intlcodepointbreakiterator.getlastcodepoint","name":"IntlCodePointBreakIterator::getLastCodePoint","description":"Get last code point passed over after advancing or receding the iterator","tag":"refentry","type":"Function","methodName":"getLastCodePoint"},{"id":"class.intlcodepointbreakiterator","name":"IntlCodePointBreakIterator","description":"The IntlCodePointBreakIterator class","tag":"phpdoc:classref","type":"Class","methodName":"IntlCodePointBreakIterator"},{"id":"intldatepatterngenerator.create","name":"IntlDatePatternGenerator::__construct","description":"Creates a new IntlDatePatternGenerator instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"intldatepatterngenerator.create","name":"IntlDatePatternGenerator::create","description":"Creates a new IntlDatePatternGenerator instance","tag":"refentry","type":"Function","methodName":"create"},{"id":"intldatepatterngenerator.getbestpattern","name":"IntlDatePatternGenerator::getBestPattern","description":"Determines the most suitable date\/time format","tag":"refentry","type":"Function","methodName":"getBestPattern"},{"id":"class.intldatepatterngenerator","name":"IntlDatePatternGenerator","description":"The IntlDatePatternGenerator class","tag":"phpdoc:classref","type":"Class","methodName":"IntlDatePatternGenerator"},{"id":"intlpartsiterator.getbreakiterator","name":"IntlPartsIterator::getBreakIterator","description":"Get IntlBreakIterator backing this parts iterator","tag":"refentry","type":"Function","methodName":"getBreakIterator"},{"id":"class.intlpartsiterator","name":"IntlPartsIterator","description":"The IntlPartsIterator class","tag":"phpdoc:classref","type":"Class","methodName":"IntlPartsIterator"},{"id":"uconverter.construct","name":"UConverter::__construct","description":"Create UConverter object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"uconverter.convert","name":"UConverter::convert","description":"Convert string from one charset to another","tag":"refentry","type":"Function","methodName":"convert"},{"id":"uconverter.fromucallback","name":"UConverter::fromUCallback","description":"Default \"from\" callback function","tag":"refentry","type":"Function","methodName":"fromUCallback"},{"id":"uconverter.getaliases","name":"UConverter::getAliases","description":"Get the aliases of the given name","tag":"refentry","type":"Function","methodName":"getAliases"},{"id":"uconverter.getavailable","name":"UConverter::getAvailable","description":"Get the available canonical converter names","tag":"refentry","type":"Function","methodName":"getAvailable"},{"id":"uconverter.getdestinationencoding","name":"UConverter::getDestinationEncoding","description":"Get the destination encoding","tag":"refentry","type":"Function","methodName":"getDestinationEncoding"},{"id":"uconverter.getdestinationtype","name":"UConverter::getDestinationType","description":"Get the destination converter type","tag":"refentry","type":"Function","methodName":"getDestinationType"},{"id":"uconverter.geterrorcode","name":"intl_get_error_code","description":"Get last error code on the object","tag":"refentry","type":"Function","methodName":"intl_get_error_code"},{"id":"uconverter.geterrorcode","name":"UConverter::getErrorCode","description":"Get last error code on the object","tag":"refentry","type":"Function","methodName":"getErrorCode"},{"id":"uconverter.geterrormessage","name":"UConverter::getErrorMessage","description":"Get last error message on the object","tag":"refentry","type":"Function","methodName":"getErrorMessage"},{"id":"uconverter.getsourceencoding","name":"UConverter::getSourceEncoding","description":"Get the source encoding","tag":"refentry","type":"Function","methodName":"getSourceEncoding"},{"id":"uconverter.getsourcetype","name":"UConverter::getSourceType","description":"Get the source converter type","tag":"refentry","type":"Function","methodName":"getSourceType"},{"id":"uconverter.getstandards","name":"UConverter::getStandards","description":"Get standards associated to converter names","tag":"refentry","type":"Function","methodName":"getStandards"},{"id":"uconverter.getsubstchars","name":"UConverter::getSubstChars","description":"Get substitution chars","tag":"refentry","type":"Function","methodName":"getSubstChars"},{"id":"uconverter.reasontext","name":"UConverter::reasonText","description":"Get string representation of the callback reason","tag":"refentry","type":"Function","methodName":"reasonText"},{"id":"uconverter.setdestinationencoding","name":"UConverter::setDestinationEncoding","description":"Set the destination encoding","tag":"refentry","type":"Function","methodName":"setDestinationEncoding"},{"id":"uconverter.setsourceencoding","name":"UConverter::setSourceEncoding","description":"Set the source encoding","tag":"refentry","type":"Function","methodName":"setSourceEncoding"},{"id":"uconverter.setsubstchars","name":"UConverter::setSubstChars","description":"Set the substitution chars","tag":"refentry","type":"Function","methodName":"setSubstChars"},{"id":"uconverter.toucallback","name":"UConverter::toUCallback","description":"Default \"to\" callback function","tag":"refentry","type":"Function","methodName":"toUCallback"},{"id":"uconverter.transcode","name":"UConverter::transcode","description":"Convert a string from one character encoding to another","tag":"refentry","type":"Function","methodName":"transcode"},{"id":"class.uconverter","name":"UConverter","description":"The UConverter class","tag":"phpdoc:classref","type":"Class","methodName":"UConverter"},{"id":"function.grapheme-extract","name":"grapheme_extract","description":"Function to extract a sequence of default grapheme clusters from a text buffer, which must be encoded in UTF-8","tag":"refentry","type":"Function","methodName":"grapheme_extract"},{"id":"function.grapheme-str-split","name":"grapheme_str_split","description":"Split a string into an array","tag":"refentry","type":"Function","methodName":"grapheme_str_split"},{"id":"function.grapheme-stripos","name":"grapheme_stripos","description":"Find position (in grapheme units) of first occurrence of a case-insensitive string","tag":"refentry","type":"Function","methodName":"grapheme_stripos"},{"id":"function.grapheme-stristr","name":"grapheme_stristr","description":"Returns part of haystack string from the first occurrence of case-insensitive needle to the end of haystack","tag":"refentry","type":"Function","methodName":"grapheme_stristr"},{"id":"function.grapheme-strlen","name":"grapheme_strlen","description":"Get string length in grapheme units","tag":"refentry","type":"Function","methodName":"grapheme_strlen"},{"id":"function.grapheme-strpos","name":"grapheme_strpos","description":"Find position (in grapheme units) of first occurrence of a string","tag":"refentry","type":"Function","methodName":"grapheme_strpos"},{"id":"function.grapheme-strripos","name":"grapheme_strripos","description":"Find position (in grapheme units) of last occurrence of a case-insensitive string","tag":"refentry","type":"Function","methodName":"grapheme_strripos"},{"id":"function.grapheme-strrpos","name":"grapheme_strrpos","description":"Find position (in grapheme units) of last occurrence of a string","tag":"refentry","type":"Function","methodName":"grapheme_strrpos"},{"id":"function.grapheme-strstr","name":"grapheme_strstr","description":"Returns part of haystack string from the first occurrence of needle to the end of haystack","tag":"refentry","type":"Function","methodName":"grapheme_strstr"},{"id":"function.grapheme-substr","name":"grapheme_substr","description":"Return part of a string","tag":"refentry","type":"Function","methodName":"grapheme_substr"},{"id":"ref.intl.grapheme","name":"Grapheme Functions","description":"Internationalization Functions","tag":"reference","type":"Extension","methodName":"Grapheme Functions"},{"id":"function.idn-to-ascii","name":"idn_to_ascii","description":"Convert domain name to IDNA ASCII form","tag":"refentry","type":"Function","methodName":"idn_to_ascii"},{"id":"function.idn-to-utf8","name":"idn_to_utf8","description":"Convert domain name from IDNA ASCII to Unicode","tag":"refentry","type":"Function","methodName":"idn_to_utf8"},{"id":"ref.intl.idn","name":"IDN Functions","description":"Internationalization Functions","tag":"reference","type":"Extension","methodName":"IDN Functions"},{"id":"intlchar.charage","name":"IntlChar::charAge","description":"Get the \"age\" of the code point","tag":"refentry","type":"Function","methodName":"charAge"},{"id":"intlchar.chardigitvalue","name":"IntlChar::charDigitValue","description":"Get the decimal digit value of a decimal digit character","tag":"refentry","type":"Function","methodName":"charDigitValue"},{"id":"intlchar.chardirection","name":"IntlChar::charDirection","description":"Get bidirectional category value for a code point","tag":"refentry","type":"Function","methodName":"charDirection"},{"id":"intlchar.charfromname","name":"IntlChar::charFromName","description":"Find Unicode character by name and return its code point value","tag":"refentry","type":"Function","methodName":"charFromName"},{"id":"intlchar.charmirror","name":"IntlChar::charMirror","description":"Get the \"mirror-image\" character for a code point","tag":"refentry","type":"Function","methodName":"charMirror"},{"id":"intlchar.charname","name":"IntlChar::charName","description":"Retrieve the name of a Unicode character","tag":"refentry","type":"Function","methodName":"charName"},{"id":"intlchar.chartype","name":"IntlChar::charType","description":"Get the general category value for a code point","tag":"refentry","type":"Function","methodName":"charType"},{"id":"intlchar.chr","name":"IntlChar::chr","description":"Return Unicode character by code point value","tag":"refentry","type":"Function","methodName":"chr"},{"id":"intlchar.digit","name":"IntlChar::digit","description":"Get the decimal digit value of a code point for a given radix","tag":"refentry","type":"Function","methodName":"digit"},{"id":"intlchar.enumcharnames","name":"IntlChar::enumCharNames","description":"Enumerate all assigned Unicode characters within a range","tag":"refentry","type":"Function","methodName":"enumCharNames"},{"id":"intlchar.enumchartypes","name":"IntlChar::enumCharTypes","description":"Enumerate all code points with their Unicode general categories","tag":"refentry","type":"Function","methodName":"enumCharTypes"},{"id":"intlchar.foldcase","name":"IntlChar::foldCase","description":"Perform case folding on a code point","tag":"refentry","type":"Function","methodName":"foldCase"},{"id":"intlchar.fordigit","name":"IntlChar::forDigit","description":"Get character representation for a given digit and radix","tag":"refentry","type":"Function","methodName":"forDigit"},{"id":"intlchar.getbidipairedbracket","name":"IntlChar::getBidiPairedBracket","description":"Get the paired bracket character for a code point","tag":"refentry","type":"Function","methodName":"getBidiPairedBracket"},{"id":"intlchar.getblockcode","name":"IntlChar::getBlockCode","description":"Get the Unicode allocation block containing a code point","tag":"refentry","type":"Function","methodName":"getBlockCode"},{"id":"intlchar.getcombiningclass","name":"IntlChar::getCombiningClass","description":"Get the combining class of a code point","tag":"refentry","type":"Function","methodName":"getCombiningClass"},{"id":"intlchar.getfc-nfkc-closure","name":"IntlChar::getFC_NFKC_Closure","description":"Get the FC_NFKC_Closure property for a code point","tag":"refentry","type":"Function","methodName":"getFC_NFKC_Closure"},{"id":"intlchar.getintpropertymaxvalue","name":"IntlChar::getIntPropertyMaxValue","description":"Get the max value for a Unicode property","tag":"refentry","type":"Function","methodName":"getIntPropertyMaxValue"},{"id":"intlchar.getintpropertyminvalue","name":"IntlChar::getIntPropertyMinValue","description":"Get the min value for a Unicode property","tag":"refentry","type":"Function","methodName":"getIntPropertyMinValue"},{"id":"intlchar.getintpropertyvalue","name":"IntlChar::getIntPropertyValue","description":"Get the value for a Unicode property for a code point","tag":"refentry","type":"Function","methodName":"getIntPropertyValue"},{"id":"intlchar.getnumericvalue","name":"IntlChar::getNumericValue","description":"Get the numeric value for a Unicode code point","tag":"refentry","type":"Function","methodName":"getNumericValue"},{"id":"intlchar.getpropertyenum","name":"IntlChar::getPropertyEnum","description":"Get the property constant value for a given property name","tag":"refentry","type":"Function","methodName":"getPropertyEnum"},{"id":"intlchar.getpropertyname","name":"IntlChar::getPropertyName","description":"Get the Unicode name for a property","tag":"refentry","type":"Function","methodName":"getPropertyName"},{"id":"intlchar.getpropertyvalueenum","name":"IntlChar::getPropertyValueEnum","description":"Get the property value for a given value name","tag":"refentry","type":"Function","methodName":"getPropertyValueEnum"},{"id":"intlchar.getpropertyvaluename","name":"IntlChar::getPropertyValueName","description":"Get the Unicode name for a property value","tag":"refentry","type":"Function","methodName":"getPropertyValueName"},{"id":"intlchar.getunicodeversion","name":"IntlChar::getUnicodeVersion","description":"Get the Unicode version","tag":"refentry","type":"Function","methodName":"getUnicodeVersion"},{"id":"intlchar.hasbinaryproperty","name":"IntlChar::hasBinaryProperty","description":"Check a binary Unicode property for a code point","tag":"refentry","type":"Function","methodName":"hasBinaryProperty"},{"id":"intlchar.isalnum","name":"IntlChar::isalnum","description":"Check if code point is an alphanumeric character","tag":"refentry","type":"Function","methodName":"isalnum"},{"id":"intlchar.isalpha","name":"IntlChar::isalpha","description":"Check if code point is a letter character","tag":"refentry","type":"Function","methodName":"isalpha"},{"id":"intlchar.isbase","name":"IntlChar::isbase","description":"Check if code point is a base character","tag":"refentry","type":"Function","methodName":"isbase"},{"id":"intlchar.isblank","name":"IntlChar::isblank","description":"Check if code point is a \"blank\" or \"horizontal space\" character","tag":"refentry","type":"Function","methodName":"isblank"},{"id":"intlchar.iscntrl","name":"IntlChar::iscntrl","description":"Check if code point is a control character","tag":"refentry","type":"Function","methodName":"iscntrl"},{"id":"intlchar.isdefined","name":"IntlChar::isdefined","description":"Check whether the code point is defined","tag":"refentry","type":"Function","methodName":"isdefined"},{"id":"intlchar.isdigit","name":"IntlChar::isdigit","description":"Check if code point is a digit character","tag":"refentry","type":"Function","methodName":"isdigit"},{"id":"intlchar.isgraph","name":"IntlChar::isgraph","description":"Check if code point is a graphic character","tag":"refentry","type":"Function","methodName":"isgraph"},{"id":"intlchar.isidignorable","name":"IntlChar::isIDIgnorable","description":"Check if code point is an ignorable character","tag":"refentry","type":"Function","methodName":"isIDIgnorable"},{"id":"intlchar.isidpart","name":"IntlChar::isIDPart","description":"Check if code point is permissible in an identifier","tag":"refentry","type":"Function","methodName":"isIDPart"},{"id":"intlchar.isidstart","name":"IntlChar::isIDStart","description":"Check if code point is permissible as the first character in an identifier","tag":"refentry","type":"Function","methodName":"isIDStart"},{"id":"intlchar.isisocontrol","name":"IntlChar::isISOControl","description":"Check if code point is an ISO control code","tag":"refentry","type":"Function","methodName":"isISOControl"},{"id":"intlchar.isjavaidpart","name":"IntlChar::isJavaIDPart","description":"Check if code point is permissible in a Java identifier","tag":"refentry","type":"Function","methodName":"isJavaIDPart"},{"id":"intlchar.isjavaidstart","name":"IntlChar::isJavaIDStart","description":"Check if code point is permissible as the first character in a Java identifier","tag":"refentry","type":"Function","methodName":"isJavaIDStart"},{"id":"intlchar.isjavaspacechar","name":"IntlChar::isJavaSpaceChar","description":"Check if code point is a space character according to Java","tag":"refentry","type":"Function","methodName":"isJavaSpaceChar"},{"id":"intlchar.islower","name":"IntlChar::islower","description":"Check if code point is a lowercase letter","tag":"refentry","type":"Function","methodName":"islower"},{"id":"intlchar.ismirrored","name":"IntlChar::isMirrored","description":"Check if code point has the Bidi_Mirrored property","tag":"refentry","type":"Function","methodName":"isMirrored"},{"id":"intlchar.isprint","name":"IntlChar::isprint","description":"Check if code point is a printable character","tag":"refentry","type":"Function","methodName":"isprint"},{"id":"intlchar.ispunct","name":"IntlChar::ispunct","description":"Check if code point is punctuation character","tag":"refentry","type":"Function","methodName":"ispunct"},{"id":"intlchar.isspace","name":"IntlChar::isspace","description":"Check if code point is a space character","tag":"refentry","type":"Function","methodName":"isspace"},{"id":"intlchar.istitle","name":"IntlChar::istitle","description":"Check if code point is a titlecase letter","tag":"refentry","type":"Function","methodName":"istitle"},{"id":"intlchar.isualphabetic","name":"IntlChar::isUAlphabetic","description":"Check if code point has the Alphabetic Unicode property","tag":"refentry","type":"Function","methodName":"isUAlphabetic"},{"id":"intlchar.isulowercase","name":"IntlChar::isULowercase","description":"Check if code point has the Lowercase Unicode property","tag":"refentry","type":"Function","methodName":"isULowercase"},{"id":"intlchar.isupper","name":"IntlChar::isupper","description":"Check if code point has the general category \"Lu\" (uppercase letter)","tag":"refentry","type":"Function","methodName":"isupper"},{"id":"intlchar.isuuppercase","name":"IntlChar::isUUppercase","description":"Check if code point has the Uppercase Unicode property","tag":"refentry","type":"Function","methodName":"isUUppercase"},{"id":"intlchar.isuwhitespace","name":"IntlChar::isUWhiteSpace","description":"Check if code point has the White_Space Unicode property","tag":"refentry","type":"Function","methodName":"isUWhiteSpace"},{"id":"intlchar.iswhitespace","name":"IntlChar::isWhitespace","description":"Check if code point is a whitespace character according to ICU","tag":"refentry","type":"Function","methodName":"isWhitespace"},{"id":"intlchar.isxdigit","name":"IntlChar::isxdigit","description":"Check if code point is a hexadecimal digit","tag":"refentry","type":"Function","methodName":"isxdigit"},{"id":"intlchar.ord","name":"IntlChar::ord","description":"Return Unicode code point value of character","tag":"refentry","type":"Function","methodName":"ord"},{"id":"intlchar.tolower","name":"IntlChar::tolower","description":"Make Unicode character lowercase","tag":"refentry","type":"Function","methodName":"tolower"},{"id":"intlchar.totitle","name":"IntlChar::totitle","description":"Make Unicode character titlecase","tag":"refentry","type":"Function","methodName":"totitle"},{"id":"intlchar.toupper","name":"IntlChar::toupper","description":"Make Unicode character uppercase","tag":"refentry","type":"Function","methodName":"toupper"},{"id":"class.intlchar","name":"IntlChar","description":"IntlChar","tag":"phpdoc:classref","type":"Class","methodName":"IntlChar"},{"id":"class.intlexception","name":"IntlException","description":"Exception class for intl errors","tag":"phpdoc:classref","type":"Class","methodName":"IntlException"},{"id":"intliterator.current","name":"IntlIterator::current","description":"Get the current element","tag":"refentry","type":"Function","methodName":"current"},{"id":"intliterator.key","name":"IntlIterator::key","description":"Get the current key","tag":"refentry","type":"Function","methodName":"key"},{"id":"intliterator.next","name":"IntlIterator::next","description":"Move forward to the next element","tag":"refentry","type":"Function","methodName":"next"},{"id":"intliterator.rewind","name":"IntlIterator::rewind","description":"Rewind the iterator to the first element","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"intliterator.valid","name":"IntlIterator::valid","description":"Check if current position is valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.intliterator","name":"IntlIterator","description":"The IntlIterator class","tag":"phpdoc:classref","type":"Class","methodName":"IntlIterator"},{"id":"function.intl-error-name","name":"intl_error_name","description":"Get symbolic name for a given error code","tag":"refentry","type":"Function","methodName":"intl_error_name"},{"id":"function.intl-get-error-code","name":"intl_get_error_code","description":"Get the last error code","tag":"refentry","type":"Function","methodName":"intl_get_error_code"},{"id":"function.intl-get-error-message","name":"intl_get_error_message","description":"Get description of the last error","tag":"refentry","type":"Function","methodName":"intl_get_error_message"},{"id":"function.intl-is-failure","name":"intl_is_failure","description":"Check whether the given error code indicates failure","tag":"refentry","type":"Function","methodName":"intl_is_failure"},{"id":"ref.intl","name":"intl Functions","description":"Internationalization Functions","tag":"reference","type":"Extension","methodName":"intl Functions"},{"id":"book.intl","name":"intl","description":"Internationalization Functions","tag":"book","type":"Extension","methodName":"intl"},{"id":"intro.mbstring","name":"Introduction","description":"Multibyte String","tag":"preface","type":"General","methodName":"Introduction"},{"id":"mbstring.installation","name":"Installation","description":"Multibyte String","tag":"section","type":"General","methodName":"Installation"},{"id":"mbstring.configuration","name":"Runtime Configuration","description":"Multibyte String","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"mbstring.setup","name":"Installing\/Configuring","description":"Multibyte String","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"mbstring.constants","name":"Predefined Constants","description":"Multibyte String","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"mbstring.encodings","name":"Summaries of supported encodings","description":"Multibyte String","tag":"chapter","type":"General","methodName":"Summaries of supported encodings"},{"id":"mbstring.ja-basic","name":"Basics of Japanese multi-byte encodings","description":"Multibyte String","tag":"chapter","type":"General","methodName":"Basics of Japanese multi-byte encodings"},{"id":"mbstring.http","name":"HTTP Input and Output","description":"Multibyte String","tag":"chapter","type":"General","methodName":"HTTP Input and Output"},{"id":"mbstring.supported-encodings","name":"Supported Character Encodings","description":"Multibyte String","tag":"chapter","type":"General","methodName":"Supported Character Encodings"},{"id":"mbstring.overload","name":"Function Overloading Feature","description":"Multibyte String","tag":"chapter","type":"General","methodName":"Function Overloading Feature"},{"id":"mbstring.php4.req","name":"PHP Character Encoding Requirements","description":"Multibyte String","tag":"chapter","type":"General","methodName":"PHP Character Encoding Requirements"},{"id":"function.mb-check-encoding","name":"mb_check_encoding","description":"Check if strings are valid for the specified encoding","tag":"refentry","type":"Function","methodName":"mb_check_encoding"},{"id":"function.mb-chr","name":"mb_chr","description":"Return character by Unicode code point value","tag":"refentry","type":"Function","methodName":"mb_chr"},{"id":"function.mb-convert-case","name":"mb_convert_case","description":"Perform case folding on a string","tag":"refentry","type":"Function","methodName":"mb_convert_case"},{"id":"function.mb-convert-encoding","name":"mb_convert_encoding","description":"Convert a string from one character encoding to another","tag":"refentry","type":"Function","methodName":"mb_convert_encoding"},{"id":"function.mb-convert-kana","name":"mb_convert_kana","description":"Convert \"kana\" one from another (\"zen-kaku\", \"han-kaku\" and more)","tag":"refentry","type":"Function","methodName":"mb_convert_kana"},{"id":"function.mb-convert-variables","name":"mb_convert_variables","description":"Convert character code in variable(s)","tag":"refentry","type":"Function","methodName":"mb_convert_variables"},{"id":"function.mb-decode-mimeheader","name":"mb_decode_mimeheader","description":"Decode string in MIME header field","tag":"refentry","type":"Function","methodName":"mb_decode_mimeheader"},{"id":"function.mb-decode-numericentity","name":"mb_decode_numericentity","description":"Decode HTML numeric string reference to character","tag":"refentry","type":"Function","methodName":"mb_decode_numericentity"},{"id":"function.mb-detect-encoding","name":"mb_detect_encoding","description":"Detect character encoding","tag":"refentry","type":"Function","methodName":"mb_detect_encoding"},{"id":"function.mb-detect-order","name":"mb_detect_order","description":"Set\/Get character encoding detection order","tag":"refentry","type":"Function","methodName":"mb_detect_order"},{"id":"function.mb-encode-mimeheader","name":"mb_encode_mimeheader","description":"Encode string for MIME header","tag":"refentry","type":"Function","methodName":"mb_encode_mimeheader"},{"id":"function.mb-encode-numericentity","name":"mb_encode_numericentity","description":"Encode character to HTML numeric string reference","tag":"refentry","type":"Function","methodName":"mb_encode_numericentity"},{"id":"function.mb-encoding-aliases","name":"mb_encoding_aliases","description":"Get aliases of a known encoding type","tag":"refentry","type":"Function","methodName":"mb_encoding_aliases"},{"id":"function.mb-ereg","name":"mb_ereg","description":"Regular expression match with multibyte support","tag":"refentry","type":"Function","methodName":"mb_ereg"},{"id":"function.mb-ereg-match","name":"mb_ereg_match","description":"Regular expression match for multibyte string","tag":"refentry","type":"Function","methodName":"mb_ereg_match"},{"id":"function.mb-ereg-replace","name":"mb_ereg_replace","description":"Replace regular expression with multibyte support","tag":"refentry","type":"Function","methodName":"mb_ereg_replace"},{"id":"function.mb-ereg-replace-callback","name":"mb_ereg_replace_callback","description":"Perform a regular expression search and replace with multibyte support using a callback","tag":"refentry","type":"Function","methodName":"mb_ereg_replace_callback"},{"id":"function.mb-ereg-search","name":"mb_ereg_search","description":"Multibyte regular expression match for predefined multibyte string","tag":"refentry","type":"Function","methodName":"mb_ereg_search"},{"id":"function.mb-ereg-search-getpos","name":"mb_ereg_search_getpos","description":"Returns start point for next regular expression match","tag":"refentry","type":"Function","methodName":"mb_ereg_search_getpos"},{"id":"function.mb-ereg-search-getregs","name":"mb_ereg_search_getregs","description":"Retrieve the result from the last multibyte regular expression match","tag":"refentry","type":"Function","methodName":"mb_ereg_search_getregs"},{"id":"function.mb-ereg-search-init","name":"mb_ereg_search_init","description":"Setup string and regular expression for a multibyte regular expression match","tag":"refentry","type":"Function","methodName":"mb_ereg_search_init"},{"id":"function.mb-ereg-search-pos","name":"mb_ereg_search_pos","description":"Returns position and length of a matched part of the multibyte regular expression for a predefined multibyte string","tag":"refentry","type":"Function","methodName":"mb_ereg_search_pos"},{"id":"function.mb-ereg-search-regs","name":"mb_ereg_search_regs","description":"Returns the matched part of a multibyte regular expression","tag":"refentry","type":"Function","methodName":"mb_ereg_search_regs"},{"id":"function.mb-ereg-search-setpos","name":"mb_ereg_search_setpos","description":"Set start point of next regular expression match","tag":"refentry","type":"Function","methodName":"mb_ereg_search_setpos"},{"id":"function.mb-eregi","name":"mb_eregi","description":"Regular expression match ignoring case with multibyte support","tag":"refentry","type":"Function","methodName":"mb_eregi"},{"id":"function.mb-eregi-replace","name":"mb_eregi_replace","description":"Replace regular expression with multibyte support ignoring case","tag":"refentry","type":"Function","methodName":"mb_eregi_replace"},{"id":"function.mb-get-info","name":"mb_get_info","description":"Get internal settings of mbstring","tag":"refentry","type":"Function","methodName":"mb_get_info"},{"id":"function.mb-http-input","name":"mb_http_input","description":"Detect HTTP input character encoding","tag":"refentry","type":"Function","methodName":"mb_http_input"},{"id":"function.mb-http-output","name":"mb_http_output","description":"Set\/Get HTTP output character encoding","tag":"refentry","type":"Function","methodName":"mb_http_output"},{"id":"function.mb-internal-encoding","name":"mb_internal_encoding","description":"Set\/Get internal character encoding","tag":"refentry","type":"Function","methodName":"mb_internal_encoding"},{"id":"function.mb-language","name":"mb_language","description":"Set\/Get current language","tag":"refentry","type":"Function","methodName":"mb_language"},{"id":"function.mb-lcfirst","name":"mb_lcfirst","description":"Make a string's first character lowercase","tag":"refentry","type":"Function","methodName":"mb_lcfirst"},{"id":"function.mb-list-encodings","name":"mb_list_encodings","description":"Returns an array of all supported encodings","tag":"refentry","type":"Function","methodName":"mb_list_encodings"},{"id":"function.mb-ltrim","name":"mb_ltrim","description":"Strip whitespace (or other characters) from the beginning of a string","tag":"refentry","type":"Function","methodName":"mb_ltrim"},{"id":"function.mb-ord","name":"mb_ord","description":"Get Unicode code point of character","tag":"refentry","type":"Function","methodName":"mb_ord"},{"id":"function.mb-output-handler","name":"mb_output_handler","description":"Callback function converts character encoding in output buffer","tag":"refentry","type":"Function","methodName":"mb_output_handler"},{"id":"function.mb-parse-str","name":"mb_parse_str","description":"Parse GET\/POST\/COOKIE data and set global variable","tag":"refentry","type":"Function","methodName":"mb_parse_str"},{"id":"function.mb-preferred-mime-name","name":"mb_preferred_mime_name","description":"Get MIME charset string","tag":"refentry","type":"Function","methodName":"mb_preferred_mime_name"},{"id":"function.mb-regex-encoding","name":"mb_regex_encoding","description":"Set\/Get character encoding for multibyte regex","tag":"refentry","type":"Function","methodName":"mb_regex_encoding"},{"id":"function.mb-regex-set-options","name":"mb_regex_set_options","description":"Set\/Get the default options for mbregex functions","tag":"refentry","type":"Function","methodName":"mb_regex_set_options"},{"id":"function.mb-rtrim","name":"mb_rtrim","description":"Strip whitespace (or other characters) from the end of a string","tag":"refentry","type":"Function","methodName":"mb_rtrim"},{"id":"function.mb-scrub","name":"mb_scrub","description":"Replace ill-formed byte sequences with the substitute character","tag":"refentry","type":"Function","methodName":"mb_scrub"},{"id":"function.mb-send-mail","name":"mb_send_mail","description":"Send encoded mail","tag":"refentry","type":"Function","methodName":"mb_send_mail"},{"id":"function.mb-split","name":"mb_split","description":"Split multibyte string using regular expression","tag":"refentry","type":"Function","methodName":"mb_split"},{"id":"function.mb-str-pad","name":"mb_str_pad","description":"Pad a multibyte string to a certain length with another multibyte string","tag":"refentry","type":"Function","methodName":"mb_str_pad"},{"id":"function.mb-str-split","name":"mb_str_split","description":"Given a multibyte string, return an array of its characters","tag":"refentry","type":"Function","methodName":"mb_str_split"},{"id":"function.mb-strcut","name":"mb_strcut","description":"Get part of string","tag":"refentry","type":"Function","methodName":"mb_strcut"},{"id":"function.mb-strimwidth","name":"mb_strimwidth","description":"Get truncated string with specified width","tag":"refentry","type":"Function","methodName":"mb_strimwidth"},{"id":"function.mb-stripos","name":"mb_stripos","description":"Finds position of first occurrence of a string within another, case insensitive","tag":"refentry","type":"Function","methodName":"mb_stripos"},{"id":"function.mb-stristr","name":"mb_stristr","description":"Finds first occurrence of a string within another, case insensitive","tag":"refentry","type":"Function","methodName":"mb_stristr"},{"id":"function.mb-strlen","name":"mb_strlen","description":"Get string length","tag":"refentry","type":"Function","methodName":"mb_strlen"},{"id":"function.mb-strpos","name":"mb_strpos","description":"Find position of first occurrence of string in a string","tag":"refentry","type":"Function","methodName":"mb_strpos"},{"id":"function.mb-strrchr","name":"mb_strrchr","description":"Finds the last occurrence of a character in a string within another","tag":"refentry","type":"Function","methodName":"mb_strrchr"},{"id":"function.mb-strrichr","name":"mb_strrichr","description":"Finds the last occurrence of a character in a string within another, case insensitive","tag":"refentry","type":"Function","methodName":"mb_strrichr"},{"id":"function.mb-strripos","name":"mb_strripos","description":"Finds position of last occurrence of a string within another, case insensitive","tag":"refentry","type":"Function","methodName":"mb_strripos"},{"id":"function.mb-strrpos","name":"mb_strrpos","description":"Find position of last occurrence of a string in a string","tag":"refentry","type":"Function","methodName":"mb_strrpos"},{"id":"function.mb-strstr","name":"mb_strstr","description":"Finds first occurrence of a string within another","tag":"refentry","type":"Function","methodName":"mb_strstr"},{"id":"function.mb-strtolower","name":"mb_strtolower","description":"Make a string lowercase","tag":"refentry","type":"Function","methodName":"mb_strtolower"},{"id":"function.mb-strtoupper","name":"mb_strtoupper","description":"Make a string uppercase","tag":"refentry","type":"Function","methodName":"mb_strtoupper"},{"id":"function.mb-strwidth","name":"mb_strwidth","description":"Return width of string","tag":"refentry","type":"Function","methodName":"mb_strwidth"},{"id":"function.mb-substitute-character","name":"mb_substitute_character","description":"Set\/Get substitution character","tag":"refentry","type":"Function","methodName":"mb_substitute_character"},{"id":"function.mb-substr","name":"mb_substr","description":"Get part of string","tag":"refentry","type":"Function","methodName":"mb_substr"},{"id":"function.mb-substr-count","name":"mb_substr_count","description":"Count the number of substring occurrences","tag":"refentry","type":"Function","methodName":"mb_substr_count"},{"id":"function.mb-trim","name":"mb_trim","description":"Strip whitespace (or other characters) from the beginning and end of a string","tag":"refentry","type":"Function","methodName":"mb_trim"},{"id":"function.mb-ucfirst","name":"mb_ucfirst","description":"Make a string's first character uppercase","tag":"refentry","type":"Function","methodName":"mb_ucfirst"},{"id":"ref.mbstring","name":"Multibyte String Functions","description":"Multibyte String","tag":"reference","type":"Extension","methodName":"Multibyte String Functions"},{"id":"book.mbstring","name":"Multibyte String","description":"Human Language and Character Encoding Support","tag":"book","type":"Extension","methodName":"Multibyte String"},{"id":"intro.pspell","name":"Introduction","description":"Pspell","tag":"preface","type":"General","methodName":"Introduction"},{"id":"pspell.requirements","name":"Requirements","description":"Pspell","tag":"section","type":"General","methodName":"Requirements"},{"id":"pspell.installation","name":"Installation","description":"Pspell","tag":"section","type":"General","methodName":"Installation"},{"id":"pspell.resources","name":"Resource Types","description":"Pspell","tag":"section","type":"General","methodName":"Resource Types"},{"id":"pspell.setup","name":"Installing\/Configuring","description":"Pspell","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"pspell.constants","name":"Predefined Constants","description":"Pspell","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.pspell-add-to-personal","name":"pspell_add_to_personal","description":"Add the word to a personal wordlist","tag":"refentry","type":"Function","methodName":"pspell_add_to_personal"},{"id":"function.pspell-add-to-session","name":"pspell_add_to_session","description":"Add the word to the wordlist in the current session","tag":"refentry","type":"Function","methodName":"pspell_add_to_session"},{"id":"function.pspell-check","name":"pspell_check","description":"Check a word","tag":"refentry","type":"Function","methodName":"pspell_check"},{"id":"function.pspell-clear-session","name":"pspell_clear_session","description":"Clear the current session","tag":"refentry","type":"Function","methodName":"pspell_clear_session"},{"id":"function.pspell-config-create","name":"pspell_config_create","description":"Create a config used to open a dictionary","tag":"refentry","type":"Function","methodName":"pspell_config_create"},{"id":"function.pspell-config-data-dir","name":"pspell_config_data_dir","description":"Location of language data files","tag":"refentry","type":"Function","methodName":"pspell_config_data_dir"},{"id":"function.pspell-config-dict-dir","name":"pspell_config_dict_dir","description":"Location of the main word list","tag":"refentry","type":"Function","methodName":"pspell_config_dict_dir"},{"id":"function.pspell-config-ignore","name":"pspell_config_ignore","description":"Ignore words less than N characters long","tag":"refentry","type":"Function","methodName":"pspell_config_ignore"},{"id":"function.pspell-config-mode","name":"pspell_config_mode","description":"Change the mode number of suggestions returned","tag":"refentry","type":"Function","methodName":"pspell_config_mode"},{"id":"function.pspell-config-personal","name":"pspell_config_personal","description":"Set a file that contains personal wordlist","tag":"refentry","type":"Function","methodName":"pspell_config_personal"},{"id":"function.pspell-config-repl","name":"pspell_config_repl","description":"Set a file that contains replacement pairs","tag":"refentry","type":"Function","methodName":"pspell_config_repl"},{"id":"function.pspell-config-runtogether","name":"pspell_config_runtogether","description":"Consider run-together words as valid compounds","tag":"refentry","type":"Function","methodName":"pspell_config_runtogether"},{"id":"function.pspell-config-save-repl","name":"pspell_config_save_repl","description":"Determine whether to save a replacement pairs list\n along with the wordlist","tag":"refentry","type":"Function","methodName":"pspell_config_save_repl"},{"id":"function.pspell-new","name":"pspell_new","description":"Load a new dictionary","tag":"refentry","type":"Function","methodName":"pspell_new"},{"id":"function.pspell-new-config","name":"pspell_new_config","description":"Load a new dictionary with settings based on a given config","tag":"refentry","type":"Function","methodName":"pspell_new_config"},{"id":"function.pspell-new-personal","name":"pspell_new_personal","description":"Load a new dictionary with personal wordlist","tag":"refentry","type":"Function","methodName":"pspell_new_personal"},{"id":"function.pspell-save-wordlist","name":"pspell_save_wordlist","description":"Save the personal wordlist to a file","tag":"refentry","type":"Function","methodName":"pspell_save_wordlist"},{"id":"function.pspell-store-replacement","name":"pspell_store_replacement","description":"Store a replacement pair for a word","tag":"refentry","type":"Function","methodName":"pspell_store_replacement"},{"id":"function.pspell-suggest","name":"pspell_suggest","description":"Suggest spellings of a word","tag":"refentry","type":"Function","methodName":"pspell_suggest"},{"id":"ref.pspell","name":"Pspell Functions","description":"Pspell","tag":"reference","type":"Extension","methodName":"Pspell Functions"},{"id":"class.pspell-dictionary","name":"PSpell\\Dictionary","description":"The PSpell\\Dictionary class","tag":"phpdoc:classref","type":"Class","methodName":"PSpell\\Dictionary"},{"id":"class.pspell-config","name":"PSpell\\Config","description":"The PSpell\\Config class","tag":"phpdoc:classref","type":"Class","methodName":"PSpell\\Config"},{"id":"book.pspell","name":"Pspell","description":"Human Language and Character Encoding Support","tag":"book","type":"Extension","methodName":"Pspell"},{"id":"intro.recode","name":"Introduction","description":"GNU Recode","tag":"preface","type":"General","methodName":"Introduction"},{"id":"recode.requirements","name":"Requirements","description":"GNU Recode","tag":"section","type":"General","methodName":"Requirements"},{"id":"recode.installation","name":"Installation","description":"GNU Recode","tag":"section","type":"General","methodName":"Installation"},{"id":"recode.setup","name":"Installing\/Configuring","description":"GNU Recode","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.recode","name":"recode","description":"Alias of recode_string","tag":"refentry","type":"Function","methodName":"recode"},{"id":"function.recode-file","name":"recode_file","description":"Recode from file to file according to recode request","tag":"refentry","type":"Function","methodName":"recode_file"},{"id":"function.recode-string","name":"recode_string","description":"Recode a string according to a recode request","tag":"refentry","type":"Function","methodName":"recode_string"},{"id":"ref.recode","name":"Recode Functions","description":"GNU Recode","tag":"reference","type":"Extension","methodName":"Recode Functions"},{"id":"book.recode","name":"Recode","description":"GNU Recode","tag":"book","type":"Extension","methodName":"Recode"},{"id":"refs.international","name":"Human Language and Character Encoding Support","description":"Function Reference","tag":"set","type":"Extension","methodName":"Human Language and Character Encoding Support"},{"id":"intro.exif","name":"Introduction","description":"Exchangeable image information","tag":"preface","type":"General","methodName":"Introduction"},{"id":"exif.requirements","name":"Requirements","description":"Exchangeable image information","tag":"section","type":"General","methodName":"Requirements"},{"id":"exif.installation","name":"Installation","description":"Exchangeable image information","tag":"section","type":"General","methodName":"Installation"},{"id":"exif.configuration","name":"Runtime Configuration","description":"Exchangeable image information","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"exif.setup","name":"Installing\/Configuring","description":"Exchangeable image information","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"exif.constants","name":"Predefined Constants","description":"Exchangeable image information","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.exif-imagetype","name":"exif_imagetype","description":"Determine the type of an image","tag":"refentry","type":"Function","methodName":"exif_imagetype"},{"id":"function.exif-read-data","name":"exif_read_data","description":"Reads the EXIF headers from an image file","tag":"refentry","type":"Function","methodName":"exif_read_data"},{"id":"function.exif-tagname","name":"exif_tagname","description":"Get the header name for an index","tag":"refentry","type":"Function","methodName":"exif_tagname"},{"id":"function.exif-thumbnail","name":"exif_thumbnail","description":"Retrieve the embedded thumbnail of an image","tag":"refentry","type":"Function","methodName":"exif_thumbnail"},{"id":"function.read-exif-data","name":"read_exif_data","description":"Alias of exif_read_data","tag":"refentry","type":"Function","methodName":"read_exif_data"},{"id":"ref.exif","name":"Exif Functions","description":"Exchangeable image information","tag":"reference","type":"Extension","methodName":"Exif Functions"},{"id":"book.exif","name":"Exif","description":"Exchangeable image information","tag":"book","type":"Extension","methodName":"Exif"},{"id":"intro.image","name":"Introduction","description":"Image Processing and GD","tag":"preface","type":"General","methodName":"Introduction"},{"id":"image.requirements","name":"Requirements","description":"Image Processing and GD","tag":"section","type":"General","methodName":"Requirements"},{"id":"image.installation","name":"Installation","description":"Image Processing and GD","tag":"section","type":"General","methodName":"Installation"},{"id":"image.configuration","name":"Runtime Configuration","description":"Image Processing and GD","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"image.resources","name":"Resource Types","description":"Image Processing and GD","tag":"section","type":"General","methodName":"Resource Types"},{"id":"image.setup","name":"Installing\/Configuring","description":"Image Processing and GD","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"image.constants","name":"Predefined Constants","description":"Image Processing and GD","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"image.examples-png","name":"PNG creation with PHP","description":"Image Processing and GD","tag":"section","type":"General","methodName":"PNG creation with PHP"},{"id":"image.examples-watermark","name":"Adding watermarks to images using alpha channels","description":"Image Processing and GD","tag":"section","type":"General","methodName":"Adding watermarks to images using alpha channels"},{"id":"image.examples.merged-watermark","name":"Using imagecopymerge to create a translucent watermark","description":"Image Processing and GD","tag":"section","type":"General","methodName":"Using imagecopymerge to create a translucent watermark"},{"id":"image.examples","name":"Examples","description":"Image Processing and GD","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.gd-info","name":"gd_info","description":"Retrieve information about the currently installed GD library","tag":"refentry","type":"Function","methodName":"gd_info"},{"id":"function.getimagesize","name":"getimagesize","description":"Get the size of an image","tag":"refentry","type":"Function","methodName":"getimagesize"},{"id":"function.getimagesizefromstring","name":"getimagesizefromstring","description":"Get the size of an image from a string","tag":"refentry","type":"Function","methodName":"getimagesizefromstring"},{"id":"function.image-type-to-extension","name":"image_type_to_extension","description":"Get file extension for image type","tag":"refentry","type":"Function","methodName":"image_type_to_extension"},{"id":"function.image-type-to-mime-type","name":"image_type_to_mime_type","description":"Get Mime-Type for image-type returned by getimagesize,\n exif_read_data, exif_thumbnail, exif_imagetype","tag":"refentry","type":"Function","methodName":"image_type_to_mime_type"},{"id":"function.image2wbmp","name":"image2wbmp","description":"Output image to browser or file","tag":"refentry","type":"Function","methodName":"image2wbmp"},{"id":"function.imageaffine","name":"imageaffine","description":"Return an image containing the affine transformed src image, using an optional clipping area","tag":"refentry","type":"Function","methodName":"imageaffine"},{"id":"function.imageaffinematrixconcat","name":"imageaffinematrixconcat","description":"Concatenate two affine transformation matrices","tag":"refentry","type":"Function","methodName":"imageaffinematrixconcat"},{"id":"function.imageaffinematrixget","name":"imageaffinematrixget","description":"Get an affine transformation matrix","tag":"refentry","type":"Function","methodName":"imageaffinematrixget"},{"id":"function.imagealphablending","name":"imagealphablending","description":"Set the blending mode for an image","tag":"refentry","type":"Function","methodName":"imagealphablending"},{"id":"function.imageantialias","name":"imageantialias","description":"Should antialias functions be used or not","tag":"refentry","type":"Function","methodName":"imageantialias"},{"id":"function.imagearc","name":"imagearc","description":"Draws an arc","tag":"refentry","type":"Function","methodName":"imagearc"},{"id":"function.imageavif","name":"imageavif","description":"Output image to browser or file","tag":"refentry","type":"Function","methodName":"imageavif"},{"id":"function.imagebmp","name":"imagebmp","description":"Output a BMP image to browser or file","tag":"refentry","type":"Function","methodName":"imagebmp"},{"id":"function.imagechar","name":"imagechar","description":"Draw a character horizontally","tag":"refentry","type":"Function","methodName":"imagechar"},{"id":"function.imagecharup","name":"imagecharup","description":"Draw a character vertically","tag":"refentry","type":"Function","methodName":"imagecharup"},{"id":"function.imagecolorallocate","name":"imagecolorallocate","description":"Allocate a color for an image","tag":"refentry","type":"Function","methodName":"imagecolorallocate"},{"id":"function.imagecolorallocatealpha","name":"imagecolorallocatealpha","description":"Allocate a color for an image","tag":"refentry","type":"Function","methodName":"imagecolorallocatealpha"},{"id":"function.imagecolorat","name":"imagecolorat","description":"Get the index of the color of a pixel","tag":"refentry","type":"Function","methodName":"imagecolorat"},{"id":"function.imagecolorclosest","name":"imagecolorclosest","description":"Get the index of the closest color to the specified color","tag":"refentry","type":"Function","methodName":"imagecolorclosest"},{"id":"function.imagecolorclosestalpha","name":"imagecolorclosestalpha","description":"Get the index of the closest color to the specified color + alpha","tag":"refentry","type":"Function","methodName":"imagecolorclosestalpha"},{"id":"function.imagecolorclosesthwb","name":"imagecolorclosesthwb","description":"Get the index of the color which has the hue, white and blackness","tag":"refentry","type":"Function","methodName":"imagecolorclosesthwb"},{"id":"function.imagecolordeallocate","name":"imagecolordeallocate","description":"De-allocate a color for an image","tag":"refentry","type":"Function","methodName":"imagecolordeallocate"},{"id":"function.imagecolorexact","name":"imagecolorexact","description":"Get the index of the specified color","tag":"refentry","type":"Function","methodName":"imagecolorexact"},{"id":"function.imagecolorexactalpha","name":"imagecolorexactalpha","description":"Get the index of the specified color + alpha","tag":"refentry","type":"Function","methodName":"imagecolorexactalpha"},{"id":"function.imagecolormatch","name":"imagecolormatch","description":"Makes the colors of the palette version of an image more closely match the true color version","tag":"refentry","type":"Function","methodName":"imagecolormatch"},{"id":"function.imagecolorresolve","name":"imagecolorresolve","description":"Get the index of the specified color or its closest possible alternative","tag":"refentry","type":"Function","methodName":"imagecolorresolve"},{"id":"function.imagecolorresolvealpha","name":"imagecolorresolvealpha","description":"Get the index of the specified color + alpha or its closest possible alternative","tag":"refentry","type":"Function","methodName":"imagecolorresolvealpha"},{"id":"function.imagecolorset","name":"imagecolorset","description":"Set the color for the specified palette index","tag":"refentry","type":"Function","methodName":"imagecolorset"},{"id":"function.imagecolorsforindex","name":"imagecolorsforindex","description":"Get the colors for an index","tag":"refentry","type":"Function","methodName":"imagecolorsforindex"},{"id":"function.imagecolorstotal","name":"imagecolorstotal","description":"Find out the number of colors in an image's palette","tag":"refentry","type":"Function","methodName":"imagecolorstotal"},{"id":"function.imagecolortransparent","name":"imagecolortransparent","description":"Define a color as transparent","tag":"refentry","type":"Function","methodName":"imagecolortransparent"},{"id":"function.imageconvolution","name":"imageconvolution","description":"Apply a 3x3 convolution matrix, using coefficient and offset","tag":"refentry","type":"Function","methodName":"imageconvolution"},{"id":"function.imagecopy","name":"imagecopy","description":"Copy part of an image","tag":"refentry","type":"Function","methodName":"imagecopy"},{"id":"function.imagecopymerge","name":"imagecopymerge","description":"Copy and merge part of an image","tag":"refentry","type":"Function","methodName":"imagecopymerge"},{"id":"function.imagecopymergegray","name":"imagecopymergegray","description":"Copy and merge part of an image with gray scale","tag":"refentry","type":"Function","methodName":"imagecopymergegray"},{"id":"function.imagecopyresampled","name":"imagecopyresampled","description":"Copy and resize part of an image with resampling","tag":"refentry","type":"Function","methodName":"imagecopyresampled"},{"id":"function.imagecopyresized","name":"imagecopyresized","description":"Copy and resize part of an image","tag":"refentry","type":"Function","methodName":"imagecopyresized"},{"id":"function.imagecreate","name":"imagecreate","description":"Create a new palette based image","tag":"refentry","type":"Function","methodName":"imagecreate"},{"id":"function.imagecreatefromavif","name":"imagecreatefromavif","description":"Create a new image from file or URL","tag":"refentry","type":"Function","methodName":"imagecreatefromavif"},{"id":"function.imagecreatefrombmp","name":"imagecreatefrombmp","description":"Create a new image from file or URL","tag":"refentry","type":"Function","methodName":"imagecreatefrombmp"},{"id":"function.imagecreatefromgd","name":"imagecreatefromgd","description":"Create a new image from GD file or URL","tag":"refentry","type":"Function","methodName":"imagecreatefromgd"},{"id":"function.imagecreatefromgd2","name":"imagecreatefromgd2","description":"Create a new image from GD2 file or URL","tag":"refentry","type":"Function","methodName":"imagecreatefromgd2"},{"id":"function.imagecreatefromgd2part","name":"imagecreatefromgd2part","description":"Create a new image from a given part of GD2 file or URL","tag":"refentry","type":"Function","methodName":"imagecreatefromgd2part"},{"id":"function.imagecreatefromgif","name":"imagecreatefromgif","description":"Create a new image from file or URL","tag":"refentry","type":"Function","methodName":"imagecreatefromgif"},{"id":"function.imagecreatefromjpeg","name":"imagecreatefromjpeg","description":"Create a new image from file or URL","tag":"refentry","type":"Function","methodName":"imagecreatefromjpeg"},{"id":"function.imagecreatefrompng","name":"imagecreatefrompng","description":"Create a new image from file or URL","tag":"refentry","type":"Function","methodName":"imagecreatefrompng"},{"id":"function.imagecreatefromstring","name":"imagecreatefromstring","description":"Create a new image from the image stream in the string","tag":"refentry","type":"Function","methodName":"imagecreatefromstring"},{"id":"function.imagecreatefromtga","name":"imagecreatefromtga","description":"Create a new image from file or URL","tag":"refentry","type":"Function","methodName":"imagecreatefromtga"},{"id":"function.imagecreatefromwbmp","name":"imagecreatefromwbmp","description":"Create a new image from file or URL","tag":"refentry","type":"Function","methodName":"imagecreatefromwbmp"},{"id":"function.imagecreatefromwebp","name":"imagecreatefromwebp","description":"Create a new image from file or URL","tag":"refentry","type":"Function","methodName":"imagecreatefromwebp"},{"id":"function.imagecreatefromxbm","name":"imagecreatefromxbm","description":"Create a new image from file or URL","tag":"refentry","type":"Function","methodName":"imagecreatefromxbm"},{"id":"function.imagecreatefromxpm","name":"imagecreatefromxpm","description":"Create a new image from file or URL","tag":"refentry","type":"Function","methodName":"imagecreatefromxpm"},{"id":"function.imagecreatetruecolor","name":"imagecreatetruecolor","description":"Create a new true color image","tag":"refentry","type":"Function","methodName":"imagecreatetruecolor"},{"id":"function.imagecrop","name":"imagecrop","description":"Crop an image to the given rectangle","tag":"refentry","type":"Function","methodName":"imagecrop"},{"id":"function.imagecropauto","name":"imagecropauto","description":"Crop an image automatically using one of the available modes","tag":"refentry","type":"Function","methodName":"imagecropauto"},{"id":"function.imagedashedline","name":"imagedashedline","description":"Draw a dashed line","tag":"refentry","type":"Function","methodName":"imagedashedline"},{"id":"function.imagedestroy","name":"imagedestroy","description":"Destroy an image","tag":"refentry","type":"Function","methodName":"imagedestroy"},{"id":"function.imageellipse","name":"imageellipse","description":"Draw an ellipse","tag":"refentry","type":"Function","methodName":"imageellipse"},{"id":"function.imagefill","name":"imagefill","description":"Flood fill","tag":"refentry","type":"Function","methodName":"imagefill"},{"id":"function.imagefilledarc","name":"imagefilledarc","description":"Draw a partial arc and fill it","tag":"refentry","type":"Function","methodName":"imagefilledarc"},{"id":"function.imagefilledellipse","name":"imagefilledellipse","description":"Draw a filled ellipse","tag":"refentry","type":"Function","methodName":"imagefilledellipse"},{"id":"function.imagefilledpolygon","name":"imagefilledpolygon","description":"Draw a filled polygon","tag":"refentry","type":"Function","methodName":"imagefilledpolygon"},{"id":"function.imagefilledrectangle","name":"imagefilledrectangle","description":"Draw a filled rectangle","tag":"refentry","type":"Function","methodName":"imagefilledrectangle"},{"id":"function.imagefilltoborder","name":"imagefilltoborder","description":"Flood fill to specific color","tag":"refentry","type":"Function","methodName":"imagefilltoborder"},{"id":"function.imagefilter","name":"imagefilter","description":"Applies a filter to an image","tag":"refentry","type":"Function","methodName":"imagefilter"},{"id":"function.imageflip","name":"imageflip","description":"Flips an image using a given mode","tag":"refentry","type":"Function","methodName":"imageflip"},{"id":"function.imagefontheight","name":"imagefontheight","description":"Get font height","tag":"refentry","type":"Function","methodName":"imagefontheight"},{"id":"function.imagefontwidth","name":"imagefontwidth","description":"Get font width","tag":"refentry","type":"Function","methodName":"imagefontwidth"},{"id":"function.imageftbbox","name":"imageftbbox","description":"Give the bounding box of a text using fonts via freetype2","tag":"refentry","type":"Function","methodName":"imageftbbox"},{"id":"function.imagefttext","name":"imagefttext","description":"Write text to the image using fonts using FreeType 2","tag":"refentry","type":"Function","methodName":"imagefttext"},{"id":"function.imagegammacorrect","name":"imagegammacorrect","description":"Apply a gamma correction to a GD image","tag":"refentry","type":"Function","methodName":"imagegammacorrect"},{"id":"function.imagegd","name":"imagegd","description":"Output GD image to browser or file","tag":"refentry","type":"Function","methodName":"imagegd"},{"id":"function.imagegd2","name":"imagegd2","description":"Output GD2 image to browser or file","tag":"refentry","type":"Function","methodName":"imagegd2"},{"id":"function.imagegetclip","name":"imagegetclip","description":"Get the clipping rectangle","tag":"refentry","type":"Function","methodName":"imagegetclip"},{"id":"function.imagegetinterpolation","name":"imagegetinterpolation","description":"Get the interpolation method","tag":"refentry","type":"Function","methodName":"imagegetinterpolation"},{"id":"function.imagegif","name":"imagegif","description":"Output image to browser or file","tag":"refentry","type":"Function","methodName":"imagegif"},{"id":"function.imagegrabscreen","name":"imagegrabscreen","description":"Captures the whole screen","tag":"refentry","type":"Function","methodName":"imagegrabscreen"},{"id":"function.imagegrabwindow","name":"imagegrabwindow","description":"Captures a window","tag":"refentry","type":"Function","methodName":"imagegrabwindow"},{"id":"function.imageinterlace","name":"imageinterlace","description":"Enable or disable interlace","tag":"refentry","type":"Function","methodName":"imageinterlace"},{"id":"function.imageistruecolor","name":"imageistruecolor","description":"Finds whether an image is a truecolor image","tag":"refentry","type":"Function","methodName":"imageistruecolor"},{"id":"function.imagejpeg","name":"imagejpeg","description":"Output image to browser or file","tag":"refentry","type":"Function","methodName":"imagejpeg"},{"id":"function.imagelayereffect","name":"imagelayereffect","description":"Set the alpha blending flag to use layering effects","tag":"refentry","type":"Function","methodName":"imagelayereffect"},{"id":"function.imageline","name":"imageline","description":"Draw a line","tag":"refentry","type":"Function","methodName":"imageline"},{"id":"function.imageloadfont","name":"imageloadfont","description":"Load a new font","tag":"refentry","type":"Function","methodName":"imageloadfont"},{"id":"function.imageopenpolygon","name":"imageopenpolygon","description":"Draws an open polygon","tag":"refentry","type":"Function","methodName":"imageopenpolygon"},{"id":"function.imagepalettecopy","name":"imagepalettecopy","description":"Copy the palette from one image to another","tag":"refentry","type":"Function","methodName":"imagepalettecopy"},{"id":"function.imagepalettetotruecolor","name":"imagepalettetotruecolor","description":"Converts a palette based image to true color","tag":"refentry","type":"Function","methodName":"imagepalettetotruecolor"},{"id":"function.imagepng","name":"imagepng","description":"Output a PNG image to either the browser or a file","tag":"refentry","type":"Function","methodName":"imagepng"},{"id":"function.imagepolygon","name":"imagepolygon","description":"Draws a polygon","tag":"refentry","type":"Function","methodName":"imagepolygon"},{"id":"function.imagerectangle","name":"imagerectangle","description":"Draw a rectangle","tag":"refentry","type":"Function","methodName":"imagerectangle"},{"id":"function.imageresolution","name":"imageresolution","description":"Get or set the resolution of the image","tag":"refentry","type":"Function","methodName":"imageresolution"},{"id":"function.imagerotate","name":"imagerotate","description":"Rotate an image with a given angle","tag":"refentry","type":"Function","methodName":"imagerotate"},{"id":"function.imagesavealpha","name":"imagesavealpha","description":"Whether to retain full alpha channel information when saving images","tag":"refentry","type":"Function","methodName":"imagesavealpha"},{"id":"function.imagescale","name":"imagescale","description":"Scale an image using the given new width and height","tag":"refentry","type":"Function","methodName":"imagescale"},{"id":"function.imagesetbrush","name":"imagesetbrush","description":"Set the brush image for line drawing","tag":"refentry","type":"Function","methodName":"imagesetbrush"},{"id":"function.imagesetclip","name":"imagesetclip","description":"Set the clipping rectangle","tag":"refentry","type":"Function","methodName":"imagesetclip"},{"id":"function.imagesetinterpolation","name":"imagesetinterpolation","description":"Set the interpolation method","tag":"refentry","type":"Function","methodName":"imagesetinterpolation"},{"id":"function.imagesetpixel","name":"imagesetpixel","description":"Set a single pixel","tag":"refentry","type":"Function","methodName":"imagesetpixel"},{"id":"function.imagesetstyle","name":"imagesetstyle","description":"Set the style for line drawing","tag":"refentry","type":"Function","methodName":"imagesetstyle"},{"id":"function.imagesetthickness","name":"imagesetthickness","description":"Set the thickness for line drawing","tag":"refentry","type":"Function","methodName":"imagesetthickness"},{"id":"function.imagesettile","name":"imagesettile","description":"Set the tile image for filling","tag":"refentry","type":"Function","methodName":"imagesettile"},{"id":"function.imagestring","name":"imagestring","description":"Draw a string horizontally","tag":"refentry","type":"Function","methodName":"imagestring"},{"id":"function.imagestringup","name":"imagestringup","description":"Draw a string vertically","tag":"refentry","type":"Function","methodName":"imagestringup"},{"id":"function.imagesx","name":"imagesx","description":"Get image width","tag":"refentry","type":"Function","methodName":"imagesx"},{"id":"function.imagesy","name":"imagesy","description":"Get image height","tag":"refentry","type":"Function","methodName":"imagesy"},{"id":"function.imagetruecolortopalette","name":"imagetruecolortopalette","description":"Convert a true color image to a palette image","tag":"refentry","type":"Function","methodName":"imagetruecolortopalette"},{"id":"function.imagettfbbox","name":"imagettfbbox","description":"Give the bounding box of a text using TrueType fonts","tag":"refentry","type":"Function","methodName":"imagettfbbox"},{"id":"function.imagettftext","name":"imagettftext","description":"Write text to the image using TrueType fonts","tag":"refentry","type":"Function","methodName":"imagettftext"},{"id":"function.imagetypes","name":"imagetypes","description":"Return the image types supported by this PHP build","tag":"refentry","type":"Function","methodName":"imagetypes"},{"id":"function.imagewbmp","name":"imagewbmp","description":"Output image to browser or file","tag":"refentry","type":"Function","methodName":"imagewbmp"},{"id":"function.imagewebp","name":"imagewebp","description":"Output a WebP image to browser or file","tag":"refentry","type":"Function","methodName":"imagewebp"},{"id":"function.imagexbm","name":"imagexbm","description":"Output an XBM image to browser or file","tag":"refentry","type":"Function","methodName":"imagexbm"},{"id":"function.iptcembed","name":"iptcembed","description":"Embeds binary IPTC data into a JPEG image","tag":"refentry","type":"Function","methodName":"iptcembed"},{"id":"function.iptcparse","name":"iptcparse","description":"Parse a binary IPTC block into single tags","tag":"refentry","type":"Function","methodName":"iptcparse"},{"id":"function.jpeg2wbmp","name":"jpeg2wbmp","description":"Convert JPEG image file to WBMP image file","tag":"refentry","type":"Function","methodName":"jpeg2wbmp"},{"id":"function.png2wbmp","name":"png2wbmp","description":"Convert PNG image file to WBMP image file","tag":"refentry","type":"Function","methodName":"png2wbmp"},{"id":"ref.image","name":"GD and Image Functions","description":"Image Processing and GD","tag":"reference","type":"Extension","methodName":"GD and Image Functions"},{"id":"class.gdimage","name":"GdImage","description":"The GdImage class","tag":"phpdoc:classref","type":"Class","methodName":"GdImage"},{"id":"class.gdfont","name":"GdFont","description":"The GdFont class","tag":"phpdoc:classref","type":"Class","methodName":"GdFont"},{"id":"book.image","name":"GD","description":"Image Processing and GD","tag":"book","type":"Extension","methodName":"GD"},{"id":"intro.gmagick","name":"Introduction","description":"Gmagick","tag":"preface","type":"General","methodName":"Introduction"},{"id":"gmagick.requirements","name":"Requirements","description":"Gmagick","tag":"section","type":"General","methodName":"Requirements"},{"id":"gmagick.installation","name":"Installation","description":"Gmagick","tag":"section","type":"General","methodName":"Installation"},{"id":"gmagick.setup","name":"Installing\/Configuring","description":"Gmagick","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"gmagick.constants","name":"Predefined Constants","description":"Gmagick","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"gmagick.examples","name":"Examples","description":"Gmagick","tag":"chapter","type":"General","methodName":"Examples"},{"id":"gmagick.addimage","name":"Gmagick::addimage","description":"Adds new image to Gmagick object image list","tag":"refentry","type":"Function","methodName":"addimage"},{"id":"gmagick.addnoiseimage","name":"Gmagick::addnoiseimage","description":"Adds random noise to the image","tag":"refentry","type":"Function","methodName":"addnoiseimage"},{"id":"gmagick.annotateimage","name":"Gmagick::annotateimage","description":"Annotates an image with text","tag":"refentry","type":"Function","methodName":"annotateimage"},{"id":"gmagick.blurimage","name":"Gmagick::blurimage","description":"Adds blur filter to image","tag":"refentry","type":"Function","methodName":"blurimage"},{"id":"gmagick.borderimage","name":"Gmagick::borderimage","description":"Surrounds the image with a border","tag":"refentry","type":"Function","methodName":"borderimage"},{"id":"gmagick.charcoalimage","name":"Gmagick::charcoalimage","description":"Simulates a charcoal drawing","tag":"refentry","type":"Function","methodName":"charcoalimage"},{"id":"gmagick.chopimage","name":"Gmagick::chopimage","description":"Removes a region of an image and trims","tag":"refentry","type":"Function","methodName":"chopimage"},{"id":"gmagick.clear","name":"Gmagick::clear","description":"Clears all resources associated to Gmagick object","tag":"refentry","type":"Function","methodName":"clear"},{"id":"gmagick.commentimage","name":"Gmagick::commentimage","description":"Adds a comment to your image","tag":"refentry","type":"Function","methodName":"commentimage"},{"id":"gmagick.compositeimage","name":"Gmagick::compositeimage","description":"Composite one image onto another","tag":"refentry","type":"Function","methodName":"compositeimage"},{"id":"gmagick.construct","name":"Gmagick::__construct","description":"The Gmagick constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"gmagick.cropimage","name":"Gmagick::cropimage","description":"Extracts a region of the image","tag":"refentry","type":"Function","methodName":"cropimage"},{"id":"gmagick.cropthumbnailimage","name":"Gmagick::cropthumbnailimage","description":"Creates a crop thumbnail","tag":"refentry","type":"Function","methodName":"cropthumbnailimage"},{"id":"gmagick.current","name":"Gmagick::current","description":"The current purpose","tag":"refentry","type":"Function","methodName":"current"},{"id":"gmagick.cyclecolormapimage","name":"Gmagick::cyclecolormapimage","description":"Displaces an image's colormap","tag":"refentry","type":"Function","methodName":"cyclecolormapimage"},{"id":"gmagick.deconstructimages","name":"Gmagick::deconstructimages","description":"Returns certain pixel differences between images","tag":"refentry","type":"Function","methodName":"deconstructimages"},{"id":"gmagick.despeckleimage","name":"Gmagick::despeckleimage","description":"The despeckleimage purpose","tag":"refentry","type":"Function","methodName":"despeckleimage"},{"id":"gmagick.destroy","name":"Gmagick::destroy","description":"The destroy purpose","tag":"refentry","type":"Function","methodName":"destroy"},{"id":"gmagick.drawimage","name":"Gmagick::drawimage","description":"Renders the GmagickDraw object on the current image","tag":"refentry","type":"Function","methodName":"drawimage"},{"id":"gmagick.edgeimage","name":"Gmagick::edgeimage","description":"Enhance edges within the image","tag":"refentry","type":"Function","methodName":"edgeimage"},{"id":"gmagick.embossimage","name":"Gmagick::embossimage","description":"Returns a grayscale image with a three-dimensional effect","tag":"refentry","type":"Function","methodName":"embossimage"},{"id":"gmagick.enhanceimage","name":"Gmagick::enhanceimage","description":"Improves the quality of a noisy image","tag":"refentry","type":"Function","methodName":"enhanceimage"},{"id":"gmagick.equalizeimage","name":"Gmagick::equalizeimage","description":"Equalizes the image histogram","tag":"refentry","type":"Function","methodName":"equalizeimage"},{"id":"gmagick.flipimage","name":"Gmagick::flipimage","description":"Creates a vertical mirror image","tag":"refentry","type":"Function","methodName":"flipimage"},{"id":"gmagick.flopimage","name":"Gmagick::flopimage","description":"Creates a horizontal mirror image","tag":"refentry","type":"Function","methodName":"flopimage"},{"id":"gmagick.frameimage","name":"Gmagick::frameimage","description":"Adds a simulated three-dimensional border","tag":"refentry","type":"Function","methodName":"frameimage"},{"id":"gmagick.gammaimage","name":"Gmagick::gammaimage","description":"Gamma-corrects an image","tag":"refentry","type":"Function","methodName":"gammaimage"},{"id":"gmagick.getcopyright","name":"Gmagick::getcopyright","description":"Returns the GraphicsMagick API copyright as a string","tag":"refentry","type":"Function","methodName":"getcopyright"},{"id":"gmagick.getfilename","name":"Gmagick::getfilename","description":"The filename associated with an image sequence","tag":"refentry","type":"Function","methodName":"getfilename"},{"id":"gmagick.getimagebackgroundcolor","name":"Gmagick::getimagebackgroundcolor","description":"Returns the image background color","tag":"refentry","type":"Function","methodName":"getimagebackgroundcolor"},{"id":"gmagick.getimageblueprimary","name":"Gmagick::getimageblueprimary","description":"Returns the chromaticy blue primary point","tag":"refentry","type":"Function","methodName":"getimageblueprimary"},{"id":"gmagick.getimagebordercolor","name":"Gmagick::getimagebordercolor","description":"Returns the image border color","tag":"refentry","type":"Function","methodName":"getimagebordercolor"},{"id":"gmagick.getimagechanneldepth","name":"Gmagick::getimagechanneldepth","description":"Gets the depth for a particular image channel","tag":"refentry","type":"Function","methodName":"getimagechanneldepth"},{"id":"gmagick.getimagecolors","name":"Gmagick::getimagecolors","description":"Returns the color of the specified colormap index","tag":"refentry","type":"Function","methodName":"getimagecolors"},{"id":"gmagick.getimagecolorspace","name":"Gmagick::getimagecolorspace","description":"Gets the image colorspace","tag":"refentry","type":"Function","methodName":"getimagecolorspace"},{"id":"gmagick.getimagecompose","name":"Gmagick::getimagecompose","description":"Returns the composite operator associated with the image","tag":"refentry","type":"Function","methodName":"getimagecompose"},{"id":"gmagick.getimagedelay","name":"Gmagick::getimagedelay","description":"Gets the image delay","tag":"refentry","type":"Function","methodName":"getimagedelay"},{"id":"gmagick.getimagedepth","name":"Gmagick::getimagedepth","description":"Gets the depth of the image","tag":"refentry","type":"Function","methodName":"getimagedepth"},{"id":"gmagick.getimagedispose","name":"Gmagick::getimagedispose","description":"Gets the image disposal method","tag":"refentry","type":"Function","methodName":"getimagedispose"},{"id":"gmagick.getimageextrema","name":"Gmagick::getimageextrema","description":"Gets the extrema for the image","tag":"refentry","type":"Function","methodName":"getimageextrema"},{"id":"gmagick.getimagefilename","name":"Gmagick::getimagefilename","description":"Returns the filename of a particular image in a sequence","tag":"refentry","type":"Function","methodName":"getimagefilename"},{"id":"gmagick.getimageformat","name":"Gmagick::getimageformat","description":"Returns the format of a particular image in a sequence","tag":"refentry","type":"Function","methodName":"getimageformat"},{"id":"gmagick.getimagegamma","name":"Gmagick::getimagegamma","description":"Gets the image gamma","tag":"refentry","type":"Function","methodName":"getimagegamma"},{"id":"gmagick.getimagegreenprimary","name":"Gmagick::getimagegreenprimary","description":"Returns the chromaticy green primary point","tag":"refentry","type":"Function","methodName":"getimagegreenprimary"},{"id":"gmagick.getimageheight","name":"Gmagick::getimageheight","description":"Returns the image height","tag":"refentry","type":"Function","methodName":"getimageheight"},{"id":"gmagick.getimagehistogram","name":"Gmagick::getimagehistogram","description":"Gets the image histogram","tag":"refentry","type":"Function","methodName":"getimagehistogram"},{"id":"gmagick.getimageindex","name":"Gmagick::getimageindex","description":"Gets the index of the current active image","tag":"refentry","type":"Function","methodName":"getimageindex"},{"id":"gmagick.getimageinterlacescheme","name":"Gmagick::getimageinterlacescheme","description":"Gets the image interlace scheme","tag":"refentry","type":"Function","methodName":"getimageinterlacescheme"},{"id":"gmagick.getimageiterations","name":"Gmagick::getimageiterations","description":"Gets the image iterations","tag":"refentry","type":"Function","methodName":"getimageiterations"},{"id":"gmagick.getimagematte","name":"Gmagick::getimagematte","description":"Check if the image has a matte channel","tag":"refentry","type":"Function","methodName":"getimagematte"},{"id":"gmagick.getimagemattecolor","name":"Gmagick::getimagemattecolor","description":"Returns the image matte color","tag":"refentry","type":"Function","methodName":"getimagemattecolor"},{"id":"gmagick.getimageprofile","name":"Gmagick::getimageprofile","description":"Returns the named image profile","tag":"refentry","type":"Function","methodName":"getimageprofile"},{"id":"gmagick.getimageredprimary","name":"Gmagick::getimageredprimary","description":"Returns the chromaticity red primary point","tag":"refentry","type":"Function","methodName":"getimageredprimary"},{"id":"gmagick.getimagerenderingintent","name":"Gmagick::getimagerenderingintent","description":"Gets the image rendering intent","tag":"refentry","type":"Function","methodName":"getimagerenderingintent"},{"id":"gmagick.getimageresolution","name":"Gmagick::getimageresolution","description":"Gets the image X and Y resolution","tag":"refentry","type":"Function","methodName":"getimageresolution"},{"id":"gmagick.getimagescene","name":"Gmagick::getimagescene","description":"Gets the image scene","tag":"refentry","type":"Function","methodName":"getimagescene"},{"id":"gmagick.getimagesignature","name":"Gmagick::getimagesignature","description":"Generates an SHA-256 message digest","tag":"refentry","type":"Function","methodName":"getimagesignature"},{"id":"gmagick.getimagetype","name":"Gmagick::getimagetype","description":"Gets the potential image type","tag":"refentry","type":"Function","methodName":"getimagetype"},{"id":"gmagick.getimageunits","name":"Gmagick::getimageunits","description":"Gets the image units of resolution","tag":"refentry","type":"Function","methodName":"getimageunits"},{"id":"gmagick.getimagewhitepoint","name":"Gmagick::getimagewhitepoint","description":"Returns the chromaticity white point","tag":"refentry","type":"Function","methodName":"getimagewhitepoint"},{"id":"gmagick.getimagewidth","name":"Gmagick::getimagewidth","description":"Returns the width of the image","tag":"refentry","type":"Function","methodName":"getimagewidth"},{"id":"gmagick.getpackagename","name":"Gmagick::getpackagename","description":"Returns the GraphicsMagick package name","tag":"refentry","type":"Function","methodName":"getpackagename"},{"id":"gmagick.getquantumdepth","name":"Gmagick::getquantumdepth","description":"Returns the Gmagick quantum depth as a string","tag":"refentry","type":"Function","methodName":"getquantumdepth"},{"id":"gmagick.getreleasedate","name":"Gmagick::getreleasedate","description":"Returns the GraphicsMagick release date as a string","tag":"refentry","type":"Function","methodName":"getreleasedate"},{"id":"gmagick.getsamplingfactors","name":"Gmagick::getsamplingfactors","description":"Gets the horizontal and vertical sampling factor","tag":"refentry","type":"Function","methodName":"getsamplingfactors"},{"id":"gmagick.getsize","name":"Gmagick::getsize","description":"Returns the size associated with the Gmagick object","tag":"refentry","type":"Function","methodName":"getsize"},{"id":"gmagick.getversion","name":"Gmagick::getversion","description":"Returns the GraphicsMagick API version","tag":"refentry","type":"Function","methodName":"getversion"},{"id":"gmagick.hasnextimage","name":"Gmagick::hasnextimage","description":"Checks if the object has more images","tag":"refentry","type":"Function","methodName":"hasnextimage"},{"id":"gmagick.haspreviousimage","name":"Gmagick::haspreviousimage","description":"Checks if the object has a previous image","tag":"refentry","type":"Function","methodName":"haspreviousimage"},{"id":"gmagick.implodeimage","name":"Gmagick::implodeimage","description":"Creates a new image as a copy","tag":"refentry","type":"Function","methodName":"implodeimage"},{"id":"gmagick.labelimage","name":"Gmagick::labelimage","description":"Adds a label to an image","tag":"refentry","type":"Function","methodName":"labelimage"},{"id":"gmagick.levelimage","name":"Gmagick::levelimage","description":"Adjusts the levels of an image","tag":"refentry","type":"Function","methodName":"levelimage"},{"id":"gmagick.magnifyimage","name":"Gmagick::magnifyimage","description":"Scales an image proportionally 2x","tag":"refentry","type":"Function","methodName":"magnifyimage"},{"id":"gmagick.mapimage","name":"Gmagick::mapimage","description":"Replaces the colors of an image with the closest color from a reference image","tag":"refentry","type":"Function","methodName":"mapimage"},{"id":"gmagick.medianfilterimage","name":"Gmagick::medianfilterimage","description":"Applies a digital filter","tag":"refentry","type":"Function","methodName":"medianfilterimage"},{"id":"gmagick.minifyimage","name":"Gmagick::minifyimage","description":"Scales an image proportionally to half its size","tag":"refentry","type":"Function","methodName":"minifyimage"},{"id":"gmagick.modulateimage","name":"Gmagick::modulateimage","description":"Control the brightness, saturation, and hue","tag":"refentry","type":"Function","methodName":"modulateimage"},{"id":"gmagick.motionblurimage","name":"Gmagick::motionblurimage","description":"Simulates motion blur","tag":"refentry","type":"Function","methodName":"motionblurimage"},{"id":"gmagick.newimage","name":"Gmagick::newimage","description":"Creates a new image","tag":"refentry","type":"Function","methodName":"newimage"},{"id":"gmagick.nextimage","name":"Gmagick::nextimage","description":"Moves to the next image","tag":"refentry","type":"Function","methodName":"nextimage"},{"id":"gmagick.normalizeimage","name":"Gmagick::normalizeimage","description":"Enhances the contrast of a color image","tag":"refentry","type":"Function","methodName":"normalizeimage"},{"id":"gmagick.oilpaintimage","name":"Gmagick::oilpaintimage","description":"Simulates an oil painting","tag":"refentry","type":"Function","methodName":"oilpaintimage"},{"id":"gmagick.previousimage","name":"Gmagick::previousimage","description":"Move to the previous image in the object","tag":"refentry","type":"Function","methodName":"previousimage"},{"id":"gmagick.profileimage","name":"Gmagick::profileimage","description":"Adds or removes a profile from an image","tag":"refentry","type":"Function","methodName":"profileimage"},{"id":"gmagick.quantizeimage","name":"Gmagick::quantizeimage","description":"Analyzes the colors within a reference image","tag":"refentry","type":"Function","methodName":"quantizeimage"},{"id":"gmagick.quantizeimages","name":"Gmagick::quantizeimages","description":"The quantizeimages purpose","tag":"refentry","type":"Function","methodName":"quantizeimages"},{"id":"gmagick.queryfontmetrics","name":"Gmagick::queryfontmetrics","description":"Returns an array representing the font metrics","tag":"refentry","type":"Function","methodName":"queryfontmetrics"},{"id":"gmagick.queryfonts","name":"Gmagick::queryfonts","description":"Returns the configured fonts","tag":"refentry","type":"Function","methodName":"queryfonts"},{"id":"gmagick.queryformats","name":"Gmagick::queryformats","description":"Returns formats supported by Gmagick","tag":"refentry","type":"Function","methodName":"queryformats"},{"id":"gmagick.radialblurimage","name":"Gmagick::radialblurimage","description":"Radial blurs an image","tag":"refentry","type":"Function","methodName":"radialblurimage"},{"id":"gmagick.raiseimage","name":"Gmagick::raiseimage","description":"Creates a simulated 3d button-like effect","tag":"refentry","type":"Function","methodName":"raiseimage"},{"id":"gmagick.read","name":"Gmagick::read","description":"Reads image from filename","tag":"refentry","type":"Function","methodName":"read"},{"id":"gmagick.readimage","name":"Gmagick::readimage","description":"Reads image from filename","tag":"refentry","type":"Function","methodName":"readimage"},{"id":"gmagick.readimageblob","name":"Gmagick::readimageblob","description":"Reads image from a binary string","tag":"refentry","type":"Function","methodName":"readimageblob"},{"id":"gmagick.readimagefile","name":"Gmagick::readimagefile","description":"The readimagefile purpose","tag":"refentry","type":"Function","methodName":"readimagefile"},{"id":"gmagick.reducenoiseimage","name":"Gmagick::reducenoiseimage","description":"Smooths the contours of an image","tag":"refentry","type":"Function","methodName":"reducenoiseimage"},{"id":"gmagick.removeimage","name":"Gmagick::removeimage","description":"Removes an image from the image list","tag":"refentry","type":"Function","methodName":"removeimage"},{"id":"gmagick.removeimageprofile","name":"Gmagick::removeimageprofile","description":"Removes the named image profile and returns it","tag":"refentry","type":"Function","methodName":"removeimageprofile"},{"id":"gmagick.resampleimage","name":"Gmagick::resampleimage","description":"Resample image to desired resolution","tag":"refentry","type":"Function","methodName":"resampleimage"},{"id":"gmagick.resizeimage","name":"Gmagick::resizeimage","description":"Scales an image","tag":"refentry","type":"Function","methodName":"resizeimage"},{"id":"gmagick.rollimage","name":"Gmagick::rollimage","description":"Offsets an image","tag":"refentry","type":"Function","methodName":"rollimage"},{"id":"gmagick.rotateimage","name":"Gmagick::rotateimage","description":"Rotates an image","tag":"refentry","type":"Function","methodName":"rotateimage"},{"id":"gmagick.scaleimage","name":"Gmagick::scaleimage","description":"Scales the size of an image","tag":"refentry","type":"Function","methodName":"scaleimage"},{"id":"gmagick.separateimagechannel","name":"Gmagick::separateimagechannel","description":"Separates a channel from the image","tag":"refentry","type":"Function","methodName":"separateimagechannel"},{"id":"gmagick.setcompressionquality","name":"Gmagick::setCompressionQuality","description":"Sets the object's default compression quality","tag":"refentry","type":"Function","methodName":"setCompressionQuality"},{"id":"gmagick.setfilename","name":"Gmagick::setfilename","description":"Sets the filename before you read or write the image","tag":"refentry","type":"Function","methodName":"setfilename"},{"id":"gmagick.setimagebackgroundcolor","name":"Gmagick::setimagebackgroundcolor","description":"Sets the image background color","tag":"refentry","type":"Function","methodName":"setimagebackgroundcolor"},{"id":"gmagick.setimageblueprimary","name":"Gmagick::setimageblueprimary","description":"Sets the image chromaticity blue primary point","tag":"refentry","type":"Function","methodName":"setimageblueprimary"},{"id":"gmagick.setimagebordercolor","name":"Gmagick::setimagebordercolor","description":"Sets the image border color","tag":"refentry","type":"Function","methodName":"setimagebordercolor"},{"id":"gmagick.setimagechanneldepth","name":"Gmagick::setimagechanneldepth","description":"Sets the depth of a particular image channel","tag":"refentry","type":"Function","methodName":"setimagechanneldepth"},{"id":"gmagick.setimagecolorspace","name":"Gmagick::setimagecolorspace","description":"Sets the image colorspace","tag":"refentry","type":"Function","methodName":"setimagecolorspace"},{"id":"gmagick.setimagecompose","name":"Gmagick::setimagecompose","description":"Sets the image composite operator","tag":"refentry","type":"Function","methodName":"setimagecompose"},{"id":"gmagick.setimagedelay","name":"Gmagick::setimagedelay","description":"Sets the image delay","tag":"refentry","type":"Function","methodName":"setimagedelay"},{"id":"gmagick.setimagedepth","name":"Gmagick::setimagedepth","description":"Sets the image depth","tag":"refentry","type":"Function","methodName":"setimagedepth"},{"id":"gmagick.setimagedispose","name":"Gmagick::setimagedispose","description":"Sets the image disposal method","tag":"refentry","type":"Function","methodName":"setimagedispose"},{"id":"gmagick.setimagefilename","name":"Gmagick::setimagefilename","description":"Sets the filename of a particular image in a sequence","tag":"refentry","type":"Function","methodName":"setimagefilename"},{"id":"gmagick.setimageformat","name":"Gmagick::setimageformat","description":"Sets the format of a particular image","tag":"refentry","type":"Function","methodName":"setimageformat"},{"id":"gmagick.setimagegamma","name":"Gmagick::setimagegamma","description":"Sets the image gamma","tag":"refentry","type":"Function","methodName":"setimagegamma"},{"id":"gmagick.setimagegreenprimary","name":"Gmagick::setimagegreenprimary","description":"Sets the image chromaticity green primary point","tag":"refentry","type":"Function","methodName":"setimagegreenprimary"},{"id":"gmagick.setimageindex","name":"Gmagick::setimageindex","description":"Set the iterator to the position in the image list specified with the index parameter","tag":"refentry","type":"Function","methodName":"setimageindex"},{"id":"gmagick.setimageinterlacescheme","name":"Gmagick::setimageinterlacescheme","description":"Sets the interlace scheme of the image","tag":"refentry","type":"Function","methodName":"setimageinterlacescheme"},{"id":"gmagick.setimageiterations","name":"Gmagick::setimageiterations","description":"Sets the image iterations","tag":"refentry","type":"Function","methodName":"setimageiterations"},{"id":"gmagick.setimageprofile","name":"Gmagick::setimageprofile","description":"Adds a named profile to the Gmagick object","tag":"refentry","type":"Function","methodName":"setimageprofile"},{"id":"gmagick.setimageredprimary","name":"Gmagick::setimageredprimary","description":"Sets the image chromaticity red primary point","tag":"refentry","type":"Function","methodName":"setimageredprimary"},{"id":"gmagick.setimagerenderingintent","name":"Gmagick::setimagerenderingintent","description":"Sets the image rendering intent","tag":"refentry","type":"Function","methodName":"setimagerenderingintent"},{"id":"gmagick.setimageresolution","name":"Gmagick::setimageresolution","description":"Sets the image resolution","tag":"refentry","type":"Function","methodName":"setimageresolution"},{"id":"gmagick.setimagescene","name":"Gmagick::setimagescene","description":"Sets the image scene","tag":"refentry","type":"Function","methodName":"setimagescene"},{"id":"gmagick.setimagetype","name":"Gmagick::setimagetype","description":"Sets the image type","tag":"refentry","type":"Function","methodName":"setimagetype"},{"id":"gmagick.setimageunits","name":"Gmagick::setimageunits","description":"Sets the image units of resolution","tag":"refentry","type":"Function","methodName":"setimageunits"},{"id":"gmagick.setimagewhitepoint","name":"Gmagick::setimagewhitepoint","description":"Sets the image chromaticity white point","tag":"refentry","type":"Function","methodName":"setimagewhitepoint"},{"id":"gmagick.setsamplingfactors","name":"Gmagick::setsamplingfactors","description":"Sets the image sampling factors","tag":"refentry","type":"Function","methodName":"setsamplingfactors"},{"id":"gmagick.setsize","name":"Gmagick::setsize","description":"Sets the size of the Gmagick object","tag":"refentry","type":"Function","methodName":"setsize"},{"id":"gmagick.shearimage","name":"Gmagick::shearimage","description":"Creating a parallelogram","tag":"refentry","type":"Function","methodName":"shearimage"},{"id":"gmagick.solarizeimage","name":"Gmagick::solarizeimage","description":"Applies a solarizing effect to the image","tag":"refentry","type":"Function","methodName":"solarizeimage"},{"id":"gmagick.spreadimage","name":"Gmagick::spreadimage","description":"Randomly displaces each pixel in a block","tag":"refentry","type":"Function","methodName":"spreadimage"},{"id":"gmagick.stripimage","name":"Gmagick::stripimage","description":"Strips an image of all profiles and comments","tag":"refentry","type":"Function","methodName":"stripimage"},{"id":"gmagick.swirlimage","name":"Gmagick::swirlimage","description":"Swirls the pixels about the center of the image","tag":"refentry","type":"Function","methodName":"swirlimage"},{"id":"gmagick.thumbnailimage","name":"Gmagick::thumbnailimage","description":"Changes the size of an image","tag":"refentry","type":"Function","methodName":"thumbnailimage"},{"id":"gmagick.trimimage","name":"Gmagick::trimimage","description":"Remove edges from the image","tag":"refentry","type":"Function","methodName":"trimimage"},{"id":"gmagick.write","name":"Gmagick::write","description":"Alias of Gmagick::writeimage","tag":"refentry","type":"Function","methodName":"write"},{"id":"gmagick.writeimage","name":"Gmagick::writeimage","description":"Writes an image to the specified filename","tag":"refentry","type":"Function","methodName":"writeimage"},{"id":"class.gmagick","name":"Gmagick","description":"The Gmagick class","tag":"phpdoc:classref","type":"Class","methodName":"Gmagick"},{"id":"gmagickdraw.annotate","name":"GmagickDraw::annotate","description":"Draws text on the image","tag":"refentry","type":"Function","methodName":"annotate"},{"id":"gmagickdraw.arc","name":"GmagickDraw::arc","description":"Draws an arc","tag":"refentry","type":"Function","methodName":"arc"},{"id":"gmagickdraw.bezier","name":"GmagickDraw::bezier","description":"Draws a bezier curve","tag":"refentry","type":"Function","methodName":"bezier"},{"id":"gmagickdraw.ellipse","name":"GmagickDraw::ellipse","description":"Draws an ellipse on the image","tag":"refentry","type":"Function","methodName":"ellipse"},{"id":"gmagickdraw.getfillcolor","name":"GmagickDraw::getfillcolor","description":"Returns the fill color","tag":"refentry","type":"Function","methodName":"getfillcolor"},{"id":"gmagickdraw.getfillopacity","name":"GmagickDraw::getfillopacity","description":"Returns the opacity used when drawing","tag":"refentry","type":"Function","methodName":"getfillopacity"},{"id":"gmagickdraw.getfont","name":"GmagickDraw::getfont","description":"Returns the font","tag":"refentry","type":"Function","methodName":"getfont"},{"id":"gmagickdraw.getfontsize","name":"GmagickDraw::getfontsize","description":"Returns the font pointsize","tag":"refentry","type":"Function","methodName":"getfontsize"},{"id":"gmagickdraw.getfontstyle","name":"GmagickDraw::getfontstyle","description":"Returns the font style","tag":"refentry","type":"Function","methodName":"getfontstyle"},{"id":"gmagickdraw.getfontweight","name":"GmagickDraw::getfontweight","description":"Returns the font weight","tag":"refentry","type":"Function","methodName":"getfontweight"},{"id":"gmagickdraw.getstrokecolor","name":"GmagickDraw::getstrokecolor","description":"Returns the color used for stroking object outlines","tag":"refentry","type":"Function","methodName":"getstrokecolor"},{"id":"gmagickdraw.getstrokeopacity","name":"GmagickDraw::getstrokeopacity","description":"Returns the opacity of stroked object outlines","tag":"refentry","type":"Function","methodName":"getstrokeopacity"},{"id":"gmagickdraw.getstrokewidth","name":"GmagickDraw::getstrokewidth","description":"Returns the width of the stroke used to draw object outlines","tag":"refentry","type":"Function","methodName":"getstrokewidth"},{"id":"gmagickdraw.gettextdecoration","name":"GmagickDraw::gettextdecoration","description":"Returns the text decoration","tag":"refentry","type":"Function","methodName":"gettextdecoration"},{"id":"gmagickdraw.gettextencoding","name":"GmagickDraw::gettextencoding","description":"Returns the code set used for text annotations","tag":"refentry","type":"Function","methodName":"gettextencoding"},{"id":"gmagickdraw.line","name":"GmagickDraw::line","description":"Draws a line","tag":"refentry","type":"Function","methodName":"line"},{"id":"gmagickdraw.point","name":"GmagickDraw::point","description":"Draws a point","tag":"refentry","type":"Function","methodName":"point"},{"id":"gmagickdraw.polygon","name":"GmagickDraw::polygon","description":"Draws a polygon","tag":"refentry","type":"Function","methodName":"polygon"},{"id":"gmagickdraw.polyline","name":"GmagickDraw::polyline","description":"Draws a polyline","tag":"refentry","type":"Function","methodName":"polyline"},{"id":"gmagickdraw.rectangle","name":"GmagickDraw::rectangle","description":"Draws a rectangle","tag":"refentry","type":"Function","methodName":"rectangle"},{"id":"gmagickdraw.rotate","name":"GmagickDraw::rotate","description":"Applies the specified rotation to the current coordinate space","tag":"refentry","type":"Function","methodName":"rotate"},{"id":"gmagickdraw.roundrectangle","name":"GmagickDraw::roundrectangle","description":"Draws a rounded rectangle","tag":"refentry","type":"Function","methodName":"roundrectangle"},{"id":"gmagickdraw.scale","name":"GmagickDraw::scale","description":"Adjusts the scaling factor","tag":"refentry","type":"Function","methodName":"scale"},{"id":"gmagickdraw.setfillcolor","name":"GmagickDraw::setfillcolor","description":"Sets the fill color to be used for drawing filled objects","tag":"refentry","type":"Function","methodName":"setfillcolor"},{"id":"gmagickdraw.setfillopacity","name":"GmagickDraw::setfillopacity","description":"The setfillopacity purpose","tag":"refentry","type":"Function","methodName":"setfillopacity"},{"id":"gmagickdraw.setfont","name":"GmagickDraw::setfont","description":"Sets the fully-specified font to use when annotating with text","tag":"refentry","type":"Function","methodName":"setfont"},{"id":"gmagickdraw.setfontsize","name":"GmagickDraw::setfontsize","description":"Sets the font pointsize to use when annotating with text","tag":"refentry","type":"Function","methodName":"setfontsize"},{"id":"gmagickdraw.setfontstyle","name":"GmagickDraw::setfontstyle","description":"Sets the font style to use when annotating with text","tag":"refentry","type":"Function","methodName":"setfontstyle"},{"id":"gmagickdraw.setfontweight","name":"GmagickDraw::setfontweight","description":"Sets the font weight","tag":"refentry","type":"Function","methodName":"setfontweight"},{"id":"gmagickdraw.setstrokecolor","name":"GmagickDraw::setstrokecolor","description":"Sets the color used for stroking object outlines","tag":"refentry","type":"Function","methodName":"setstrokecolor"},{"id":"gmagickdraw.setstrokeopacity","name":"GmagickDraw::setstrokeopacity","description":"Specifies the opacity of stroked object outlines","tag":"refentry","type":"Function","methodName":"setstrokeopacity"},{"id":"gmagickdraw.setstrokewidth","name":"GmagickDraw::setstrokewidth","description":"Sets the width of the stroke used to draw object outlines","tag":"refentry","type":"Function","methodName":"setstrokewidth"},{"id":"gmagickdraw.settextdecoration","name":"GmagickDraw::settextdecoration","description":"Specifies a decoration","tag":"refentry","type":"Function","methodName":"settextdecoration"},{"id":"gmagickdraw.settextencoding","name":"GmagickDraw::settextencoding","description":"Specifies the text code set","tag":"refentry","type":"Function","methodName":"settextencoding"},{"id":"class.gmagickdraw","name":"GmagickDraw","description":"The GmagickDraw class","tag":"phpdoc:classref","type":"Class","methodName":"GmagickDraw"},{"id":"gmagickpixel.construct","name":"GmagickPixel::__construct","description":"The GmagickPixel constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"gmagickpixel.getcolor","name":"GmagickPixel::getcolor","description":"Returns the color","tag":"refentry","type":"Function","methodName":"getcolor"},{"id":"gmagickpixel.getcolorcount","name":"GmagickPixel::getcolorcount","description":"Returns the color count associated with this color","tag":"refentry","type":"Function","methodName":"getcolorcount"},{"id":"gmagickpixel.getcolorvalue","name":"GmagickPixel::getcolorvalue","description":"Gets the normalized value of the provided color channel","tag":"refentry","type":"Function","methodName":"getcolorvalue"},{"id":"gmagickpixel.setcolor","name":"GmagickPixel::setcolor","description":"Sets the color","tag":"refentry","type":"Function","methodName":"setcolor"},{"id":"gmagickpixel.setcolorvalue","name":"GmagickPixel::setcolorvalue","description":"Sets the normalized value of one of the channels","tag":"refentry","type":"Function","methodName":"setcolorvalue"},{"id":"class.gmagickpixel","name":"GmagickPixel","description":"The GmagickPixel class","tag":"phpdoc:classref","type":"Class","methodName":"GmagickPixel"},{"id":"book.gmagick","name":"Gmagick","description":"Gmagick","tag":"book","type":"Extension","methodName":"Gmagick"},{"id":"intro.imagick","name":"Introduction","description":"Image Processing (ImageMagick)","tag":"preface","type":"General","methodName":"Introduction"},{"id":"imagick.requirements","name":"Requirements","description":"Image Processing (ImageMagick)","tag":"section","type":"General","methodName":"Requirements"},{"id":"imagick.installation","name":"Installation","description":"Image Processing (ImageMagick)","tag":"section","type":"General","methodName":"Installation"},{"id":"imagick.configuration","name":"Runtime Configuration","description":"Image Processing (ImageMagick)","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"imagick.setup","name":"Installing\/Configuring","description":"Image Processing (ImageMagick)","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"imagick.constants","name":"Predefined Constants","description":"Image Processing (ImageMagick)","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"imagick.examples-1","name":"Basic usage","description":"Image Processing (ImageMagick)","tag":"section","type":"General","methodName":"Basic usage"},{"id":"imagick.examples","name":"Examples","description":"Image Processing (ImageMagick)","tag":"chapter","type":"General","methodName":"Examples"},{"id":"imagick.adaptiveblurimage","name":"Imagick::adaptiveBlurImage","description":"Adds adaptive blur filter to image","tag":"refentry","type":"Function","methodName":"adaptiveBlurImage"},{"id":"imagick.adaptiveresizeimage","name":"Imagick::adaptiveResizeImage","description":"Adaptively resize image with data dependent triangulation","tag":"refentry","type":"Function","methodName":"adaptiveResizeImage"},{"id":"imagick.adaptivesharpenimage","name":"Imagick::adaptiveSharpenImage","description":"Adaptively sharpen the image","tag":"refentry","type":"Function","methodName":"adaptiveSharpenImage"},{"id":"imagick.adaptivethresholdimage","name":"Imagick::adaptiveThresholdImage","description":"Selects a threshold for each pixel based on a range of intensity","tag":"refentry","type":"Function","methodName":"adaptiveThresholdImage"},{"id":"imagick.addimage","name":"Imagick::addImage","description":"Adds new image to Imagick object image list","tag":"refentry","type":"Function","methodName":"addImage"},{"id":"imagick.addnoiseimage","name":"Imagick::addNoiseImage","description":"Adds random noise to the image","tag":"refentry","type":"Function","methodName":"addNoiseImage"},{"id":"imagick.affinetransformimage","name":"Imagick::affineTransformImage","description":"Transforms an image","tag":"refentry","type":"Function","methodName":"affineTransformImage"},{"id":"imagick.animateimages","name":"Imagick::animateImages","description":"Animates an image or images","tag":"refentry","type":"Function","methodName":"animateImages"},{"id":"imagick.annotateimage","name":"Imagick::annotateImage","description":"Annotates an image with text","tag":"refentry","type":"Function","methodName":"annotateImage"},{"id":"imagick.appendimages","name":"Imagick::appendImages","description":"Append a set of images","tag":"refentry","type":"Function","methodName":"appendImages"},{"id":"imagick.autolevelimage","name":"Imagick::autoLevelImage","description":"Adjusts the levels of a particular image channel","tag":"refentry","type":"Function","methodName":"autoLevelImage"},{"id":"imagick.averageimages","name":"Imagick::averageImages","description":"Average a set of images","tag":"refentry","type":"Function","methodName":"averageImages"},{"id":"imagick.blackthresholdimage","name":"Imagick::blackThresholdImage","description":"Forces all pixels below the threshold into black","tag":"refentry","type":"Function","methodName":"blackThresholdImage"},{"id":"imagick.blueshiftimage","name":"Imagick::blueShiftImage","description":"Mutes the colors of the image","tag":"refentry","type":"Function","methodName":"blueShiftImage"},{"id":"imagick.blurimage","name":"Imagick::blurImage","description":"Adds blur filter to image","tag":"refentry","type":"Function","methodName":"blurImage"},{"id":"imagick.borderimage","name":"Imagick::borderImage","description":"Surrounds the image with a border","tag":"refentry","type":"Function","methodName":"borderImage"},{"id":"imagick.brightnesscontrastimage","name":"Imagick::brightnessContrastImage","description":"Change the brightness and\/or contrast of an image","tag":"refentry","type":"Function","methodName":"brightnessContrastImage"},{"id":"imagick.charcoalimage","name":"Imagick::charcoalImage","description":"Simulates a charcoal drawing","tag":"refentry","type":"Function","methodName":"charcoalImage"},{"id":"imagick.chopimage","name":"Imagick::chopImage","description":"Removes a region of an image and trims","tag":"refentry","type":"Function","methodName":"chopImage"},{"id":"imagick.clampimage","name":"Imagick::clampImage","description":"Restricts the color range from 0 to the quantum depth.","tag":"refentry","type":"Function","methodName":"clampImage"},{"id":"imagick.clear","name":"Imagick::clear","description":"Clears all resources associated to Imagick object","tag":"refentry","type":"Function","methodName":"clear"},{"id":"imagick.clipimage","name":"Imagick::clipImage","description":"Clips along the first path from the 8BIM profile","tag":"refentry","type":"Function","methodName":"clipImage"},{"id":"imagick.clipimagepath","name":"Imagick::clipImagePath","description":"Clips along the named paths from the 8BIM profile, if present","tag":"refentry","type":"Function","methodName":"clipImagePath"},{"id":"imagick.clippathimage","name":"Imagick::clipPathImage","description":"Clips along the named paths from the 8BIM profile","tag":"refentry","type":"Function","methodName":"clipPathImage"},{"id":"imagick.clone","name":"Imagick::clone","description":"Makes an exact copy of the Imagick object","tag":"refentry","type":"Function","methodName":"clone"},{"id":"imagick.clutimage","name":"Imagick::clutImage","description":"Replaces colors in the image","tag":"refentry","type":"Function","methodName":"clutImage"},{"id":"imagick.coalesceimages","name":"Imagick::coalesceImages","description":"Composites a set of images","tag":"refentry","type":"Function","methodName":"coalesceImages"},{"id":"imagick.colorfloodfillimage","name":"Imagick::colorFloodfillImage","description":"Changes the color value of any pixel that matches target","tag":"refentry","type":"Function","methodName":"colorFloodfillImage"},{"id":"imagick.colorizeimage","name":"Imagick::colorizeImage","description":"Blends the fill color with the image","tag":"refentry","type":"Function","methodName":"colorizeImage"},{"id":"imagick.colormatriximage","name":"Imagick::colorMatrixImage","description":"Apply color transformation to an image","tag":"refentry","type":"Function","methodName":"colorMatrixImage"},{"id":"imagick.combineimages","name":"Imagick::combineImages","description":"Combines one or more images into a single image","tag":"refentry","type":"Function","methodName":"combineImages"},{"id":"imagick.commentimage","name":"Imagick::commentImage","description":"Adds a comment to your image","tag":"refentry","type":"Function","methodName":"commentImage"},{"id":"imagick.compareimagechannels","name":"Imagick::compareImageChannels","description":"Returns the difference in one or more images","tag":"refentry","type":"Function","methodName":"compareImageChannels"},{"id":"imagick.compareimagelayers","name":"Imagick::compareImageLayers","description":"Returns the maximum bounding region between images","tag":"refentry","type":"Function","methodName":"compareImageLayers"},{"id":"imagick.compareimages","name":"Imagick::compareImages","description":"Compares an image to a reconstructed image","tag":"refentry","type":"Function","methodName":"compareImages"},{"id":"imagick.compositeimage","name":"Imagick::compositeImage","description":"Composite one image onto another","tag":"refentry","type":"Function","methodName":"compositeImage"},{"id":"imagick.construct","name":"Imagick::__construct","description":"The Imagick constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"imagick.contrastimage","name":"Imagick::contrastImage","description":"Change the contrast of the image","tag":"refentry","type":"Function","methodName":"contrastImage"},{"id":"imagick.contraststretchimage","name":"Imagick::contrastStretchImage","description":"Enhances the contrast of a color image","tag":"refentry","type":"Function","methodName":"contrastStretchImage"},{"id":"imagick.convolveimage","name":"Imagick::convolveImage","description":"Applies a custom convolution kernel to the image","tag":"refentry","type":"Function","methodName":"convolveImage"},{"id":"imagick.count","name":"Imagick::count","description":"Get the number of images","tag":"refentry","type":"Function","methodName":"count"},{"id":"imagick.cropimage","name":"Imagick::cropImage","description":"Extracts a region of the image","tag":"refentry","type":"Function","methodName":"cropImage"},{"id":"imagick.cropthumbnailimage","name":"Imagick::cropThumbnailImage","description":"Creates a crop thumbnail","tag":"refentry","type":"Function","methodName":"cropThumbnailImage"},{"id":"imagick.current","name":"Imagick::current","description":"Returns a reference to the current Imagick object","tag":"refentry","type":"Function","methodName":"current"},{"id":"imagick.cyclecolormapimage","name":"Imagick::cycleColormapImage","description":"Displaces an image's colormap","tag":"refentry","type":"Function","methodName":"cycleColormapImage"},{"id":"imagick.decipherimage","name":"Imagick::decipherImage","description":"Deciphers an image","tag":"refentry","type":"Function","methodName":"decipherImage"},{"id":"imagick.deconstructimages","name":"Imagick::deconstructImages","description":"Returns certain pixel differences between images","tag":"refentry","type":"Function","methodName":"deconstructImages"},{"id":"imagick.deleteimageartifact","name":"Imagick::deleteImageArtifact","description":"Delete image artifact","tag":"refentry","type":"Function","methodName":"deleteImageArtifact"},{"id":"imagick.deleteimageproperty","name":"Imagick::deleteImageProperty","description":"Deletes an image property","tag":"refentry","type":"Function","methodName":"deleteImageProperty"},{"id":"imagick.deskewimage","name":"Imagick::deskewImage","description":"Removes skew from the image","tag":"refentry","type":"Function","methodName":"deskewImage"},{"id":"imagick.despeckleimage","name":"Imagick::despeckleImage","description":"Reduces the speckle noise in an image","tag":"refentry","type":"Function","methodName":"despeckleImage"},{"id":"imagick.destroy","name":"Imagick::destroy","description":"Destroys the Imagick object","tag":"refentry","type":"Function","methodName":"destroy"},{"id":"imagick.displayimage","name":"Imagick::displayImage","description":"Displays an image","tag":"refentry","type":"Function","methodName":"displayImage"},{"id":"imagick.displayimages","name":"Imagick::displayImages","description":"Displays an image or image sequence","tag":"refentry","type":"Function","methodName":"displayImages"},{"id":"imagick.distortimage","name":"Imagick::distortImage","description":"Distorts an image using various distortion methods","tag":"refentry","type":"Function","methodName":"distortImage"},{"id":"imagick.drawimage","name":"Imagick::drawImage","description":"Renders the ImagickDraw object on the current image","tag":"refentry","type":"Function","methodName":"drawImage"},{"id":"imagick.edgeimage","name":"Imagick::edgeImage","description":"Enhance edges within the image","tag":"refentry","type":"Function","methodName":"edgeImage"},{"id":"imagick.embossimage","name":"Imagick::embossImage","description":"Returns a grayscale image with a three-dimensional effect","tag":"refentry","type":"Function","methodName":"embossImage"},{"id":"imagick.encipherimage","name":"Imagick::encipherImage","description":"Enciphers an image","tag":"refentry","type":"Function","methodName":"encipherImage"},{"id":"imagick.enhanceimage","name":"Imagick::enhanceImage","description":"Improves the quality of a noisy image","tag":"refentry","type":"Function","methodName":"enhanceImage"},{"id":"imagick.equalizeimage","name":"Imagick::equalizeImage","description":"Equalizes the image histogram","tag":"refentry","type":"Function","methodName":"equalizeImage"},{"id":"imagick.evaluateimage","name":"Imagick::evaluateImage","description":"Applies an expression to an image","tag":"refentry","type":"Function","methodName":"evaluateImage"},{"id":"imagick.exportimagepixels","name":"Imagick::exportImagePixels","description":"Exports raw image pixels","tag":"refentry","type":"Function","methodName":"exportImagePixels"},{"id":"imagick.extentimage","name":"Imagick::extentImage","description":"Set image size","tag":"refentry","type":"Function","methodName":"extentImage"},{"id":"imagick.filter","name":"Imagick::filter","description":"Applies a custom convolution kernel to the image","tag":"refentry","type":"Function","methodName":"filter"},{"id":"imagick.flattenimages","name":"Imagick::flattenImages","description":"Merges a sequence of images","tag":"refentry","type":"Function","methodName":"flattenImages"},{"id":"imagick.flipimage","name":"Imagick::flipImage","description":"Creates a vertical mirror image","tag":"refentry","type":"Function","methodName":"flipImage"},{"id":"imagick.floodfillpaintimage","name":"Imagick::floodFillPaintImage","description":"Changes the color value of any pixel that matches target","tag":"refentry","type":"Function","methodName":"floodFillPaintImage"},{"id":"imagick.flopimage","name":"Imagick::flopImage","description":"Creates a horizontal mirror image","tag":"refentry","type":"Function","methodName":"flopImage"},{"id":"imagick.forwardfouriertransformimage","name":"Imagick::forwardFourierTransformImage","description":"Implements the discrete Fourier transform (DFT)","tag":"refentry","type":"Function","methodName":"forwardFourierTransformImage"},{"id":"imagick.frameimage","name":"Imagick::frameImage","description":"Adds a simulated three-dimensional border","tag":"refentry","type":"Function","methodName":"frameImage"},{"id":"imagick.functionimage","name":"Imagick::functionImage","description":"Applies a function on the image","tag":"refentry","type":"Function","methodName":"functionImage"},{"id":"imagick.fximage","name":"Imagick::fxImage","description":"Evaluate expression for each pixel in the image","tag":"refentry","type":"Function","methodName":"fxImage"},{"id":"imagick.gammaimage","name":"Imagick::gammaImage","description":"Gamma-corrects an image","tag":"refentry","type":"Function","methodName":"gammaImage"},{"id":"imagick.gaussianblurimage","name":"Imagick::gaussianBlurImage","description":"Blurs an image","tag":"refentry","type":"Function","methodName":"gaussianBlurImage"},{"id":"imagick.getcolorspace","name":"Imagick::getColorspace","description":"Gets the colorspace","tag":"refentry","type":"Function","methodName":"getColorspace"},{"id":"imagick.getcompression","name":"Imagick::getCompression","description":"Gets the object compression type","tag":"refentry","type":"Function","methodName":"getCompression"},{"id":"imagick.getcompressionquality","name":"Imagick::getCompressionQuality","description":"Gets the object compression quality","tag":"refentry","type":"Function","methodName":"getCompressionQuality"},{"id":"imagick.getcopyright","name":"Imagick::getCopyright","description":"Returns the ImageMagick API copyright as a string","tag":"refentry","type":"Function","methodName":"getCopyright"},{"id":"imagick.getfilename","name":"Imagick::getFilename","description":"The filename associated with an image sequence","tag":"refentry","type":"Function","methodName":"getFilename"},{"id":"imagick.getfont","name":"Imagick::getFont","description":"Gets font","tag":"refentry","type":"Function","methodName":"getFont"},{"id":"imagick.getformat","name":"Imagick::getFormat","description":"Returns the format of the Imagick object","tag":"refentry","type":"Function","methodName":"getFormat"},{"id":"imagick.getgravity","name":"Imagick::getGravity","description":"Gets the gravity","tag":"refentry","type":"Function","methodName":"getGravity"},{"id":"imagick.gethomeurl","name":"Imagick::getHomeURL","description":"Returns the ImageMagick home URL","tag":"refentry","type":"Function","methodName":"getHomeURL"},{"id":"imagick.getimage","name":"Imagick::getImage","description":"Returns a new Imagick object","tag":"refentry","type":"Function","methodName":"getImage"},{"id":"imagick.getimagealphachannel","name":"Imagick::getImageAlphaChannel","description":"Checks if the image has an alpha channel","tag":"refentry","type":"Function","methodName":"getImageAlphaChannel"},{"id":"imagick.getimageartifact","name":"Imagick::getImageArtifact","description":"Get image artifact","tag":"refentry","type":"Function","methodName":"getImageArtifact"},{"id":"imagick.getimageattribute","name":"Imagick::getImageAttribute","description":"Returns a named attribute","tag":"refentry","type":"Function","methodName":"getImageAttribute"},{"id":"imagick.getimagebackgroundcolor","name":"Imagick::getImageBackgroundColor","description":"Returns the image background color","tag":"refentry","type":"Function","methodName":"getImageBackgroundColor"},{"id":"imagick.getimageblob","name":"Imagick::getImageBlob","description":"Returns the image sequence as a blob","tag":"refentry","type":"Function","methodName":"getImageBlob"},{"id":"imagick.getimageblueprimary","name":"Imagick::getImageBluePrimary","description":"Returns the chromaticy blue primary point","tag":"refentry","type":"Function","methodName":"getImageBluePrimary"},{"id":"imagick.getimagebordercolor","name":"Imagick::getImageBorderColor","description":"Returns the image border color","tag":"refentry","type":"Function","methodName":"getImageBorderColor"},{"id":"imagick.getimagechanneldepth","name":"Imagick::getImageChannelDepth","description":"Gets the depth for a particular image channel","tag":"refentry","type":"Function","methodName":"getImageChannelDepth"},{"id":"imagick.getimagechanneldistortion","name":"Imagick::getImageChannelDistortion","description":"Compares image channels of an image to a reconstructed image","tag":"refentry","type":"Function","methodName":"getImageChannelDistortion"},{"id":"imagick.getimagechanneldistortions","name":"Imagick::getImageChannelDistortions","description":"Gets channel distortions","tag":"refentry","type":"Function","methodName":"getImageChannelDistortions"},{"id":"imagick.getimagechannelextrema","name":"Imagick::getImageChannelExtrema","description":"Gets the extrema for one or more image channels","tag":"refentry","type":"Function","methodName":"getImageChannelExtrema"},{"id":"imagick.getimagechannelkurtosis","name":"Imagick::getImageChannelKurtosis","description":"The getImageChannelKurtosis purpose","tag":"refentry","type":"Function","methodName":"getImageChannelKurtosis"},{"id":"imagick.getimagechannelmean","name":"Imagick::getImageChannelMean","description":"Gets the mean and standard deviation","tag":"refentry","type":"Function","methodName":"getImageChannelMean"},{"id":"imagick.getimagechannelrange","name":"Imagick::getImageChannelRange","description":"Gets channel range","tag":"refentry","type":"Function","methodName":"getImageChannelRange"},{"id":"imagick.getimagechannelstatistics","name":"Imagick::getImageChannelStatistics","description":"Returns statistics for each channel in the image","tag":"refentry","type":"Function","methodName":"getImageChannelStatistics"},{"id":"imagick.getimageclipmask","name":"Imagick::getImageClipMask","description":"Gets image clip mask","tag":"refentry","type":"Function","methodName":"getImageClipMask"},{"id":"imagick.getimagecolormapcolor","name":"Imagick::getImageColormapColor","description":"Returns the color of the specified colormap index","tag":"refentry","type":"Function","methodName":"getImageColormapColor"},{"id":"imagick.getimagecolors","name":"Imagick::getImageColors","description":"Gets the number of unique colors in the image","tag":"refentry","type":"Function","methodName":"getImageColors"},{"id":"imagick.getimagecolorspace","name":"Imagick::getImageColorspace","description":"Gets the image colorspace","tag":"refentry","type":"Function","methodName":"getImageColorspace"},{"id":"imagick.getimagecompose","name":"Imagick::getImageCompose","description":"Returns the composite operator associated with the image","tag":"refentry","type":"Function","methodName":"getImageCompose"},{"id":"imagick.getimagecompression","name":"Imagick::getImageCompression","description":"Gets the current image's compression type","tag":"refentry","type":"Function","methodName":"getImageCompression"},{"id":"imagick.getimagecompressionquality","name":"Imagick::getImageCompressionQuality","description":"Gets the current image's compression quality","tag":"refentry","type":"Function","methodName":"getImageCompressionQuality"},{"id":"imagick.getimagedelay","name":"Imagick::getImageDelay","description":"Gets the image delay","tag":"refentry","type":"Function","methodName":"getImageDelay"},{"id":"imagick.getimagedepth","name":"Imagick::getImageDepth","description":"Gets the image depth","tag":"refentry","type":"Function","methodName":"getImageDepth"},{"id":"imagick.getimagedispose","name":"Imagick::getImageDispose","description":"Gets the image disposal method","tag":"refentry","type":"Function","methodName":"getImageDispose"},{"id":"imagick.getimagedistortion","name":"Imagick::getImageDistortion","description":"Compares an image to a reconstructed image","tag":"refentry","type":"Function","methodName":"getImageDistortion"},{"id":"imagick.getimageextrema","name":"Imagick::getImageExtrema","description":"Gets the extrema for the image","tag":"refentry","type":"Function","methodName":"getImageExtrema"},{"id":"imagick.getimagefilename","name":"Imagick::getImageFilename","description":"Returns the filename of a particular image in a sequence","tag":"refentry","type":"Function","methodName":"getImageFilename"},{"id":"imagick.getimageformat","name":"Imagick::getImageFormat","description":"Returns the format of a particular image in a sequence","tag":"refentry","type":"Function","methodName":"getImageFormat"},{"id":"imagick.getimagegamma","name":"Imagick::getImageGamma","description":"Gets the image gamma","tag":"refentry","type":"Function","methodName":"getImageGamma"},{"id":"imagick.getimagegeometry","name":"Imagick::getImageGeometry","description":"Gets the width and height as an associative array","tag":"refentry","type":"Function","methodName":"getImageGeometry"},{"id":"imagick.getimagegravity","name":"Imagick::getImageGravity","description":"Gets the image gravity","tag":"refentry","type":"Function","methodName":"getImageGravity"},{"id":"imagick.getimagegreenprimary","name":"Imagick::getImageGreenPrimary","description":"Returns the chromaticy green primary point","tag":"refentry","type":"Function","methodName":"getImageGreenPrimary"},{"id":"imagick.getimageheight","name":"Imagick::getImageHeight","description":"Returns the image height","tag":"refentry","type":"Function","methodName":"getImageHeight"},{"id":"imagick.getimagehistogram","name":"Imagick::getImageHistogram","description":"Gets the image histogram","tag":"refentry","type":"Function","methodName":"getImageHistogram"},{"id":"imagick.getimageindex","name":"Imagick::getImageIndex","description":"Gets the index of the current active image","tag":"refentry","type":"Function","methodName":"getImageIndex"},{"id":"imagick.getimageinterlacescheme","name":"Imagick::getImageInterlaceScheme","description":"Gets the image interlace scheme","tag":"refentry","type":"Function","methodName":"getImageInterlaceScheme"},{"id":"imagick.getimageinterpolatemethod","name":"Imagick::getImageInterpolateMethod","description":"Returns the interpolation method","tag":"refentry","type":"Function","methodName":"getImageInterpolateMethod"},{"id":"imagick.getimageiterations","name":"Imagick::getImageIterations","description":"Gets the image iterations","tag":"refentry","type":"Function","methodName":"getImageIterations"},{"id":"imagick.getimagelength","name":"Imagick::getImageLength","description":"Returns the image length in bytes","tag":"refentry","type":"Function","methodName":"getImageLength"},{"id":"imagick.getimagematte","name":"Imagick::getImageMatte","description":"Return if the image has a matte channel","tag":"refentry","type":"Function","methodName":"getImageMatte"},{"id":"imagick.getimagemattecolor","name":"Imagick::getImageMatteColor","description":"Returns the image matte color","tag":"refentry","type":"Function","methodName":"getImageMatteColor"},{"id":"imagick.getimagemimetype","name":"Imagick::getImageMimeType","description":"Returns the image mime-type","tag":"refentry","type":"Function","methodName":"getImageMimeType"},{"id":"imagick.getimageorientation","name":"Imagick::getImageOrientation","description":"Gets the image orientation","tag":"refentry","type":"Function","methodName":"getImageOrientation"},{"id":"imagick.getimagepage","name":"Imagick::getImagePage","description":"Returns the page geometry","tag":"refentry","type":"Function","methodName":"getImagePage"},{"id":"imagick.getimagepixelcolor","name":"Imagick::getImagePixelColor","description":"Returns the color of the specified pixel","tag":"refentry","type":"Function","methodName":"getImagePixelColor"},{"id":"imagick.getimageprofile","name":"Imagick::getImageProfile","description":"Returns the named image profile","tag":"refentry","type":"Function","methodName":"getImageProfile"},{"id":"imagick.getimageprofiles","name":"Imagick::getImageProfiles","description":"Returns the image profiles","tag":"refentry","type":"Function","methodName":"getImageProfiles"},{"id":"imagick.getimageproperties","name":"Imagick::getImageProperties","description":"Returns the image properties","tag":"refentry","type":"Function","methodName":"getImageProperties"},{"id":"imagick.getimageproperty","name":"Imagick::getImageProperty","description":"Returns the named image property","tag":"refentry","type":"Function","methodName":"getImageProperty"},{"id":"imagick.getimageredprimary","name":"Imagick::getImageRedPrimary","description":"Returns the chromaticity red primary point","tag":"refentry","type":"Function","methodName":"getImageRedPrimary"},{"id":"imagick.getimageregion","name":"Imagick::getImageRegion","description":"Extracts a region of the image","tag":"refentry","type":"Function","methodName":"getImageRegion"},{"id":"imagick.getimagerenderingintent","name":"Imagick::getImageRenderingIntent","description":"Gets the image rendering intent","tag":"refentry","type":"Function","methodName":"getImageRenderingIntent"},{"id":"imagick.getimageresolution","name":"Imagick::getImageResolution","description":"Gets the image X and Y resolution","tag":"refentry","type":"Function","methodName":"getImageResolution"},{"id":"imagick.getimagesblob","name":"Imagick::getImagesBlob","description":"Returns all image sequences as a blob","tag":"refentry","type":"Function","methodName":"getImagesBlob"},{"id":"imagick.getimagescene","name":"Imagick::getImageScene","description":"Gets the image scene","tag":"refentry","type":"Function","methodName":"getImageScene"},{"id":"imagick.getimagesignature","name":"Imagick::getImageSignature","description":"Generates an SHA-256 message digest","tag":"refentry","type":"Function","methodName":"getImageSignature"},{"id":"imagick.getimagesize","name":"Imagick::getImageSize","description":"Returns the image length in bytes","tag":"refentry","type":"Function","methodName":"getImageSize"},{"id":"imagick.getimagetickspersecond","name":"Imagick::getImageTicksPerSecond","description":"Gets the image ticks-per-second","tag":"refentry","type":"Function","methodName":"getImageTicksPerSecond"},{"id":"imagick.getimagetotalinkdensity","name":"Imagick::getImageTotalInkDensity","description":"Gets the image total ink density","tag":"refentry","type":"Function","methodName":"getImageTotalInkDensity"},{"id":"imagick.getimagetype","name":"Imagick::getImageType","description":"Gets the potential image type","tag":"refentry","type":"Function","methodName":"getImageType"},{"id":"imagick.getimageunits","name":"Imagick::getImageUnits","description":"Gets the image units of resolution","tag":"refentry","type":"Function","methodName":"getImageUnits"},{"id":"imagick.getimagevirtualpixelmethod","name":"Imagick::getImageVirtualPixelMethod","description":"Returns the virtual pixel method","tag":"refentry","type":"Function","methodName":"getImageVirtualPixelMethod"},{"id":"imagick.getimagewhitepoint","name":"Imagick::getImageWhitePoint","description":"Returns the chromaticity white point","tag":"refentry","type":"Function","methodName":"getImageWhitePoint"},{"id":"imagick.getimagewidth","name":"Imagick::getImageWidth","description":"Returns the image width","tag":"refentry","type":"Function","methodName":"getImageWidth"},{"id":"imagick.getinterlacescheme","name":"Imagick::getInterlaceScheme","description":"Gets the object interlace scheme","tag":"refentry","type":"Function","methodName":"getInterlaceScheme"},{"id":"imagick.getiteratorindex","name":"Imagick::getIteratorIndex","description":"Gets the index of the current active image","tag":"refentry","type":"Function","methodName":"getIteratorIndex"},{"id":"imagick.getnumberimages","name":"Imagick::getNumberImages","description":"Returns the number of images in the object","tag":"refentry","type":"Function","methodName":"getNumberImages"},{"id":"imagick.getoption","name":"Imagick::getOption","description":"Returns a value associated with the specified key","tag":"refentry","type":"Function","methodName":"getOption"},{"id":"imagick.getpackagename","name":"Imagick::getPackageName","description":"Returns the ImageMagick package name","tag":"refentry","type":"Function","methodName":"getPackageName"},{"id":"imagick.getpage","name":"Imagick::getPage","description":"Returns the page geometry","tag":"refentry","type":"Function","methodName":"getPage"},{"id":"imagick.getpixeliterator","name":"Imagick::getPixelIterator","description":"Returns a MagickPixelIterator","tag":"refentry","type":"Function","methodName":"getPixelIterator"},{"id":"imagick.getpixelregioniterator","name":"Imagick::getPixelRegionIterator","description":"Get an ImagickPixelIterator for an image section","tag":"refentry","type":"Function","methodName":"getPixelRegionIterator"},{"id":"imagick.getpointsize","name":"Imagick::getPointSize","description":"Gets point size","tag":"refentry","type":"Function","methodName":"getPointSize"},{"id":"imagick.getquantum","name":"Imagick::getQuantum","description":"Returns the ImageMagick quantum range","tag":"refentry","type":"Function","methodName":"getQuantum"},{"id":"imagick.getquantumdepth","name":"Imagick::getQuantumDepth","description":"Gets the quantum depth","tag":"refentry","type":"Function","methodName":"getQuantumDepth"},{"id":"imagick.getquantumrange","name":"Imagick::getQuantumRange","description":"Returns the Imagick quantum range","tag":"refentry","type":"Function","methodName":"getQuantumRange"},{"id":"imagick.getregistry","name":"Imagick::getRegistry","description":"Get a StringRegistry entry","tag":"refentry","type":"Function","methodName":"getRegistry"},{"id":"imagick.getreleasedate","name":"Imagick::getReleaseDate","description":"Returns the ImageMagick release date","tag":"refentry","type":"Function","methodName":"getReleaseDate"},{"id":"imagick.getresource","name":"Imagick::getResource","description":"Returns the specified resource's memory usage","tag":"refentry","type":"Function","methodName":"getResource"},{"id":"imagick.getresourcelimit","name":"Imagick::getResourceLimit","description":"Returns the specified resource limit","tag":"refentry","type":"Function","methodName":"getResourceLimit"},{"id":"imagick.getsamplingfactors","name":"Imagick::getSamplingFactors","description":"Gets the horizontal and vertical sampling factor","tag":"refentry","type":"Function","methodName":"getSamplingFactors"},{"id":"imagick.getsize","name":"Imagick::getSize","description":"Returns the size associated with the Imagick object","tag":"refentry","type":"Function","methodName":"getSize"},{"id":"imagick.getsizeoffset","name":"Imagick::getSizeOffset","description":"Returns the size offset","tag":"refentry","type":"Function","methodName":"getSizeOffset"},{"id":"imagick.getversion","name":"Imagick::getVersion","description":"Returns the ImageMagick API version","tag":"refentry","type":"Function","methodName":"getVersion"},{"id":"imagick.haldclutimage","name":"Imagick::haldClutImage","description":"Replaces colors in the image","tag":"refentry","type":"Function","methodName":"haldClutImage"},{"id":"imagick.hasnextimage","name":"Imagick::hasNextImage","description":"Checks if the object has more images","tag":"refentry","type":"Function","methodName":"hasNextImage"},{"id":"imagick.haspreviousimage","name":"Imagick::hasPreviousImage","description":"Checks if the object has a previous image","tag":"refentry","type":"Function","methodName":"hasPreviousImage"},{"id":"imagick.identifyformat","name":"Imagick::identifyFormat","description":"Formats a string with image details","tag":"refentry","type":"Function","methodName":"identifyFormat"},{"id":"imagick.identifyimage","name":"Imagick::identifyImage","description":"Identifies an image and fetches attributes","tag":"refentry","type":"Function","methodName":"identifyImage"},{"id":"imagick.implodeimage","name":"Imagick::implodeImage","description":"Creates a new image as a copy","tag":"refentry","type":"Function","methodName":"implodeImage"},{"id":"imagick.importimagepixels","name":"Imagick::importImagePixels","description":"Imports image pixels","tag":"refentry","type":"Function","methodName":"importImagePixels"},{"id":"imagick.inversefouriertransformimage","name":"Imagick::inverseFourierTransformImage","description":"Implements the inverse discrete Fourier transform (DFT)","tag":"refentry","type":"Function","methodName":"inverseFourierTransformImage"},{"id":"imagick.labelimage","name":"Imagick::labelImage","description":"Adds a label to an image","tag":"refentry","type":"Function","methodName":"labelImage"},{"id":"imagick.levelimage","name":"Imagick::levelImage","description":"Adjusts the levels of an image","tag":"refentry","type":"Function","methodName":"levelImage"},{"id":"imagick.linearstretchimage","name":"Imagick::linearStretchImage","description":"Stretches with saturation the image intensity","tag":"refentry","type":"Function","methodName":"linearStretchImage"},{"id":"imagick.liquidrescaleimage","name":"Imagick::liquidRescaleImage","description":"Animates an image or images","tag":"refentry","type":"Function","methodName":"liquidRescaleImage"},{"id":"imagick.listregistry","name":"Imagick::listRegistry","description":"List all the registry settings","tag":"refentry","type":"Function","methodName":"listRegistry"},{"id":"imagick.magnifyimage","name":"Imagick::magnifyImage","description":"Scales an image proportionally 2x","tag":"refentry","type":"Function","methodName":"magnifyImage"},{"id":"imagick.mapimage","name":"Imagick::mapImage","description":"Replaces the colors of an image with the closest color from a reference image","tag":"refentry","type":"Function","methodName":"mapImage"},{"id":"imagick.mattefloodfillimage","name":"Imagick::matteFloodfillImage","description":"Changes the transparency value of a color","tag":"refentry","type":"Function","methodName":"matteFloodfillImage"},{"id":"imagick.medianfilterimage","name":"Imagick::medianFilterImage","description":"Applies a digital filter","tag":"refentry","type":"Function","methodName":"medianFilterImage"},{"id":"imagick.mergeimagelayers","name":"Imagick::mergeImageLayers","description":"Merges image layers","tag":"refentry","type":"Function","methodName":"mergeImageLayers"},{"id":"imagick.minifyimage","name":"Imagick::minifyImage","description":"Scales an image proportionally to half its size","tag":"refentry","type":"Function","methodName":"minifyImage"},{"id":"imagick.modulateimage","name":"Imagick::modulateImage","description":"Control the brightness, saturation, and hue","tag":"refentry","type":"Function","methodName":"modulateImage"},{"id":"imagick.montageimage","name":"Imagick::montageImage","description":"Creates a composite image","tag":"refentry","type":"Function","methodName":"montageImage"},{"id":"imagick.morphimages","name":"Imagick::morphImages","description":"Method morphs a set of images","tag":"refentry","type":"Function","methodName":"morphImages"},{"id":"imagick.morphology","name":"Imagick::morphology","description":"Applies a user supplied kernel to the image according to the given morphology method.","tag":"refentry","type":"Function","methodName":"morphology"},{"id":"imagick.mosaicimages","name":"Imagick::mosaicImages","description":"Forms a mosaic from images","tag":"refentry","type":"Function","methodName":"mosaicImages"},{"id":"imagick.motionblurimage","name":"Imagick::motionBlurImage","description":"Simulates motion blur","tag":"refentry","type":"Function","methodName":"motionBlurImage"},{"id":"imagick.negateimage","name":"Imagick::negateImage","description":"Negates the colors in the reference image","tag":"refentry","type":"Function","methodName":"negateImage"},{"id":"imagick.newimage","name":"Imagick::newImage","description":"Creates a new image","tag":"refentry","type":"Function","methodName":"newImage"},{"id":"imagick.newpseudoimage","name":"Imagick::newPseudoImage","description":"Creates a new image","tag":"refentry","type":"Function","methodName":"newPseudoImage"},{"id":"imagick.nextimage","name":"Imagick::nextImage","description":"Moves to the next image","tag":"refentry","type":"Function","methodName":"nextImage"},{"id":"imagick.normalizeimage","name":"Imagick::normalizeImage","description":"Enhances the contrast of a color image","tag":"refentry","type":"Function","methodName":"normalizeImage"},{"id":"imagick.oilpaintimage","name":"Imagick::oilPaintImage","description":"Simulates an oil painting","tag":"refentry","type":"Function","methodName":"oilPaintImage"},{"id":"imagick.opaquepaintimage","name":"Imagick::opaquePaintImage","description":"Changes the color value of any pixel that matches target","tag":"refentry","type":"Function","methodName":"opaquePaintImage"},{"id":"imagick.optimizeimagelayers","name":"Imagick::optimizeImageLayers","description":"Removes repeated portions of images to optimize","tag":"refentry","type":"Function","methodName":"optimizeImageLayers"},{"id":"imagick.orderedposterizeimage","name":"Imagick::orderedPosterizeImage","description":"Performs an ordered dither","tag":"refentry","type":"Function","methodName":"orderedPosterizeImage"},{"id":"imagick.paintfloodfillimage","name":"Imagick::paintFloodfillImage","description":"Changes the color value of any pixel that matches target","tag":"refentry","type":"Function","methodName":"paintFloodfillImage"},{"id":"imagick.paintopaqueimage","name":"Imagick::paintOpaqueImage","description":"Change any pixel that matches color","tag":"refentry","type":"Function","methodName":"paintOpaqueImage"},{"id":"imagick.painttransparentimage","name":"Imagick::paintTransparentImage","description":"Changes any pixel that matches color with the color defined by fill","tag":"refentry","type":"Function","methodName":"paintTransparentImage"},{"id":"imagick.pingimage","name":"Imagick::pingImage","description":"Fetch basic attributes about the image","tag":"refentry","type":"Function","methodName":"pingImage"},{"id":"imagick.pingimageblob","name":"Imagick::pingImageBlob","description":"Quickly fetch attributes","tag":"refentry","type":"Function","methodName":"pingImageBlob"},{"id":"imagick.pingimagefile","name":"Imagick::pingImageFile","description":"Get basic image attributes in a lightweight manner","tag":"refentry","type":"Function","methodName":"pingImageFile"},{"id":"imagick.polaroidimage","name":"Imagick::polaroidImage","description":"Simulates a Polaroid picture","tag":"refentry","type":"Function","methodName":"polaroidImage"},{"id":"imagick.posterizeimage","name":"Imagick::posterizeImage","description":"Reduces the image to a limited number of color level","tag":"refentry","type":"Function","methodName":"posterizeImage"},{"id":"imagick.previewimages","name":"Imagick::previewImages","description":"Quickly pin-point appropriate parameters for image processing","tag":"refentry","type":"Function","methodName":"previewImages"},{"id":"imagick.previousimage","name":"Imagick::previousImage","description":"Move to the previous image in the object","tag":"refentry","type":"Function","methodName":"previousImage"},{"id":"imagick.profileimage","name":"Imagick::profileImage","description":"Adds or removes a profile from an image","tag":"refentry","type":"Function","methodName":"profileImage"},{"id":"imagick.quantizeimage","name":"Imagick::quantizeImage","description":"Analyzes the colors within a reference image","tag":"refentry","type":"Function","methodName":"quantizeImage"},{"id":"imagick.quantizeimages","name":"Imagick::quantizeImages","description":"Analyzes the colors within a sequence of images","tag":"refentry","type":"Function","methodName":"quantizeImages"},{"id":"imagick.queryfontmetrics","name":"Imagick::queryFontMetrics","description":"Returns an array representing the font metrics","tag":"refentry","type":"Function","methodName":"queryFontMetrics"},{"id":"imagick.queryfonts","name":"Imagick::queryFonts","description":"Returns the configured fonts","tag":"refentry","type":"Function","methodName":"queryFonts"},{"id":"imagick.queryformats","name":"Imagick::queryFormats","description":"Returns formats supported by Imagick","tag":"refentry","type":"Function","methodName":"queryFormats"},{"id":"imagick.radialblurimage","name":"Imagick::radialBlurImage","description":"Radial blurs an image","tag":"refentry","type":"Function","methodName":"radialBlurImage"},{"id":"imagick.raiseimage","name":"Imagick::raiseImage","description":"Creates a simulated 3d button-like effect","tag":"refentry","type":"Function","methodName":"raiseImage"},{"id":"imagick.randomthresholdimage","name":"Imagick::randomThresholdImage","description":"Creates a high-contrast, two-color image","tag":"refentry","type":"Function","methodName":"randomThresholdImage"},{"id":"imagick.readimage","name":"Imagick::readImage","description":"Reads image from filename","tag":"refentry","type":"Function","methodName":"readImage"},{"id":"imagick.readimageblob","name":"Imagick::readImageBlob","description":"Reads image from a binary string","tag":"refentry","type":"Function","methodName":"readImageBlob"},{"id":"imagick.readimagefile","name":"Imagick::readImageFile","description":"Reads image from open filehandle","tag":"refentry","type":"Function","methodName":"readImageFile"},{"id":"imagick.readimages","name":"Imagick::readimages","description":"Reads image from an array of filenames","tag":"refentry","type":"Function","methodName":"readimages"},{"id":"imagick.recolorimage","name":"Imagick::recolorImage","description":"Recolors image","tag":"refentry","type":"Function","methodName":"recolorImage"},{"id":"imagick.reducenoiseimage","name":"Imagick::reduceNoiseImage","description":"Smooths the contours of an image","tag":"refentry","type":"Function","methodName":"reduceNoiseImage"},{"id":"imagick.remapimage","name":"Imagick::remapImage","description":"Remaps image colors","tag":"refentry","type":"Function","methodName":"remapImage"},{"id":"imagick.removeimage","name":"Imagick::removeImage","description":"Removes an image from the image list","tag":"refentry","type":"Function","methodName":"removeImage"},{"id":"imagick.removeimageprofile","name":"Imagick::removeImageProfile","description":"Removes the named image profile and returns it","tag":"refentry","type":"Function","methodName":"removeImageProfile"},{"id":"imagick.render","name":"Imagick::render","description":"Renders all preceding drawing commands","tag":"refentry","type":"Function","methodName":"render"},{"id":"imagick.resampleimage","name":"Imagick::resampleImage","description":"Resample image to desired resolution","tag":"refentry","type":"Function","methodName":"resampleImage"},{"id":"imagick.resetimagepage","name":"Imagick::resetImagePage","description":"Reset image page","tag":"refentry","type":"Function","methodName":"resetImagePage"},{"id":"imagick.resizeimage","name":"Imagick::resizeImage","description":"Scales an image","tag":"refentry","type":"Function","methodName":"resizeImage"},{"id":"imagick.rollimage","name":"Imagick::rollImage","description":"Offsets an image","tag":"refentry","type":"Function","methodName":"rollImage"},{"id":"imagick.rotateimage","name":"Imagick::rotateImage","description":"Rotates an image","tag":"refentry","type":"Function","methodName":"rotateImage"},{"id":"imagick.rotationalblurimage","name":"Imagick::rotationalBlurImage","description":"Rotational blurs an image","tag":"refentry","type":"Function","methodName":"rotationalBlurImage"},{"id":"imagick.roundcorners","name":"Imagick::roundCorners","description":"Rounds image corners","tag":"refentry","type":"Function","methodName":"roundCorners"},{"id":"imagick.sampleimage","name":"Imagick::sampleImage","description":"Scales an image with pixel sampling","tag":"refentry","type":"Function","methodName":"sampleImage"},{"id":"imagick.scaleimage","name":"Imagick::scaleImage","description":"Scales the size of an image","tag":"refentry","type":"Function","methodName":"scaleImage"},{"id":"imagick.segmentimage","name":"Imagick::segmentImage","description":"Segments an image","tag":"refentry","type":"Function","methodName":"segmentImage"},{"id":"imagick.selectiveblurimage","name":"Imagick::selectiveBlurImage","description":"Selectively blur an image within a contrast threshold","tag":"refentry","type":"Function","methodName":"selectiveBlurImage"},{"id":"imagick.separateimagechannel","name":"Imagick::separateImageChannel","description":"Separates a channel from the image","tag":"refentry","type":"Function","methodName":"separateImageChannel"},{"id":"imagick.sepiatoneimage","name":"Imagick::sepiaToneImage","description":"Sepia tones an image","tag":"refentry","type":"Function","methodName":"sepiaToneImage"},{"id":"imagick.setbackgroundcolor","name":"Imagick::setBackgroundColor","description":"Sets the object's default background color","tag":"refentry","type":"Function","methodName":"setBackgroundColor"},{"id":"imagick.setcolorspace","name":"Imagick::setColorspace","description":"Set colorspace","tag":"refentry","type":"Function","methodName":"setColorspace"},{"id":"imagick.setcompression","name":"Imagick::setCompression","description":"Sets the object's default compression type","tag":"refentry","type":"Function","methodName":"setCompression"},{"id":"imagick.setcompressionquality","name":"Imagick::setCompressionQuality","description":"Sets the object's default compression quality","tag":"refentry","type":"Function","methodName":"setCompressionQuality"},{"id":"imagick.setfilename","name":"Imagick::setFilename","description":"Sets the filename before you read or write the image","tag":"refentry","type":"Function","methodName":"setFilename"},{"id":"imagick.setfirstiterator","name":"Imagick::setFirstIterator","description":"Sets the Imagick iterator to the first image","tag":"refentry","type":"Function","methodName":"setFirstIterator"},{"id":"imagick.setfont","name":"Imagick::setFont","description":"Sets font","tag":"refentry","type":"Function","methodName":"setFont"},{"id":"imagick.setformat","name":"Imagick::setFormat","description":"Sets the format of the Imagick object","tag":"refentry","type":"Function","methodName":"setFormat"},{"id":"imagick.setgravity","name":"Imagick::setGravity","description":"Sets the gravity","tag":"refentry","type":"Function","methodName":"setGravity"},{"id":"imagick.setimage","name":"Imagick::setImage","description":"Replaces image in the object","tag":"refentry","type":"Function","methodName":"setImage"},{"id":"imagick.setimagealphachannel","name":"Imagick::setImageAlphaChannel","description":"Sets image alpha channel","tag":"refentry","type":"Function","methodName":"setImageAlphaChannel"},{"id":"imagick.setimageartifact","name":"Imagick::setImageArtifact","description":"Set image artifact","tag":"refentry","type":"Function","methodName":"setImageArtifact"},{"id":"imagick.setimageattribute","name":"Imagick::setImageAttribute","description":"Sets an image attribute","tag":"refentry","type":"Function","methodName":"setImageAttribute"},{"id":"imagick.setimagebackgroundcolor","name":"Imagick::setImageBackgroundColor","description":"Sets the image background color","tag":"refentry","type":"Function","methodName":"setImageBackgroundColor"},{"id":"imagick.setimagebias","name":"Imagick::setImageBias","description":"Sets the image bias for any method that convolves an image","tag":"refentry","type":"Function","methodName":"setImageBias"},{"id":"imagick.setimagebiasquantum","name":"Imagick::setImageBiasQuantum","description":"Sets the image bias","tag":"refentry","type":"Function","methodName":"setImageBiasQuantum"},{"id":"imagick.setimageblueprimary","name":"Imagick::setImageBluePrimary","description":"Sets the image chromaticity blue primary point","tag":"refentry","type":"Function","methodName":"setImageBluePrimary"},{"id":"imagick.setimagebordercolor","name":"Imagick::setImageBorderColor","description":"Sets the image border color","tag":"refentry","type":"Function","methodName":"setImageBorderColor"},{"id":"imagick.setimagechanneldepth","name":"Imagick::setImageChannelDepth","description":"Sets the depth of a particular image channel","tag":"refentry","type":"Function","methodName":"setImageChannelDepth"},{"id":"imagick.setimageclipmask","name":"Imagick::setImageClipMask","description":"Sets image clip mask","tag":"refentry","type":"Function","methodName":"setImageClipMask"},{"id":"imagick.setimagecolormapcolor","name":"Imagick::setImageColormapColor","description":"Sets the color of the specified colormap index","tag":"refentry","type":"Function","methodName":"setImageColormapColor"},{"id":"imagick.setimagecolorspace","name":"Imagick::setImageColorspace","description":"Sets the image colorspace","tag":"refentry","type":"Function","methodName":"setImageColorspace"},{"id":"imagick.setimagecompose","name":"Imagick::setImageCompose","description":"Sets the image composite operator","tag":"refentry","type":"Function","methodName":"setImageCompose"},{"id":"imagick.setimagecompression","name":"Imagick::setImageCompression","description":"Sets the image compression","tag":"refentry","type":"Function","methodName":"setImageCompression"},{"id":"imagick.setimagecompressionquality","name":"Imagick::setImageCompressionQuality","description":"Sets the image compression quality","tag":"refentry","type":"Function","methodName":"setImageCompressionQuality"},{"id":"imagick.setimagedelay","name":"Imagick::setImageDelay","description":"Sets the image delay","tag":"refentry","type":"Function","methodName":"setImageDelay"},{"id":"imagick.setimagedepth","name":"Imagick::setImageDepth","description":"Sets the image depth","tag":"refentry","type":"Function","methodName":"setImageDepth"},{"id":"imagick.setimagedispose","name":"Imagick::setImageDispose","description":"Sets the image disposal method","tag":"refentry","type":"Function","methodName":"setImageDispose"},{"id":"imagick.setimageextent","name":"Imagick::setImageExtent","description":"Sets the image size","tag":"refentry","type":"Function","methodName":"setImageExtent"},{"id":"imagick.setimagefilename","name":"Imagick::setImageFilename","description":"Sets the filename of a particular image","tag":"refentry","type":"Function","methodName":"setImageFilename"},{"id":"imagick.setimageformat","name":"Imagick::setImageFormat","description":"Sets the format of a particular image","tag":"refentry","type":"Function","methodName":"setImageFormat"},{"id":"imagick.setimagegamma","name":"Imagick::setImageGamma","description":"Sets the image gamma","tag":"refentry","type":"Function","methodName":"setImageGamma"},{"id":"imagick.setimagegravity","name":"Imagick::setImageGravity","description":"Sets the image gravity","tag":"refentry","type":"Function","methodName":"setImageGravity"},{"id":"imagick.setimagegreenprimary","name":"Imagick::setImageGreenPrimary","description":"Sets the image chromaticity green primary point","tag":"refentry","type":"Function","methodName":"setImageGreenPrimary"},{"id":"imagick.setimageindex","name":"Imagick::setImageIndex","description":"Set the iterator position","tag":"refentry","type":"Function","methodName":"setImageIndex"},{"id":"imagick.setimageinterlacescheme","name":"Imagick::setImageInterlaceScheme","description":"Sets the image compression","tag":"refentry","type":"Function","methodName":"setImageInterlaceScheme"},{"id":"imagick.setimageinterpolatemethod","name":"Imagick::setImageInterpolateMethod","description":"Sets the image interpolate pixel method","tag":"refentry","type":"Function","methodName":"setImageInterpolateMethod"},{"id":"imagick.setimageiterations","name":"Imagick::setImageIterations","description":"Sets the image iterations","tag":"refentry","type":"Function","methodName":"setImageIterations"},{"id":"imagick.setimagematte","name":"Imagick::setImageMatte","description":"Sets the image matte channel","tag":"refentry","type":"Function","methodName":"setImageMatte"},{"id":"imagick.setimagemattecolor","name":"Imagick::setImageMatteColor","description":"Sets the image matte color","tag":"refentry","type":"Function","methodName":"setImageMatteColor"},{"id":"imagick.setimageopacity","name":"Imagick::setImageOpacity","description":"Sets the image opacity level","tag":"refentry","type":"Function","methodName":"setImageOpacity"},{"id":"imagick.setimageorientation","name":"Imagick::setImageOrientation","description":"Sets the image orientation","tag":"refentry","type":"Function","methodName":"setImageOrientation"},{"id":"imagick.setimagepage","name":"Imagick::setImagePage","description":"Sets the page geometry of the image","tag":"refentry","type":"Function","methodName":"setImagePage"},{"id":"imagick.setimageprofile","name":"Imagick::setImageProfile","description":"Adds a named profile to the Imagick object","tag":"refentry","type":"Function","methodName":"setImageProfile"},{"id":"imagick.setimageproperty","name":"Imagick::setImageProperty","description":"Sets an image property","tag":"refentry","type":"Function","methodName":"setImageProperty"},{"id":"imagick.setimageredprimary","name":"Imagick::setImageRedPrimary","description":"Sets the image chromaticity red primary point","tag":"refentry","type":"Function","methodName":"setImageRedPrimary"},{"id":"imagick.setimagerenderingintent","name":"Imagick::setImageRenderingIntent","description":"Sets the image rendering intent","tag":"refentry","type":"Function","methodName":"setImageRenderingIntent"},{"id":"imagick.setimageresolution","name":"Imagick::setImageResolution","description":"Sets the image resolution","tag":"refentry","type":"Function","methodName":"setImageResolution"},{"id":"imagick.setimagescene","name":"Imagick::setImageScene","description":"Sets the image scene","tag":"refentry","type":"Function","methodName":"setImageScene"},{"id":"imagick.setimagetickspersecond","name":"Imagick::setImageTicksPerSecond","description":"Sets the image ticks-per-second","tag":"refentry","type":"Function","methodName":"setImageTicksPerSecond"},{"id":"imagick.setimagetype","name":"Imagick::setImageType","description":"Sets the image type","tag":"refentry","type":"Function","methodName":"setImageType"},{"id":"imagick.setimageunits","name":"Imagick::setImageUnits","description":"Sets the image units of resolution","tag":"refentry","type":"Function","methodName":"setImageUnits"},{"id":"imagick.setimagevirtualpixelmethod","name":"Imagick::setImageVirtualPixelMethod","description":"Sets the image virtual pixel method","tag":"refentry","type":"Function","methodName":"setImageVirtualPixelMethod"},{"id":"imagick.setimagewhitepoint","name":"Imagick::setImageWhitePoint","description":"Sets the image chromaticity white point","tag":"refentry","type":"Function","methodName":"setImageWhitePoint"},{"id":"imagick.setinterlacescheme","name":"Imagick::setInterlaceScheme","description":"Sets the image compression","tag":"refentry","type":"Function","methodName":"setInterlaceScheme"},{"id":"imagick.setiteratorindex","name":"Imagick::setIteratorIndex","description":"Set the iterator position","tag":"refentry","type":"Function","methodName":"setIteratorIndex"},{"id":"imagick.setlastiterator","name":"Imagick::setLastIterator","description":"Sets the Imagick iterator to the last image","tag":"refentry","type":"Function","methodName":"setLastIterator"},{"id":"imagick.setoption","name":"Imagick::setOption","description":"Set an option","tag":"refentry","type":"Function","methodName":"setOption"},{"id":"imagick.setpage","name":"Imagick::setPage","description":"Sets the page geometry of the Imagick object","tag":"refentry","type":"Function","methodName":"setPage"},{"id":"imagick.setpointsize","name":"Imagick::setPointSize","description":"Sets point size","tag":"refentry","type":"Function","methodName":"setPointSize"},{"id":"imagick.setprogressmonitor","name":"Imagick::setProgressMonitor","description":"Set a callback to be called during processing","tag":"refentry","type":"Function","methodName":"setProgressMonitor"},{"id":"imagick.setregistry","name":"Imagick::setRegistry","description":"Sets the ImageMagick registry entry named key to value","tag":"refentry","type":"Function","methodName":"setRegistry"},{"id":"imagick.setresolution","name":"Imagick::setResolution","description":"Sets the image resolution","tag":"refentry","type":"Function","methodName":"setResolution"},{"id":"imagick.setresourcelimit","name":"Imagick::setResourceLimit","description":"Sets the limit for a particular resource","tag":"refentry","type":"Function","methodName":"setResourceLimit"},{"id":"imagick.setsamplingfactors","name":"Imagick::setSamplingFactors","description":"Sets the image sampling factors","tag":"refentry","type":"Function","methodName":"setSamplingFactors"},{"id":"imagick.setsize","name":"Imagick::setSize","description":"Sets the size of the Imagick object","tag":"refentry","type":"Function","methodName":"setSize"},{"id":"imagick.setsizeoffset","name":"Imagick::setSizeOffset","description":"Sets the size and offset of the Imagick object","tag":"refentry","type":"Function","methodName":"setSizeOffset"},{"id":"imagick.settype","name":"Imagick::setType","description":"Sets the image type attribute","tag":"refentry","type":"Function","methodName":"setType"},{"id":"imagick.shadeimage","name":"Imagick::shadeImage","description":"Creates a 3D effect","tag":"refentry","type":"Function","methodName":"shadeImage"},{"id":"imagick.shadowimage","name":"Imagick::shadowImage","description":"Simulates an image shadow","tag":"refentry","type":"Function","methodName":"shadowImage"},{"id":"imagick.sharpenimage","name":"Imagick::sharpenImage","description":"Sharpens an image","tag":"refentry","type":"Function","methodName":"sharpenImage"},{"id":"imagick.shaveimage","name":"Imagick::shaveImage","description":"Shaves pixels from the image edges","tag":"refentry","type":"Function","methodName":"shaveImage"},{"id":"imagick.shearimage","name":"Imagick::shearImage","description":"Creating a parallelogram","tag":"refentry","type":"Function","methodName":"shearImage"},{"id":"imagick.sigmoidalcontrastimage","name":"Imagick::sigmoidalContrastImage","description":"Adjusts the contrast of an image","tag":"refentry","type":"Function","methodName":"sigmoidalContrastImage"},{"id":"imagick.sketchimage","name":"Imagick::sketchImage","description":"Simulates a pencil sketch","tag":"refentry","type":"Function","methodName":"sketchImage"},{"id":"imagick.smushimages","name":"Imagick::smushImages","description":"Takes all images from the current image pointer to the end of the image list and smushs them","tag":"refentry","type":"Function","methodName":"smushImages"},{"id":"imagick.solarizeimage","name":"Imagick::solarizeImage","description":"Applies a solarizing effect to the image","tag":"refentry","type":"Function","methodName":"solarizeImage"},{"id":"imagick.sparsecolorimage","name":"Imagick::sparseColorImage","description":"Interpolates colors","tag":"refentry","type":"Function","methodName":"sparseColorImage"},{"id":"imagick.spliceimage","name":"Imagick::spliceImage","description":"Splices a solid color into the image","tag":"refentry","type":"Function","methodName":"spliceImage"},{"id":"imagick.spreadimage","name":"Imagick::spreadImage","description":"Randomly displaces each pixel in a block","tag":"refentry","type":"Function","methodName":"spreadImage"},{"id":"imagick.statisticimage","name":"Imagick::statisticImage","description":"Modifies image using a statistics function","tag":"refentry","type":"Function","methodName":"statisticImage"},{"id":"imagick.steganoimage","name":"Imagick::steganoImage","description":"Hides a digital watermark within the image","tag":"refentry","type":"Function","methodName":"steganoImage"},{"id":"imagick.stereoimage","name":"Imagick::stereoImage","description":"Composites two images","tag":"refentry","type":"Function","methodName":"stereoImage"},{"id":"imagick.stripimage","name":"Imagick::stripImage","description":"Strips an image of all profiles and comments","tag":"refentry","type":"Function","methodName":"stripImage"},{"id":"imagick.subimagematch","name":"Imagick::subImageMatch","description":"Searches for a subimage in the current image and returns a similarity image","tag":"refentry","type":"Function","methodName":"subImageMatch"},{"id":"imagick.swirlimage","name":"Imagick::swirlImage","description":"Swirls the pixels about the center of the image","tag":"refentry","type":"Function","methodName":"swirlImage"},{"id":"imagick.textureimage","name":"Imagick::textureImage","description":"Repeatedly tiles the texture image","tag":"refentry","type":"Function","methodName":"textureImage"},{"id":"imagick.thresholdimage","name":"Imagick::thresholdImage","description":"Changes the value of individual pixels based on a threshold","tag":"refentry","type":"Function","methodName":"thresholdImage"},{"id":"imagick.thumbnailimage","name":"Imagick::thumbnailImage","description":"Changes the size of an image","tag":"refentry","type":"Function","methodName":"thumbnailImage"},{"id":"imagick.tintimage","name":"Imagick::tintImage","description":"Applies a color vector to each pixel in the image","tag":"refentry","type":"Function","methodName":"tintImage"},{"id":"imagick.tostring","name":"Imagick::__toString","description":"Returns the image as a string","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"imagick.transformimage","name":"Imagick::transformImage","description":"Convenience method for setting crop size and the image geometry","tag":"refentry","type":"Function","methodName":"transformImage"},{"id":"imagick.transformimagecolorspace","name":"Imagick::transformImageColorspace","description":"Transforms an image to a new colorspace","tag":"refentry","type":"Function","methodName":"transformImageColorspace"},{"id":"imagick.transparentpaintimage","name":"Imagick::transparentPaintImage","description":"Paints pixels transparent","tag":"refentry","type":"Function","methodName":"transparentPaintImage"},{"id":"imagick.transposeimage","name":"Imagick::transposeImage","description":"Creates a vertical mirror image","tag":"refentry","type":"Function","methodName":"transposeImage"},{"id":"imagick.transverseimage","name":"Imagick::transverseImage","description":"Creates a horizontal mirror image","tag":"refentry","type":"Function","methodName":"transverseImage"},{"id":"imagick.trimimage","name":"Imagick::trimImage","description":"Remove edges from the image","tag":"refentry","type":"Function","methodName":"trimImage"},{"id":"imagick.uniqueimagecolors","name":"Imagick::uniqueImageColors","description":"Discards all but one of any pixel color","tag":"refentry","type":"Function","methodName":"uniqueImageColors"},{"id":"imagick.unsharpmaskimage","name":"Imagick::unsharpMaskImage","description":"Sharpens an image","tag":"refentry","type":"Function","methodName":"unsharpMaskImage"},{"id":"imagick.valid","name":"Imagick::valid","description":"Checks if the current item is valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"imagick.vignetteimage","name":"Imagick::vignetteImage","description":"Adds vignette filter to the image","tag":"refentry","type":"Function","methodName":"vignetteImage"},{"id":"imagick.waveimage","name":"Imagick::waveImage","description":"Applies wave filter to the image","tag":"refentry","type":"Function","methodName":"waveImage"},{"id":"imagick.whitethresholdimage","name":"Imagick::whiteThresholdImage","description":"Force all pixels above the threshold into white","tag":"refentry","type":"Function","methodName":"whiteThresholdImage"},{"id":"imagick.writeimage","name":"Imagick::writeImage","description":"Writes an image to the specified filename","tag":"refentry","type":"Function","methodName":"writeImage"},{"id":"imagick.writeimagefile","name":"Imagick::writeImageFile","description":"Writes an image to a filehandle","tag":"refentry","type":"Function","methodName":"writeImageFile"},{"id":"imagick.writeimages","name":"Imagick::writeImages","description":"Writes an image or image sequence","tag":"refentry","type":"Function","methodName":"writeImages"},{"id":"imagick.writeimagesfile","name":"Imagick::writeImagesFile","description":"Writes frames to a filehandle","tag":"refentry","type":"Function","methodName":"writeImagesFile"},{"id":"class.imagick","name":"Imagick","description":"The Imagick class","tag":"phpdoc:classref","type":"Class","methodName":"Imagick"},{"id":"imagickdraw.affine","name":"ImagickDraw::affine","description":"Adjusts the current affine transformation matrix","tag":"refentry","type":"Function","methodName":"affine"},{"id":"imagickdraw.annotation","name":"ImagickDraw::annotation","description":"Draws text on the image","tag":"refentry","type":"Function","methodName":"annotation"},{"id":"imagickdraw.arc","name":"ImagickDraw::arc","description":"Draws an arc","tag":"refentry","type":"Function","methodName":"arc"},{"id":"imagickdraw.bezier","name":"ImagickDraw::bezier","description":"Draws a bezier curve","tag":"refentry","type":"Function","methodName":"bezier"},{"id":"imagickdraw.circle","name":"ImagickDraw::circle","description":"Draws a circle","tag":"refentry","type":"Function","methodName":"circle"},{"id":"imagickdraw.clear","name":"ImagickDraw::clear","description":"Clears the ImagickDraw","tag":"refentry","type":"Function","methodName":"clear"},{"id":"imagickdraw.clone","name":"ImagickDraw::clone","description":"Makes an exact copy of the specified ImagickDraw object","tag":"refentry","type":"Function","methodName":"clone"},{"id":"imagickdraw.color","name":"ImagickDraw::color","description":"Draws color on image","tag":"refentry","type":"Function","methodName":"color"},{"id":"imagickdraw.comment","name":"ImagickDraw::comment","description":"Adds a comment","tag":"refentry","type":"Function","methodName":"comment"},{"id":"imagickdraw.composite","name":"ImagickDraw::composite","description":"Composites an image onto the current image","tag":"refentry","type":"Function","methodName":"composite"},{"id":"imagickdraw.construct","name":"ImagickDraw::__construct","description":"The ImagickDraw constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"imagickdraw.destroy","name":"ImagickDraw::destroy","description":"Frees all associated resources","tag":"refentry","type":"Function","methodName":"destroy"},{"id":"imagickdraw.ellipse","name":"ImagickDraw::ellipse","description":"Draws an ellipse on the image","tag":"refentry","type":"Function","methodName":"ellipse"},{"id":"imagickdraw.getclippath","name":"ImagickDraw::getClipPath","description":"Obtains the current clipping path ID","tag":"refentry","type":"Function","methodName":"getClipPath"},{"id":"imagickdraw.getcliprule","name":"ImagickDraw::getClipRule","description":"Returns the current polygon fill rule","tag":"refentry","type":"Function","methodName":"getClipRule"},{"id":"imagickdraw.getclipunits","name":"ImagickDraw::getClipUnits","description":"Returns the interpretation of clip path units","tag":"refentry","type":"Function","methodName":"getClipUnits"},{"id":"imagickdraw.getfillcolor","name":"ImagickDraw::getFillColor","description":"Returns the fill color","tag":"refentry","type":"Function","methodName":"getFillColor"},{"id":"imagickdraw.getfillopacity","name":"ImagickDraw::getFillOpacity","description":"Returns the opacity used when drawing","tag":"refentry","type":"Function","methodName":"getFillOpacity"},{"id":"imagickdraw.getfillrule","name":"ImagickDraw::getFillRule","description":"Returns the fill rule","tag":"refentry","type":"Function","methodName":"getFillRule"},{"id":"imagickdraw.getfont","name":"ImagickDraw::getFont","description":"Returns the font","tag":"refentry","type":"Function","methodName":"getFont"},{"id":"imagickdraw.getfontfamily","name":"ImagickDraw::getFontFamily","description":"Returns the font family","tag":"refentry","type":"Function","methodName":"getFontFamily"},{"id":"imagickdraw.getfontsize","name":"ImagickDraw::getFontSize","description":"Returns the font pointsize","tag":"refentry","type":"Function","methodName":"getFontSize"},{"id":"imagickdraw.getfontstretch","name":"ImagickDraw::getFontStretch","description":"Gets the font stretch to use when annotating with text","tag":"refentry","type":"Function","methodName":"getFontStretch"},{"id":"imagickdraw.getfontstyle","name":"ImagickDraw::getFontStyle","description":"Returns the font style","tag":"refentry","type":"Function","methodName":"getFontStyle"},{"id":"imagickdraw.getfontweight","name":"ImagickDraw::getFontWeight","description":"Returns the font weight","tag":"refentry","type":"Function","methodName":"getFontWeight"},{"id":"imagickdraw.getgravity","name":"ImagickDraw::getGravity","description":"Returns the text placement gravity","tag":"refentry","type":"Function","methodName":"getGravity"},{"id":"imagickdraw.getstrokeantialias","name":"ImagickDraw::getStrokeAntialias","description":"Returns the current stroke antialias setting","tag":"refentry","type":"Function","methodName":"getStrokeAntialias"},{"id":"imagickdraw.getstrokecolor","name":"ImagickDraw::getStrokeColor","description":"Returns the color used for stroking object outlines","tag":"refentry","type":"Function","methodName":"getStrokeColor"},{"id":"imagickdraw.getstrokedasharray","name":"ImagickDraw::getStrokeDashArray","description":"Returns an array representing the pattern of dashes and gaps used to stroke paths","tag":"refentry","type":"Function","methodName":"getStrokeDashArray"},{"id":"imagickdraw.getstrokedashoffset","name":"ImagickDraw::getStrokeDashOffset","description":"Returns the offset into the dash pattern to start the dash","tag":"refentry","type":"Function","methodName":"getStrokeDashOffset"},{"id":"imagickdraw.getstrokelinecap","name":"ImagickDraw::getStrokeLineCap","description":"Returns the shape to be used at the end of open subpaths when they are stroked","tag":"refentry","type":"Function","methodName":"getStrokeLineCap"},{"id":"imagickdraw.getstrokelinejoin","name":"ImagickDraw::getStrokeLineJoin","description":"Returns the shape to be used at the corners of paths when they are stroked","tag":"refentry","type":"Function","methodName":"getStrokeLineJoin"},{"id":"imagickdraw.getstrokemiterlimit","name":"ImagickDraw::getStrokeMiterLimit","description":"Returns the stroke miter limit","tag":"refentry","type":"Function","methodName":"getStrokeMiterLimit"},{"id":"imagickdraw.getstrokeopacity","name":"ImagickDraw::getStrokeOpacity","description":"Returns the opacity of stroked object outlines","tag":"refentry","type":"Function","methodName":"getStrokeOpacity"},{"id":"imagickdraw.getstrokewidth","name":"ImagickDraw::getStrokeWidth","description":"Returns the width of the stroke used to draw object outlines","tag":"refentry","type":"Function","methodName":"getStrokeWidth"},{"id":"imagickdraw.gettextalignment","name":"ImagickDraw::getTextAlignment","description":"Returns the text alignment","tag":"refentry","type":"Function","methodName":"getTextAlignment"},{"id":"imagickdraw.gettextantialias","name":"ImagickDraw::getTextAntialias","description":"Returns the current text antialias setting","tag":"refentry","type":"Function","methodName":"getTextAntialias"},{"id":"imagickdraw.gettextdecoration","name":"ImagickDraw::getTextDecoration","description":"Returns the text decoration","tag":"refentry","type":"Function","methodName":"getTextDecoration"},{"id":"imagickdraw.gettextencoding","name":"ImagickDraw::getTextEncoding","description":"Returns the code set used for text annotations","tag":"refentry","type":"Function","methodName":"getTextEncoding"},{"id":"imagickdraw.gettextinterlinespacing","name":"ImagickDraw::getTextInterlineSpacing","description":"Gets the text interword spacing","tag":"refentry","type":"Function","methodName":"getTextInterlineSpacing"},{"id":"imagickdraw.gettextinterwordspacing","name":"ImagickDraw::getTextInterwordSpacing","description":"Gets the text interword spacing","tag":"refentry","type":"Function","methodName":"getTextInterwordSpacing"},{"id":"imagickdraw.gettextkerning","name":"ImagickDraw::getTextKerning","description":"Gets the text kerning","tag":"refentry","type":"Function","methodName":"getTextKerning"},{"id":"imagickdraw.gettextundercolor","name":"ImagickDraw::getTextUnderColor","description":"Returns the text under color","tag":"refentry","type":"Function","methodName":"getTextUnderColor"},{"id":"imagickdraw.getvectorgraphics","name":"ImagickDraw::getVectorGraphics","description":"Returns a string containing vector graphics","tag":"refentry","type":"Function","methodName":"getVectorGraphics"},{"id":"imagickdraw.line","name":"ImagickDraw::line","description":"Draws a line","tag":"refentry","type":"Function","methodName":"line"},{"id":"imagickdraw.matte","name":"ImagickDraw::matte","description":"Paints on the image's opacity channel","tag":"refentry","type":"Function","methodName":"matte"},{"id":"imagickdraw.pathclose","name":"ImagickDraw::pathClose","description":"Adds a path element to the current path","tag":"refentry","type":"Function","methodName":"pathClose"},{"id":"imagickdraw.pathcurvetoabsolute","name":"ImagickDraw::pathCurveToAbsolute","description":"Draws a cubic Bezier curve","tag":"refentry","type":"Function","methodName":"pathCurveToAbsolute"},{"id":"imagickdraw.pathcurvetoquadraticbezierabsolute","name":"ImagickDraw::pathCurveToQuadraticBezierAbsolute","description":"Draws a quadratic Bezier curve","tag":"refentry","type":"Function","methodName":"pathCurveToQuadraticBezierAbsolute"},{"id":"imagickdraw.pathcurvetoquadraticbezierrelative","name":"ImagickDraw::pathCurveToQuadraticBezierRelative","description":"Draws a quadratic Bezier curve","tag":"refentry","type":"Function","methodName":"pathCurveToQuadraticBezierRelative"},{"id":"imagickdraw.pathcurvetoquadraticbeziersmoothabsolute","name":"ImagickDraw::pathCurveToQuadraticBezierSmoothAbsolute","description":"Draws a quadratic Bezier curve","tag":"refentry","type":"Function","methodName":"pathCurveToQuadraticBezierSmoothAbsolute"},{"id":"imagickdraw.pathcurvetoquadraticbeziersmoothrelative","name":"ImagickDraw::pathCurveToQuadraticBezierSmoothRelative","description":"Draws a quadratic Bezier curve","tag":"refentry","type":"Function","methodName":"pathCurveToQuadraticBezierSmoothRelative"},{"id":"imagickdraw.pathcurvetorelative","name":"ImagickDraw::pathCurveToRelative","description":"Draws a cubic Bezier curve","tag":"refentry","type":"Function","methodName":"pathCurveToRelative"},{"id":"imagickdraw.pathcurvetosmoothabsolute","name":"ImagickDraw::pathCurveToSmoothAbsolute","description":"Draws a cubic Bezier curve","tag":"refentry","type":"Function","methodName":"pathCurveToSmoothAbsolute"},{"id":"imagickdraw.pathcurvetosmoothrelative","name":"ImagickDraw::pathCurveToSmoothRelative","description":"Draws a cubic Bezier curve","tag":"refentry","type":"Function","methodName":"pathCurveToSmoothRelative"},{"id":"imagickdraw.pathellipticarcabsolute","name":"ImagickDraw::pathEllipticArcAbsolute","description":"Draws an elliptical arc","tag":"refentry","type":"Function","methodName":"pathEllipticArcAbsolute"},{"id":"imagickdraw.pathellipticarcrelative","name":"ImagickDraw::pathEllipticArcRelative","description":"Draws an elliptical arc","tag":"refentry","type":"Function","methodName":"pathEllipticArcRelative"},{"id":"imagickdraw.pathfinish","name":"ImagickDraw::pathFinish","description":"Terminates the current path","tag":"refentry","type":"Function","methodName":"pathFinish"},{"id":"imagickdraw.pathlinetoabsolute","name":"ImagickDraw::pathLineToAbsolute","description":"Draws a line path","tag":"refentry","type":"Function","methodName":"pathLineToAbsolute"},{"id":"imagickdraw.pathlinetohorizontalabsolute","name":"ImagickDraw::pathLineToHorizontalAbsolute","description":"Draws a horizontal line path","tag":"refentry","type":"Function","methodName":"pathLineToHorizontalAbsolute"},{"id":"imagickdraw.pathlinetohorizontalrelative","name":"ImagickDraw::pathLineToHorizontalRelative","description":"Draws a horizontal line","tag":"refentry","type":"Function","methodName":"pathLineToHorizontalRelative"},{"id":"imagickdraw.pathlinetorelative","name":"ImagickDraw::pathLineToRelative","description":"Draws a line path","tag":"refentry","type":"Function","methodName":"pathLineToRelative"},{"id":"imagickdraw.pathlinetoverticalabsolute","name":"ImagickDraw::pathLineToVerticalAbsolute","description":"Draws a vertical line","tag":"refentry","type":"Function","methodName":"pathLineToVerticalAbsolute"},{"id":"imagickdraw.pathlinetoverticalrelative","name":"ImagickDraw::pathLineToVerticalRelative","description":"Draws a vertical line path","tag":"refentry","type":"Function","methodName":"pathLineToVerticalRelative"},{"id":"imagickdraw.pathmovetoabsolute","name":"ImagickDraw::pathMoveToAbsolute","description":"Starts a new sub-path","tag":"refentry","type":"Function","methodName":"pathMoveToAbsolute"},{"id":"imagickdraw.pathmovetorelative","name":"ImagickDraw::pathMoveToRelative","description":"Starts a new sub-path","tag":"refentry","type":"Function","methodName":"pathMoveToRelative"},{"id":"imagickdraw.pathstart","name":"ImagickDraw::pathStart","description":"Declares the start of a path drawing list","tag":"refentry","type":"Function","methodName":"pathStart"},{"id":"imagickdraw.point","name":"ImagickDraw::point","description":"Draws a point","tag":"refentry","type":"Function","methodName":"point"},{"id":"imagickdraw.polygon","name":"ImagickDraw::polygon","description":"Draws a polygon","tag":"refentry","type":"Function","methodName":"polygon"},{"id":"imagickdraw.polyline","name":"ImagickDraw::polyline","description":"Draws a polyline","tag":"refentry","type":"Function","methodName":"polyline"},{"id":"imagickdraw.pop","name":"ImagickDraw::pop","description":"Destroys the current ImagickDraw in the stack, and returns to the previously pushed ImagickDraw","tag":"refentry","type":"Function","methodName":"pop"},{"id":"imagickdraw.popclippath","name":"ImagickDraw::popClipPath","description":"Terminates a clip path definition","tag":"refentry","type":"Function","methodName":"popClipPath"},{"id":"imagickdraw.popdefs","name":"ImagickDraw::popDefs","description":"Terminates a definition list","tag":"refentry","type":"Function","methodName":"popDefs"},{"id":"imagickdraw.poppattern","name":"ImagickDraw::popPattern","description":"Terminates a pattern definition","tag":"refentry","type":"Function","methodName":"popPattern"},{"id":"imagickdraw.push","name":"ImagickDraw::push","description":"Clones the current ImagickDraw and pushes it to the stack","tag":"refentry","type":"Function","methodName":"push"},{"id":"imagickdraw.pushclippath","name":"ImagickDraw::pushClipPath","description":"Starts a clip path definition","tag":"refentry","type":"Function","methodName":"pushClipPath"},{"id":"imagickdraw.pushdefs","name":"ImagickDraw::pushDefs","description":"Indicates that following commands create named elements for early processing","tag":"refentry","type":"Function","methodName":"pushDefs"},{"id":"imagickdraw.pushpattern","name":"ImagickDraw::pushPattern","description":"Indicates that subsequent commands up to a ImagickDraw::opPattern() command comprise the definition of a named pattern","tag":"refentry","type":"Function","methodName":"pushPattern"},{"id":"imagickdraw.rectangle","name":"ImagickDraw::rectangle","description":"Draws a rectangle","tag":"refentry","type":"Function","methodName":"rectangle"},{"id":"imagickdraw.render","name":"ImagickDraw::render","description":"Renders all preceding drawing commands onto the image","tag":"refentry","type":"Function","methodName":"render"},{"id":"imagickdraw.resetvectorgraphics","name":"ImagickDraw::resetVectorGraphics","description":"Resets the vector graphics","tag":"refentry","type":"Function","methodName":"resetVectorGraphics"},{"id":"imagickdraw.rotate","name":"ImagickDraw::rotate","description":"Applies the specified rotation to the current coordinate space","tag":"refentry","type":"Function","methodName":"rotate"},{"id":"imagickdraw.roundrectangle","name":"ImagickDraw::roundRectangle","description":"Draws a rounded rectangle","tag":"refentry","type":"Function","methodName":"roundRectangle"},{"id":"imagickdraw.scale","name":"ImagickDraw::scale","description":"Adjusts the scaling factor","tag":"refentry","type":"Function","methodName":"scale"},{"id":"imagickdraw.setclippath","name":"ImagickDraw::setClipPath","description":"Associates a named clipping path with the image","tag":"refentry","type":"Function","methodName":"setClipPath"},{"id":"imagickdraw.setcliprule","name":"ImagickDraw::setClipRule","description":"Set the polygon fill rule to be used by the clipping path","tag":"refentry","type":"Function","methodName":"setClipRule"},{"id":"imagickdraw.setclipunits","name":"ImagickDraw::setClipUnits","description":"Sets the interpretation of clip path units","tag":"refentry","type":"Function","methodName":"setClipUnits"},{"id":"imagickdraw.setfillalpha","name":"ImagickDraw::setFillAlpha","description":"Sets the opacity to use when drawing using the fill color or fill texture","tag":"refentry","type":"Function","methodName":"setFillAlpha"},{"id":"imagickdraw.setfillcolor","name":"ImagickDraw::setFillColor","description":"Sets the fill color to be used for drawing filled objects","tag":"refentry","type":"Function","methodName":"setFillColor"},{"id":"imagickdraw.setfillopacity","name":"ImagickDraw::setFillOpacity","description":"Sets the opacity to use when drawing using the fill color or fill texture","tag":"refentry","type":"Function","methodName":"setFillOpacity"},{"id":"imagickdraw.setfillpatternurl","name":"ImagickDraw::setFillPatternURL","description":"Sets the URL to use as a fill pattern for filling objects","tag":"refentry","type":"Function","methodName":"setFillPatternURL"},{"id":"imagickdraw.setfillrule","name":"ImagickDraw::setFillRule","description":"Sets the fill rule to use while drawing polygons","tag":"refentry","type":"Function","methodName":"setFillRule"},{"id":"imagickdraw.setfont","name":"ImagickDraw::setFont","description":"Sets the fully-specified font to use when annotating with text","tag":"refentry","type":"Function","methodName":"setFont"},{"id":"imagickdraw.setfontfamily","name":"ImagickDraw::setFontFamily","description":"Sets the font family to use when annotating with text","tag":"refentry","type":"Function","methodName":"setFontFamily"},{"id":"imagickdraw.setfontsize","name":"ImagickDraw::setFontSize","description":"Sets the font pointsize to use when annotating with text","tag":"refentry","type":"Function","methodName":"setFontSize"},{"id":"imagickdraw.setfontstretch","name":"ImagickDraw::setFontStretch","description":"Sets the font stretch to use when annotating with text","tag":"refentry","type":"Function","methodName":"setFontStretch"},{"id":"imagickdraw.setfontstyle","name":"ImagickDraw::setFontStyle","description":"Sets the font style to use when annotating with text","tag":"refentry","type":"Function","methodName":"setFontStyle"},{"id":"imagickdraw.setfontweight","name":"ImagickDraw::setFontWeight","description":"Sets the font weight","tag":"refentry","type":"Function","methodName":"setFontWeight"},{"id":"imagickdraw.setgravity","name":"ImagickDraw::setGravity","description":"Sets the text placement gravity","tag":"refentry","type":"Function","methodName":"setGravity"},{"id":"imagickdraw.setresolution","name":"ImagickDraw::setResolution","description":"Sets the resolution","tag":"refentry","type":"Function","methodName":"setResolution"},{"id":"imagickdraw.setstrokealpha","name":"ImagickDraw::setStrokeAlpha","description":"Specifies the opacity of stroked object outlines","tag":"refentry","type":"Function","methodName":"setStrokeAlpha"},{"id":"imagickdraw.setstrokeantialias","name":"ImagickDraw::setStrokeAntialias","description":"Controls whether stroked outlines are antialiased","tag":"refentry","type":"Function","methodName":"setStrokeAntialias"},{"id":"imagickdraw.setstrokecolor","name":"ImagickDraw::setStrokeColor","description":"Sets the color used for stroking object outlines","tag":"refentry","type":"Function","methodName":"setStrokeColor"},{"id":"imagickdraw.setstrokedasharray","name":"ImagickDraw::setStrokeDashArray","description":"Specifies the pattern of dashes and gaps used to stroke paths","tag":"refentry","type":"Function","methodName":"setStrokeDashArray"},{"id":"imagickdraw.setstrokedashoffset","name":"ImagickDraw::setStrokeDashOffset","description":"Specifies the offset into the dash pattern to start the dash","tag":"refentry","type":"Function","methodName":"setStrokeDashOffset"},{"id":"imagickdraw.setstrokelinecap","name":"ImagickDraw::setStrokeLineCap","description":"Specifies the shape to be used at the end of open subpaths when they are stroked","tag":"refentry","type":"Function","methodName":"setStrokeLineCap"},{"id":"imagickdraw.setstrokelinejoin","name":"ImagickDraw::setStrokeLineJoin","description":"Specifies the shape to be used at the corners of paths when they are stroked","tag":"refentry","type":"Function","methodName":"setStrokeLineJoin"},{"id":"imagickdraw.setstrokemiterlimit","name":"ImagickDraw::setStrokeMiterLimit","description":"Specifies the miter limit","tag":"refentry","type":"Function","methodName":"setStrokeMiterLimit"},{"id":"imagickdraw.setstrokeopacity","name":"ImagickDraw::setStrokeOpacity","description":"Specifies the opacity of stroked object outlines","tag":"refentry","type":"Function","methodName":"setStrokeOpacity"},{"id":"imagickdraw.setstrokepatternurl","name":"ImagickDraw::setStrokePatternURL","description":"Sets the pattern used for stroking object outlines","tag":"refentry","type":"Function","methodName":"setStrokePatternURL"},{"id":"imagickdraw.setstrokewidth","name":"ImagickDraw::setStrokeWidth","description":"Sets the width of the stroke used to draw object outlines","tag":"refentry","type":"Function","methodName":"setStrokeWidth"},{"id":"imagickdraw.settextalignment","name":"ImagickDraw::setTextAlignment","description":"Specifies a text alignment","tag":"refentry","type":"Function","methodName":"setTextAlignment"},{"id":"imagickdraw.settextantialias","name":"ImagickDraw::setTextAntialias","description":"Controls whether text is antialiased","tag":"refentry","type":"Function","methodName":"setTextAntialias"},{"id":"imagickdraw.settextdecoration","name":"ImagickDraw::setTextDecoration","description":"Specifies a decoration","tag":"refentry","type":"Function","methodName":"setTextDecoration"},{"id":"imagickdraw.settextencoding","name":"ImagickDraw::setTextEncoding","description":"Specifies the text code set","tag":"refentry","type":"Function","methodName":"setTextEncoding"},{"id":"imagickdraw.settextinterlinespacing","name":"ImagickDraw::setTextInterlineSpacing","description":"Sets the text interline spacing","tag":"refentry","type":"Function","methodName":"setTextInterlineSpacing"},{"id":"imagickdraw.settextinterwordspacing","name":"ImagickDraw::setTextInterwordSpacing","description":"Sets the text interword spacing","tag":"refentry","type":"Function","methodName":"setTextInterwordSpacing"},{"id":"imagickdraw.settextkerning","name":"ImagickDraw::setTextKerning","description":"Sets the text kerning","tag":"refentry","type":"Function","methodName":"setTextKerning"},{"id":"imagickdraw.settextundercolor","name":"ImagickDraw::setTextUnderColor","description":"Specifies the color of a background rectangle","tag":"refentry","type":"Function","methodName":"setTextUnderColor"},{"id":"imagickdraw.setvectorgraphics","name":"ImagickDraw::setVectorGraphics","description":"Sets the vector graphics","tag":"refentry","type":"Function","methodName":"setVectorGraphics"},{"id":"imagickdraw.setviewbox","name":"ImagickDraw::setViewbox","description":"Sets the overall canvas size","tag":"refentry","type":"Function","methodName":"setViewbox"},{"id":"imagickdraw.skewx","name":"ImagickDraw::skewX","description":"Skews the current coordinate system in the horizontal direction","tag":"refentry","type":"Function","methodName":"skewX"},{"id":"imagickdraw.skewy","name":"ImagickDraw::skewY","description":"Skews the current coordinate system in the vertical direction","tag":"refentry","type":"Function","methodName":"skewY"},{"id":"imagickdraw.translate","name":"ImagickDraw::translate","description":"Applies a translation to the current coordinate system","tag":"refentry","type":"Function","methodName":"translate"},{"id":"class.imagickdraw","name":"ImagickDraw","description":"The ImagickDraw class","tag":"phpdoc:classref","type":"Class","methodName":"ImagickDraw"},{"id":"class.imagickdrawexception","name":"ImagickDrawException","description":"The ImagickDrawException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"ImagickDrawException"},{"id":"class.imagickexception","name":"ImagickException","description":"The ImagickException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"ImagickException"},{"id":"imagickkernel.addkernel","name":"ImagickKernel::addKernel","description":"Attach another kernel to a kernel list","tag":"refentry","type":"Function","methodName":"addKernel"},{"id":"imagickkernel.addunitykernel","name":"ImagickKernel::addUnityKernel","description":"Adds a Unity Kernel to the kernel list","tag":"refentry","type":"Function","methodName":"addUnityKernel"},{"id":"imagickkernel.frombuiltin","name":"ImagickKernel::fromBuiltIn","description":"Create a kernel from a builtin in kernel","tag":"refentry","type":"Function","methodName":"fromBuiltIn"},{"id":"imagickkernel.frommatrix","name":"ImagickKernel::fromMatrix","description":"Create a kernel from a 2d matrix of values","tag":"refentry","type":"Function","methodName":"fromMatrix"},{"id":"imagickkernel.getmatrix","name":"ImagickKernel::getMatrix","description":"Get the 2d matrix of values used in this kernel","tag":"refentry","type":"Function","methodName":"getMatrix"},{"id":"imagickkernel.scale","name":"ImagickKernel::scale","description":"Scales a kernel list by the given amount","tag":"refentry","type":"Function","methodName":"scale"},{"id":"imagickkernel.separate","name":"ImagickKernel::separate","description":"Separates a linked set of kernels and returns an array of ImagickKernels","tag":"refentry","type":"Function","methodName":"separate"},{"id":"class.imagickkernel","name":"ImagickKernel","description":"The ImagickKernel class","tag":"phpdoc:classref","type":"Class","methodName":"ImagickKernel"},{"id":"class.imagickkernelexception","name":"ImagickKernelException","description":"The ImagickKernelException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"ImagickKernelException"},{"id":"imagickpixel.clear","name":"ImagickPixel::clear","description":"Clears resources associated with this object","tag":"refentry","type":"Function","methodName":"clear"},{"id":"imagickpixel.construct","name":"ImagickPixel::__construct","description":"The ImagickPixel constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"imagickpixel.destroy","name":"ImagickPixel::destroy","description":"Deallocates resources associated with this object","tag":"refentry","type":"Function","methodName":"destroy"},{"id":"imagickpixel.getcolor","name":"ImagickPixel::getColor","description":"Returns the color","tag":"refentry","type":"Function","methodName":"getColor"},{"id":"imagickpixel.getcolorasstring","name":"ImagickPixel::getColorAsString","description":"Returns the color as a string","tag":"refentry","type":"Function","methodName":"getColorAsString"},{"id":"imagickpixel.getcolorcount","name":"ImagickPixel::getColorCount","description":"Returns the color count associated with this color","tag":"refentry","type":"Function","methodName":"getColorCount"},{"id":"imagickpixel.getcolorquantum","name":"ImagickPixel::getColorQuantum","description":"Returns the color of the pixel in an array as Quantum values","tag":"refentry","type":"Function","methodName":"getColorQuantum"},{"id":"imagickpixel.getcolorvalue","name":"ImagickPixel::getColorValue","description":"Gets the normalized value of the provided color channel","tag":"refentry","type":"Function","methodName":"getColorValue"},{"id":"imagickpixel.getcolorvaluequantum","name":"ImagickPixel::getColorValueQuantum","description":"Gets the quantum value of a color in the ImagickPixel","tag":"refentry","type":"Function","methodName":"getColorValueQuantum"},{"id":"imagickpixel.gethsl","name":"ImagickPixel::getHSL","description":"Returns the normalized HSL color of the ImagickPixel object","tag":"refentry","type":"Function","methodName":"getHSL"},{"id":"imagickpixel.getindex","name":"ImagickPixel::getIndex","description":"Gets the colormap index of the pixel wand","tag":"refentry","type":"Function","methodName":"getIndex"},{"id":"imagickpixel.ispixelsimilar","name":"ImagickPixel::isPixelSimilar","description":"Check the distance between this color and another","tag":"refentry","type":"Function","methodName":"isPixelSimilar"},{"id":"imagickpixel.ispixelsimilarquantum","name":"ImagickPixel::isPixelSimilarQuantum","description":"Returns whether two colors differ by less than the specified distance","tag":"refentry","type":"Function","methodName":"isPixelSimilarQuantum"},{"id":"imagickpixel.issimilar","name":"ImagickPixel::isSimilar","description":"Check the distance between this color and another","tag":"refentry","type":"Function","methodName":"isSimilar"},{"id":"imagickpixel.setcolor","name":"ImagickPixel::setColor","description":"Sets the color","tag":"refentry","type":"Function","methodName":"setColor"},{"id":"imagickpixel.setcolorcount","name":"ImagickPixel::setColorCount","description":"Sets the color count associated with this color","tag":"refentry","type":"Function","methodName":"setColorCount"},{"id":"imagickpixel.setcolorvalue","name":"ImagickPixel::setColorValue","description":"Sets the normalized value of one of the channels","tag":"refentry","type":"Function","methodName":"setColorValue"},{"id":"imagickpixel.setcolorvaluequantum","name":"ImagickPixel::setColorValueQuantum","description":"Sets the quantum value of a color element of the ImagickPixel","tag":"refentry","type":"Function","methodName":"setColorValueQuantum"},{"id":"imagickpixel.sethsl","name":"ImagickPixel::setHSL","description":"Sets the normalized HSL color","tag":"refentry","type":"Function","methodName":"setHSL"},{"id":"imagickpixel.setindex","name":"ImagickPixel::setIndex","description":"Sets the colormap index of the pixel wand","tag":"refentry","type":"Function","methodName":"setIndex"},{"id":"class.imagickpixel","name":"ImagickPixel","description":"The ImagickPixel class","tag":"phpdoc:classref","type":"Class","methodName":"ImagickPixel"},{"id":"class.imagickpixelexception","name":"ImagickPixelException","description":"The ImagickPixelException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"ImagickPixelException"},{"id":"imagickpixeliterator.clear","name":"ImagickPixelIterator::clear","description":"Clear resources associated with a PixelIterator","tag":"refentry","type":"Function","methodName":"clear"},{"id":"imagickpixeliterator.construct","name":"ImagickPixelIterator::__construct","description":"The ImagickPixelIterator constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"imagickpixeliterator.destroy","name":"ImagickPixelIterator::destroy","description":"Deallocates resources associated with a PixelIterator","tag":"refentry","type":"Function","methodName":"destroy"},{"id":"imagickpixeliterator.getcurrentiteratorrow","name":"ImagickPixelIterator::getCurrentIteratorRow","description":"Returns the current row of ImagickPixel objects","tag":"refentry","type":"Function","methodName":"getCurrentIteratorRow"},{"id":"imagickpixeliterator.getiteratorrow","name":"ImagickPixelIterator::getIteratorRow","description":"Returns the current pixel iterator row","tag":"refentry","type":"Function","methodName":"getIteratorRow"},{"id":"imagickpixeliterator.getnextiteratorrow","name":"ImagickPixelIterator::getNextIteratorRow","description":"Returns the next row of the pixel iterator","tag":"refentry","type":"Function","methodName":"getNextIteratorRow"},{"id":"imagickpixeliterator.getpreviousiteratorrow","name":"ImagickPixelIterator::getPreviousIteratorRow","description":"Returns the previous row","tag":"refentry","type":"Function","methodName":"getPreviousIteratorRow"},{"id":"imagickpixeliterator.newpixeliterator","name":"ImagickPixelIterator::newPixelIterator","description":"Returns a new pixel iterator","tag":"refentry","type":"Function","methodName":"newPixelIterator"},{"id":"imagickpixeliterator.newpixelregioniterator","name":"ImagickPixelIterator::newPixelRegionIterator","description":"Returns a new pixel iterator","tag":"refentry","type":"Function","methodName":"newPixelRegionIterator"},{"id":"imagickpixeliterator.resetiterator","name":"ImagickPixelIterator::resetIterator","description":"Resets the pixel iterator","tag":"refentry","type":"Function","methodName":"resetIterator"},{"id":"imagickpixeliterator.setiteratorfirstrow","name":"ImagickPixelIterator::setIteratorFirstRow","description":"Sets the pixel iterator to the first pixel row","tag":"refentry","type":"Function","methodName":"setIteratorFirstRow"},{"id":"imagickpixeliterator.setiteratorlastrow","name":"ImagickPixelIterator::setIteratorLastRow","description":"Sets the pixel iterator to the last pixel row","tag":"refentry","type":"Function","methodName":"setIteratorLastRow"},{"id":"imagickpixeliterator.setiteratorrow","name":"ImagickPixelIterator::setIteratorRow","description":"Set the pixel iterator row","tag":"refentry","type":"Function","methodName":"setIteratorRow"},{"id":"imagickpixeliterator.synciterator","name":"ImagickPixelIterator::syncIterator","description":"Syncs the pixel iterator","tag":"refentry","type":"Function","methodName":"syncIterator"},{"id":"class.imagickpixeliterator","name":"ImagickPixelIterator","description":"The ImagickPixelIterator class","tag":"phpdoc:classref","type":"Class","methodName":"ImagickPixelIterator"},{"id":"class.imagickpixeliteratorexception","name":"ImagickPixelIteratorException","description":"The ImagickPixelIteratorException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"ImagickPixelIteratorException"},{"id":"book.imagick","name":"ImageMagick","description":"Image Processing (ImageMagick)","tag":"book","type":"Extension","methodName":"ImageMagick"},{"id":"refs.utilspec.image","name":"Image Processing and Generation","description":"Function Reference","tag":"set","type":"Extension","methodName":"Image Processing and Generation"},{"id":"intro.imap","name":"Introduction","description":"IMAP, POP3 and NNTP","tag":"preface","type":"General","methodName":"Introduction"},{"id":"imap.requirements","name":"Requirements","description":"IMAP, POP3 and NNTP","tag":"section","type":"General","methodName":"Requirements"},{"id":"imap.installation","name":"Installation","description":"IMAP, POP3 and NNTP","tag":"section","type":"General","methodName":"Installation"},{"id":"imap.configuration","name":"Runtime Configuration","description":"IMAP, POP3 and NNTP","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"imap.resources","name":"Resource Types","description":"IMAP, POP3 and NNTP","tag":"section","type":"General","methodName":"Resource Types"},{"id":"imap.setup","name":"Installing\/Configuring","description":"IMAP, POP3 and NNTP","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"imap.constants","name":"Predefined Constants","description":"IMAP, POP3 and NNTP","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.imap-8bit","name":"imap_8bit","description":"Convert an 8bit string to a quoted-printable string","tag":"refentry","type":"Function","methodName":"imap_8bit"},{"id":"function.imap-alerts","name":"imap_alerts","description":"Returns all IMAP alert messages that have occurred","tag":"refentry","type":"Function","methodName":"imap_alerts"},{"id":"function.imap-append","name":"imap_append","description":"Append a string message to a specified mailbox","tag":"refentry","type":"Function","methodName":"imap_append"},{"id":"function.imap-base64","name":"imap_base64","description":"Decode BASE64 encoded text","tag":"refentry","type":"Function","methodName":"imap_base64"},{"id":"function.imap-binary","name":"imap_binary","description":"Convert an 8bit string to a base64 string","tag":"refentry","type":"Function","methodName":"imap_binary"},{"id":"function.imap-body","name":"imap_body","description":"Read the message body","tag":"refentry","type":"Function","methodName":"imap_body"},{"id":"function.imap-bodystruct","name":"imap_bodystruct","description":"Read the structure of a specified body section of a specific message","tag":"refentry","type":"Function","methodName":"imap_bodystruct"},{"id":"function.imap-check","name":"imap_check","description":"Check current mailbox","tag":"refentry","type":"Function","methodName":"imap_check"},{"id":"function.imap-clearflag-full","name":"imap_clearflag_full","description":"Clears flags on messages","tag":"refentry","type":"Function","methodName":"imap_clearflag_full"},{"id":"function.imap-close","name":"imap_close","description":"Close an IMAP stream","tag":"refentry","type":"Function","methodName":"imap_close"},{"id":"function.imap-create","name":"imap_create","description":"Alias of imap_createmailbox","tag":"refentry","type":"Function","methodName":"imap_create"},{"id":"function.imap-createmailbox","name":"imap_createmailbox","description":"Create a new mailbox","tag":"refentry","type":"Function","methodName":"imap_createmailbox"},{"id":"function.imap-delete","name":"imap_delete","description":"Mark a message for deletion from current mailbox","tag":"refentry","type":"Function","methodName":"imap_delete"},{"id":"function.imap-deletemailbox","name":"imap_deletemailbox","description":"Delete a mailbox","tag":"refentry","type":"Function","methodName":"imap_deletemailbox"},{"id":"function.imap-errors","name":"imap_errors","description":"Returns all of the IMAP errors that have occurred","tag":"refentry","type":"Function","methodName":"imap_errors"},{"id":"function.imap-expunge","name":"imap_expunge","description":"Delete all messages marked for deletion","tag":"refentry","type":"Function","methodName":"imap_expunge"},{"id":"function.imap-fetch-overview","name":"imap_fetch_overview","description":"Read an overview of the information in the headers of the given message","tag":"refentry","type":"Function","methodName":"imap_fetch_overview"},{"id":"function.imap-fetchbody","name":"imap_fetchbody","description":"Fetch a particular section of the body of the message","tag":"refentry","type":"Function","methodName":"imap_fetchbody"},{"id":"function.imap-fetchheader","name":"imap_fetchheader","description":"Returns header for a message","tag":"refentry","type":"Function","methodName":"imap_fetchheader"},{"id":"function.imap-fetchmime","name":"imap_fetchmime","description":"Fetch MIME headers for a particular section of the message","tag":"refentry","type":"Function","methodName":"imap_fetchmime"},{"id":"function.imap-fetchstructure","name":"imap_fetchstructure","description":"Read the structure of a particular message","tag":"refentry","type":"Function","methodName":"imap_fetchstructure"},{"id":"function.imap-fetchtext","name":"imap_fetchtext","description":"Alias of imap_body","tag":"refentry","type":"Function","methodName":"imap_fetchtext"},{"id":"function.imap-gc","name":"imap_gc","description":"Clears IMAP cache","tag":"refentry","type":"Function","methodName":"imap_gc"},{"id":"function.imap-get-quota","name":"imap_get_quota","description":"Retrieve the quota level settings, and usage statics per mailbox","tag":"refentry","type":"Function","methodName":"imap_get_quota"},{"id":"function.imap-get-quotaroot","name":"imap_get_quotaroot","description":"Retrieve the quota settings per user","tag":"refentry","type":"Function","methodName":"imap_get_quotaroot"},{"id":"function.imap-getacl","name":"imap_getacl","description":"Gets the ACL for a given mailbox","tag":"refentry","type":"Function","methodName":"imap_getacl"},{"id":"function.imap-getmailboxes","name":"imap_getmailboxes","description":"Read the list of mailboxes, returning detailed information on each one","tag":"refentry","type":"Function","methodName":"imap_getmailboxes"},{"id":"function.imap-getsubscribed","name":"imap_getsubscribed","description":"List all the subscribed mailboxes","tag":"refentry","type":"Function","methodName":"imap_getsubscribed"},{"id":"function.imap-header","name":"imap_header","description":"Alias of imap_headerinfo","tag":"refentry","type":"Function","methodName":"imap_header"},{"id":"function.imap-headerinfo","name":"imap_headerinfo","description":"Read the header of the message","tag":"refentry","type":"Function","methodName":"imap_headerinfo"},{"id":"function.imap-headers","name":"imap_headers","description":"Returns headers for all messages in a mailbox","tag":"refentry","type":"Function","methodName":"imap_headers"},{"id":"function.imap-is-open","name":"imap_is_open","description":"Check if the IMAP stream is still valid","tag":"refentry","type":"Function","methodName":"imap_is_open"},{"id":"function.imap-last-error","name":"imap_last_error","description":"Gets the last IMAP error that occurred during this page request","tag":"refentry","type":"Function","methodName":"imap_last_error"},{"id":"function.imap-list","name":"imap_list","description":"Read the list of mailboxes","tag":"refentry","type":"Function","methodName":"imap_list"},{"id":"function.imap-listmailbox","name":"imap_listmailbox","description":"Alias of imap_list","tag":"refentry","type":"Function","methodName":"imap_listmailbox"},{"id":"function.imap-listscan","name":"imap_listscan","description":"Returns the list of mailboxes that matches the given text","tag":"refentry","type":"Function","methodName":"imap_listscan"},{"id":"function.imap-listsubscribed","name":"imap_listsubscribed","description":"Alias of imap_lsub","tag":"refentry","type":"Function","methodName":"imap_listsubscribed"},{"id":"function.imap-lsub","name":"imap_lsub","description":"List all the subscribed mailboxes","tag":"refentry","type":"Function","methodName":"imap_lsub"},{"id":"function.imap-mail","name":"imap_mail","description":"Send an email message","tag":"refentry","type":"Function","methodName":"imap_mail"},{"id":"function.imap-mail-compose","name":"imap_mail_compose","description":"Create a MIME message based on given envelope and body sections","tag":"refentry","type":"Function","methodName":"imap_mail_compose"},{"id":"function.imap-mail-copy","name":"imap_mail_copy","description":"Copy specified messages to a mailbox","tag":"refentry","type":"Function","methodName":"imap_mail_copy"},{"id":"function.imap-mail-move","name":"imap_mail_move","description":"Move specified messages to a mailbox","tag":"refentry","type":"Function","methodName":"imap_mail_move"},{"id":"function.imap-mailboxmsginfo","name":"imap_mailboxmsginfo","description":"Get information about the current mailbox","tag":"refentry","type":"Function","methodName":"imap_mailboxmsginfo"},{"id":"function.imap-mime-header-decode","name":"imap_mime_header_decode","description":"Decode MIME header elements","tag":"refentry","type":"Function","methodName":"imap_mime_header_decode"},{"id":"function.imap-msgno","name":"imap_msgno","description":"Gets the message sequence number for the given UID","tag":"refentry","type":"Function","methodName":"imap_msgno"},{"id":"function.imap-mutf7-to-utf8","name":"imap_mutf7_to_utf8","description":"Decode a modified UTF-7 string to UTF-8","tag":"refentry","type":"Function","methodName":"imap_mutf7_to_utf8"},{"id":"function.imap-num-msg","name":"imap_num_msg","description":"Gets the number of messages in the current mailbox","tag":"refentry","type":"Function","methodName":"imap_num_msg"},{"id":"function.imap-num-recent","name":"imap_num_recent","description":"Gets the number of recent messages in current mailbox","tag":"refentry","type":"Function","methodName":"imap_num_recent"},{"id":"function.imap-open","name":"imap_open","description":"Open an IMAP stream to a mailbox","tag":"refentry","type":"Function","methodName":"imap_open"},{"id":"function.imap-ping","name":"imap_ping","description":"Check if the IMAP stream is still active","tag":"refentry","type":"Function","methodName":"imap_ping"},{"id":"function.imap-qprint","name":"imap_qprint","description":"Convert a quoted-printable string to an 8 bit string","tag":"refentry","type":"Function","methodName":"imap_qprint"},{"id":"function.imap-rename","name":"imap_rename","description":"Alias of imap_renamemailbox","tag":"refentry","type":"Function","methodName":"imap_rename"},{"id":"function.imap-renamemailbox","name":"imap_renamemailbox","description":"Rename an old mailbox to new mailbox","tag":"refentry","type":"Function","methodName":"imap_renamemailbox"},{"id":"function.imap-reopen","name":"imap_reopen","description":"Reopen IMAP stream to new mailbox","tag":"refentry","type":"Function","methodName":"imap_reopen"},{"id":"function.imap-rfc822-parse-adrlist","name":"imap_rfc822_parse_adrlist","description":"Parses an address string","tag":"refentry","type":"Function","methodName":"imap_rfc822_parse_adrlist"},{"id":"function.imap-rfc822-parse-headers","name":"imap_rfc822_parse_headers","description":"Parse mail headers from a string","tag":"refentry","type":"Function","methodName":"imap_rfc822_parse_headers"},{"id":"function.imap-rfc822-write-address","name":"imap_rfc822_write_address","description":"Returns a properly formatted email address given the mailbox, host, and personal info","tag":"refentry","type":"Function","methodName":"imap_rfc822_write_address"},{"id":"function.imap-savebody","name":"imap_savebody","description":"Save a specific body section to a file","tag":"refentry","type":"Function","methodName":"imap_savebody"},{"id":"function.imap-scan","name":"imap_scan","description":"Alias of imap_listscan","tag":"refentry","type":"Function","methodName":"imap_scan"},{"id":"function.imap-scanmailbox","name":"imap_scanmailbox","description":"Alias of imap_listscan","tag":"refentry","type":"Function","methodName":"imap_scanmailbox"},{"id":"function.imap-search","name":"imap_search","description":"This function returns an array of messages matching the given search criteria","tag":"refentry","type":"Function","methodName":"imap_search"},{"id":"function.imap-set-quota","name":"imap_set_quota","description":"Sets a quota for a given mailbox","tag":"refentry","type":"Function","methodName":"imap_set_quota"},{"id":"function.imap-setacl","name":"imap_setacl","description":"Sets the ACL for a given mailbox","tag":"refentry","type":"Function","methodName":"imap_setacl"},{"id":"function.imap-setflag-full","name":"imap_setflag_full","description":"Sets flags on messages","tag":"refentry","type":"Function","methodName":"imap_setflag_full"},{"id":"function.imap-sort","name":"imap_sort","description":"Gets and sort messages","tag":"refentry","type":"Function","methodName":"imap_sort"},{"id":"function.imap-status","name":"imap_status","description":"Returns status information on a mailbox","tag":"refentry","type":"Function","methodName":"imap_status"},{"id":"function.imap-subscribe","name":"imap_subscribe","description":"Subscribe to a mailbox","tag":"refentry","type":"Function","methodName":"imap_subscribe"},{"id":"function.imap-thread","name":"imap_thread","description":"Returns a tree of threaded message","tag":"refentry","type":"Function","methodName":"imap_thread"},{"id":"function.imap-timeout","name":"imap_timeout","description":"Set or fetch imap timeout","tag":"refentry","type":"Function","methodName":"imap_timeout"},{"id":"function.imap-uid","name":"imap_uid","description":"This function returns the UID for the given message sequence number","tag":"refentry","type":"Function","methodName":"imap_uid"},{"id":"function.imap-undelete","name":"imap_undelete","description":"Unmark the message which is marked deleted","tag":"refentry","type":"Function","methodName":"imap_undelete"},{"id":"function.imap-unsubscribe","name":"imap_unsubscribe","description":"Unsubscribe from a mailbox","tag":"refentry","type":"Function","methodName":"imap_unsubscribe"},{"id":"function.imap-utf7-decode","name":"imap_utf7_decode","description":"Decodes a modified UTF-7 encoded string","tag":"refentry","type":"Function","methodName":"imap_utf7_decode"},{"id":"function.imap-utf7-encode","name":"imap_utf7_encode","description":"Converts ISO-8859-1 string to modified UTF-7 text","tag":"refentry","type":"Function","methodName":"imap_utf7_encode"},{"id":"function.imap-utf8","name":"imap_utf8","description":"Converts MIME-encoded text to UTF-8","tag":"refentry","type":"Function","methodName":"imap_utf8"},{"id":"function.imap-utf8-to-mutf7","name":"imap_utf8_to_mutf7","description":"Encode a UTF-8 string to modified UTF-7","tag":"refentry","type":"Function","methodName":"imap_utf8_to_mutf7"},{"id":"ref.imap","name":"IMAP Functions","description":"IMAP, POP3 and NNTP","tag":"reference","type":"Extension","methodName":"IMAP Functions"},{"id":"class.imap-connection","name":"IMAP\\Connection","description":"The IMAP\\Connection class","tag":"phpdoc:classref","type":"Class","methodName":"IMAP\\Connection"},{"id":"book.imap","name":"IMAP","description":"IMAP, POP3 and NNTP","tag":"book","type":"Extension","methodName":"IMAP"},{"id":"intro.mail","name":"Introduction","description":"Mail","tag":"preface","type":"General","methodName":"Introduction"},{"id":"mail.requirements","name":"Requirements","description":"Mail","tag":"section","type":"General","methodName":"Requirements"},{"id":"mail.configuration","name":"Runtime Configuration","description":"Mail","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"mail.setup","name":"Installing\/Configuring","description":"Mail","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.ezmlm-hash","name":"ezmlm_hash","description":"Calculate the hash value needed by EZMLM","tag":"refentry","type":"Function","methodName":"ezmlm_hash"},{"id":"function.mail","name":"mail","description":"Send mail","tag":"refentry","type":"Function","methodName":"mail"},{"id":"ref.mail","name":"Mail Functions","description":"Mail","tag":"reference","type":"Extension","methodName":"Mail Functions"},{"id":"book.mail","name":"Mail","description":"Mail Related Extensions","tag":"book","type":"Extension","methodName":"Mail"},{"id":"intro.mailparse","name":"Introduction","description":"Mailparse","tag":"preface","type":"General","methodName":"Introduction"},{"id":"mailparse.installation","name":"Installation","description":"Mailparse","tag":"section","type":"General","methodName":"Installation"},{"id":"mailparse.configuration","name":"Runtime Configuration","description":"Mailparse","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"mailparse.resources","name":"Resource Types","description":"Mailparse","tag":"section","type":"General","methodName":"Resource Types"},{"id":"mailparse.setup","name":"Installing\/Configuring","description":"Mailparse","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"mailparse.constants","name":"Predefined Constants","description":"Mailparse","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.mailparse-determine-best-xfer-encoding","name":"mailparse_determine_best_xfer_encoding","description":"Gets the best way of encoding","tag":"refentry","type":"Function","methodName":"mailparse_determine_best_xfer_encoding"},{"id":"function.mailparse-msg-create","name":"mailparse_msg_create","description":"Create a mime mail resource","tag":"refentry","type":"Function","methodName":"mailparse_msg_create"},{"id":"function.mailparse-msg-extract-part","name":"mailparse_msg_extract_part","description":"Extracts\/decodes a message section","tag":"refentry","type":"Function","methodName":"mailparse_msg_extract_part"},{"id":"function.mailparse-msg-extract-part-file","name":"mailparse_msg_extract_part_file","description":"Extracts\/decodes a message section","tag":"refentry","type":"Function","methodName":"mailparse_msg_extract_part_file"},{"id":"function.mailparse-msg-extract-whole-part-file","name":"mailparse_msg_extract_whole_part_file","description":"Extracts a message section including headers without decoding the transfer encoding","tag":"refentry","type":"Function","methodName":"mailparse_msg_extract_whole_part_file"},{"id":"function.mailparse-msg-free","name":"mailparse_msg_free","description":"Frees a MIME resource","tag":"refentry","type":"Function","methodName":"mailparse_msg_free"},{"id":"function.mailparse-msg-get-part","name":"mailparse_msg_get_part","description":"Returns a handle on a given section in a mimemessage","tag":"refentry","type":"Function","methodName":"mailparse_msg_get_part"},{"id":"function.mailparse-msg-get-part-data","name":"mailparse_msg_get_part_data","description":"Returns an associative array of info about the message","tag":"refentry","type":"Function","methodName":"mailparse_msg_get_part_data"},{"id":"function.mailparse-msg-get-structure","name":"mailparse_msg_get_structure","description":"Returns an array of mime section names in the supplied message","tag":"refentry","type":"Function","methodName":"mailparse_msg_get_structure"},{"id":"function.mailparse-msg-parse","name":"mailparse_msg_parse","description":"Incrementally parse data into buffer","tag":"refentry","type":"Function","methodName":"mailparse_msg_parse"},{"id":"function.mailparse-msg-parse-file","name":"mailparse_msg_parse_file","description":"Parses a file","tag":"refentry","type":"Function","methodName":"mailparse_msg_parse_file"},{"id":"function.mailparse-rfc822-parse-addresses","name":"mailparse_rfc822_parse_addresses","description":"Parse RFC 822 compliant addresses","tag":"refentry","type":"Function","methodName":"mailparse_rfc822_parse_addresses"},{"id":"function.mailparse-stream-encode","name":"mailparse_stream_encode","description":"Streams data from source file pointer, apply encoding and write to destfp","tag":"refentry","type":"Function","methodName":"mailparse_stream_encode"},{"id":"function.mailparse-uudecode-all","name":"mailparse_uudecode_all","description":"Scans the data from fp and extract each embedded uuencoded file","tag":"refentry","type":"Function","methodName":"mailparse_uudecode_all"},{"id":"ref.mailparse","name":"Mailparse Functions","description":"Mailparse","tag":"reference","type":"Extension","methodName":"Mailparse Functions"},{"id":"book.mailparse","name":"Mailparse","description":"Mail Related Extensions","tag":"book","type":"Extension","methodName":"Mailparse"},{"id":"refs.remote.mail","name":"Mail Related Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"Mail Related Extensions"},{"id":"intro.bc","name":"Introduction","description":"BCMath Arbitrary Precision Mathematics","tag":"preface","type":"General","methodName":"Introduction"},{"id":"bc.installation","name":"Installation","description":"BCMath Arbitrary Precision Mathematics","tag":"section","type":"General","methodName":"Installation"},{"id":"bc.configuration","name":"Runtime Configuration","description":"BCMath Arbitrary Precision Mathematics","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"bc.setup","name":"Installing\/Configuring","description":"BCMath Arbitrary Precision Mathematics","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.bcadd","name":"bcadd","description":"Add two arbitrary precision numbers","tag":"refentry","type":"Function","methodName":"bcadd"},{"id":"function.bcceil","name":"bcceil","description":"Round up arbitrary precision number","tag":"refentry","type":"Function","methodName":"bcceil"},{"id":"function.bccomp","name":"bccomp","description":"Compare two arbitrary precision numbers","tag":"refentry","type":"Function","methodName":"bccomp"},{"id":"function.bcdiv","name":"bcdiv","description":"Divide two arbitrary precision numbers","tag":"refentry","type":"Function","methodName":"bcdiv"},{"id":"function.bcdivmod","name":"bcdivmod","description":"Get the quotient and modulus of an arbitrary precision number","tag":"refentry","type":"Function","methodName":"bcdivmod"},{"id":"function.bcfloor","name":"bcfloor","description":"Round down arbitrary precision number","tag":"refentry","type":"Function","methodName":"bcfloor"},{"id":"function.bcmod","name":"bcmod","description":"Get modulus of an arbitrary precision number","tag":"refentry","type":"Function","methodName":"bcmod"},{"id":"function.bcmul","name":"bcmul","description":"Multiply two arbitrary precision numbers","tag":"refentry","type":"Function","methodName":"bcmul"},{"id":"function.bcpow","name":"bcpow","description":"Raise an arbitrary precision number to another","tag":"refentry","type":"Function","methodName":"bcpow"},{"id":"function.bcpowmod","name":"bcpowmod","description":"Raise an arbitrary precision number to another, reduced by a specified modulus","tag":"refentry","type":"Function","methodName":"bcpowmod"},{"id":"function.bcround","name":"bcround","description":"Round arbitrary precision number","tag":"refentry","type":"Function","methodName":"bcround"},{"id":"function.bcscale","name":"bcscale","description":"Set or get default scale parameter for all bc math functions","tag":"refentry","type":"Function","methodName":"bcscale"},{"id":"function.bcsqrt","name":"bcsqrt","description":"Get the square root of an arbitrary precision number","tag":"refentry","type":"Function","methodName":"bcsqrt"},{"id":"function.bcsub","name":"bcsub","description":"Subtract one arbitrary precision number from another","tag":"refentry","type":"Function","methodName":"bcsub"},{"id":"ref.bc","name":"BC Math Functions","description":"BCMath Arbitrary Precision Mathematics","tag":"reference","type":"Extension","methodName":"BC Math Functions"},{"id":"bcmath-number.add","name":"BcMath\\Number::add","description":"Adds an arbitrary precision number","tag":"refentry","type":"Function","methodName":"add"},{"id":"bcmath-number.ceil","name":"BcMath\\Number::ceil","description":"Rounds up an arbitrary precision number","tag":"refentry","type":"Function","methodName":"ceil"},{"id":"bcmath-number.compare","name":"BcMath\\Number::compare","description":"Compares two arbitrary precision numbers","tag":"refentry","type":"Function","methodName":"compare"},{"id":"bcmath-number.construct","name":"BcMath\\Number::__construct","description":"Creates a BcMath\\Number object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"bcmath-number.div","name":"BcMath\\Number::div","description":"Divides by an arbitrary precision number","tag":"refentry","type":"Function","methodName":"div"},{"id":"bcmath-number.divmod","name":"BcMath\\Number::divmod","description":"Gets the quotient and modulus of an arbitrary precision number","tag":"refentry","type":"Function","methodName":"divmod"},{"id":"bcmath-number.floor","name":"BcMath\\Number::floor","description":"Rounds down an arbitrary precision number","tag":"refentry","type":"Function","methodName":"floor"},{"id":"bcmath-number.mod","name":"BcMath\\Number::mod","description":"Gets the modulus of an arbitrary precision number","tag":"refentry","type":"Function","methodName":"mod"},{"id":"bcmath-number.mul","name":"BcMath\\Number::mul","description":"Multiplies an arbitrary precision number","tag":"refentry","type":"Function","methodName":"mul"},{"id":"bcmath-number.pow","name":"BcMath\\Number::pow","description":"Raises an arbitrary precision number","tag":"refentry","type":"Function","methodName":"pow"},{"id":"bcmath-number.powmod","name":"BcMath\\Number::powmod","description":"Raises an arbitrary precision number, reduced by a specified modulus","tag":"refentry","type":"Function","methodName":"powmod"},{"id":"bcmath-number.round","name":"BcMath\\Number::round","description":"Rounds an arbitrary precision number","tag":"refentry","type":"Function","methodName":"round"},{"id":"bcmath-number.serialize","name":"BcMath\\Number::__serialize","description":"Serializes a BcMath\\Number object","tag":"refentry","type":"Function","methodName":"__serialize"},{"id":"bcmath-number.sqrt","name":"BcMath\\Number::sqrt","description":"Gets the square root of an arbitrary precision number","tag":"refentry","type":"Function","methodName":"sqrt"},{"id":"bcmath-number.sub","name":"BcMath\\Number::sub","description":"Subtracts an arbitrary precision number","tag":"refentry","type":"Function","methodName":"sub"},{"id":"bcmath-number.tostring","name":"BcMath\\Number::__toString","description":"Converts BcMath\\Number to string","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"bcmath-number.unserialize","name":"BcMath\\Number::__unserialize","description":"Deserializes a data parameter into a BcMath\\Number object","tag":"refentry","type":"Function","methodName":"__unserialize"},{"id":"class.bcmath-number","name":"BcMath\\Number","description":"The BcMath\\Number class","tag":"phpdoc:classref","type":"Class","methodName":"BcMath\\Number"},{"id":"book.bc","name":"BC Math","description":"BCMath Arbitrary Precision Mathematics","tag":"book","type":"Extension","methodName":"BC Math"},{"id":"intro.gmp","name":"Introduction","description":"GNU Multiple Precision","tag":"preface","type":"General","methodName":"Introduction"},{"id":"gmp.requirements","name":"Requirements","description":"GNU Multiple Precision","tag":"section","type":"General","methodName":"Requirements"},{"id":"gmp.installation","name":"Installation","description":"GNU Multiple Precision","tag":"section","type":"General","methodName":"Installation"},{"id":"gmp.setup","name":"Installing\/Configuring","description":"GNU Multiple Precision","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"gmp.constants","name":"Predefined Constants","description":"GNU Multiple Precision","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"gmp.examples","name":"Examples","description":"GNU Multiple Precision","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.gmp-abs","name":"gmp_abs","description":"Absolute value","tag":"refentry","type":"Function","methodName":"gmp_abs"},{"id":"function.gmp-add","name":"gmp_add","description":"Add numbers","tag":"refentry","type":"Function","methodName":"gmp_add"},{"id":"function.gmp-and","name":"gmp_and","description":"Bitwise AND","tag":"refentry","type":"Function","methodName":"gmp_and"},{"id":"function.gmp-binomial","name":"gmp_binomial","description":"Calculates binomial coefficient","tag":"refentry","type":"Function","methodName":"gmp_binomial"},{"id":"function.gmp-clrbit","name":"gmp_clrbit","description":"Clear bit","tag":"refentry","type":"Function","methodName":"gmp_clrbit"},{"id":"function.gmp-cmp","name":"gmp_cmp","description":"Compare numbers","tag":"refentry","type":"Function","methodName":"gmp_cmp"},{"id":"function.gmp-com","name":"gmp_com","description":"Calculates one's complement","tag":"refentry","type":"Function","methodName":"gmp_com"},{"id":"function.gmp-div","name":"gmp_div","description":"Alias of gmp_div_q","tag":"refentry","type":"Function","methodName":"gmp_div"},{"id":"function.gmp-div-q","name":"gmp_div_q","description":"Divide numbers","tag":"refentry","type":"Function","methodName":"gmp_div_q"},{"id":"function.gmp-div-qr","name":"gmp_div_qr","description":"Divide numbers and get quotient and remainder","tag":"refentry","type":"Function","methodName":"gmp_div_qr"},{"id":"function.gmp-div-r","name":"gmp_div_r","description":"Remainder of the division of numbers","tag":"refentry","type":"Function","methodName":"gmp_div_r"},{"id":"function.gmp-divexact","name":"gmp_divexact","description":"Exact division of numbers","tag":"refentry","type":"Function","methodName":"gmp_divexact"},{"id":"function.gmp-export","name":"gmp_export","description":"Export to a binary string","tag":"refentry","type":"Function","methodName":"gmp_export"},{"id":"function.gmp-fact","name":"gmp_fact","description":"Factorial","tag":"refentry","type":"Function","methodName":"gmp_fact"},{"id":"function.gmp-gcd","name":"gmp_gcd","description":"Calculate GCD","tag":"refentry","type":"Function","methodName":"gmp_gcd"},{"id":"function.gmp-gcdext","name":"gmp_gcdext","description":"Calculate GCD and multipliers","tag":"refentry","type":"Function","methodName":"gmp_gcdext"},{"id":"function.gmp-hamdist","name":"gmp_hamdist","description":"Hamming distance","tag":"refentry","type":"Function","methodName":"gmp_hamdist"},{"id":"function.gmp-import","name":"gmp_import","description":"Import from a binary string","tag":"refentry","type":"Function","methodName":"gmp_import"},{"id":"function.gmp-init","name":"gmp_init","description":"Create GMP number","tag":"refentry","type":"Function","methodName":"gmp_init"},{"id":"function.gmp-intval","name":"gmp_intval","description":"Convert GMP number to integer","tag":"refentry","type":"Function","methodName":"gmp_intval"},{"id":"function.gmp-invert","name":"gmp_invert","description":"Inverse by modulo","tag":"refentry","type":"Function","methodName":"gmp_invert"},{"id":"function.gmp-jacobi","name":"gmp_jacobi","description":"Jacobi symbol","tag":"refentry","type":"Function","methodName":"gmp_jacobi"},{"id":"function.gmp-kronecker","name":"gmp_kronecker","description":"Kronecker symbol","tag":"refentry","type":"Function","methodName":"gmp_kronecker"},{"id":"function.gmp-lcm","name":"gmp_lcm","description":"Calculate LCM","tag":"refentry","type":"Function","methodName":"gmp_lcm"},{"id":"function.gmp-legendre","name":"gmp_legendre","description":"Legendre symbol","tag":"refentry","type":"Function","methodName":"gmp_legendre"},{"id":"function.gmp-mod","name":"gmp_mod","description":"Modulo operation","tag":"refentry","type":"Function","methodName":"gmp_mod"},{"id":"function.gmp-mul","name":"gmp_mul","description":"Multiply numbers","tag":"refentry","type":"Function","methodName":"gmp_mul"},{"id":"function.gmp-neg","name":"gmp_neg","description":"Negate number","tag":"refentry","type":"Function","methodName":"gmp_neg"},{"id":"function.gmp-nextprime","name":"gmp_nextprime","description":"Find next prime number","tag":"refentry","type":"Function","methodName":"gmp_nextprime"},{"id":"function.gmp-or","name":"gmp_or","description":"Bitwise OR","tag":"refentry","type":"Function","methodName":"gmp_or"},{"id":"function.gmp-perfect-power","name":"gmp_perfect_power","description":"Perfect power check","tag":"refentry","type":"Function","methodName":"gmp_perfect_power"},{"id":"function.gmp-perfect-square","name":"gmp_perfect_square","description":"Perfect square check","tag":"refentry","type":"Function","methodName":"gmp_perfect_square"},{"id":"function.gmp-popcount","name":"gmp_popcount","description":"Population count","tag":"refentry","type":"Function","methodName":"gmp_popcount"},{"id":"function.gmp-pow","name":"gmp_pow","description":"Raise number into power","tag":"refentry","type":"Function","methodName":"gmp_pow"},{"id":"function.gmp-powm","name":"gmp_powm","description":"Raise number into power with modulo","tag":"refentry","type":"Function","methodName":"gmp_powm"},{"id":"function.gmp-prob-prime","name":"gmp_prob_prime","description":"Check if number is \"probably prime\"","tag":"refentry","type":"Function","methodName":"gmp_prob_prime"},{"id":"function.gmp-random","name":"gmp_random","description":"Random number","tag":"refentry","type":"Function","methodName":"gmp_random"},{"id":"function.gmp-random-bits","name":"gmp_random_bits","description":"Random number","tag":"refentry","type":"Function","methodName":"gmp_random_bits"},{"id":"function.gmp-random-range","name":"gmp_random_range","description":"Get a uniformly selected integer","tag":"refentry","type":"Function","methodName":"gmp_random_range"},{"id":"function.gmp-random-seed","name":"gmp_random_seed","description":"Sets the RNG seed","tag":"refentry","type":"Function","methodName":"gmp_random_seed"},{"id":"function.gmp-root","name":"gmp_root","description":"Take the integer part of nth root","tag":"refentry","type":"Function","methodName":"gmp_root"},{"id":"function.gmp-rootrem","name":"gmp_rootrem","description":"Take the integer part and remainder of nth root","tag":"refentry","type":"Function","methodName":"gmp_rootrem"},{"id":"function.gmp-scan0","name":"gmp_scan0","description":"Scan for 0","tag":"refentry","type":"Function","methodName":"gmp_scan0"},{"id":"function.gmp-scan1","name":"gmp_scan1","description":"Scan for 1","tag":"refentry","type":"Function","methodName":"gmp_scan1"},{"id":"function.gmp-setbit","name":"gmp_setbit","description":"Set bit","tag":"refentry","type":"Function","methodName":"gmp_setbit"},{"id":"function.gmp-sign","name":"gmp_sign","description":"Sign of number","tag":"refentry","type":"Function","methodName":"gmp_sign"},{"id":"function.gmp-sqrt","name":"gmp_sqrt","description":"Calculate square root","tag":"refentry","type":"Function","methodName":"gmp_sqrt"},{"id":"function.gmp-sqrtrem","name":"gmp_sqrtrem","description":"Square root with remainder","tag":"refentry","type":"Function","methodName":"gmp_sqrtrem"},{"id":"function.gmp-strval","name":"gmp_strval","description":"Convert GMP number to string","tag":"refentry","type":"Function","methodName":"gmp_strval"},{"id":"function.gmp-sub","name":"gmp_sub","description":"Subtract numbers","tag":"refentry","type":"Function","methodName":"gmp_sub"},{"id":"function.gmp-testbit","name":"gmp_testbit","description":"Tests if a bit is set","tag":"refentry","type":"Function","methodName":"gmp_testbit"},{"id":"function.gmp-xor","name":"gmp_xor","description":"Bitwise XOR","tag":"refentry","type":"Function","methodName":"gmp_xor"},{"id":"ref.gmp","name":"GMP Functions","description":"GNU Multiple Precision","tag":"reference","type":"Extension","methodName":"GMP Functions"},{"id":"gmp.construct","name":"GMP::__construct","description":"Create GMP number","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"gmp.serialize","name":"GMP::__serialize","description":"Serializes the GMP object","tag":"refentry","type":"Function","methodName":"__serialize"},{"id":"gmp.unserialize","name":"GMP::__unserialize","description":"Deserializes the data parameter into a GMP object","tag":"refentry","type":"Function","methodName":"__unserialize"},{"id":"class.gmp","name":"GMP","description":"The GMP class","tag":"phpdoc:classref","type":"Class","methodName":"GMP"},{"id":"book.gmp","name":"GMP","description":"GNU Multiple Precision","tag":"book","type":"Extension","methodName":"GMP"},{"id":"intro.math","name":"Introduction","description":"Mathematical Functions","tag":"preface","type":"General","methodName":"Introduction"},{"id":"math.constants","name":"Predefined Constants","description":"Mathematical Functions","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"enum.roundingmode","name":"RoundingMode","description":"The RoundingMode Enum","tag":"phpdoc:classref","type":"Class","methodName":"RoundingMode"},{"id":"function.abs","name":"abs","description":"Absolute value","tag":"refentry","type":"Function","methodName":"abs"},{"id":"function.acos","name":"acos","description":"Arc cosine","tag":"refentry","type":"Function","methodName":"acos"},{"id":"function.acosh","name":"acosh","description":"Inverse hyperbolic cosine","tag":"refentry","type":"Function","methodName":"acosh"},{"id":"function.asin","name":"asin","description":"Arc sine","tag":"refentry","type":"Function","methodName":"asin"},{"id":"function.asinh","name":"asinh","description":"Inverse hyperbolic sine","tag":"refentry","type":"Function","methodName":"asinh"},{"id":"function.atan","name":"atan","description":"Arc tangent","tag":"refentry","type":"Function","methodName":"atan"},{"id":"function.atan2","name":"atan2","description":"Arc tangent of two variables","tag":"refentry","type":"Function","methodName":"atan2"},{"id":"function.atanh","name":"atanh","description":"Inverse hyperbolic tangent","tag":"refentry","type":"Function","methodName":"atanh"},{"id":"function.base-convert","name":"base_convert","description":"Convert a number between arbitrary bases","tag":"refentry","type":"Function","methodName":"base_convert"},{"id":"function.bindec","name":"bindec","description":"Binary to decimal","tag":"refentry","type":"Function","methodName":"bindec"},{"id":"function.ceil","name":"ceil","description":"Round fractions up","tag":"refentry","type":"Function","methodName":"ceil"},{"id":"function.cos","name":"cos","description":"Cosine","tag":"refentry","type":"Function","methodName":"cos"},{"id":"function.cosh","name":"cosh","description":"Hyperbolic cosine","tag":"refentry","type":"Function","methodName":"cosh"},{"id":"function.decbin","name":"decbin","description":"Decimal to binary","tag":"refentry","type":"Function","methodName":"decbin"},{"id":"function.dechex","name":"dechex","description":"Decimal to hexadecimal","tag":"refentry","type":"Function","methodName":"dechex"},{"id":"function.decoct","name":"decoct","description":"Decimal to octal","tag":"refentry","type":"Function","methodName":"decoct"},{"id":"function.deg2rad","name":"deg2rad","description":"Converts the number in degrees to the radian equivalent","tag":"refentry","type":"Function","methodName":"deg2rad"},{"id":"function.exp","name":"exp","description":"Calculates the exponent of e","tag":"refentry","type":"Function","methodName":"exp"},{"id":"function.expm1","name":"expm1","description":"Returns exp($num) - 1, computed in a way that is accurate even\n when the value of number is close to zero","tag":"refentry","type":"Function","methodName":"expm1"},{"id":"function.fdiv","name":"fdiv","description":"Divides two numbers, according to IEEE 754","tag":"refentry","type":"Function","methodName":"fdiv"},{"id":"function.floor","name":"floor","description":"Round fractions down","tag":"refentry","type":"Function","methodName":"floor"},{"id":"function.fmod","name":"fmod","description":"Returns the floating point remainder (modulo) of the division\n of the arguments","tag":"refentry","type":"Function","methodName":"fmod"},{"id":"function.fpow","name":"fpow","description":"Raise one number to the power of another, according to IEEE 754","tag":"refentry","type":"Function","methodName":"fpow"},{"id":"function.hexdec","name":"hexdec","description":"Hexadecimal to decimal","tag":"refentry","type":"Function","methodName":"hexdec"},{"id":"function.hypot","name":"hypot","description":"Calculate the length of the hypotenuse of a right-angle triangle","tag":"refentry","type":"Function","methodName":"hypot"},{"id":"function.intdiv","name":"intdiv","description":"Integer division","tag":"refentry","type":"Function","methodName":"intdiv"},{"id":"function.is-finite","name":"is_finite","description":"Checks whether a float is finite","tag":"refentry","type":"Function","methodName":"is_finite"},{"id":"function.is-infinite","name":"is_infinite","description":"Checks whether a float is infinite","tag":"refentry","type":"Function","methodName":"is_infinite"},{"id":"function.is-nan","name":"is_nan","description":"Checks whether a float is NAN","tag":"refentry","type":"Function","methodName":"is_nan"},{"id":"function.log","name":"log","description":"Natural logarithm","tag":"refentry","type":"Function","methodName":"log"},{"id":"function.log10","name":"log10","description":"Base-10 logarithm","tag":"refentry","type":"Function","methodName":"log10"},{"id":"function.log1p","name":"log1p","description":"Returns log(1 + number), computed in a way that is accurate even when\n the value of number is close to zero","tag":"refentry","type":"Function","methodName":"log1p"},{"id":"function.max","name":"max","description":"Find highest value","tag":"refentry","type":"Function","methodName":"max"},{"id":"function.min","name":"min","description":"Find lowest value","tag":"refentry","type":"Function","methodName":"min"},{"id":"function.octdec","name":"octdec","description":"Octal to decimal","tag":"refentry","type":"Function","methodName":"octdec"},{"id":"function.pi","name":"pi","description":"Get value of pi","tag":"refentry","type":"Function","methodName":"pi"},{"id":"function.pow","name":"pow","description":"Exponential expression","tag":"refentry","type":"Function","methodName":"pow"},{"id":"function.rad2deg","name":"rad2deg","description":"Converts the radian number to the equivalent number in degrees","tag":"refentry","type":"Function","methodName":"rad2deg"},{"id":"function.round","name":"round","description":"Rounds a float","tag":"refentry","type":"Function","methodName":"round"},{"id":"function.sin","name":"sin","description":"Sine","tag":"refentry","type":"Function","methodName":"sin"},{"id":"function.sinh","name":"sinh","description":"Hyperbolic sine","tag":"refentry","type":"Function","methodName":"sinh"},{"id":"function.sqrt","name":"sqrt","description":"Square root","tag":"refentry","type":"Function","methodName":"sqrt"},{"id":"function.tan","name":"tan","description":"Tangent","tag":"refentry","type":"Function","methodName":"tan"},{"id":"function.tanh","name":"tanh","description":"Hyperbolic tangent","tag":"refentry","type":"Function","methodName":"tanh"},{"id":"ref.math","name":"Math Functions","description":"Mathematical Functions","tag":"reference","type":"Extension","methodName":"Math Functions"},{"id":"book.math","name":"Math","description":"Mathematical Functions","tag":"book","type":"Extension","methodName":"Math"},{"id":"intro.stats","name":"Introduction","description":"Statistics","tag":"preface","type":"General","methodName":"Introduction"},{"id":"stats.requirements","name":"Requirements","description":"Statistics","tag":"section","type":"General","methodName":"Requirements"},{"id":"stats.installation","name":"Installation","description":"Statistics","tag":"section","type":"General","methodName":"Installation"},{"id":"stats.setup","name":"Installing\/Configuring","description":"Statistics","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.stats-absolute-deviation","name":"stats_absolute_deviation","description":"Returns the absolute deviation of an array of values","tag":"refentry","type":"Function","methodName":"stats_absolute_deviation"},{"id":"function.stats-cdf-beta","name":"stats_cdf_beta","description":"Calculates any one parameter of the beta distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_beta"},{"id":"function.stats-cdf-binomial","name":"stats_cdf_binomial","description":"Calculates any one parameter of the binomial distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_binomial"},{"id":"function.stats-cdf-cauchy","name":"stats_cdf_cauchy","description":"Calculates any one parameter of the Cauchy distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_cauchy"},{"id":"function.stats-cdf-chisquare","name":"stats_cdf_chisquare","description":"Calculates any one parameter of the chi-square distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_chisquare"},{"id":"function.stats-cdf-exponential","name":"stats_cdf_exponential","description":"Calculates any one parameter of the exponential distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_exponential"},{"id":"function.stats-cdf-f","name":"stats_cdf_f","description":"Calculates any one parameter of the F distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_f"},{"id":"function.stats-cdf-gamma","name":"stats_cdf_gamma","description":"Calculates any one parameter of the gamma distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_gamma"},{"id":"function.stats-cdf-laplace","name":"stats_cdf_laplace","description":"Calculates any one parameter of the Laplace distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_laplace"},{"id":"function.stats-cdf-logistic","name":"stats_cdf_logistic","description":"Calculates any one parameter of the logistic distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_logistic"},{"id":"function.stats-cdf-negative-binomial","name":"stats_cdf_negative_binomial","description":"Calculates any one parameter of the negative binomial distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_negative_binomial"},{"id":"function.stats-cdf-noncentral-chisquare","name":"stats_cdf_noncentral_chisquare","description":"Calculates any one parameter of the non-central chi-square distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_noncentral_chisquare"},{"id":"function.stats-cdf-noncentral-f","name":"stats_cdf_noncentral_f","description":"Calculates any one parameter of the non-central F distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_noncentral_f"},{"id":"function.stats-cdf-noncentral-t","name":"stats_cdf_noncentral_t","description":"Calculates any one parameter of the non-central t-distribution give values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_noncentral_t"},{"id":"function.stats-cdf-normal","name":"stats_cdf_normal","description":"Calculates any one parameter of the normal distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_normal"},{"id":"function.stats-cdf-poisson","name":"stats_cdf_poisson","description":"Calculates any one parameter of the Poisson distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_poisson"},{"id":"function.stats-cdf-t","name":"stats_cdf_t","description":"Calculates any one parameter of the t-distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_t"},{"id":"function.stats-cdf-uniform","name":"stats_cdf_uniform","description":"Calculates any one parameter of the uniform distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_uniform"},{"id":"function.stats-cdf-weibull","name":"stats_cdf_weibull","description":"Calculates any one parameter of the Weibull distribution given values for the others","tag":"refentry","type":"Function","methodName":"stats_cdf_weibull"},{"id":"function.stats-covariance","name":"stats_covariance","description":"Computes the covariance of two data sets","tag":"refentry","type":"Function","methodName":"stats_covariance"},{"id":"function.stats-dens-beta","name":"stats_dens_beta","description":"Probability density function of the beta distribution","tag":"refentry","type":"Function","methodName":"stats_dens_beta"},{"id":"function.stats-dens-cauchy","name":"stats_dens_cauchy","description":"Probability density function of the Cauchy distribution","tag":"refentry","type":"Function","methodName":"stats_dens_cauchy"},{"id":"function.stats-dens-chisquare","name":"stats_dens_chisquare","description":"Probability density function of the chi-square distribution","tag":"refentry","type":"Function","methodName":"stats_dens_chisquare"},{"id":"function.stats-dens-exponential","name":"stats_dens_exponential","description":"Probability density function of the exponential distribution","tag":"refentry","type":"Function","methodName":"stats_dens_exponential"},{"id":"function.stats-dens-f","name":"stats_dens_f","description":"Probability density function of the F distribution","tag":"refentry","type":"Function","methodName":"stats_dens_f"},{"id":"function.stats-dens-gamma","name":"stats_dens_gamma","description":"Probability density function of the gamma distribution","tag":"refentry","type":"Function","methodName":"stats_dens_gamma"},{"id":"function.stats-dens-laplace","name":"stats_dens_laplace","description":"Probability density function of the Laplace distribution","tag":"refentry","type":"Function","methodName":"stats_dens_laplace"},{"id":"function.stats-dens-logistic","name":"stats_dens_logistic","description":"Probability density function of the logistic distribution","tag":"refentry","type":"Function","methodName":"stats_dens_logistic"},{"id":"function.stats-dens-normal","name":"stats_dens_normal","description":"Probability density function of the normal distribution","tag":"refentry","type":"Function","methodName":"stats_dens_normal"},{"id":"function.stats-dens-pmf-binomial","name":"stats_dens_pmf_binomial","description":"Probability mass function of the binomial distribution","tag":"refentry","type":"Function","methodName":"stats_dens_pmf_binomial"},{"id":"function.stats-dens-pmf-hypergeometric","name":"stats_dens_pmf_hypergeometric","description":"Probability mass function of the hypergeometric distribution","tag":"refentry","type":"Function","methodName":"stats_dens_pmf_hypergeometric"},{"id":"function.stats-dens-pmf-negative-binomial","name":"stats_dens_pmf_negative_binomial","description":"Probability mass function of the negative binomial distribution","tag":"refentry","type":"Function","methodName":"stats_dens_pmf_negative_binomial"},{"id":"function.stats-dens-pmf-poisson","name":"stats_dens_pmf_poisson","description":"Probability mass function of the Poisson distribution","tag":"refentry","type":"Function","methodName":"stats_dens_pmf_poisson"},{"id":"function.stats-dens-t","name":"stats_dens_t","description":"Probability density function of the t-distribution","tag":"refentry","type":"Function","methodName":"stats_dens_t"},{"id":"function.stats-dens-uniform","name":"stats_dens_uniform","description":"Probability density function of the uniform distribution","tag":"refentry","type":"Function","methodName":"stats_dens_uniform"},{"id":"function.stats-dens-weibull","name":"stats_dens_weibull","description":"Probability density function of the Weibull distribution","tag":"refentry","type":"Function","methodName":"stats_dens_weibull"},{"id":"function.stats-harmonic-mean","name":"stats_harmonic_mean","description":"Returns the harmonic mean of an array of values","tag":"refentry","type":"Function","methodName":"stats_harmonic_mean"},{"id":"function.stats-kurtosis","name":"stats_kurtosis","description":"Computes the kurtosis of the data in the array","tag":"refentry","type":"Function","methodName":"stats_kurtosis"},{"id":"function.stats-rand-gen-beta","name":"stats_rand_gen_beta","description":"Generates a random deviate from the beta distribution","tag":"refentry","type":"Function","methodName":"stats_rand_gen_beta"},{"id":"function.stats-rand-gen-chisquare","name":"stats_rand_gen_chisquare","description":"Generates a random deviate from the chi-square distribution","tag":"refentry","type":"Function","methodName":"stats_rand_gen_chisquare"},{"id":"function.stats-rand-gen-exponential","name":"stats_rand_gen_exponential","description":"Generates a random deviate from the exponential distribution","tag":"refentry","type":"Function","methodName":"stats_rand_gen_exponential"},{"id":"function.stats-rand-gen-f","name":"stats_rand_gen_f","description":"Generates a random deviate from the F distribution","tag":"refentry","type":"Function","methodName":"stats_rand_gen_f"},{"id":"function.stats-rand-gen-funiform","name":"stats_rand_gen_funiform","description":"Generates uniform float between low (exclusive) and high (exclusive)","tag":"refentry","type":"Function","methodName":"stats_rand_gen_funiform"},{"id":"function.stats-rand-gen-gamma","name":"stats_rand_gen_gamma","description":"Generates a random deviate from the gamma distribution","tag":"refentry","type":"Function","methodName":"stats_rand_gen_gamma"},{"id":"function.stats-rand-gen-ibinomial","name":"stats_rand_gen_ibinomial","description":"Generates a random deviate from the binomial distribution","tag":"refentry","type":"Function","methodName":"stats_rand_gen_ibinomial"},{"id":"function.stats-rand-gen-ibinomial-negative","name":"stats_rand_gen_ibinomial_negative","description":"Generates a random deviate from the negative binomial distribution","tag":"refentry","type":"Function","methodName":"stats_rand_gen_ibinomial_negative"},{"id":"function.stats-rand-gen-int","name":"stats_rand_gen_int","description":"Generates random integer between 1 and 2147483562","tag":"refentry","type":"Function","methodName":"stats_rand_gen_int"},{"id":"function.stats-rand-gen-ipoisson","name":"stats_rand_gen_ipoisson","description":"Generates a single random deviate from a Poisson distribution","tag":"refentry","type":"Function","methodName":"stats_rand_gen_ipoisson"},{"id":"function.stats-rand-gen-iuniform","name":"stats_rand_gen_iuniform","description":"Generates integer uniformly distributed between LOW (inclusive) and HIGH (inclusive)","tag":"refentry","type":"Function","methodName":"stats_rand_gen_iuniform"},{"id":"function.stats-rand-gen-noncentral-chisquare","name":"stats_rand_gen_noncentral_chisquare","description":"Generates a random deviate from the non-central chi-square distribution","tag":"refentry","type":"Function","methodName":"stats_rand_gen_noncentral_chisquare"},{"id":"function.stats-rand-gen-noncentral-f","name":"stats_rand_gen_noncentral_f","description":"Generates a random deviate from the noncentral F distribution","tag":"refentry","type":"Function","methodName":"stats_rand_gen_noncentral_f"},{"id":"function.stats-rand-gen-noncentral-t","name":"stats_rand_gen_noncentral_t","description":"Generates a single random deviate from a non-central t-distribution","tag":"refentry","type":"Function","methodName":"stats_rand_gen_noncentral_t"},{"id":"function.stats-rand-gen-normal","name":"stats_rand_gen_normal","description":"Generates a single random deviate from a normal distribution","tag":"refentry","type":"Function","methodName":"stats_rand_gen_normal"},{"id":"function.stats-rand-gen-t","name":"stats_rand_gen_t","description":"Generates a single random deviate from a t-distribution","tag":"refentry","type":"Function","methodName":"stats_rand_gen_t"},{"id":"function.stats-rand-get-seeds","name":"stats_rand_get_seeds","description":"Get the seed values of the random number generator","tag":"refentry","type":"Function","methodName":"stats_rand_get_seeds"},{"id":"function.stats-rand-phrase-to-seeds","name":"stats_rand_phrase_to_seeds","description":"Generate two seeds for the RGN random number generator","tag":"refentry","type":"Function","methodName":"stats_rand_phrase_to_seeds"},{"id":"function.stats-rand-ranf","name":"stats_rand_ranf","description":"Generates a random floating point number between 0 and 1","tag":"refentry","type":"Function","methodName":"stats_rand_ranf"},{"id":"function.stats-rand-setall","name":"stats_rand_setall","description":"Set seed values to the random generator","tag":"refentry","type":"Function","methodName":"stats_rand_setall"},{"id":"function.stats-skew","name":"stats_skew","description":"Computes the skewness of the data in the array","tag":"refentry","type":"Function","methodName":"stats_skew"},{"id":"function.stats-standard-deviation","name":"stats_standard_deviation","description":"Returns the standard deviation","tag":"refentry","type":"Function","methodName":"stats_standard_deviation"},{"id":"function.stats-stat-binomial-coef","name":"stats_stat_binomial_coef","description":"Returns a binomial coefficient","tag":"refentry","type":"Function","methodName":"stats_stat_binomial_coef"},{"id":"function.stats-stat-correlation","name":"stats_stat_correlation","description":"Returns the Pearson correlation coefficient of two data sets","tag":"refentry","type":"Function","methodName":"stats_stat_correlation"},{"id":"function.stats-stat-factorial","name":"stats_stat_factorial","description":"Returns the factorial of an integer","tag":"refentry","type":"Function","methodName":"stats_stat_factorial"},{"id":"function.stats-stat-independent-t","name":"stats_stat_independent_t","description":"Returns the t-value from the independent two-sample t-test","tag":"refentry","type":"Function","methodName":"stats_stat_independent_t"},{"id":"function.stats-stat-innerproduct","name":"stats_stat_innerproduct","description":"Returns the inner product of two vectors","tag":"refentry","type":"Function","methodName":"stats_stat_innerproduct"},{"id":"function.stats-stat-paired-t","name":"stats_stat_paired_t","description":"Returns the t-value of the dependent t-test for paired samples","tag":"refentry","type":"Function","methodName":"stats_stat_paired_t"},{"id":"function.stats-stat-percentile","name":"stats_stat_percentile","description":"Returns the percentile value","tag":"refentry","type":"Function","methodName":"stats_stat_percentile"},{"id":"function.stats-stat-powersum","name":"stats_stat_powersum","description":"Returns the power sum of a vector","tag":"refentry","type":"Function","methodName":"stats_stat_powersum"},{"id":"function.stats-variance","name":"stats_variance","description":"Returns the variance","tag":"refentry","type":"Function","methodName":"stats_variance"},{"id":"ref.stats","name":"Statistic Functions","description":"Statistics","tag":"reference","type":"Extension","methodName":"Statistic Functions"},{"id":"book.stats","name":"Statistics","description":"Mathematical Extensions","tag":"book","type":"Extension","methodName":"Statistics"},{"id":"intro.trader","name":"Introduction","description":"Technical Analysis for Traders","tag":"preface","type":"General","methodName":"Introduction"},{"id":"trader.requirements","name":"Requirements","description":"Technical Analysis for Traders","tag":"section","type":"General","methodName":"Requirements"},{"id":"trader.installation","name":"Installation","description":"Technical Analysis for Traders","tag":"section","type":"General","methodName":"Installation"},{"id":"trader.configuration","name":"Runtime Configuration","description":"Technical Analysis for Traders","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"trader.setup","name":"Installing\/Configuring","description":"Technical Analysis for Traders","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"trader.constants","name":"Predefined Constants","description":"Technical Analysis for Traders","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.trader-acos","name":"trader_acos","description":"Vector Trigonometric ACos","tag":"refentry","type":"Function","methodName":"trader_acos"},{"id":"function.trader-ad","name":"trader_ad","description":"Chaikin A\/D Line","tag":"refentry","type":"Function","methodName":"trader_ad"},{"id":"function.trader-add","name":"trader_add","description":"Vector Arithmetic Add","tag":"refentry","type":"Function","methodName":"trader_add"},{"id":"function.trader-adosc","name":"trader_adosc","description":"Chaikin A\/D Oscillator","tag":"refentry","type":"Function","methodName":"trader_adosc"},{"id":"function.trader-adx","name":"trader_adx","description":"Average Directional Movement Index","tag":"refentry","type":"Function","methodName":"trader_adx"},{"id":"function.trader-adxr","name":"trader_adxr","description":"Average Directional Movement Index Rating","tag":"refentry","type":"Function","methodName":"trader_adxr"},{"id":"function.trader-apo","name":"trader_apo","description":"Absolute Price Oscillator","tag":"refentry","type":"Function","methodName":"trader_apo"},{"id":"function.trader-aroon","name":"trader_aroon","description":"Aroon","tag":"refentry","type":"Function","methodName":"trader_aroon"},{"id":"function.trader-aroonosc","name":"trader_aroonosc","description":"Aroon Oscillator","tag":"refentry","type":"Function","methodName":"trader_aroonosc"},{"id":"function.trader-asin","name":"trader_asin","description":"Vector Trigonometric ASin","tag":"refentry","type":"Function","methodName":"trader_asin"},{"id":"function.trader-atan","name":"trader_atan","description":"Vector Trigonometric ATan","tag":"refentry","type":"Function","methodName":"trader_atan"},{"id":"function.trader-atr","name":"trader_atr","description":"Average True Range","tag":"refentry","type":"Function","methodName":"trader_atr"},{"id":"function.trader-avgprice","name":"trader_avgprice","description":"Average Price","tag":"refentry","type":"Function","methodName":"trader_avgprice"},{"id":"function.trader-bbands","name":"trader_bbands","description":"Bollinger Bands","tag":"refentry","type":"Function","methodName":"trader_bbands"},{"id":"function.trader-beta","name":"trader_beta","description":"Beta","tag":"refentry","type":"Function","methodName":"trader_beta"},{"id":"function.trader-bop","name":"trader_bop","description":"Balance Of Power","tag":"refentry","type":"Function","methodName":"trader_bop"},{"id":"function.trader-cci","name":"trader_cci","description":"Commodity Channel Index","tag":"refentry","type":"Function","methodName":"trader_cci"},{"id":"function.trader-cdl2crows","name":"trader_cdl2crows","description":"Two Crows","tag":"refentry","type":"Function","methodName":"trader_cdl2crows"},{"id":"function.trader-cdl3blackcrows","name":"trader_cdl3blackcrows","description":"Three Black Crows","tag":"refentry","type":"Function","methodName":"trader_cdl3blackcrows"},{"id":"function.trader-cdl3inside","name":"trader_cdl3inside","description":"Three Inside Up\/Down","tag":"refentry","type":"Function","methodName":"trader_cdl3inside"},{"id":"function.trader-cdl3linestrike","name":"trader_cdl3linestrike","description":"Three-Line Strike","tag":"refentry","type":"Function","methodName":"trader_cdl3linestrike"},{"id":"function.trader-cdl3outside","name":"trader_cdl3outside","description":"Three Outside Up\/Down","tag":"refentry","type":"Function","methodName":"trader_cdl3outside"},{"id":"function.trader-cdl3starsinsouth","name":"trader_cdl3starsinsouth","description":"Three Stars In The South","tag":"refentry","type":"Function","methodName":"trader_cdl3starsinsouth"},{"id":"function.trader-cdl3whitesoldiers","name":"trader_cdl3whitesoldiers","description":"Three Advancing White Soldiers","tag":"refentry","type":"Function","methodName":"trader_cdl3whitesoldiers"},{"id":"function.trader-cdlabandonedbaby","name":"trader_cdlabandonedbaby","description":"Abandoned Baby","tag":"refentry","type":"Function","methodName":"trader_cdlabandonedbaby"},{"id":"function.trader-cdladvanceblock","name":"trader_cdladvanceblock","description":"Advance Block","tag":"refentry","type":"Function","methodName":"trader_cdladvanceblock"},{"id":"function.trader-cdlbelthold","name":"trader_cdlbelthold","description":"Belt-hold","tag":"refentry","type":"Function","methodName":"trader_cdlbelthold"},{"id":"function.trader-cdlbreakaway","name":"trader_cdlbreakaway","description":"Breakaway","tag":"refentry","type":"Function","methodName":"trader_cdlbreakaway"},{"id":"function.trader-cdlclosingmarubozu","name":"trader_cdlclosingmarubozu","description":"Closing Marubozu","tag":"refentry","type":"Function","methodName":"trader_cdlclosingmarubozu"},{"id":"function.trader-cdlconcealbabyswall","name":"trader_cdlconcealbabyswall","description":"Concealing Baby Swallow","tag":"refentry","type":"Function","methodName":"trader_cdlconcealbabyswall"},{"id":"function.trader-cdlcounterattack","name":"trader_cdlcounterattack","description":"Counterattack","tag":"refentry","type":"Function","methodName":"trader_cdlcounterattack"},{"id":"function.trader-cdldarkcloudcover","name":"trader_cdldarkcloudcover","description":"Dark Cloud Cover","tag":"refentry","type":"Function","methodName":"trader_cdldarkcloudcover"},{"id":"function.trader-cdldoji","name":"trader_cdldoji","description":"Doji","tag":"refentry","type":"Function","methodName":"trader_cdldoji"},{"id":"function.trader-cdldojistar","name":"trader_cdldojistar","description":"Doji Star","tag":"refentry","type":"Function","methodName":"trader_cdldojistar"},{"id":"function.trader-cdldragonflydoji","name":"trader_cdldragonflydoji","description":"Dragonfly Doji","tag":"refentry","type":"Function","methodName":"trader_cdldragonflydoji"},{"id":"function.trader-cdlengulfing","name":"trader_cdlengulfing","description":"Engulfing Pattern","tag":"refentry","type":"Function","methodName":"trader_cdlengulfing"},{"id":"function.trader-cdleveningdojistar","name":"trader_cdleveningdojistar","description":"Evening Doji Star","tag":"refentry","type":"Function","methodName":"trader_cdleveningdojistar"},{"id":"function.trader-cdleveningstar","name":"trader_cdleveningstar","description":"Evening Star","tag":"refentry","type":"Function","methodName":"trader_cdleveningstar"},{"id":"function.trader-cdlgapsidesidewhite","name":"trader_cdlgapsidesidewhite","description":"Up\/Down-gap side-by-side white lines","tag":"refentry","type":"Function","methodName":"trader_cdlgapsidesidewhite"},{"id":"function.trader-cdlgravestonedoji","name":"trader_cdlgravestonedoji","description":"Gravestone Doji","tag":"refentry","type":"Function","methodName":"trader_cdlgravestonedoji"},{"id":"function.trader-cdlhammer","name":"trader_cdlhammer","description":"Hammer","tag":"refentry","type":"Function","methodName":"trader_cdlhammer"},{"id":"function.trader-cdlhangingman","name":"trader_cdlhangingman","description":"Hanging Man","tag":"refentry","type":"Function","methodName":"trader_cdlhangingman"},{"id":"function.trader-cdlharami","name":"trader_cdlharami","description":"Harami Pattern","tag":"refentry","type":"Function","methodName":"trader_cdlharami"},{"id":"function.trader-cdlharamicross","name":"trader_cdlharamicross","description":"Harami Cross Pattern","tag":"refentry","type":"Function","methodName":"trader_cdlharamicross"},{"id":"function.trader-cdlhighwave","name":"trader_cdlhighwave","description":"High-Wave Candle","tag":"refentry","type":"Function","methodName":"trader_cdlhighwave"},{"id":"function.trader-cdlhikkake","name":"trader_cdlhikkake","description":"Hikkake Pattern","tag":"refentry","type":"Function","methodName":"trader_cdlhikkake"},{"id":"function.trader-cdlhikkakemod","name":"trader_cdlhikkakemod","description":"Modified Hikkake Pattern","tag":"refentry","type":"Function","methodName":"trader_cdlhikkakemod"},{"id":"function.trader-cdlhomingpigeon","name":"trader_cdlhomingpigeon","description":"Homing Pigeon","tag":"refentry","type":"Function","methodName":"trader_cdlhomingpigeon"},{"id":"function.trader-cdlidentical3crows","name":"trader_cdlidentical3crows","description":"Identical Three Crows","tag":"refentry","type":"Function","methodName":"trader_cdlidentical3crows"},{"id":"function.trader-cdlinneck","name":"trader_cdlinneck","description":"In-Neck Pattern","tag":"refentry","type":"Function","methodName":"trader_cdlinneck"},{"id":"function.trader-cdlinvertedhammer","name":"trader_cdlinvertedhammer","description":"Inverted Hammer","tag":"refentry","type":"Function","methodName":"trader_cdlinvertedhammer"},{"id":"function.trader-cdlkicking","name":"trader_cdlkicking","description":"Kicking","tag":"refentry","type":"Function","methodName":"trader_cdlkicking"},{"id":"function.trader-cdlkickingbylength","name":"trader_cdlkickingbylength","description":"Kicking - bull\/bear determined by the longer marubozu","tag":"refentry","type":"Function","methodName":"trader_cdlkickingbylength"},{"id":"function.trader-cdlladderbottom","name":"trader_cdlladderbottom","description":"Ladder Bottom","tag":"refentry","type":"Function","methodName":"trader_cdlladderbottom"},{"id":"function.trader-cdllongleggeddoji","name":"trader_cdllongleggeddoji","description":"Long Legged Doji","tag":"refentry","type":"Function","methodName":"trader_cdllongleggeddoji"},{"id":"function.trader-cdllongline","name":"trader_cdllongline","description":"Long Line Candle","tag":"refentry","type":"Function","methodName":"trader_cdllongline"},{"id":"function.trader-cdlmarubozu","name":"trader_cdlmarubozu","description":"Marubozu","tag":"refentry","type":"Function","methodName":"trader_cdlmarubozu"},{"id":"function.trader-cdlmatchinglow","name":"trader_cdlmatchinglow","description":"Matching Low","tag":"refentry","type":"Function","methodName":"trader_cdlmatchinglow"},{"id":"function.trader-cdlmathold","name":"trader_cdlmathold","description":"Mat Hold","tag":"refentry","type":"Function","methodName":"trader_cdlmathold"},{"id":"function.trader-cdlmorningdojistar","name":"trader_cdlmorningdojistar","description":"Morning Doji Star","tag":"refentry","type":"Function","methodName":"trader_cdlmorningdojistar"},{"id":"function.trader-cdlmorningstar","name":"trader_cdlmorningstar","description":"Morning Star","tag":"refentry","type":"Function","methodName":"trader_cdlmorningstar"},{"id":"function.trader-cdlonneck","name":"trader_cdlonneck","description":"On-Neck Pattern","tag":"refentry","type":"Function","methodName":"trader_cdlonneck"},{"id":"function.trader-cdlpiercing","name":"trader_cdlpiercing","description":"Piercing Pattern","tag":"refentry","type":"Function","methodName":"trader_cdlpiercing"},{"id":"function.trader-cdlrickshawman","name":"trader_cdlrickshawman","description":"Rickshaw Man","tag":"refentry","type":"Function","methodName":"trader_cdlrickshawman"},{"id":"function.trader-cdlrisefall3methods","name":"trader_cdlrisefall3methods","description":"Rising\/Falling Three Methods","tag":"refentry","type":"Function","methodName":"trader_cdlrisefall3methods"},{"id":"function.trader-cdlseparatinglines","name":"trader_cdlseparatinglines","description":"Separating Lines","tag":"refentry","type":"Function","methodName":"trader_cdlseparatinglines"},{"id":"function.trader-cdlshootingstar","name":"trader_cdlshootingstar","description":"Shooting Star","tag":"refentry","type":"Function","methodName":"trader_cdlshootingstar"},{"id":"function.trader-cdlshortline","name":"trader_cdlshortline","description":"Short Line Candle","tag":"refentry","type":"Function","methodName":"trader_cdlshortline"},{"id":"function.trader-cdlspinningtop","name":"trader_cdlspinningtop","description":"Spinning Top","tag":"refentry","type":"Function","methodName":"trader_cdlspinningtop"},{"id":"function.trader-cdlstalledpattern","name":"trader_cdlstalledpattern","description":"Stalled Pattern","tag":"refentry","type":"Function","methodName":"trader_cdlstalledpattern"},{"id":"function.trader-cdlsticksandwich","name":"trader_cdlsticksandwich","description":"Stick Sandwich","tag":"refentry","type":"Function","methodName":"trader_cdlsticksandwich"},{"id":"function.trader-cdltakuri","name":"trader_cdltakuri","description":"Takuri (Dragonfly Doji with very long lower shadow)","tag":"refentry","type":"Function","methodName":"trader_cdltakuri"},{"id":"function.trader-cdltasukigap","name":"trader_cdltasukigap","description":"Tasuki Gap","tag":"refentry","type":"Function","methodName":"trader_cdltasukigap"},{"id":"function.trader-cdlthrusting","name":"trader_cdlthrusting","description":"Thrusting Pattern","tag":"refentry","type":"Function","methodName":"trader_cdlthrusting"},{"id":"function.trader-cdltristar","name":"trader_cdltristar","description":"Tristar Pattern","tag":"refentry","type":"Function","methodName":"trader_cdltristar"},{"id":"function.trader-cdlunique3river","name":"trader_cdlunique3river","description":"Unique 3 River","tag":"refentry","type":"Function","methodName":"trader_cdlunique3river"},{"id":"function.trader-cdlupsidegap2crows","name":"trader_cdlupsidegap2crows","description":"Upside Gap Two Crows","tag":"refentry","type":"Function","methodName":"trader_cdlupsidegap2crows"},{"id":"function.trader-cdlxsidegap3methods","name":"trader_cdlxsidegap3methods","description":"Upside\/Downside Gap Three Methods","tag":"refentry","type":"Function","methodName":"trader_cdlxsidegap3methods"},{"id":"function.trader-ceil","name":"trader_ceil","description":"Vector Ceil","tag":"refentry","type":"Function","methodName":"trader_ceil"},{"id":"function.trader-cmo","name":"trader_cmo","description":"Chande Momentum Oscillator","tag":"refentry","type":"Function","methodName":"trader_cmo"},{"id":"function.trader-correl","name":"trader_correl","description":"Pearson's Correlation Coefficient (r)","tag":"refentry","type":"Function","methodName":"trader_correl"},{"id":"function.trader-cos","name":"trader_cos","description":"Vector Trigonometric Cos","tag":"refentry","type":"Function","methodName":"trader_cos"},{"id":"function.trader-cosh","name":"trader_cosh","description":"Vector Trigonometric Cosh","tag":"refentry","type":"Function","methodName":"trader_cosh"},{"id":"function.trader-dema","name":"trader_dema","description":"Double Exponential Moving Average","tag":"refentry","type":"Function","methodName":"trader_dema"},{"id":"function.trader-div","name":"trader_div","description":"Vector Arithmetic Div","tag":"refentry","type":"Function","methodName":"trader_div"},{"id":"function.trader-dx","name":"trader_dx","description":"Directional Movement Index","tag":"refentry","type":"Function","methodName":"trader_dx"},{"id":"function.trader-ema","name":"trader_ema","description":"Exponential Moving Average","tag":"refentry","type":"Function","methodName":"trader_ema"},{"id":"function.trader-errno","name":"trader_errno","description":"Get error code","tag":"refentry","type":"Function","methodName":"trader_errno"},{"id":"function.trader-exp","name":"trader_exp","description":"Vector Arithmetic Exp","tag":"refentry","type":"Function","methodName":"trader_exp"},{"id":"function.trader-floor","name":"trader_floor","description":"Vector Floor","tag":"refentry","type":"Function","methodName":"trader_floor"},{"id":"function.trader-get-compat","name":"trader_get_compat","description":"Get compatibility mode","tag":"refentry","type":"Function","methodName":"trader_get_compat"},{"id":"function.trader-get-unstable-period","name":"trader_get_unstable_period","description":"Get unstable period","tag":"refentry","type":"Function","methodName":"trader_get_unstable_period"},{"id":"function.trader-ht-dcperiod","name":"trader_ht_dcperiod","description":"Hilbert Transform - Dominant Cycle Period","tag":"refentry","type":"Function","methodName":"trader_ht_dcperiod"},{"id":"function.trader-ht-dcphase","name":"trader_ht_dcphase","description":"Hilbert Transform - Dominant Cycle Phase","tag":"refentry","type":"Function","methodName":"trader_ht_dcphase"},{"id":"function.trader-ht-phasor","name":"trader_ht_phasor","description":"Hilbert Transform - Phasor Components","tag":"refentry","type":"Function","methodName":"trader_ht_phasor"},{"id":"function.trader-ht-sine","name":"trader_ht_sine","description":"Hilbert Transform - SineWave","tag":"refentry","type":"Function","methodName":"trader_ht_sine"},{"id":"function.trader-ht-trendline","name":"trader_ht_trendline","description":"Hilbert Transform - Instantaneous Trendline","tag":"refentry","type":"Function","methodName":"trader_ht_trendline"},{"id":"function.trader-ht-trendmode","name":"trader_ht_trendmode","description":"Hilbert Transform - Trend vs Cycle Mode","tag":"refentry","type":"Function","methodName":"trader_ht_trendmode"},{"id":"function.trader-kama","name":"trader_kama","description":"Kaufman Adaptive Moving Average","tag":"refentry","type":"Function","methodName":"trader_kama"},{"id":"function.trader-linearreg","name":"trader_linearreg","description":"Linear Regression","tag":"refentry","type":"Function","methodName":"trader_linearreg"},{"id":"function.trader-linearreg-angle","name":"trader_linearreg_angle","description":"Linear Regression Angle","tag":"refentry","type":"Function","methodName":"trader_linearreg_angle"},{"id":"function.trader-linearreg-intercept","name":"trader_linearreg_intercept","description":"Linear Regression Intercept","tag":"refentry","type":"Function","methodName":"trader_linearreg_intercept"},{"id":"function.trader-linearreg-slope","name":"trader_linearreg_slope","description":"Linear Regression Slope","tag":"refentry","type":"Function","methodName":"trader_linearreg_slope"},{"id":"function.trader-ln","name":"trader_ln","description":"Vector Log Natural","tag":"refentry","type":"Function","methodName":"trader_ln"},{"id":"function.trader-log10","name":"trader_log10","description":"Vector Log10","tag":"refentry","type":"Function","methodName":"trader_log10"},{"id":"function.trader-ma","name":"trader_ma","description":"Moving average","tag":"refentry","type":"Function","methodName":"trader_ma"},{"id":"function.trader-macd","name":"trader_macd","description":"Moving Average Convergence\/Divergence","tag":"refentry","type":"Function","methodName":"trader_macd"},{"id":"function.trader-macdext","name":"trader_macdext","description":"MACD with controllable MA type","tag":"refentry","type":"Function","methodName":"trader_macdext"},{"id":"function.trader-macdfix","name":"trader_macdfix","description":"Moving Average Convergence\/Divergence Fix 12\/26","tag":"refentry","type":"Function","methodName":"trader_macdfix"},{"id":"function.trader-mama","name":"trader_mama","description":"MESA Adaptive Moving Average","tag":"refentry","type":"Function","methodName":"trader_mama"},{"id":"function.trader-mavp","name":"trader_mavp","description":"Moving average with variable period","tag":"refentry","type":"Function","methodName":"trader_mavp"},{"id":"function.trader-max","name":"trader_max","description":"Highest value over a specified period","tag":"refentry","type":"Function","methodName":"trader_max"},{"id":"function.trader-maxindex","name":"trader_maxindex","description":"Index of highest value over a specified period","tag":"refentry","type":"Function","methodName":"trader_maxindex"},{"id":"function.trader-medprice","name":"trader_medprice","description":"Median Price","tag":"refentry","type":"Function","methodName":"trader_medprice"},{"id":"function.trader-mfi","name":"trader_mfi","description":"Money Flow Index","tag":"refentry","type":"Function","methodName":"trader_mfi"},{"id":"function.trader-midpoint","name":"trader_midpoint","description":"MidPoint over period","tag":"refentry","type":"Function","methodName":"trader_midpoint"},{"id":"function.trader-midprice","name":"trader_midprice","description":"Midpoint Price over period","tag":"refentry","type":"Function","methodName":"trader_midprice"},{"id":"function.trader-min","name":"trader_min","description":"Lowest value over a specified period","tag":"refentry","type":"Function","methodName":"trader_min"},{"id":"function.trader-minindex","name":"trader_minindex","description":"Index of lowest value over a specified period","tag":"refentry","type":"Function","methodName":"trader_minindex"},{"id":"function.trader-minmax","name":"trader_minmax","description":"Lowest and highest values over a specified period","tag":"refentry","type":"Function","methodName":"trader_minmax"},{"id":"function.trader-minmaxindex","name":"trader_minmaxindex","description":"Indexes of lowest and highest values over a specified period","tag":"refentry","type":"Function","methodName":"trader_minmaxindex"},{"id":"function.trader-minus-di","name":"trader_minus_di","description":"Minus Directional Indicator","tag":"refentry","type":"Function","methodName":"trader_minus_di"},{"id":"function.trader-minus-dm","name":"trader_minus_dm","description":"Minus Directional Movement","tag":"refentry","type":"Function","methodName":"trader_minus_dm"},{"id":"function.trader-mom","name":"trader_mom","description":"Momentum","tag":"refentry","type":"Function","methodName":"trader_mom"},{"id":"function.trader-mult","name":"trader_mult","description":"Vector Arithmetic Mult","tag":"refentry","type":"Function","methodName":"trader_mult"},{"id":"function.trader-natr","name":"trader_natr","description":"Normalized Average True Range","tag":"refentry","type":"Function","methodName":"trader_natr"},{"id":"function.trader-obv","name":"trader_obv","description":"On Balance Volume","tag":"refentry","type":"Function","methodName":"trader_obv"},{"id":"function.trader-plus-di","name":"trader_plus_di","description":"Plus Directional Indicator","tag":"refentry","type":"Function","methodName":"trader_plus_di"},{"id":"function.trader-plus-dm","name":"trader_plus_dm","description":"Plus Directional Movement","tag":"refentry","type":"Function","methodName":"trader_plus_dm"},{"id":"function.trader-ppo","name":"trader_ppo","description":"Percentage Price Oscillator","tag":"refentry","type":"Function","methodName":"trader_ppo"},{"id":"function.trader-roc","name":"trader_roc","description":"Rate of change : ((price\/prevPrice)-1)*100","tag":"refentry","type":"Function","methodName":"trader_roc"},{"id":"function.trader-rocp","name":"trader_rocp","description":"Rate of change Percentage: (price-prevPrice)\/prevPrice","tag":"refentry","type":"Function","methodName":"trader_rocp"},{"id":"function.trader-rocr","name":"trader_rocr","description":"Rate of change ratio: (price\/prevPrice)","tag":"refentry","type":"Function","methodName":"trader_rocr"},{"id":"function.trader-rocr100","name":"trader_rocr100","description":"Rate of change ratio 100 scale: (price\/prevPrice)*100","tag":"refentry","type":"Function","methodName":"trader_rocr100"},{"id":"function.trader-rsi","name":"trader_rsi","description":"Relative Strength Index","tag":"refentry","type":"Function","methodName":"trader_rsi"},{"id":"function.trader-sar","name":"trader_sar","description":"Parabolic SAR","tag":"refentry","type":"Function","methodName":"trader_sar"},{"id":"function.trader-sarext","name":"trader_sarext","description":"Parabolic SAR - Extended","tag":"refentry","type":"Function","methodName":"trader_sarext"},{"id":"function.trader-set-compat","name":"trader_set_compat","description":"Set compatibility mode","tag":"refentry","type":"Function","methodName":"trader_set_compat"},{"id":"function.trader-set-unstable-period","name":"trader_set_unstable_period","description":"Set unstable period","tag":"refentry","type":"Function","methodName":"trader_set_unstable_period"},{"id":"function.trader-sin","name":"trader_sin","description":"Vector Trigonometric Sin","tag":"refentry","type":"Function","methodName":"trader_sin"},{"id":"function.trader-sinh","name":"trader_sinh","description":"Vector Trigonometric Sinh","tag":"refentry","type":"Function","methodName":"trader_sinh"},{"id":"function.trader-sma","name":"trader_sma","description":"Simple Moving Average","tag":"refentry","type":"Function","methodName":"trader_sma"},{"id":"function.trader-sqrt","name":"trader_sqrt","description":"Vector Square Root","tag":"refentry","type":"Function","methodName":"trader_sqrt"},{"id":"function.trader-stddev","name":"trader_stddev","description":"Standard Deviation","tag":"refentry","type":"Function","methodName":"trader_stddev"},{"id":"function.trader-stoch","name":"trader_stoch","description":"Stochastic","tag":"refentry","type":"Function","methodName":"trader_stoch"},{"id":"function.trader-stochf","name":"trader_stochf","description":"Stochastic Fast","tag":"refentry","type":"Function","methodName":"trader_stochf"},{"id":"function.trader-stochrsi","name":"trader_stochrsi","description":"Stochastic Relative Strength Index","tag":"refentry","type":"Function","methodName":"trader_stochrsi"},{"id":"function.trader-sub","name":"trader_sub","description":"Vector Arithmetic Subtraction","tag":"refentry","type":"Function","methodName":"trader_sub"},{"id":"function.trader-sum","name":"trader_sum","description":"Summation","tag":"refentry","type":"Function","methodName":"trader_sum"},{"id":"function.trader-t3","name":"trader_t3","description":"Triple Exponential Moving Average (T3)","tag":"refentry","type":"Function","methodName":"trader_t3"},{"id":"function.trader-tan","name":"trader_tan","description":"Vector Trigonometric Tan","tag":"refentry","type":"Function","methodName":"trader_tan"},{"id":"function.trader-tanh","name":"trader_tanh","description":"Vector Trigonometric Tanh","tag":"refentry","type":"Function","methodName":"trader_tanh"},{"id":"function.trader-tema","name":"trader_tema","description":"Triple Exponential Moving Average","tag":"refentry","type":"Function","methodName":"trader_tema"},{"id":"function.trader-trange","name":"trader_trange","description":"True Range","tag":"refentry","type":"Function","methodName":"trader_trange"},{"id":"function.trader-trima","name":"trader_trima","description":"Triangular Moving Average","tag":"refentry","type":"Function","methodName":"trader_trima"},{"id":"function.trader-trix","name":"trader_trix","description":"1-day Rate-Of-Change (ROC) of a Triple Smooth EMA","tag":"refentry","type":"Function","methodName":"trader_trix"},{"id":"function.trader-tsf","name":"trader_tsf","description":"Time Series Forecast","tag":"refentry","type":"Function","methodName":"trader_tsf"},{"id":"function.trader-typprice","name":"trader_typprice","description":"Typical Price","tag":"refentry","type":"Function","methodName":"trader_typprice"},{"id":"function.trader-ultosc","name":"trader_ultosc","description":"Ultimate Oscillator","tag":"refentry","type":"Function","methodName":"trader_ultosc"},{"id":"function.trader-var","name":"trader_var","description":"Variance","tag":"refentry","type":"Function","methodName":"trader_var"},{"id":"function.trader-wclprice","name":"trader_wclprice","description":"Weighted Close Price","tag":"refentry","type":"Function","methodName":"trader_wclprice"},{"id":"function.trader-willr","name":"trader_willr","description":"Williams' %R","tag":"refentry","type":"Function","methodName":"trader_willr"},{"id":"function.trader-wma","name":"trader_wma","description":"Weighted Moving Average","tag":"refentry","type":"Function","methodName":"trader_wma"},{"id":"ref.trader","name":"Trader Functions","description":"Technical Analysis for Traders","tag":"reference","type":"Extension","methodName":"Trader Functions"},{"id":"book.trader","name":"Trader","description":"Technical Analysis for Traders","tag":"book","type":"Extension","methodName":"Trader"},{"id":"refs.math","name":"Mathematical Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"Mathematical Extensions"},{"id":"intro.fdf","name":"Introduction","description":"Forms Data Format","tag":"preface","type":"General","methodName":"Introduction"},{"id":"fdf.requirements","name":"Requirements","description":"Forms Data Format","tag":"section","type":"General","methodName":"Requirements"},{"id":"fdf.installation","name":"Installation","description":"Forms Data Format","tag":"section","type":"General","methodName":"Installation"},{"id":"fdf.resources","name":"Resource Types","description":"Forms Data Format","tag":"section","type":"General","methodName":"Resource Types"},{"id":"fdf.setup","name":"Installing\/Configuring","description":"Forms Data Format","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"fdf.constants","name":"Predefined Constants","description":"Forms Data Format","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"fdf.examples","name":"Examples","description":"Forms Data Format","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.fdf-add-doc-javascript","name":"fdf_add_doc_javascript","description":"Adds javascript code to the FDF document","tag":"refentry","type":"Function","methodName":"fdf_add_doc_javascript"},{"id":"function.fdf-add-template","name":"fdf_add_template","description":"Adds a template into the FDF document","tag":"refentry","type":"Function","methodName":"fdf_add_template"},{"id":"function.fdf-close","name":"fdf_close","description":"Close an FDF document","tag":"refentry","type":"Function","methodName":"fdf_close"},{"id":"function.fdf-create","name":"fdf_create","description":"Create a new FDF document","tag":"refentry","type":"Function","methodName":"fdf_create"},{"id":"function.fdf-enum-values","name":"fdf_enum_values","description":"Call a user defined function for each document value","tag":"refentry","type":"Function","methodName":"fdf_enum_values"},{"id":"function.fdf-errno","name":"fdf_errno","description":"Return error code for last fdf operation","tag":"refentry","type":"Function","methodName":"fdf_errno"},{"id":"function.fdf-error","name":"fdf_error","description":"Return error description for FDF error code","tag":"refentry","type":"Function","methodName":"fdf_error"},{"id":"function.fdf-get-ap","name":"fdf_get_ap","description":"Get the appearance of a field","tag":"refentry","type":"Function","methodName":"fdf_get_ap"},{"id":"function.fdf-get-attachment","name":"fdf_get_attachment","description":"Extracts uploaded file embedded in the FDF","tag":"refentry","type":"Function","methodName":"fdf_get_attachment"},{"id":"function.fdf-get-encoding","name":"fdf_get_encoding","description":"Get the value of the \/Encoding key","tag":"refentry","type":"Function","methodName":"fdf_get_encoding"},{"id":"function.fdf-get-file","name":"fdf_get_file","description":"Get the value of the \/F key","tag":"refentry","type":"Function","methodName":"fdf_get_file"},{"id":"function.fdf-get-flags","name":"fdf_get_flags","description":"Gets the flags of a field","tag":"refentry","type":"Function","methodName":"fdf_get_flags"},{"id":"function.fdf-get-opt","name":"fdf_get_opt","description":"Gets a value from the opt array of a field","tag":"refentry","type":"Function","methodName":"fdf_get_opt"},{"id":"function.fdf-get-status","name":"fdf_get_status","description":"Get the value of the \/STATUS key","tag":"refentry","type":"Function","methodName":"fdf_get_status"},{"id":"function.fdf-get-value","name":"fdf_get_value","description":"Get the value of a field","tag":"refentry","type":"Function","methodName":"fdf_get_value"},{"id":"function.fdf-get-version","name":"fdf_get_version","description":"Gets version number for FDF API or file","tag":"refentry","type":"Function","methodName":"fdf_get_version"},{"id":"function.fdf-header","name":"fdf_header","description":"Sets FDF-specific output headers","tag":"refentry","type":"Function","methodName":"fdf_header"},{"id":"function.fdf-next-field-name","name":"fdf_next_field_name","description":"Get the next field name","tag":"refentry","type":"Function","methodName":"fdf_next_field_name"},{"id":"function.fdf-open","name":"fdf_open","description":"Open a FDF document","tag":"refentry","type":"Function","methodName":"fdf_open"},{"id":"function.fdf-open-string","name":"fdf_open_string","description":"Read a FDF document from a string","tag":"refentry","type":"Function","methodName":"fdf_open_string"},{"id":"function.fdf-remove-item","name":"fdf_remove_item","description":"Sets target frame for form","tag":"refentry","type":"Function","methodName":"fdf_remove_item"},{"id":"function.fdf-save","name":"fdf_save","description":"Save a FDF document","tag":"refentry","type":"Function","methodName":"fdf_save"},{"id":"function.fdf-save-string","name":"fdf_save_string","description":"Returns the FDF document as a string","tag":"refentry","type":"Function","methodName":"fdf_save_string"},{"id":"function.fdf-set-ap","name":"fdf_set_ap","description":"Set the appearance of a field","tag":"refentry","type":"Function","methodName":"fdf_set_ap"},{"id":"function.fdf-set-encoding","name":"fdf_set_encoding","description":"Sets FDF character encoding","tag":"refentry","type":"Function","methodName":"fdf_set_encoding"},{"id":"function.fdf-set-file","name":"fdf_set_file","description":"Set PDF document to display FDF data in","tag":"refentry","type":"Function","methodName":"fdf_set_file"},{"id":"function.fdf-set-flags","name":"fdf_set_flags","description":"Sets a flag of a field","tag":"refentry","type":"Function","methodName":"fdf_set_flags"},{"id":"function.fdf-set-javascript-action","name":"fdf_set_javascript_action","description":"Sets an javascript action of a field","tag":"refentry","type":"Function","methodName":"fdf_set_javascript_action"},{"id":"function.fdf-set-on-import-javascript","name":"fdf_set_on_import_javascript","description":"Adds javascript code to be executed when Acrobat opens the FDF","tag":"refentry","type":"Function","methodName":"fdf_set_on_import_javascript"},{"id":"function.fdf-set-opt","name":"fdf_set_opt","description":"Sets an option of a field","tag":"refentry","type":"Function","methodName":"fdf_set_opt"},{"id":"function.fdf-set-status","name":"fdf_set_status","description":"Set the value of the \/STATUS key","tag":"refentry","type":"Function","methodName":"fdf_set_status"},{"id":"function.fdf-set-submit-form-action","name":"fdf_set_submit_form_action","description":"Sets a submit form action of a field","tag":"refentry","type":"Function","methodName":"fdf_set_submit_form_action"},{"id":"function.fdf-set-target-frame","name":"fdf_set_target_frame","description":"Set target frame for form display","tag":"refentry","type":"Function","methodName":"fdf_set_target_frame"},{"id":"function.fdf-set-value","name":"fdf_set_value","description":"Set the value of a field","tag":"refentry","type":"Function","methodName":"fdf_set_value"},{"id":"function.fdf-set-version","name":"fdf_set_version","description":"Sets version number for a FDF file","tag":"refentry","type":"Function","methodName":"fdf_set_version"},{"id":"ref.fdf","name":"FDF Functions","description":"Forms Data Format","tag":"reference","type":"Extension","methodName":"FDF Functions"},{"id":"book.fdf","name":"FDF","description":"Forms Data Format","tag":"book","type":"Extension","methodName":"FDF"},{"id":"intro.gnupg","name":"Introduction","description":"GNU Privacy Guard","tag":"preface","type":"General","methodName":"Introduction"},{"id":"gnupg.requirements","name":"Requirements","description":"GNU Privacy Guard","tag":"section","type":"General","methodName":"Requirements"},{"id":"gnupg.installation","name":"Installation","description":"GNU Privacy Guard","tag":"section","type":"General","methodName":"Installation"},{"id":"gnupg.setup","name":"Installing\/Configuring","description":"GNU Privacy Guard","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"gnupg.constants","name":"Predefined Constants","description":"GNU Privacy Guard","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"gnupg.examples-clearsign","name":"Clearsign text","description":"GNU Privacy Guard","tag":"section","type":"General","methodName":"Clearsign text"},{"id":"gnupg.examples","name":"Examples","description":"GNU Privacy Guard","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.gnupg-adddecryptkey","name":"gnupg_adddecryptkey","description":"Add a key for decryption","tag":"refentry","type":"Function","methodName":"gnupg_adddecryptkey"},{"id":"function.gnupg-addencryptkey","name":"gnupg_addencryptkey","description":"Add a key for encryption","tag":"refentry","type":"Function","methodName":"gnupg_addencryptkey"},{"id":"function.gnupg-addsignkey","name":"gnupg_addsignkey","description":"Add a key for signing","tag":"refentry","type":"Function","methodName":"gnupg_addsignkey"},{"id":"function.gnupg-cleardecryptkeys","name":"gnupg_cleardecryptkeys","description":"Removes all keys which were set for decryption before","tag":"refentry","type":"Function","methodName":"gnupg_cleardecryptkeys"},{"id":"function.gnupg-clearencryptkeys","name":"gnupg_clearencryptkeys","description":"Removes all keys which were set for encryption before","tag":"refentry","type":"Function","methodName":"gnupg_clearencryptkeys"},{"id":"function.gnupg-clearsignkeys","name":"gnupg_clearsignkeys","description":"Removes all keys which were set for signing before","tag":"refentry","type":"Function","methodName":"gnupg_clearsignkeys"},{"id":"function.gnupg-decrypt","name":"gnupg_decrypt","description":"Decrypts a given text","tag":"refentry","type":"Function","methodName":"gnupg_decrypt"},{"id":"function.gnupg-decryptverify","name":"gnupg_decryptverify","description":"Decrypts and verifies a given text","tag":"refentry","type":"Function","methodName":"gnupg_decryptverify"},{"id":"function.gnupg-deletekey","name":"gnupg_deletekey","description":"Delete a key from the keyring","tag":"refentry","type":"Function","methodName":"gnupg_deletekey"},{"id":"function.gnupg-encrypt","name":"gnupg_encrypt","description":"Encrypts a given text","tag":"refentry","type":"Function","methodName":"gnupg_encrypt"},{"id":"function.gnupg-encryptsign","name":"gnupg_encryptsign","description":"Encrypts and signs a given text","tag":"refentry","type":"Function","methodName":"gnupg_encryptsign"},{"id":"function.gnupg-export","name":"gnupg_export","description":"Exports a key","tag":"refentry","type":"Function","methodName":"gnupg_export"},{"id":"function.gnupg-getengineinfo","name":"gnupg_getengineinfo","description":"Returns the engine info","tag":"refentry","type":"Function","methodName":"gnupg_getengineinfo"},{"id":"function.gnupg-geterror","name":"gnupg_geterror","description":"Returns the errortext, if a function fails","tag":"refentry","type":"Function","methodName":"gnupg_geterror"},{"id":"function.gnupg-geterrorinfo","name":"gnupg_geterrorinfo","description":"Returns the error info","tag":"refentry","type":"Function","methodName":"gnupg_geterrorinfo"},{"id":"function.gnupg-getprotocol","name":"gnupg_getprotocol","description":"Returns the currently active protocol for all operations","tag":"refentry","type":"Function","methodName":"gnupg_getprotocol"},{"id":"function.gnupg-gettrustlist","name":"gnupg_gettrustlist","description":"Search the trust items","tag":"refentry","type":"Function","methodName":"gnupg_gettrustlist"},{"id":"function.gnupg-import","name":"gnupg_import","description":"Imports a key","tag":"refentry","type":"Function","methodName":"gnupg_import"},{"id":"function.gnupg-init","name":"gnupg_init","description":"Initialize a connection","tag":"refentry","type":"Function","methodName":"gnupg_init"},{"id":"function.gnupg-keyinfo","name":"gnupg_keyinfo","description":"Returns an array with information about all keys that matches the given pattern","tag":"refentry","type":"Function","methodName":"gnupg_keyinfo"},{"id":"function.gnupg-listsignatures","name":"gnupg_listsignatures","description":"List key signatures","tag":"refentry","type":"Function","methodName":"gnupg_listsignatures"},{"id":"function.gnupg-setarmor","name":"gnupg_setarmor","description":"Toggle armored output","tag":"refentry","type":"Function","methodName":"gnupg_setarmor"},{"id":"function.gnupg-seterrormode","name":"gnupg_seterrormode","description":"Sets the mode for error_reporting","tag":"refentry","type":"Function","methodName":"gnupg_seterrormode"},{"id":"function.gnupg-setsignmode","name":"gnupg_setsignmode","description":"Sets the mode for signing","tag":"refentry","type":"Function","methodName":"gnupg_setsignmode"},{"id":"function.gnupg-sign","name":"gnupg_sign","description":"Signs a given text","tag":"refentry","type":"Function","methodName":"gnupg_sign"},{"id":"function.gnupg-verify","name":"gnupg_verify","description":"Verifies a signed text","tag":"refentry","type":"Function","methodName":"gnupg_verify"},{"id":"ref.gnupg","name":"GnuPG Functions","description":"GNU Privacy Guard","tag":"reference","type":"Extension","methodName":"GnuPG Functions"},{"id":"book.gnupg","name":"GnuPG","description":"GNU Privacy Guard","tag":"book","type":"Extension","methodName":"GnuPG"},{"id":"intro.wkhtmltox","name":"Introduction","description":"wkhtmltox","tag":"preface","type":"General","methodName":"Introduction"},{"id":"wkhtmltox.requirements","name":"Requirements","description":"wkhtmltox","tag":"section","type":"General","methodName":"Requirements"},{"id":"wkhtmltox.installation","name":"Installation","description":"wkhtmltox","tag":"section","type":"General","methodName":"Installation"},{"id":"wkhtmltox.configuration","name":"Runtime Configuration","description":"wkhtmltox","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"wkhtmltox.setup","name":"Installing\/Configuring","description":"wkhtmltox","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"wkhtmltox-pdf-converter.add","name":"wkhtmltox\\PDF\\Converter::add","description":"Add an object for conversion","tag":"refentry","type":"Function","methodName":"add"},{"id":"wkhtmltox-pdf-converter.construct","name":"wkhtmltox\\PDF\\Converter::__construct","description":"Create a new PDF converter","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"wkhtmltox-pdf-converter.convert","name":"wkhtmltox\\PDF\\Converter::convert","description":"Perform PDF conversion","tag":"refentry","type":"Function","methodName":"convert"},{"id":"wkhtmltox-pdf-converter.getversion","name":"wkhtmltox\\PDF\\Converter::getVersion","description":"Determine version of Converter","tag":"refentry","type":"Function","methodName":"getVersion"},{"id":"class.wkhtmltox-pdf-converter","name":"wkhtmltox\\PDF\\Converter","description":"The wkhtmltox\\PDF\\Converter class","tag":"phpdoc:classref","type":"Class","methodName":"wkhtmltox\\PDF\\Converter"},{"id":"wkhtmltox-pdf-object.construct","name":"wkhtmltox\\PDF\\Object::__construct","description":"Create a new PDF Object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.wkhtmltox-pdf-object","name":"wkhtmltox\\PDF\\Object","description":"The wkhtmltox\\PDF\\Object class","tag":"phpdoc:classref","type":"Class","methodName":"wkhtmltox\\PDF\\Object"},{"id":"wkhtmltox-image-converter.construct","name":"wkhtmltox\\Image\\Converter::__construct","description":"Create a new Image converter","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"wkhtmltox-image-converter.convert","name":"wkhtmltox\\Image\\Converter::convert","description":"Perform Image conversion","tag":"refentry","type":"Function","methodName":"convert"},{"id":"wkhtmltox-image-converter.getversion","name":"wkhtmltox\\Image\\Converter::getVersion","description":"Determine version of Converter","tag":"refentry","type":"Function","methodName":"getVersion"},{"id":"class.wkhtmltox-image-converter","name":"wkhtmltox\\Image\\Converter","description":"The wkhtmltox\\Image\\Converter class","tag":"phpdoc:classref","type":"Class","methodName":"wkhtmltox\\Image\\Converter"},{"id":"book.wkhtmltox","name":"wkhtmltox","description":"wkhtmltox","tag":"book","type":"Extension","methodName":"wkhtmltox"},{"id":"intro.ps","name":"Introduction","description":"PostScript document creation","tag":"preface","type":"General","methodName":"Introduction"},{"id":"ps.requirements","name":"Requirements","description":"PostScript document creation","tag":"section","type":"General","methodName":"Requirements"},{"id":"ps.installation","name":"Installation","description":"PostScript document creation","tag":"section","type":"General","methodName":"Installation"},{"id":"ps.resources","name":"Resource Types","description":"PostScript document creation","tag":"section","type":"General","methodName":"Resource Types"},{"id":"ps.setup","name":"Installing\/Configuring","description":"PostScript document creation","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"ps.constants","name":"Predefined Constants","description":"PostScript document creation","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.ps-add-bookmark","name":"ps_add_bookmark","description":"Add bookmark to current page","tag":"refentry","type":"Function","methodName":"ps_add_bookmark"},{"id":"function.ps-add-launchlink","name":"ps_add_launchlink","description":"Adds link which launches file","tag":"refentry","type":"Function","methodName":"ps_add_launchlink"},{"id":"function.ps-add-locallink","name":"ps_add_locallink","description":"Adds link to a page in the same document","tag":"refentry","type":"Function","methodName":"ps_add_locallink"},{"id":"function.ps-add-note","name":"ps_add_note","description":"Adds note to current page","tag":"refentry","type":"Function","methodName":"ps_add_note"},{"id":"function.ps-add-pdflink","name":"ps_add_pdflink","description":"Adds link to a page in a second pdf document","tag":"refentry","type":"Function","methodName":"ps_add_pdflink"},{"id":"function.ps-add-weblink","name":"ps_add_weblink","description":"Adds link to a web location","tag":"refentry","type":"Function","methodName":"ps_add_weblink"},{"id":"function.ps-arc","name":"ps_arc","description":"Draws an arc counterclockwise","tag":"refentry","type":"Function","methodName":"ps_arc"},{"id":"function.ps-arcn","name":"ps_arcn","description":"Draws an arc clockwise","tag":"refentry","type":"Function","methodName":"ps_arcn"},{"id":"function.ps-begin-page","name":"ps_begin_page","description":"Start a new page","tag":"refentry","type":"Function","methodName":"ps_begin_page"},{"id":"function.ps-begin-pattern","name":"ps_begin_pattern","description":"Start a new pattern","tag":"refentry","type":"Function","methodName":"ps_begin_pattern"},{"id":"function.ps-begin-template","name":"ps_begin_template","description":"Start a new template","tag":"refentry","type":"Function","methodName":"ps_begin_template"},{"id":"function.ps-circle","name":"ps_circle","description":"Draws a circle","tag":"refentry","type":"Function","methodName":"ps_circle"},{"id":"function.ps-clip","name":"ps_clip","description":"Clips drawing to current path","tag":"refentry","type":"Function","methodName":"ps_clip"},{"id":"function.ps-close","name":"ps_close","description":"Closes a PostScript document","tag":"refentry","type":"Function","methodName":"ps_close"},{"id":"function.ps-close-image","name":"ps_close_image","description":"Closes image and frees memory","tag":"refentry","type":"Function","methodName":"ps_close_image"},{"id":"function.ps-closepath","name":"ps_closepath","description":"Closes path","tag":"refentry","type":"Function","methodName":"ps_closepath"},{"id":"function.ps-closepath-stroke","name":"ps_closepath_stroke","description":"Closes and strokes path","tag":"refentry","type":"Function","methodName":"ps_closepath_stroke"},{"id":"function.ps-continue-text","name":"ps_continue_text","description":"Continue text in next line","tag":"refentry","type":"Function","methodName":"ps_continue_text"},{"id":"function.ps-curveto","name":"ps_curveto","description":"Draws a curve","tag":"refentry","type":"Function","methodName":"ps_curveto"},{"id":"function.ps-delete","name":"ps_delete","description":"Deletes all resources of a PostScript document","tag":"refentry","type":"Function","methodName":"ps_delete"},{"id":"function.ps-end-page","name":"ps_end_page","description":"End a page","tag":"refentry","type":"Function","methodName":"ps_end_page"},{"id":"function.ps-end-pattern","name":"ps_end_pattern","description":"End a pattern","tag":"refentry","type":"Function","methodName":"ps_end_pattern"},{"id":"function.ps-end-template","name":"ps_end_template","description":"End a template","tag":"refentry","type":"Function","methodName":"ps_end_template"},{"id":"function.ps-fill","name":"ps_fill","description":"Fills the current path","tag":"refentry","type":"Function","methodName":"ps_fill"},{"id":"function.ps-fill-stroke","name":"ps_fill_stroke","description":"Fills and strokes the current path","tag":"refentry","type":"Function","methodName":"ps_fill_stroke"},{"id":"function.ps-findfont","name":"ps_findfont","description":"Loads a font","tag":"refentry","type":"Function","methodName":"ps_findfont"},{"id":"function.ps-get-buffer","name":"ps_get_buffer","description":"Fetches the full buffer containig the generated PS data","tag":"refentry","type":"Function","methodName":"ps_get_buffer"},{"id":"function.ps-get-parameter","name":"ps_get_parameter","description":"Gets certain parameters","tag":"refentry","type":"Function","methodName":"ps_get_parameter"},{"id":"function.ps-get-value","name":"ps_get_value","description":"Gets certain values","tag":"refentry","type":"Function","methodName":"ps_get_value"},{"id":"function.ps-hyphenate","name":"ps_hyphenate","description":"Hyphenates a word","tag":"refentry","type":"Function","methodName":"ps_hyphenate"},{"id":"function.ps-include-file","name":"ps_include_file","description":"Reads an external file with raw PostScript code","tag":"refentry","type":"Function","methodName":"ps_include_file"},{"id":"function.ps-lineto","name":"ps_lineto","description":"Draws a line","tag":"refentry","type":"Function","methodName":"ps_lineto"},{"id":"function.ps-makespotcolor","name":"ps_makespotcolor","description":"Create spot color","tag":"refentry","type":"Function","methodName":"ps_makespotcolor"},{"id":"function.ps-moveto","name":"ps_moveto","description":"Sets current point","tag":"refentry","type":"Function","methodName":"ps_moveto"},{"id":"function.ps-new","name":"ps_new","description":"Creates a new PostScript document object","tag":"refentry","type":"Function","methodName":"ps_new"},{"id":"function.ps-open-file","name":"ps_open_file","description":"Opens a file for output","tag":"refentry","type":"Function","methodName":"ps_open_file"},{"id":"function.ps-open-image","name":"ps_open_image","description":"Reads an image for later placement","tag":"refentry","type":"Function","methodName":"ps_open_image"},{"id":"function.ps-open-image-file","name":"ps_open_image_file","description":"Opens image from file","tag":"refentry","type":"Function","methodName":"ps_open_image_file"},{"id":"function.ps-open-memory-image","name":"ps_open_memory_image","description":"Takes an GD image and returns an image for placement in a PS document","tag":"refentry","type":"Function","methodName":"ps_open_memory_image"},{"id":"function.ps-place-image","name":"ps_place_image","description":"Places image on the page","tag":"refentry","type":"Function","methodName":"ps_place_image"},{"id":"function.ps-rect","name":"ps_rect","description":"Draws a rectangle","tag":"refentry","type":"Function","methodName":"ps_rect"},{"id":"function.ps-restore","name":"ps_restore","description":"Restore previously save context","tag":"refentry","type":"Function","methodName":"ps_restore"},{"id":"function.ps-rotate","name":"ps_rotate","description":"Sets rotation factor","tag":"refentry","type":"Function","methodName":"ps_rotate"},{"id":"function.ps-save","name":"ps_save","description":"Save current context","tag":"refentry","type":"Function","methodName":"ps_save"},{"id":"function.ps-scale","name":"ps_scale","description":"Sets scaling factor","tag":"refentry","type":"Function","methodName":"ps_scale"},{"id":"function.ps-set-border-color","name":"ps_set_border_color","description":"Sets color of border for annotations","tag":"refentry","type":"Function","methodName":"ps_set_border_color"},{"id":"function.ps-set-border-dash","name":"ps_set_border_dash","description":"Sets length of dashes for border of annotations","tag":"refentry","type":"Function","methodName":"ps_set_border_dash"},{"id":"function.ps-set-border-style","name":"ps_set_border_style","description":"Sets border style of annotations","tag":"refentry","type":"Function","methodName":"ps_set_border_style"},{"id":"function.ps-set-info","name":"ps_set_info","description":"Sets information fields of document","tag":"refentry","type":"Function","methodName":"ps_set_info"},{"id":"function.ps-set-parameter","name":"ps_set_parameter","description":"Sets certain parameters","tag":"refentry","type":"Function","methodName":"ps_set_parameter"},{"id":"function.ps-set-text-pos","name":"ps_set_text_pos","description":"Sets position for text output","tag":"refentry","type":"Function","methodName":"ps_set_text_pos"},{"id":"function.ps-set-value","name":"ps_set_value","description":"Sets certain values","tag":"refentry","type":"Function","methodName":"ps_set_value"},{"id":"function.ps-setcolor","name":"ps_setcolor","description":"Sets current color","tag":"refentry","type":"Function","methodName":"ps_setcolor"},{"id":"function.ps-setdash","name":"ps_setdash","description":"Sets appearance of a dashed line","tag":"refentry","type":"Function","methodName":"ps_setdash"},{"id":"function.ps-setflat","name":"ps_setflat","description":"Sets flatness","tag":"refentry","type":"Function","methodName":"ps_setflat"},{"id":"function.ps-setfont","name":"ps_setfont","description":"Sets font to use for following output","tag":"refentry","type":"Function","methodName":"ps_setfont"},{"id":"function.ps-setgray","name":"ps_setgray","description":"Sets gray value","tag":"refentry","type":"Function","methodName":"ps_setgray"},{"id":"function.ps-setlinecap","name":"ps_setlinecap","description":"Sets appearance of line ends","tag":"refentry","type":"Function","methodName":"ps_setlinecap"},{"id":"function.ps-setlinejoin","name":"ps_setlinejoin","description":"Sets how contected lines are joined","tag":"refentry","type":"Function","methodName":"ps_setlinejoin"},{"id":"function.ps-setlinewidth","name":"ps_setlinewidth","description":"Sets width of a line","tag":"refentry","type":"Function","methodName":"ps_setlinewidth"},{"id":"function.ps-setmiterlimit","name":"ps_setmiterlimit","description":"Sets the miter limit","tag":"refentry","type":"Function","methodName":"ps_setmiterlimit"},{"id":"function.ps-setoverprintmode","name":"ps_setoverprintmode","description":"Sets overprint mode","tag":"refentry","type":"Function","methodName":"ps_setoverprintmode"},{"id":"function.ps-setpolydash","name":"ps_setpolydash","description":"Sets appearance of a dashed line","tag":"refentry","type":"Function","methodName":"ps_setpolydash"},{"id":"function.ps-shading","name":"ps_shading","description":"Creates a shading for later use","tag":"refentry","type":"Function","methodName":"ps_shading"},{"id":"function.ps-shading-pattern","name":"ps_shading_pattern","description":"Creates a pattern based on a shading","tag":"refentry","type":"Function","methodName":"ps_shading_pattern"},{"id":"function.ps-shfill","name":"ps_shfill","description":"Fills an area with a shading","tag":"refentry","type":"Function","methodName":"ps_shfill"},{"id":"function.ps-show","name":"ps_show","description":"Output text","tag":"refentry","type":"Function","methodName":"ps_show"},{"id":"function.ps-show-boxed","name":"ps_show_boxed","description":"Output text in a box","tag":"refentry","type":"Function","methodName":"ps_show_boxed"},{"id":"function.ps-show-xy","name":"ps_show_xy","description":"Output text at given position","tag":"refentry","type":"Function","methodName":"ps_show_xy"},{"id":"function.ps-show-xy2","name":"ps_show_xy2","description":"Output text at position","tag":"refentry","type":"Function","methodName":"ps_show_xy2"},{"id":"function.ps-show2","name":"ps_show2","description":"Output a text at current position","tag":"refentry","type":"Function","methodName":"ps_show2"},{"id":"function.ps-string-geometry","name":"ps_string_geometry","description":"Gets geometry of a string","tag":"refentry","type":"Function","methodName":"ps_string_geometry"},{"id":"function.ps-stringwidth","name":"ps_stringwidth","description":"Gets width of a string","tag":"refentry","type":"Function","methodName":"ps_stringwidth"},{"id":"function.ps-stroke","name":"ps_stroke","description":"Draws the current path","tag":"refentry","type":"Function","methodName":"ps_stroke"},{"id":"function.ps-symbol","name":"ps_symbol","description":"Output a glyph","tag":"refentry","type":"Function","methodName":"ps_symbol"},{"id":"function.ps-symbol-name","name":"ps_symbol_name","description":"Gets name of a glyph","tag":"refentry","type":"Function","methodName":"ps_symbol_name"},{"id":"function.ps-symbol-width","name":"ps_symbol_width","description":"Gets width of a glyph","tag":"refentry","type":"Function","methodName":"ps_symbol_width"},{"id":"function.ps-translate","name":"ps_translate","description":"Sets translation","tag":"refentry","type":"Function","methodName":"ps_translate"},{"id":"ref.ps","name":"PS Functions","description":"PostScript document creation","tag":"reference","type":"Extension","methodName":"PS Functions"},{"id":"book.ps","name":"PS","description":"PostScript document creation","tag":"book","type":"Extension","methodName":"PS"},{"id":"intro.rpminfo","name":"Introduction","description":"RpmInfo","tag":"preface","type":"General","methodName":"Introduction"},{"id":"rpminfo.requirements","name":"Requirements","description":"RpmInfo","tag":"section","type":"General","methodName":"Requirements"},{"id":"rpminfo.installation","name":"Installation via PECL","description":"RpmInfo","tag":"section","type":"General","methodName":"Installation via PECL"},{"id":"rpminfo.setup","name":"Installing\/Configuring","description":"RpmInfo","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"rpminfo.constants","name":"Predefined Constants","description":"RpmInfo","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.rpmaddtag","name":"rpmaddtag","description":"Add tag retrieved in query","tag":"refentry","type":"Function","methodName":"rpmaddtag"},{"id":"function.rpmdbinfo","name":"rpmdbinfo","description":"Get information from installed RPM","tag":"refentry","type":"Function","methodName":"rpmdbinfo"},{"id":"function.rpmdbsearch","name":"rpmdbsearch","description":"Search RPM packages","tag":"refentry","type":"Function","methodName":"rpmdbsearch"},{"id":"function.rpmdefine","name":"rpmdefine","description":"Define or change a RPM macro value","tag":"refentry","type":"Function","methodName":"rpmdefine"},{"id":"function.rpmexpand","name":"rpmexpand","description":"Retrieve expanded value of a RPM macro","tag":"refentry","type":"Function","methodName":"rpmexpand"},{"id":"function.rpmexpandnumeric","name":"rpmexpandnumeric","description":"Retrieve numerical value of a RPM macro","tag":"refentry","type":"Function","methodName":"rpmexpandnumeric"},{"id":"function.rpmgetsymlink","name":"rpmgetsymlink","description":"Get target of a symlink","tag":"refentry","type":"Function","methodName":"rpmgetsymlink"},{"id":"function.rpminfo","name":"rpminfo","description":"Get information from a RPM file","tag":"refentry","type":"Function","methodName":"rpminfo"},{"id":"function.rpmvercmp","name":"rpmvercmp","description":"RPM version comparison","tag":"refentry","type":"Function","methodName":"rpmvercmp"},{"id":"ref.rpminfo","name":"RpmInfo Functions","description":"RpmInfo","tag":"reference","type":"Extension","methodName":"RpmInfo Functions"},{"id":"book.rpminfo","name":"RpmInfo","description":"RpmInfo","tag":"book","type":"Extension","methodName":"RpmInfo"},{"id":"intro.xlswriter","name":"Introduction","description":"XLSWriter","tag":"preface","type":"General","methodName":"Introduction"},{"id":"xlswriter.requirements","name":"Requirements","description":"XLSWriter","tag":"section","type":"General","methodName":"Requirements"},{"id":"xlswriter.installation","name":"Installation","description":"XLSWriter","tag":"section","type":"General","methodName":"Installation"},{"id":"xlswriter.resources","name":"Resource Types","description":"XLSWriter","tag":"section","type":"General","methodName":"Resource Types"},{"id":"xlswriter.setup","name":"Installing\/Configuring","description":"XLSWriter","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"vtiful-kernel-excel.addSheet","name":"Vtiful\\Kernel\\Excel::addSheet","description":"Vtiful\\Kernel\\Excel addSheet","tag":"refentry","type":"Function","methodName":"addSheet"},{"id":"vtiful-kernel-excel.autoFilter","name":"Vtiful\\Kernel\\Excel::autoFilter","description":"Vtiful\\Kernel\\Excel autoFilter","tag":"refentry","type":"Function","methodName":"autoFilter"},{"id":"vtiful-kernel-excel.constMemory","name":"Vtiful\\Kernel\\Excel::constMemory","description":"Vtiful\\Kernel\\Excel constMemory","tag":"refentry","type":"Function","methodName":"constMemory"},{"id":"vtiful-kernel-excel.construct","name":"Vtiful\\Kernel\\Excel::__construct","description":"Vtiful\\Kernel\\Excel constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"vtiful-kernel-excel.data","name":"Vtiful\\Kernel\\Excel::data","description":"Vtiful\\Kernel\\Excel data","tag":"refentry","type":"Function","methodName":"data"},{"id":"vtiful-kernel-excel.filename","name":"Vtiful\\Kernel\\Excel::fileName","description":"Vtiful\\Kernel\\Excel fileName","tag":"refentry","type":"Function","methodName":"fileName"},{"id":"vtiful-kernel-excel.getHandle","name":"Vtiful\\Kernel\\Excel::getHandle","description":"Vtiful\\Kernel\\Excel getHandle","tag":"refentry","type":"Function","methodName":"getHandle"},{"id":"vtiful-kernel-excel.header","name":"Vtiful\\Kernel\\Excel::header","description":"Vtiful\\Kernel\\Excel header","tag":"refentry","type":"Function","methodName":"header"},{"id":"vtiful-kernel-excel.insertFormula","name":"Vtiful\\Kernel\\Excel::insertFormula","description":"Vtiful\\Kernel\\Excel insertFormula","tag":"refentry","type":"Function","methodName":"insertFormula"},{"id":"vtiful-kernel-excel.insertImage","name":"Vtiful\\Kernel\\Excel::insertImage","description":"Vtiful\\Kernel\\Excel insertImage","tag":"refentry","type":"Function","methodName":"insertImage"},{"id":"vtiful-kernel-excel.insertText","name":"Vtiful\\Kernel\\Excel::insertText","description":"Vtiful\\Kernel\\Excel insertText","tag":"refentry","type":"Function","methodName":"insertText"},{"id":"vtiful-kernel-excel.mergeCells","name":"Vtiful\\Kernel\\Excel::mergeCells","description":"Vtiful\\Kernel\\Excel mergeCells","tag":"refentry","type":"Function","methodName":"mergeCells"},{"id":"vtiful-kernel-excel.output","name":"Vtiful\\Kernel\\Excel::output","description":"Vtiful\\Kernel\\Excel output","tag":"refentry","type":"Function","methodName":"output"},{"id":"vtiful-kernel-excel.setColumn","name":"Vtiful\\Kernel\\Excel::setColumn","description":"Vtiful\\Kernel\\Excel setColumn","tag":"refentry","type":"Function","methodName":"setColumn"},{"id":"vtiful-kernel-excel.setRow","name":"Vtiful\\Kernel\\Excel::setRow","description":"Vtiful\\Kernel\\Excel setRow","tag":"refentry","type":"Function","methodName":"setRow"},{"id":"class.vtiful-kernel-excel","name":"Vtiful\\Kernel\\Excel","description":"The Vtiful\\Kernel\\Excel class","tag":"phpdoc:classref","type":"Class","methodName":"Vtiful\\Kernel\\Excel"},{"id":"vtiful-kernel-format.align","name":"Vtiful\\Kernel\\Format::align","description":"Vtiful\\Kernel\\Format align","tag":"refentry","type":"Function","methodName":"align"},{"id":"vtiful-kernel-format.bold","name":"Vtiful\\Kernel\\Format::bold","description":"Vtiful\\Kernel\\Format bold","tag":"refentry","type":"Function","methodName":"bold"},{"id":"vtiful-kernel-format.italic","name":"Vtiful\\Kernel\\Format::italic","description":"Vtiful\\Kernel\\Format italic","tag":"refentry","type":"Function","methodName":"italic"},{"id":"vtiful-kernel-format.underline","name":"Vtiful\\Kernel\\Format::underline","description":"Vtiful\\Kernel\\Format underline","tag":"refentry","type":"Function","methodName":"underline"},{"id":"class.vtiful-kernel-format","name":"Vtiful\\Kernel\\Format","description":"The Vtiful\\Kernel\\Format class","tag":"phpdoc:classref","type":"Class","methodName":"Vtiful\\Kernel\\Format"},{"id":"book.xlswriter","name":"XLSWriter","description":"Non-Text MIME Output","tag":"book","type":"Extension","methodName":"XLSWriter"},{"id":"refs.utilspec.nontext","name":"Non-Text MIME Output","description":"Function Reference","tag":"set","type":"Extension","methodName":"Non-Text MIME Output"},{"id":"intro.eio","name":"Introduction","description":"Eio","tag":"preface","type":"General","methodName":"Introduction"},{"id":"eio.requirements","name":"Requirements","description":"Eio","tag":"section","type":"General","methodName":"Requirements"},{"id":"eio.installation","name":"Installation","description":"Eio","tag":"section","type":"General","methodName":"Installation"},{"id":"eio.resources","name":"Resource Types","description":"Eio","tag":"section","type":"General","methodName":"Resource Types"},{"id":"eio.setup","name":"Installing\/Configuring","description":"Eio","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"eio.constants","name":"Predefined Constants","description":"Eio","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"eio.examples","name":"Examples","description":"Eio","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.eio-busy","name":"eio_busy","description":"Artificially increase load. Could be useful in tests,\n benchmarking","tag":"refentry","type":"Function","methodName":"eio_busy"},{"id":"function.eio-cancel","name":"eio_cancel","description":"Cancels a request","tag":"refentry","type":"Function","methodName":"eio_cancel"},{"id":"function.eio-chmod","name":"eio_chmod","description":"Change file\/directory permissions","tag":"refentry","type":"Function","methodName":"eio_chmod"},{"id":"function.eio-chown","name":"eio_chown","description":"Change file\/directory permissions","tag":"refentry","type":"Function","methodName":"eio_chown"},{"id":"function.eio-close","name":"eio_close","description":"Close file","tag":"refentry","type":"Function","methodName":"eio_close"},{"id":"function.eio-custom","name":"eio_custom","description":"Execute custom request like any other eio_* call","tag":"refentry","type":"Function","methodName":"eio_custom"},{"id":"function.eio-dup2","name":"eio_dup2","description":"Duplicate a file descriptor","tag":"refentry","type":"Function","methodName":"eio_dup2"},{"id":"function.eio-event-loop","name":"eio_event_loop","description":"Polls libeio until all requests proceeded","tag":"refentry","type":"Function","methodName":"eio_event_loop"},{"id":"function.eio-fallocate","name":"eio_fallocate","description":"Allows the caller to directly manipulate the allocated disk\n space for a file","tag":"refentry","type":"Function","methodName":"eio_fallocate"},{"id":"function.eio-fchmod","name":"eio_fchmod","description":"Change file permissions","tag":"refentry","type":"Function","methodName":"eio_fchmod"},{"id":"function.eio-fchown","name":"eio_fchown","description":"Change file ownership","tag":"refentry","type":"Function","methodName":"eio_fchown"},{"id":"function.eio-fdatasync","name":"eio_fdatasync","description":"Synchronize a file's in-core state with storage device","tag":"refentry","type":"Function","methodName":"eio_fdatasync"},{"id":"function.eio-fstat","name":"eio_fstat","description":"Get file status","tag":"refentry","type":"Function","methodName":"eio_fstat"},{"id":"function.eio-fstatvfs","name":"eio_fstatvfs","description":"Get file system statistics","tag":"refentry","type":"Function","methodName":"eio_fstatvfs"},{"id":"function.eio-fsync","name":"eio_fsync","description":"Synchronize a file's in-core state with storage device","tag":"refentry","type":"Function","methodName":"eio_fsync"},{"id":"function.eio-ftruncate","name":"eio_ftruncate","description":"Truncate a file","tag":"refentry","type":"Function","methodName":"eio_ftruncate"},{"id":"function.eio-futime","name":"eio_futime","description":"Change file last access and modification times","tag":"refentry","type":"Function","methodName":"eio_futime"},{"id":"function.eio-get-event-stream","name":"eio_get_event_stream","description":"Get stream representing a variable used in internal communications with libeio","tag":"refentry","type":"Function","methodName":"eio_get_event_stream"},{"id":"function.eio-get-last-error","name":"eio_get_last_error","description":"Returns string describing the last error associated with a request resource","tag":"refentry","type":"Function","methodName":"eio_get_last_error"},{"id":"function.eio-grp","name":"eio_grp","description":"Creates a request group","tag":"refentry","type":"Function","methodName":"eio_grp"},{"id":"function.eio-grp-add","name":"eio_grp_add","description":"Adds a request to the request group","tag":"refentry","type":"Function","methodName":"eio_grp_add"},{"id":"function.eio-grp-cancel","name":"eio_grp_cancel","description":"Cancels a request group","tag":"refentry","type":"Function","methodName":"eio_grp_cancel"},{"id":"function.eio-grp-limit","name":"eio_grp_limit","description":"Set group limit","tag":"refentry","type":"Function","methodName":"eio_grp_limit"},{"id":"function.eio-init","name":"eio_init","description":"(Re-)initialize Eio","tag":"refentry","type":"Function","methodName":"eio_init"},{"id":"function.eio-link","name":"eio_link","description":"Create a hardlink for file","tag":"refentry","type":"Function","methodName":"eio_link"},{"id":"function.eio-lstat","name":"eio_lstat","description":"Get file status","tag":"refentry","type":"Function","methodName":"eio_lstat"},{"id":"function.eio-mkdir","name":"eio_mkdir","description":"Create directory","tag":"refentry","type":"Function","methodName":"eio_mkdir"},{"id":"function.eio-mknod","name":"eio_mknod","description":"Create a special or ordinary file","tag":"refentry","type":"Function","methodName":"eio_mknod"},{"id":"function.eio-nop","name":"eio_nop","description":"Does nothing, except go through the whole request cycle","tag":"refentry","type":"Function","methodName":"eio_nop"},{"id":"function.eio-npending","name":"eio_npending","description":"Returns number of finished, but unhandled requests","tag":"refentry","type":"Function","methodName":"eio_npending"},{"id":"function.eio-nready","name":"eio_nready","description":"Returns number of not-yet handled requests","tag":"refentry","type":"Function","methodName":"eio_nready"},{"id":"function.eio-nreqs","name":"eio_nreqs","description":"Returns number of requests to be processed","tag":"refentry","type":"Function","methodName":"eio_nreqs"},{"id":"function.eio-nthreads","name":"eio_nthreads","description":"Returns number of threads currently in use","tag":"refentry","type":"Function","methodName":"eio_nthreads"},{"id":"function.eio-open","name":"eio_open","description":"Opens a file","tag":"refentry","type":"Function","methodName":"eio_open"},{"id":"function.eio-poll","name":"eio_poll","description":"Can be to be called whenever there are pending requests that need finishing","tag":"refentry","type":"Function","methodName":"eio_poll"},{"id":"function.eio-read","name":"eio_read","description":"Read from a file descriptor at given offset","tag":"refentry","type":"Function","methodName":"eio_read"},{"id":"function.eio-readahead","name":"eio_readahead","description":"Perform file readahead into page cache","tag":"refentry","type":"Function","methodName":"eio_readahead"},{"id":"function.eio-readdir","name":"eio_readdir","description":"Reads through a whole directory","tag":"refentry","type":"Function","methodName":"eio_readdir"},{"id":"function.eio-readlink","name":"eio_readlink","description":"Read value of a symbolic link","tag":"refentry","type":"Function","methodName":"eio_readlink"},{"id":"function.eio-realpath","name":"eio_realpath","description":"Get the canonicalized absolute pathname","tag":"refentry","type":"Function","methodName":"eio_realpath"},{"id":"function.eio-rename","name":"eio_rename","description":"Change the name or location of a file","tag":"refentry","type":"Function","methodName":"eio_rename"},{"id":"function.eio-rmdir","name":"eio_rmdir","description":"Remove a directory","tag":"refentry","type":"Function","methodName":"eio_rmdir"},{"id":"function.eio-seek","name":"eio_seek","description":"Seek to a position","tag":"refentry","type":"Function","methodName":"eio_seek"},{"id":"function.eio-sendfile","name":"eio_sendfile","description":"Transfer data between file descriptors","tag":"refentry","type":"Function","methodName":"eio_sendfile"},{"id":"function.eio-set-max-idle","name":"eio_set_max_idle","description":"Set maximum number of idle threads","tag":"refentry","type":"Function","methodName":"eio_set_max_idle"},{"id":"function.eio-set-max-parallel","name":"eio_set_max_parallel","description":"Set maximum parallel threads","tag":"refentry","type":"Function","methodName":"eio_set_max_parallel"},{"id":"function.eio-set-max-poll-reqs","name":"eio_set_max_poll_reqs","description":"Set maximum number of requests processed in a poll","tag":"refentry","type":"Function","methodName":"eio_set_max_poll_reqs"},{"id":"function.eio-set-max-poll-time","name":"eio_set_max_poll_time","description":"Set maximum poll time","tag":"refentry","type":"Function","methodName":"eio_set_max_poll_time"},{"id":"function.eio-set-min-parallel","name":"eio_set_min_parallel","description":"Set minimum parallel thread number","tag":"refentry","type":"Function","methodName":"eio_set_min_parallel"},{"id":"function.eio-stat","name":"eio_stat","description":"Get file status","tag":"refentry","type":"Function","methodName":"eio_stat"},{"id":"function.eio-statvfs","name":"eio_statvfs","description":"Get file system statistics","tag":"refentry","type":"Function","methodName":"eio_statvfs"},{"id":"function.eio-symlink","name":"eio_symlink","description":"Create a symbolic link","tag":"refentry","type":"Function","methodName":"eio_symlink"},{"id":"function.eio-sync","name":"eio_sync","description":"Commit buffer cache to disk","tag":"refentry","type":"Function","methodName":"eio_sync"},{"id":"function.eio-sync-file-range","name":"eio_sync_file_range","description":"Sync a file segment with disk","tag":"refentry","type":"Function","methodName":"eio_sync_file_range"},{"id":"function.eio-syncfs","name":"eio_syncfs","description":"Calls Linux' syncfs syscall, if available","tag":"refentry","type":"Function","methodName":"eio_syncfs"},{"id":"function.eio-truncate","name":"eio_truncate","description":"Truncate a file","tag":"refentry","type":"Function","methodName":"eio_truncate"},{"id":"function.eio-unlink","name":"eio_unlink","description":"Delete a name and possibly the file it refers to","tag":"refentry","type":"Function","methodName":"eio_unlink"},{"id":"function.eio-utime","name":"eio_utime","description":"Change file last access and modification times","tag":"refentry","type":"Function","methodName":"eio_utime"},{"id":"function.eio-write","name":"eio_write","description":"Write to file","tag":"refentry","type":"Function","methodName":"eio_write"},{"id":"ref.eio","name":"Eio Functions","description":"Eio","tag":"reference","type":"Extension","methodName":"Eio Functions"},{"id":"book.eio","name":"Eio","description":"Eio","tag":"book","type":"Extension","methodName":"Eio"},{"id":"intro.ev","name":"Introduction","description":"Ev","tag":"preface","type":"General","methodName":"Introduction"},{"id":"ev.requirements","name":"Requirements","description":"Ev","tag":"section","type":"General","methodName":"Requirements"},{"id":"ev.installation","name":"Installation","description":"Ev","tag":"section","type":"General","methodName":"Installation"},{"id":"ev.setup","name":"Installing\/Configuring","description":"Ev","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"ev.examples","name":"Examples","description":"Ev","tag":"chapter","type":"General","methodName":"Examples"},{"id":"ev.watchers","name":"Watchers","description":"Ev","tag":"chapter","type":"General","methodName":"Watchers"},{"id":"ev.watcher-callbacks","name":"Watcher callbacks","description":"Ev","tag":"chapter","type":"General","methodName":"Watcher callbacks"},{"id":"ev.periodic-modes","name":"Periodic watcher operation modes","description":"Ev","tag":"chapter","type":"General","methodName":"Periodic watcher operation modes"},{"id":"ev.backend","name":"Ev::backend","description":"Returns an integer describing the backend used by libev","tag":"refentry","type":"Function","methodName":"backend"},{"id":"ev.depth","name":"Ev::depth","description":"Returns recursion depth","tag":"refentry","type":"Function","methodName":"depth"},{"id":"ev.embeddablebackends","name":"Ev::embeddableBackends","description":"Returns the set of backends that are embeddable in other event loops","tag":"refentry","type":"Function","methodName":"embeddableBackends"},{"id":"ev.feedsignal","name":"Ev::feedSignal","description":"Feed a signal event info Ev","tag":"refentry","type":"Function","methodName":"feedSignal"},{"id":"ev.feedsignalevent","name":"Ev::feedSignalEvent","description":"Feed signal event into the default loop","tag":"refentry","type":"Function","methodName":"feedSignalEvent"},{"id":"ev.iteration","name":"Ev::iteration","description":"Return the number of times the default event loop has polled for new\n events","tag":"refentry","type":"Function","methodName":"iteration"},{"id":"ev.now","name":"Ev::now","description":"Returns the time when the last iteration of the default event\n loop has started","tag":"refentry","type":"Function","methodName":"now"},{"id":"ev.nowupdate","name":"Ev::nowUpdate","description":"Establishes the current time by querying the kernel, updating the time\n returned by Ev::now in the progress","tag":"refentry","type":"Function","methodName":"nowUpdate"},{"id":"ev.recommendedbackends","name":"Ev::recommendedBackends","description":"Returns a bit mask of recommended backends for current\n platform","tag":"refentry","type":"Function","methodName":"recommendedBackends"},{"id":"ev.resume","name":"Ev::resume","description":"Resume previously suspended default event loop","tag":"refentry","type":"Function","methodName":"resume"},{"id":"ev.run","name":"Ev::run","description":"Begin checking for events and calling callbacks for the default\n loop","tag":"refentry","type":"Function","methodName":"run"},{"id":"ev.sleep","name":"Ev::sleep","description":"Block the process for the given number of seconds","tag":"refentry","type":"Function","methodName":"sleep"},{"id":"ev.stop","name":"Ev::stop","description":"Stops the default event loop","tag":"refentry","type":"Function","methodName":"stop"},{"id":"ev.supportedbackends","name":"Ev::supportedBackends","description":"Returns the set of backends supported by current libev\n configuration","tag":"refentry","type":"Function","methodName":"supportedBackends"},{"id":"ev.suspend","name":"Ev::suspend","description":"Suspend the default event loop","tag":"refentry","type":"Function","methodName":"suspend"},{"id":"ev.time","name":"Ev::time","description":"Returns the current time in fractional seconds since the epoch","tag":"refentry","type":"Function","methodName":"time"},{"id":"ev.verify","name":"Ev::verify","description":"Performs internal consistency checks(for debugging)","tag":"refentry","type":"Function","methodName":"verify"},{"id":"class.ev","name":"Ev","description":"The Ev class","tag":"phpdoc:classref","type":"Class","methodName":"Ev"},{"id":"evcheck.construct","name":"EvCheck::__construct","description":"Constructs the EvCheck watcher object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"evcheck.createstopped","name":"EvCheck::createStopped","description":"Create instance of a stopped EvCheck watcher","tag":"refentry","type":"Function","methodName":"createStopped"},{"id":"class.evcheck","name":"EvCheck","description":"The EvCheck class","tag":"phpdoc:classref","type":"Class","methodName":"EvCheck"},{"id":"evchild.construct","name":"EvChild::__construct","description":"Constructs the EvChild watcher object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"evchild.createstopped","name":"EvChild::createStopped","description":"Create instance of a stopped EvCheck watcher","tag":"refentry","type":"Function","methodName":"createStopped"},{"id":"evchild.set","name":"EvChild::set","description":"Configures the watcher","tag":"refentry","type":"Function","methodName":"set"},{"id":"class.evchild","name":"EvChild","description":"The EvChild class","tag":"phpdoc:classref","type":"Class","methodName":"EvChild"},{"id":"evembed.construct","name":"EvEmbed::__construct","description":"Constructs the EvEmbed object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"evembed.createstopped","name":"EvEmbed::createStopped","description":"Create stopped EvEmbed watcher object","tag":"refentry","type":"Function","methodName":"createStopped"},{"id":"evembed.set","name":"EvEmbed::set","description":"Configures the watcher","tag":"refentry","type":"Function","methodName":"set"},{"id":"evembed.sweep","name":"EvEmbed::sweep","description":"Make a single, non-blocking sweep over the embedded loop","tag":"refentry","type":"Function","methodName":"sweep"},{"id":"class.evembed","name":"EvEmbed","description":"The EvEmbed class","tag":"phpdoc:classref","type":"Class","methodName":"EvEmbed"},{"id":"evfork.construct","name":"EvFork::__construct","description":"Constructs the EvFork watcher object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"evfork.createstopped","name":"EvFork::createStopped","description":"Creates a stopped instance of EvFork watcher class","tag":"refentry","type":"Function","methodName":"createStopped"},{"id":"class.evfork","name":"EvFork","description":"The EvFork class","tag":"phpdoc:classref","type":"Class","methodName":"EvFork"},{"id":"evidle.construct","name":"EvIdle::__construct","description":"Constructs the EvIdle watcher object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"evidle.createstopped","name":"EvIdle::createStopped","description":"Creates instance of a stopped EvIdle watcher object","tag":"refentry","type":"Function","methodName":"createStopped"},{"id":"class.evidle","name":"EvIdle","description":"The EvIdle class","tag":"phpdoc:classref","type":"Class","methodName":"EvIdle"},{"id":"evio.construct","name":"EvIo::__construct","description":"Constructs EvIo watcher object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"evio.createstopped","name":"EvIo::createStopped","description":"Create stopped EvIo watcher object","tag":"refentry","type":"Function","methodName":"createStopped"},{"id":"evio.set","name":"EvIo::set","description":"Configures the watcher","tag":"refentry","type":"Function","methodName":"set"},{"id":"class.evio","name":"EvIo","description":"The EvIo class","tag":"phpdoc:classref","type":"Class","methodName":"EvIo"},{"id":"evloop.backend","name":"EvLoop::backend","description":"Returns an integer describing the backend used by libev","tag":"refentry","type":"Function","methodName":"backend"},{"id":"evloop.check","name":"EvLoop::check","description":"Creates EvCheck object associated with the current event loop\n instance","tag":"refentry","type":"Function","methodName":"check"},{"id":"evloop.child","name":"EvLoop::child","description":"Creates EvChild object associated with the current event loop","tag":"refentry","type":"Function","methodName":"child"},{"id":"evloop.construct","name":"EvLoop::__construct","description":"Constructs the event loop object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"evloop.defaultloop","name":"EvLoop::defaultLoop","description":"Returns or creates the default event loop","tag":"refentry","type":"Function","methodName":"defaultLoop"},{"id":"evloop.embed","name":"EvLoop::embed","description":"Creates an instance of EvEmbed watcher associated\n with the current EvLoop object","tag":"refentry","type":"Function","methodName":"embed"},{"id":"evloop.fork","name":"EvLoop::fork","description":"Creates EvFork watcher object associated with the current event\n loop instance","tag":"refentry","type":"Function","methodName":"fork"},{"id":"evloop.idle","name":"EvLoop::idle","description":"Creates EvIdle watcher object associated with the current event\n loop instance","tag":"refentry","type":"Function","methodName":"idle"},{"id":"evloop.invokepending","name":"EvLoop::invokePending","description":"Invoke all pending watchers while resetting their pending state","tag":"refentry","type":"Function","methodName":"invokePending"},{"id":"evloop.io","name":"EvLoop::io","description":"Create EvIo watcher object associated with the current event\n loop instance","tag":"refentry","type":"Function","methodName":"io"},{"id":"evloop.loopfork","name":"EvLoop::loopFork","description":"Must be called after a fork","tag":"refentry","type":"Function","methodName":"loopFork"},{"id":"evloop.now","name":"EvLoop::now","description":"Returns the current \"event loop time\"","tag":"refentry","type":"Function","methodName":"now"},{"id":"evloop.nowupdate","name":"EvLoop::nowUpdate","description":"Establishes the current time by querying the kernel, updating the time\n returned by EvLoop::now in the progress","tag":"refentry","type":"Function","methodName":"nowUpdate"},{"id":"evloop.periodic","name":"EvLoop::periodic","description":"Creates EvPeriodic watcher object associated with the current\n event loop instance","tag":"refentry","type":"Function","methodName":"periodic"},{"id":"evloop.prepare","name":"EvLoop::prepare","description":"Creates EvPrepare watcher object associated with the current\n event loop instance","tag":"refentry","type":"Function","methodName":"prepare"},{"id":"evloop.resume","name":"EvLoop::resume","description":"Resume previously suspended default event loop","tag":"refentry","type":"Function","methodName":"resume"},{"id":"evloop.run","name":"EvLoop::run","description":"Begin checking for events and calling callbacks for the loop","tag":"refentry","type":"Function","methodName":"run"},{"id":"evloop.signal","name":"EvLoop::signal","description":"Creates EvSignal watcher object associated with the current\n event loop instance","tag":"refentry","type":"Function","methodName":"signal"},{"id":"evloop.stat","name":"EvLoop::stat","description":"Creates EvStat watcher object associated with the current event\n loop instance","tag":"refentry","type":"Function","methodName":"stat"},{"id":"evloop.stop","name":"EvLoop::stop","description":"Stops the event loop","tag":"refentry","type":"Function","methodName":"stop"},{"id":"evloop.suspend","name":"EvLoop::suspend","description":"Suspend the loop","tag":"refentry","type":"Function","methodName":"suspend"},{"id":"evloop.timer","name":"EvLoop::timer","description":"Creates EvTimer watcher object associated with the current event\n loop instance","tag":"refentry","type":"Function","methodName":"timer"},{"id":"evloop.verify","name":"EvLoop::verify","description":"Performs internal consistency checks(for debugging)","tag":"refentry","type":"Function","methodName":"verify"},{"id":"class.evloop","name":"EvLoop","description":"The EvLoop class","tag":"phpdoc:classref","type":"Class","methodName":"EvLoop"},{"id":"evperiodic.again","name":"EvPeriodic::again","description":"Simply stops and restarts the periodic watcher again","tag":"refentry","type":"Function","methodName":"again"},{"id":"evperiodic.at","name":"EvPeriodic::at","description":"Returns the absolute time that this\n watcher is supposed to trigger next","tag":"refentry","type":"Function","methodName":"at"},{"id":"evperiodic.construct","name":"EvPeriodic::__construct","description":"Constructs EvPeriodic watcher object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"evperiodic.createstopped","name":"EvPeriodic::createStopped","description":"Create a stopped EvPeriodic watcher","tag":"refentry","type":"Function","methodName":"createStopped"},{"id":"evperiodic.set","name":"EvPeriodic::set","description":"Configures the watcher","tag":"refentry","type":"Function","methodName":"set"},{"id":"class.evperiodic","name":"EvPeriodic","description":"The EvPeriodic class","tag":"phpdoc:classref","type":"Class","methodName":"EvPeriodic"},{"id":"evprepare.construct","name":"EvPrepare::__construct","description":"Constructs EvPrepare watcher object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"evprepare.createstopped","name":"EvPrepare::createStopped","description":"Creates a stopped instance of EvPrepare watcher","tag":"refentry","type":"Function","methodName":"createStopped"},{"id":"class.evprepare","name":"EvPrepare","description":"The EvPrepare class","tag":"phpdoc:classref","type":"Class","methodName":"EvPrepare"},{"id":"evsignal.construct","name":"EvSignal::__construct","description":"Constructs EvSignal watcher object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"evsignal.createstopped","name":"EvSignal::createStopped","description":"Create stopped EvSignal watcher object","tag":"refentry","type":"Function","methodName":"createStopped"},{"id":"evsignal.set","name":"EvSignal::set","description":"Configures the watcher","tag":"refentry","type":"Function","methodName":"set"},{"id":"class.evsignal","name":"EvSignal","description":"The EvSignal class","tag":"phpdoc:classref","type":"Class","methodName":"EvSignal"},{"id":"evstat.attr","name":"EvStat::attr","description":"Returns the values most recently detected by Ev","tag":"refentry","type":"Function","methodName":"attr"},{"id":"evstat.construct","name":"EvStat::__construct","description":"Constructs EvStat watcher object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"evstat.createstopped","name":"EvStat::createStopped","description":"Create a stopped EvStat watcher object","tag":"refentry","type":"Function","methodName":"createStopped"},{"id":"evstat.prev","name":"EvStat::prev","description":"Returns the previous set of values returned by EvStat::attr","tag":"refentry","type":"Function","methodName":"prev"},{"id":"evstat.set","name":"EvStat::set","description":"Configures the watcher","tag":"refentry","type":"Function","methodName":"set"},{"id":"evstat.stat","name":"EvStat::stat","description":"Initiates the stat call","tag":"refentry","type":"Function","methodName":"stat"},{"id":"class.evstat","name":"EvStat","description":"The EvStat class","tag":"phpdoc:classref","type":"Class","methodName":"EvStat"},{"id":"evtimer.again","name":"EvTimer::again","description":"Restarts the timer watcher","tag":"refentry","type":"Function","methodName":"again"},{"id":"evtimer.construct","name":"EvTimer::__construct","description":"Constructs an EvTimer watcher object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"evtimer.createstopped","name":"EvTimer::createStopped","description":"Creates EvTimer stopped watcher object","tag":"refentry","type":"Function","methodName":"createStopped"},{"id":"evtimer.set","name":"EvTimer::set","description":"Configures the watcher","tag":"refentry","type":"Function","methodName":"set"},{"id":"class.evtimer","name":"EvTimer","description":"The EvTimer class","tag":"phpdoc:classref","type":"Class","methodName":"EvTimer"},{"id":"evwatcher.clear","name":"EvWatcher::clear","description":"Clear watcher pending status","tag":"refentry","type":"Function","methodName":"clear"},{"id":"evwatcher.construct","name":"EvWatcher::__construct","description":"Abstract constructor of a watcher object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"evwatcher.feed","name":"EvWatcher::feed","description":"Feeds the given revents set into the event loop","tag":"refentry","type":"Function","methodName":"feed"},{"id":"evwatcher.getloop","name":"EvWatcher::getLoop","description":"Returns the loop responsible for the watcher","tag":"refentry","type":"Function","methodName":"getLoop"},{"id":"evwatcher.invoke","name":"EvWatcher::invoke","description":"Invokes the watcher callback with the given received events bit\n mask","tag":"refentry","type":"Function","methodName":"invoke"},{"id":"evwatcher.keepalive","name":"EvWatcher::keepalive","description":"Configures whether to keep the loop from returning","tag":"refentry","type":"Function","methodName":"keepalive"},{"id":"evwatcher.setcallback","name":"EvWatcher::setCallback","description":"Sets new callback for the watcher","tag":"refentry","type":"Function","methodName":"setCallback"},{"id":"evwatcher.start","name":"EvWatcher::start","description":"Starts the watcher","tag":"refentry","type":"Function","methodName":"start"},{"id":"evwatcher.stop","name":"EvWatcher::stop","description":"Stops the watcher","tag":"refentry","type":"Function","methodName":"stop"},{"id":"class.evwatcher","name":"EvWatcher","description":"The EvWatcher class","tag":"phpdoc:classref","type":"Class","methodName":"EvWatcher"},{"id":"book.ev","name":"Ev","description":"Ev","tag":"book","type":"Extension","methodName":"Ev"},{"id":"intro.expect","name":"Introduction","description":"Expect","tag":"preface","type":"General","methodName":"Introduction"},{"id":"expect.requirements","name":"Requirements","description":"Expect","tag":"section","type":"General","methodName":"Requirements"},{"id":"expect.installation","name":"Installation","description":"Expect","tag":"section","type":"General","methodName":"Installation"},{"id":"expect.configuration","name":"Runtime Configuration","description":"Expect","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"expect.resources","name":"Resource Types","description":"Expect","tag":"section","type":"General","methodName":"Resource Types"},{"id":"expect.setup","name":"Installing\/Configuring","description":"Expect","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"expect.constants","name":"Predefined Constants","description":"Expect","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"expect.examples-usage","name":"Expect Usage Examples","description":"Expect","tag":"section","type":"General","methodName":"Expect Usage Examples"},{"id":"expect.examples","name":"Examples","description":"Expect","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.expect-expectl","name":"expect_expectl","description":"Waits until the output from a process matches one\n of the patterns, a specified time period has passed, or an EOF is seen","tag":"refentry","type":"Function","methodName":"expect_expectl"},{"id":"function.expect-popen","name":"expect_popen","description":"Execute command via Bourne shell, and open the PTY stream to\n the process","tag":"refentry","type":"Function","methodName":"expect_popen"},{"id":"ref.expect","name":"Expect Functions","description":"Expect","tag":"reference","type":"Extension","methodName":"Expect Functions"},{"id":"book.expect","name":"Expect","description":"Process Control Extensions","tag":"book","type":"Extension","methodName":"Expect"},{"id":"intro.pcntl","name":"Introduction","description":"Process Control","tag":"preface","type":"General","methodName":"Introduction"},{"id":"pcntl.installation","name":"Installation","description":"Process Control","tag":"section","type":"General","methodName":"Installation"},{"id":"pcntl.setup","name":"Installing\/Configuring","description":"Process Control","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"pcntl.constants","name":"Predefined Constants","description":"Process Control","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"pcntl.example","name":"Basic usage","description":"Process Control","tag":"section","type":"General","methodName":"Basic usage"},{"id":"pcntl.examples","name":"Examples","description":"Process Control","tag":"chapter","type":"General","methodName":"Examples"},{"id":"enum.pcntl-qosclass","name":"Pcntl\\QosClass","description":"The Pcntl\\QosClass Enum","tag":"phpdoc:classref","type":"Class","methodName":"Pcntl\\QosClass"},{"id":"function.pcntl-alarm","name":"pcntl_alarm","description":"Set an alarm clock for delivery of a signal","tag":"refentry","type":"Function","methodName":"pcntl_alarm"},{"id":"function.pcntl-async-signals","name":"pcntl_async_signals","description":"Enable\/disable asynchronous signal handling or return the old setting","tag":"refentry","type":"Function","methodName":"pcntl_async_signals"},{"id":"function.pcntl-errno","name":"pcntl_errno","description":"Alias of pcntl_get_last_error","tag":"refentry","type":"Function","methodName":"pcntl_errno"},{"id":"function.pcntl-exec","name":"pcntl_exec","description":"Executes specified program in current process space","tag":"refentry","type":"Function","methodName":"pcntl_exec"},{"id":"function.pcntl-fork","name":"pcntl_fork","description":"Forks the currently running process","tag":"refentry","type":"Function","methodName":"pcntl_fork"},{"id":"function.pcntl-get-last-error","name":"pcntl_get_last_error","description":"Retrieve the error number set by the last pcntl function which failed","tag":"refentry","type":"Function","methodName":"pcntl_get_last_error"},{"id":"function.pcntl-getcpuaffinity","name":"pcntl_getcpuaffinity","description":"Get the cpu affinity of a process","tag":"refentry","type":"Function","methodName":"pcntl_getcpuaffinity"},{"id":"function.pcntl-getpriority","name":"pcntl_getpriority","description":"Get the priority of any process","tag":"refentry","type":"Function","methodName":"pcntl_getpriority"},{"id":"function.pcntl-rfork","name":"pcntl_rfork","description":"Manipulates process resources","tag":"refentry","type":"Function","methodName":"pcntl_rfork"},{"id":"function.pcntl-setcpuaffinity","name":"pcntl_setcpuaffinity","description":"Set the cpu affinity of a process","tag":"refentry","type":"Function","methodName":"pcntl_setcpuaffinity"},{"id":"function.pcntl-setpriority","name":"pcntl_setpriority","description":"Change the priority of any process","tag":"refentry","type":"Function","methodName":"pcntl_setpriority"},{"id":"function.pcntl-signal","name":"pcntl_signal","description":"Installs a signal handler","tag":"refentry","type":"Function","methodName":"pcntl_signal"},{"id":"function.pcntl-signal-dispatch","name":"pcntl_signal_dispatch","description":"Calls signal handlers for pending signals","tag":"refentry","type":"Function","methodName":"pcntl_signal_dispatch"},{"id":"function.pcntl-signal-get-handler","name":"pcntl_signal_get_handler","description":"Get the current handler for specified signal","tag":"refentry","type":"Function","methodName":"pcntl_signal_get_handler"},{"id":"function.pcntl-sigprocmask","name":"pcntl_sigprocmask","description":"Sets and retrieves blocked signals","tag":"refentry","type":"Function","methodName":"pcntl_sigprocmask"},{"id":"function.pcntl-sigtimedwait","name":"pcntl_sigtimedwait","description":"Waits for signals, with a timeout","tag":"refentry","type":"Function","methodName":"pcntl_sigtimedwait"},{"id":"function.pcntl-sigwaitinfo","name":"pcntl_sigwaitinfo","description":"Waits for signals","tag":"refentry","type":"Function","methodName":"pcntl_sigwaitinfo"},{"id":"function.pcntl-strerror","name":"pcntl_strerror","description":"Retrieve the system error message associated with the given errno","tag":"refentry","type":"Function","methodName":"pcntl_strerror"},{"id":"function.pcntl-unshare","name":"pcntl_unshare","description":"Dissociates parts of the process execution context","tag":"refentry","type":"Function","methodName":"pcntl_unshare"},{"id":"function.pcntl-wait","name":"pcntl_wait","description":"Waits on or returns the status of a forked child","tag":"refentry","type":"Function","methodName":"pcntl_wait"},{"id":"function.pcntl-waitid","name":"pcntl_waitid","description":"Waits for a child process to change state","tag":"refentry","type":"Function","methodName":"pcntl_waitid"},{"id":"function.pcntl-waitpid","name":"pcntl_waitpid","description":"Waits on or returns the status of a forked child","tag":"refentry","type":"Function","methodName":"pcntl_waitpid"},{"id":"function.pcntl-wexitstatus","name":"pcntl_wexitstatus","description":"Returns the return code of a terminated child","tag":"refentry","type":"Function","methodName":"pcntl_wexitstatus"},{"id":"function.pcntl-wifexited","name":"pcntl_wifexited","description":"Checks if status code represents a normal exit","tag":"refentry","type":"Function","methodName":"pcntl_wifexited"},{"id":"function.pcntl-wifsignaled","name":"pcntl_wifsignaled","description":"Checks whether the status code represents a termination due to a signal","tag":"refentry","type":"Function","methodName":"pcntl_wifsignaled"},{"id":"function.pcntl-wifstopped","name":"pcntl_wifstopped","description":"Checks whether the child process is currently stopped","tag":"refentry","type":"Function","methodName":"pcntl_wifstopped"},{"id":"function.pcntl-wstopsig","name":"pcntl_wstopsig","description":"Returns the signal which caused the child to stop","tag":"refentry","type":"Function","methodName":"pcntl_wstopsig"},{"id":"function.pcntl-wtermsig","name":"pcntl_wtermsig","description":"Returns the signal which caused the child to terminate","tag":"refentry","type":"Function","methodName":"pcntl_wtermsig"},{"id":"ref.pcntl","name":"PCNTL Functions","description":"Process Control","tag":"reference","type":"Extension","methodName":"PCNTL Functions"},{"id":"book.pcntl","name":"PCNTL","description":"Process Control","tag":"book","type":"Extension","methodName":"PCNTL"},{"id":"intro.posix","name":"Introduction","description":"POSIX","tag":"preface","type":"General","methodName":"Introduction"},{"id":"posix.installation","name":"Installation","description":"POSIX","tag":"section","type":"General","methodName":"Installation"},{"id":"posix.setup","name":"Installing\/Configuring","description":"POSIX","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"posix.constants.access","name":"posix_access constants","description":"POSIX","tag":"section","type":"General","methodName":"posix_access constants"},{"id":"posix.constants.mknod","name":"posix_mknod constants","description":"POSIX","tag":"section","type":"General","methodName":"posix_mknod constants"},{"id":"posix.constants.setrlimit","name":"posix_setrlimit constants","description":"POSIX","tag":"section","type":"General","methodName":"posix_setrlimit constants"},{"id":"posix.constants.pathconf","name":"posix_pathconf constants","description":"POSIX","tag":"section","type":"General","methodName":"posix_pathconf constants"},{"id":"posix.constants.sysconf","name":"posix_sysconf constants","description":"POSIX","tag":"section","type":"General","methodName":"posix_sysconf constants"},{"id":"posix.constants","name":"Predefined Constants","description":"POSIX","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.posix-access","name":"posix_access","description":"Determine accessibility of a file","tag":"refentry","type":"Function","methodName":"posix_access"},{"id":"function.posix-ctermid","name":"posix_ctermid","description":"Get path name of controlling terminal","tag":"refentry","type":"Function","methodName":"posix_ctermid"},{"id":"function.posix-eaccess","name":"posix_eaccess","description":"Determine accessibility of a file","tag":"refentry","type":"Function","methodName":"posix_eaccess"},{"id":"function.posix-errno","name":"posix_errno","description":"Alias of posix_get_last_error","tag":"refentry","type":"Function","methodName":"posix_errno"},{"id":"function.posix-fpathconf","name":"posix_fpathconf","description":"Returns the value of a configurable limit","tag":"refentry","type":"Function","methodName":"posix_fpathconf"},{"id":"function.posix-get-last-error","name":"posix_get_last_error","description":"Retrieve the error number set by the last posix function that failed","tag":"refentry","type":"Function","methodName":"posix_get_last_error"},{"id":"function.posix-getcwd","name":"posix_getcwd","description":"Pathname of current directory","tag":"refentry","type":"Function","methodName":"posix_getcwd"},{"id":"function.posix-getegid","name":"posix_getegid","description":"Return the effective group ID of the current process","tag":"refentry","type":"Function","methodName":"posix_getegid"},{"id":"function.posix-geteuid","name":"posix_geteuid","description":"Return the effective user ID of the current process","tag":"refentry","type":"Function","methodName":"posix_geteuid"},{"id":"function.posix-getgid","name":"posix_getgid","description":"Return the real group ID of the current process","tag":"refentry","type":"Function","methodName":"posix_getgid"},{"id":"function.posix-getgrgid","name":"posix_getgrgid","description":"Return info about a group by group id","tag":"refentry","type":"Function","methodName":"posix_getgrgid"},{"id":"function.posix-getgrnam","name":"posix_getgrnam","description":"Return info about a group by name","tag":"refentry","type":"Function","methodName":"posix_getgrnam"},{"id":"function.posix-getgroups","name":"posix_getgroups","description":"Return the group set of the current process","tag":"refentry","type":"Function","methodName":"posix_getgroups"},{"id":"function.posix-getlogin","name":"posix_getlogin","description":"Return login name","tag":"refentry","type":"Function","methodName":"posix_getlogin"},{"id":"function.posix-getpgid","name":"posix_getpgid","description":"Get process group id for job control","tag":"refentry","type":"Function","methodName":"posix_getpgid"},{"id":"function.posix-getpgrp","name":"posix_getpgrp","description":"Return the current process group identifier","tag":"refentry","type":"Function","methodName":"posix_getpgrp"},{"id":"function.posix-getpid","name":"posix_getpid","description":"Return the current process identifier","tag":"refentry","type":"Function","methodName":"posix_getpid"},{"id":"function.posix-getppid","name":"posix_getppid","description":"Return the parent process identifier","tag":"refentry","type":"Function","methodName":"posix_getppid"},{"id":"function.posix-getpwnam","name":"posix_getpwnam","description":"Return info about a user by username","tag":"refentry","type":"Function","methodName":"posix_getpwnam"},{"id":"function.posix-getpwuid","name":"posix_getpwuid","description":"Return info about a user by user id","tag":"refentry","type":"Function","methodName":"posix_getpwuid"},{"id":"function.posix-getrlimit","name":"posix_getrlimit","description":"Return info about system resource limits","tag":"refentry","type":"Function","methodName":"posix_getrlimit"},{"id":"function.posix-getsid","name":"posix_getsid","description":"Get the current sid of the process","tag":"refentry","type":"Function","methodName":"posix_getsid"},{"id":"function.posix-getuid","name":"posix_getuid","description":"Return the real user ID of the current process","tag":"refentry","type":"Function","methodName":"posix_getuid"},{"id":"function.posix-initgroups","name":"posix_initgroups","description":"Calculate the group access list","tag":"refentry","type":"Function","methodName":"posix_initgroups"},{"id":"function.posix-isatty","name":"posix_isatty","description":"Determine if a file descriptor is an interactive terminal","tag":"refentry","type":"Function","methodName":"posix_isatty"},{"id":"function.posix-kill","name":"posix_kill","description":"Send a signal to a process","tag":"refentry","type":"Function","methodName":"posix_kill"},{"id":"function.posix-mkfifo","name":"posix_mkfifo","description":"Create a fifo special file (a named pipe)","tag":"refentry","type":"Function","methodName":"posix_mkfifo"},{"id":"function.posix-mknod","name":"posix_mknod","description":"Create a special or ordinary file (POSIX.1)","tag":"refentry","type":"Function","methodName":"posix_mknod"},{"id":"function.posix-pathconf","name":"posix_pathconf","description":"Returns the value of a configurable limit","tag":"refentry","type":"Function","methodName":"posix_pathconf"},{"id":"function.posix-setegid","name":"posix_setegid","description":"Set the effective GID of the current process","tag":"refentry","type":"Function","methodName":"posix_setegid"},{"id":"function.posix-seteuid","name":"posix_seteuid","description":"Set the effective UID of the current process","tag":"refentry","type":"Function","methodName":"posix_seteuid"},{"id":"function.posix-setgid","name":"posix_setgid","description":"Set the GID of the current process","tag":"refentry","type":"Function","methodName":"posix_setgid"},{"id":"function.posix-setpgid","name":"posix_setpgid","description":"Set process group id for job control","tag":"refentry","type":"Function","methodName":"posix_setpgid"},{"id":"function.posix-setrlimit","name":"posix_setrlimit","description":"Set system resource limits","tag":"refentry","type":"Function","methodName":"posix_setrlimit"},{"id":"function.posix-setsid","name":"posix_setsid","description":"Make the current process a session leader","tag":"refentry","type":"Function","methodName":"posix_setsid"},{"id":"function.posix-setuid","name":"posix_setuid","description":"Set the UID of the current process","tag":"refentry","type":"Function","methodName":"posix_setuid"},{"id":"function.posix-strerror","name":"posix_strerror","description":"Retrieve the system error message associated with the given errno","tag":"refentry","type":"Function","methodName":"posix_strerror"},{"id":"function.posix-sysconf","name":"posix_sysconf","description":"Returns system runtime information","tag":"refentry","type":"Function","methodName":"posix_sysconf"},{"id":"function.posix-times","name":"posix_times","description":"Get process times","tag":"refentry","type":"Function","methodName":"posix_times"},{"id":"function.posix-ttyname","name":"posix_ttyname","description":"Determine terminal device name","tag":"refentry","type":"Function","methodName":"posix_ttyname"},{"id":"function.posix-uname","name":"posix_uname","description":"Get system name","tag":"refentry","type":"Function","methodName":"posix_uname"},{"id":"ref.posix","name":"POSIX Functions","description":"POSIX","tag":"reference","type":"Extension","methodName":"POSIX Functions"},{"id":"book.posix","name":"POSIX","description":"Process Control Extensions","tag":"book","type":"Extension","methodName":"POSIX"},{"id":"intro.exec","name":"Introduction","description":"System program execution","tag":"preface","type":"General","methodName":"Introduction"},{"id":"exec.resources","name":"Resource Types","description":"System program execution","tag":"section","type":"General","methodName":"Resource Types"},{"id":"exec.setup","name":"Installing\/Configuring","description":"System program execution","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.escapeshellarg","name":"escapeshellarg","description":"Escape a string to be used as a shell argument","tag":"refentry","type":"Function","methodName":"escapeshellarg"},{"id":"function.escapeshellcmd","name":"escapeshellcmd","description":"Escape shell metacharacters","tag":"refentry","type":"Function","methodName":"escapeshellcmd"},{"id":"function.exec","name":"exec","description":"Execute an external program","tag":"refentry","type":"Function","methodName":"exec"},{"id":"function.passthru","name":"passthru","description":"Execute an external program and display raw output","tag":"refentry","type":"Function","methodName":"passthru"},{"id":"function.proc-close","name":"proc_close","description":"Close a process opened by proc_open and return the exit code of that process","tag":"refentry","type":"Function","methodName":"proc_close"},{"id":"function.proc-get-status","name":"proc_get_status","description":"Get information about a process opened by proc_open","tag":"refentry","type":"Function","methodName":"proc_get_status"},{"id":"function.proc-nice","name":"proc_nice","description":"Change the priority of the current process","tag":"refentry","type":"Function","methodName":"proc_nice"},{"id":"function.proc-open","name":"proc_open","description":"Execute a command and open file pointers for input\/output","tag":"refentry","type":"Function","methodName":"proc_open"},{"id":"function.proc-terminate","name":"proc_terminate","description":"Kills a process opened by proc_open","tag":"refentry","type":"Function","methodName":"proc_terminate"},{"id":"function.shell-exec","name":"shell_exec","description":"Execute command via shell and return the complete output as a string","tag":"refentry","type":"Function","methodName":"shell_exec"},{"id":"function.system","name":"system","description":"Execute an external program and display the output","tag":"refentry","type":"Function","methodName":"system"},{"id":"ref.exec","name":"Program execution Functions","description":"System program execution","tag":"reference","type":"Extension","methodName":"Program execution Functions"},{"id":"book.exec","name":"Program execution","description":"System program execution","tag":"book","type":"Extension","methodName":"Program execution"},{"id":"intro.parallel","name":"Introduction","description":"parallel","tag":"preface","type":"General","methodName":"Introduction"},{"id":"parallel.setup","name":"Installation","description":"parallel","tag":"chapter","type":"General","methodName":"Installation"},{"id":"philosophy.parallel","name":"Philosophy","description":"parallel","tag":"chapter","type":"General","methodName":"Philosophy"},{"id":"parallel.bootstrap","name":"parallel\\bootstrap","description":"Bootstrapping","tag":"refentry","type":"Function","methodName":"parallel\\bootstrap"},{"id":"parallel.run","name":"parallel\\run","description":"Execution","tag":"refentry","type":"Function","methodName":"parallel\\run"},{"id":"functional.parallel","name":"Functional API","description":"parallel","tag":"reference","type":"Extension","methodName":"Functional API"},{"id":"parallel-runtime.construct","name":"parallel\\Runtime::__construct","description":"Runtime Construction","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"parallel-runtime.run","name":"parallel\\Runtime::run","description":"Execution","tag":"refentry","type":"Function","methodName":"run"},{"id":"parallel-runtime.close","name":"parallel\\Runtime::close","description":"Runtime Graceful Join","tag":"refentry","type":"Function","methodName":"close"},{"id":"parallel-runtime.kill","name":"parallel\\Runtime::kill","description":"Runtime Join","tag":"refentry","type":"Function","methodName":"kill"},{"id":"class.parallel-runtime","name":"parallel\\Runtime","description":"The parallel\\Runtime class","tag":"phpdoc:classref","type":"Class","methodName":"parallel\\Runtime"},{"id":"parallel-future.cancel","name":"parallel\\Future::cancel","description":"Cancellation","tag":"refentry","type":"Function","methodName":"cancel"},{"id":"parallel-future.cancelled","name":"parallel\\Future::cancelled","description":"State Detection","tag":"refentry","type":"Function","methodName":"cancelled"},{"id":"parallel-future.done","name":"parallel\\Future::done","description":"State Detection","tag":"refentry","type":"Function","methodName":"done"},{"id":"parallel-future.value","name":"parallel\\Future::value","description":"Resolution","tag":"refentry","type":"Function","methodName":"value"},{"id":"class.parallel-future","name":"parallel\\Future","description":"The parallel\\Future class","tag":"phpdoc:classref","type":"Class","methodName":"parallel\\Future"},{"id":"parallel-channel.construct","name":"parallel\\Channel::__construct","description":"Channel Construction","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"parallel-channel.make","name":"parallel\\Channel::make","description":"Access","tag":"refentry","type":"Function","methodName":"make"},{"id":"parallel-channel.open","name":"parallel\\Channel::open","description":"Access","tag":"refentry","type":"Function","methodName":"open"},{"id":"parallel-channel.recv","name":"parallel\\Channel::recv","description":"Sharing","tag":"refentry","type":"Function","methodName":"recv"},{"id":"parallel-channel.send","name":"parallel\\Channel::send","description":"Sharing","tag":"refentry","type":"Function","methodName":"send"},{"id":"parallel-channel.close","name":"parallel\\Channel::close","description":"Closing","tag":"refentry","type":"Function","methodName":"close"},{"id":"class.parallel-channel","name":"parallel\\Channel","description":"The parallel\\Channel class","tag":"phpdoc:classref","type":"Class","methodName":"parallel\\Channel"},{"id":"parallel-events.setblocking","name":"parallel\\Events::setBlocking","description":"Behaviour","tag":"refentry","type":"Function","methodName":"setBlocking"},{"id":"parallel-events.settimeout","name":"parallel\\Events::setTimeout","description":"Behaviour","tag":"refentry","type":"Function","methodName":"setTimeout"},{"id":"parallel-events.setinput","name":"parallel\\Events::setInput","description":"Input","tag":"refentry","type":"Function","methodName":"setInput"},{"id":"parallel-events.addchannel","name":"parallel\\Events::addChannel","description":"Targets","tag":"refentry","type":"Function","methodName":"addChannel"},{"id":"parallel-events.addfuture","name":"parallel\\Events::addFuture","description":"Targets","tag":"refentry","type":"Function","methodName":"addFuture"},{"id":"parallel-events.remove","name":"parallel\\Events::remove","description":"Targets","tag":"refentry","type":"Function","methodName":"remove"},{"id":"parallel-events.poll","name":"parallel\\Events::poll","description":"Polling","tag":"refentry","type":"Function","methodName":"poll"},{"id":"class.parallel-events","name":"parallel\\Events","description":"The parallel\\Events class","tag":"phpdoc:classref","type":"Class","methodName":"parallel\\Events"},{"id":"parallel-events-input.add","name":"parallel\\Events\\Input::add","description":"Inputs","tag":"refentry","type":"Function","methodName":"add"},{"id":"parallel-events-input.clear","name":"parallel\\Events\\Input::clear","description":"Inputs","tag":"refentry","type":"Function","methodName":"clear"},{"id":"parallel-events-input.remove","name":"parallel\\Events\\Input::remove","description":"Inputs","tag":"refentry","type":"Function","methodName":"remove"},{"id":"class.parallel-events-input","name":"parallel\\Events\\Input","description":"The parallel\\Events\\Input class","tag":"phpdoc:classref","type":"Class","methodName":"parallel\\Events\\Input"},{"id":"class.parallel-events-event","name":"parallel\\Events\\Event","description":"The parallel\\Events\\Event class","tag":"phpdoc:classref","type":"Class","methodName":"parallel\\Events\\Event"},{"id":"class.parallel-events-event-type","name":"parallel\\Events\\Event\\Type","description":"The parallel\\Events\\Event\\Type class","tag":"phpdoc:classref","type":"Class","methodName":"parallel\\Events\\Event\\Type"},{"id":"parallel-sync.construct","name":"parallel\\Sync::__construct","description":"Construction","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"parallel-sync.get","name":"parallel\\Sync::get","description":"Access","tag":"refentry","type":"Function","methodName":"get"},{"id":"parallel-sync.set","name":"parallel\\Sync::set","description":"Access","tag":"refentry","type":"Function","methodName":"set"},{"id":"parallel-sync.wait","name":"parallel\\Sync::wait","description":"Synchronization","tag":"refentry","type":"Function","methodName":"wait"},{"id":"parallel-sync.notify","name":"parallel\\Sync::notify","description":"Synchronization","tag":"refentry","type":"Function","methodName":"notify"},{"id":"parallel-sync.invoke","name":"parallel\\Sync::__invoke","description":"Synchronization","tag":"refentry","type":"Function","methodName":"__invoke"},{"id":"class.parallel-sync","name":"parallel\\Sync","description":"The parallel\\Sync class","tag":"phpdoc:classref","type":"Class","methodName":"parallel\\Sync"},{"id":"book.parallel","name":"parallel","description":"parallel","tag":"book","type":"Extension","methodName":"parallel"},{"id":"intro.pthreads","name":"Introduction","description":"pthreads","tag":"preface","type":"General","methodName":"Introduction"},{"id":"pthreads.requirements","name":"Requirements","description":"pthreads","tag":"section","type":"General","methodName":"Requirements"},{"id":"pthreads.installation","name":"Installation","description":"pthreads","tag":"section","type":"General","methodName":"Installation"},{"id":"pthreads.setup","name":"Installing\/Configuring","description":"pthreads","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"pthreads.constants","name":"Predefined Constants","description":"pthreads","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"threaded.chunk","name":"Threaded::chunk","description":"Manipulation","tag":"refentry","type":"Function","methodName":"chunk"},{"id":"threaded.count","name":"Threaded::count","description":"Manipulation","tag":"refentry","type":"Function","methodName":"count"},{"id":"threaded.extend","name":"Threaded::extend","description":"Runtime Manipulation","tag":"refentry","type":"Function","methodName":"extend"},{"id":"thread.isrunning","name":"Threaded::isRunning","description":"State Detection","tag":"refentry","type":"Function","methodName":"isRunning"},{"id":"threaded.isterminated","name":"Threaded::isTerminated","description":"State Detection","tag":"refentry","type":"Function","methodName":"isTerminated"},{"id":"threaded.merge","name":"Threaded::merge","description":"Manipulation","tag":"refentry","type":"Function","methodName":"merge"},{"id":"threaded.notify","name":"Threaded::notify","description":"Synchronization","tag":"refentry","type":"Function","methodName":"notify"},{"id":"threaded.notifyone","name":"Threaded::notifyOne","description":"Synchronization","tag":"refentry","type":"Function","methodName":"notifyOne"},{"id":"threaded.pop","name":"Threaded::pop","description":"Manipulation","tag":"refentry","type":"Function","methodName":"pop"},{"id":"threaded.run","name":"Threaded::run","description":"Execution","tag":"refentry","type":"Function","methodName":"run"},{"id":"threaded.shift","name":"Threaded::shift","description":"Manipulation","tag":"refentry","type":"Function","methodName":"shift"},{"id":"threaded.synchronized","name":"Threaded::synchronized","description":"Synchronization","tag":"refentry","type":"Function","methodName":"synchronized"},{"id":"threaded.wait","name":"Threaded::wait","description":"Synchronization","tag":"refentry","type":"Function","methodName":"wait"},{"id":"class.threaded","name":"Threaded","description":"The Threaded class","tag":"phpdoc:classref","type":"Class","methodName":"Threaded"},{"id":"thread.getcreatorid","name":"Thread::getCreatorId","description":"Identification","tag":"refentry","type":"Function","methodName":"getCreatorId"},{"id":"thread.getcurrentthread","name":"Thread::getCurrentThread","description":"Identification","tag":"refentry","type":"Function","methodName":"getCurrentThread"},{"id":"thread.getcurrentthreadid","name":"Thread::getCurrentThreadId","description":"Identification","tag":"refentry","type":"Function","methodName":"getCurrentThreadId"},{"id":"thread.getthreadid","name":"Thread::getThreadId","description":"Identification","tag":"refentry","type":"Function","methodName":"getThreadId"},{"id":"thread.isjoined","name":"Thread::isJoined","description":"State Detection","tag":"refentry","type":"Function","methodName":"isJoined"},{"id":"thread.isstarted","name":"Thread::isStarted","description":"State Detection","tag":"refentry","type":"Function","methodName":"isStarted"},{"id":"thread.join","name":"Thread::join","description":"Synchronization","tag":"refentry","type":"Function","methodName":"join"},{"id":"thread.start","name":"Thread::start","description":"Execution","tag":"refentry","type":"Function","methodName":"start"},{"id":"class.thread","name":"Thread","description":"The Thread class","tag":"phpdoc:classref","type":"Class","methodName":"Thread"},{"id":"worker.collect","name":"Worker::collect","description":"Collect references to completed tasks","tag":"refentry","type":"Function","methodName":"collect"},{"id":"worker.getstacked","name":"Worker::getStacked","description":"Gets the remaining stack size","tag":"refentry","type":"Function","methodName":"getStacked"},{"id":"worker.isshutdown","name":"Worker::isShutdown","description":"State Detection","tag":"refentry","type":"Function","methodName":"isShutdown"},{"id":"worker.shutdown","name":"Worker::shutdown","description":"Shutdown the worker","tag":"refentry","type":"Function","methodName":"shutdown"},{"id":"worker.stack","name":"Worker::stack","description":"Stacking work","tag":"refentry","type":"Function","methodName":"stack"},{"id":"worker.unstack","name":"Worker::unstack","description":"Unstacking work","tag":"refentry","type":"Function","methodName":"unstack"},{"id":"class.worker","name":"Worker","description":"The Worker class","tag":"phpdoc:classref","type":"Class","methodName":"Worker"},{"id":"collectable.isgarbage","name":"Collectable::isGarbage","description":"Determine whether an object has been marked as garbage","tag":"refentry","type":"Function","methodName":"isGarbage"},{"id":"class.collectable","name":"Collectable","description":"The Collectable interface","tag":"phpdoc:classref","type":"Class","methodName":"Collectable"},{"id":"pool.collect","name":"Pool::collect","description":"Collect references to completed tasks","tag":"refentry","type":"Function","methodName":"collect"},{"id":"pool.construct","name":"Pool::__construct","description":"Creates a new Pool of Workers","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"pool.resize","name":"Pool::resize","description":"Resize the Pool","tag":"refentry","type":"Function","methodName":"resize"},{"id":"pool.shutdown","name":"Pool::shutdown","description":"Shutdown all workers","tag":"refentry","type":"Function","methodName":"shutdown"},{"id":"pool.submit","name":"Pool::submit","description":"Submits an object for execution","tag":"refentry","type":"Function","methodName":"submit"},{"id":"pool.submitTo","name":"Pool::submitTo","description":"Submits a task to a specific worker for execution","tag":"refentry","type":"Function","methodName":"submitTo"},{"id":"class.pool","name":"Pool","description":"The Pool class","tag":"phpdoc:classref","type":"Class","methodName":"Pool"},{"id":"class.volatile","name":"Volatile","description":"The Volatile class","tag":"phpdoc:classref","type":"Class","methodName":"Volatile"},{"id":"book.pthreads","name":"pthreads","description":"pthreads","tag":"book","type":"Extension","methodName":"pthreads"},{"id":"intro.sem","name":"Introduction","description":"Semaphore, Shared Memory and IPC","tag":"preface","type":"General","methodName":"Introduction"},{"id":"sem.installation","name":"Installation","description":"Semaphore, Shared Memory and IPC","tag":"section","type":"General","methodName":"Installation"},{"id":"sem.configuration","name":"Runtime Configuration","description":"Semaphore, Shared Memory and IPC","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"sem.resources","name":"Resource Types","description":"Semaphore, Shared Memory and IPC","tag":"section","type":"General","methodName":"Resource Types"},{"id":"sem.setup","name":"Installing\/Configuring","description":"Semaphore, Shared Memory and IPC","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"sem.constants","name":"Predefined Constants","description":"Semaphore, Shared Memory and IPC","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.ftok","name":"ftok","description":"Convert a pathname and a project identifier to a System V IPC key","tag":"refentry","type":"Function","methodName":"ftok"},{"id":"function.msg-get-queue","name":"msg_get_queue","description":"Create or attach to a message queue","tag":"refentry","type":"Function","methodName":"msg_get_queue"},{"id":"function.msg-queue-exists","name":"msg_queue_exists","description":"Check whether a message queue exists","tag":"refentry","type":"Function","methodName":"msg_queue_exists"},{"id":"function.msg-receive","name":"msg_receive","description":"Receive a message from a message queue","tag":"refentry","type":"Function","methodName":"msg_receive"},{"id":"function.msg-remove-queue","name":"msg_remove_queue","description":"Destroy a message queue","tag":"refentry","type":"Function","methodName":"msg_remove_queue"},{"id":"function.msg-send","name":"msg_send","description":"Send a message to a message queue","tag":"refentry","type":"Function","methodName":"msg_send"},{"id":"function.msg-set-queue","name":"msg_set_queue","description":"Set information in the message queue data structure","tag":"refentry","type":"Function","methodName":"msg_set_queue"},{"id":"function.msg-stat-queue","name":"msg_stat_queue","description":"Returns information from the message queue data structure","tag":"refentry","type":"Function","methodName":"msg_stat_queue"},{"id":"function.sem-acquire","name":"sem_acquire","description":"Acquire a semaphore","tag":"refentry","type":"Function","methodName":"sem_acquire"},{"id":"function.sem-get","name":"sem_get","description":"Get a semaphore id","tag":"refentry","type":"Function","methodName":"sem_get"},{"id":"function.sem-release","name":"sem_release","description":"Release a semaphore","tag":"refentry","type":"Function","methodName":"sem_release"},{"id":"function.sem-remove","name":"sem_remove","description":"Remove a semaphore","tag":"refentry","type":"Function","methodName":"sem_remove"},{"id":"function.shm-attach","name":"shm_attach","description":"Creates or open a shared memory segment","tag":"refentry","type":"Function","methodName":"shm_attach"},{"id":"function.shm-detach","name":"shm_detach","description":"Disconnects from shared memory segment","tag":"refentry","type":"Function","methodName":"shm_detach"},{"id":"function.shm-get-var","name":"shm_get_var","description":"Returns a variable from shared memory","tag":"refentry","type":"Function","methodName":"shm_get_var"},{"id":"function.shm-has-var","name":"shm_has_var","description":"Check whether a specific entry exists","tag":"refentry","type":"Function","methodName":"shm_has_var"},{"id":"function.shm-put-var","name":"shm_put_var","description":"Inserts or updates a variable in shared memory","tag":"refentry","type":"Function","methodName":"shm_put_var"},{"id":"function.shm-remove","name":"shm_remove","description":"Removes shared memory from Unix systems","tag":"refentry","type":"Function","methodName":"shm_remove"},{"id":"function.shm-remove-var","name":"shm_remove_var","description":"Removes a variable from shared memory","tag":"refentry","type":"Function","methodName":"shm_remove_var"},{"id":"ref.sem","name":"Semaphore Functions","description":"Semaphore, Shared Memory and IPC","tag":"reference","type":"Extension","methodName":"Semaphore Functions"},{"id":"class.sysvmessagequeue","name":"SysvMessageQueue","description":"The SysvMessageQueue class","tag":"phpdoc:classref","type":"Class","methodName":"SysvMessageQueue"},{"id":"class.sysvsemaphore","name":"SysvSemaphore","description":"The SysvSemaphore class","tag":"phpdoc:classref","type":"Class","methodName":"SysvSemaphore"},{"id":"class.sysvsharedmemory","name":"SysvSharedMemory","description":"The SysvSharedMemory class","tag":"phpdoc:classref","type":"Class","methodName":"SysvSharedMemory"},{"id":"book.sem","name":"Semaphore","description":"Semaphore, Shared Memory and IPC","tag":"book","type":"Extension","methodName":"Semaphore"},{"id":"intro.shmop","name":"Introduction","description":"Shared Memory","tag":"preface","type":"General","methodName":"Introduction"},{"id":"shmop.installation","name":"Installation","description":"Shared Memory","tag":"section","type":"General","methodName":"Installation"},{"id":"shmop.resources","name":"Resource Types","description":"Shared Memory","tag":"section","type":"General","methodName":"Resource Types"},{"id":"shmop.setup","name":"Installing\/Configuring","description":"Shared Memory","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"shmop.examples-basic","name":"Basic usage","description":"Shared Memory","tag":"section","type":"General","methodName":"Basic usage"},{"id":"shmop.examples","name":"Examples","description":"Shared Memory","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.shmop-close","name":"shmop_close","description":"Close shared memory block","tag":"refentry","type":"Function","methodName":"shmop_close"},{"id":"function.shmop-delete","name":"shmop_delete","description":"Delete shared memory block","tag":"refentry","type":"Function","methodName":"shmop_delete"},{"id":"function.shmop-open","name":"shmop_open","description":"Create or open shared memory block","tag":"refentry","type":"Function","methodName":"shmop_open"},{"id":"function.shmop-read","name":"shmop_read","description":"Read data from shared memory block","tag":"refentry","type":"Function","methodName":"shmop_read"},{"id":"function.shmop-size","name":"shmop_size","description":"Get size of shared memory block","tag":"refentry","type":"Function","methodName":"shmop_size"},{"id":"function.shmop-write","name":"shmop_write","description":"Write data into shared memory block","tag":"refentry","type":"Function","methodName":"shmop_write"},{"id":"ref.shmop","name":"Shared Memory Functions","description":"Shared Memory","tag":"reference","type":"Extension","methodName":"Shared Memory Functions"},{"id":"class.shmop","name":"Shmop","description":"The Shmop class","tag":"phpdoc:classref","type":"Class","methodName":"Shmop"},{"id":"book.shmop","name":"Shared Memory","description":"Process Control Extensions","tag":"book","type":"Extension","methodName":"Shared Memory"},{"id":"intro.sync","name":"Introduction","description":"Sync","tag":"preface","type":"General","methodName":"Introduction"},{"id":"sync.requirements","name":"Requirements","description":"Sync","tag":"section","type":"General","methodName":"Requirements"},{"id":"sync.installation","name":"Installation","description":"Sync","tag":"section","type":"General","methodName":"Installation"},{"id":"sync.setup","name":"Installing\/Configuring","description":"Sync","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"syncmutex.construct","name":"SyncMutex::__construct","description":"Constructs a new SyncMutex object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"syncmutex.lock","name":"SyncMutex::lock","description":"Waits for an exclusive lock","tag":"refentry","type":"Function","methodName":"lock"},{"id":"syncmutex.unlock","name":"SyncMutex::unlock","description":"Unlocks the mutex","tag":"refentry","type":"Function","methodName":"unlock"},{"id":"class.syncmutex","name":"SyncMutex","description":"The SyncMutex class","tag":"phpdoc:classref","type":"Class","methodName":"SyncMutex"},{"id":"syncsemaphore.construct","name":"SyncSemaphore::__construct","description":"Constructs a new SyncSemaphore object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"syncsemaphore.lock","name":"SyncSemaphore::lock","description":"Decreases the count of the semaphore or waits","tag":"refentry","type":"Function","methodName":"lock"},{"id":"syncsemaphore.unlock","name":"SyncSemaphore::unlock","description":"Increases the count of the semaphore","tag":"refentry","type":"Function","methodName":"unlock"},{"id":"class.syncsemaphore","name":"SyncSemaphore","description":"The SyncSemaphore class","tag":"phpdoc:classref","type":"Class","methodName":"SyncSemaphore"},{"id":"syncevent.construct","name":"SyncEvent::__construct","description":"Constructs a new SyncEvent object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"syncevent.fire","name":"SyncEvent::fire","description":"Fires\/sets the event","tag":"refentry","type":"Function","methodName":"fire"},{"id":"syncevent.reset","name":"SyncEvent::reset","description":"Resets a manual event","tag":"refentry","type":"Function","methodName":"reset"},{"id":"syncevent.wait","name":"SyncEvent::wait","description":"Waits for the event to be fired\/set","tag":"refentry","type":"Function","methodName":"wait"},{"id":"class.syncevent","name":"SyncEvent","description":"The SyncEvent class","tag":"phpdoc:classref","type":"Class","methodName":"SyncEvent"},{"id":"syncreaderwriter.construct","name":"SyncReaderWriter::__construct","description":"Constructs a new SyncReaderWriter object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"syncreaderwriter.readlock","name":"SyncReaderWriter::readlock","description":"Waits for a read lock","tag":"refentry","type":"Function","methodName":"readlock"},{"id":"syncreaderwriter.readunlock","name":"SyncReaderWriter::readunlock","description":"Releases a read lock","tag":"refentry","type":"Function","methodName":"readunlock"},{"id":"syncreaderwriter.writelock","name":"SyncReaderWriter::writelock","description":"Waits for an exclusive write lock","tag":"refentry","type":"Function","methodName":"writelock"},{"id":"syncreaderwriter.writeunlock","name":"SyncReaderWriter::writeunlock","description":"Releases a write lock","tag":"refentry","type":"Function","methodName":"writeunlock"},{"id":"class.syncreaderwriter","name":"SyncReaderWriter","description":"The SyncReaderWriter class","tag":"phpdoc:classref","type":"Class","methodName":"SyncReaderWriter"},{"id":"syncsharedmemory.construct","name":"SyncSharedMemory::__construct","description":"Constructs a new SyncSharedMemory object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"syncsharedmemory.first","name":"SyncSharedMemory::first","description":"Check to see if the object is the first instance system-wide of named shared memory","tag":"refentry","type":"Function","methodName":"first"},{"id":"syncsharedmemory.read","name":"SyncSharedMemory::read","description":"Copy data from named shared memory","tag":"refentry","type":"Function","methodName":"read"},{"id":"syncsharedmemory.size","name":"SyncSharedMemory::size","description":"Returns the size of the named shared memory","tag":"refentry","type":"Function","methodName":"size"},{"id":"syncsharedmemory.write","name":"SyncSharedMemory::write","description":"Copy data to named shared memory","tag":"refentry","type":"Function","methodName":"write"},{"id":"class.syncsharedmemory","name":"SyncSharedMemory","description":"The SyncSharedMemory class","tag":"phpdoc:classref","type":"Class","methodName":"SyncSharedMemory"},{"id":"book.sync","name":"Sync","description":"Sync","tag":"book","type":"Extension","methodName":"Sync"},{"id":"refs.fileprocess.process","name":"Process Control Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"Process Control Extensions"},{"id":"intro.geoip","name":"Introduction","description":"Geo IP Location","tag":"preface","type":"General","methodName":"Introduction"},{"id":"geoip.requirements","name":"Requirements","description":"Geo IP Location","tag":"section","type":"General","methodName":"Requirements"},{"id":"geoip.installation","name":"Installation","description":"Geo IP Location","tag":"section","type":"General","methodName":"Installation"},{"id":"geoip.configuration","name":"Runtime Configuration","description":"Geo IP Location","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"geoip.setup","name":"Installing\/Configuring","description":"Geo IP Location","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"geoip.constants","name":"Predefined Constants","description":"Geo IP Location","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.geoip-asnum-by-name","name":"geoip_asnum_by_name","description":"Get the Autonomous System Numbers (ASN)","tag":"refentry","type":"Function","methodName":"geoip_asnum_by_name"},{"id":"function.geoip-continent-code-by-name","name":"geoip_continent_code_by_name","description":"Get the two letter continent code","tag":"refentry","type":"Function","methodName":"geoip_continent_code_by_name"},{"id":"function.geoip-country-code-by-name","name":"geoip_country_code_by_name","description":"Get the two letter country code","tag":"refentry","type":"Function","methodName":"geoip_country_code_by_name"},{"id":"function.geoip-country-code3-by-name","name":"geoip_country_code3_by_name","description":"Get the three letter country code","tag":"refentry","type":"Function","methodName":"geoip_country_code3_by_name"},{"id":"function.geoip-country-name-by-name","name":"geoip_country_name_by_name","description":"Get the full country name","tag":"refentry","type":"Function","methodName":"geoip_country_name_by_name"},{"id":"function.geoip-database-info","name":"geoip_database_info","description":"Get GeoIP Database information","tag":"refentry","type":"Function","methodName":"geoip_database_info"},{"id":"function.geoip-db-avail","name":"geoip_db_avail","description":"Determine if GeoIP Database is available","tag":"refentry","type":"Function","methodName":"geoip_db_avail"},{"id":"function.geoip-db-filename","name":"geoip_db_filename","description":"Returns the filename of the corresponding GeoIP Database","tag":"refentry","type":"Function","methodName":"geoip_db_filename"},{"id":"function.geoip-db-get-all-info","name":"geoip_db_get_all_info","description":"Returns detailed information about all GeoIP database types","tag":"refentry","type":"Function","methodName":"geoip_db_get_all_info"},{"id":"function.geoip-domain-by-name","name":"geoip_domain_by_name","description":"Get the second level domain name","tag":"refentry","type":"Function","methodName":"geoip_domain_by_name"},{"id":"function.geoip-id-by-name","name":"geoip_id_by_name","description":"Get the Internet connection type","tag":"refentry","type":"Function","methodName":"geoip_id_by_name"},{"id":"function.geoip-isp-by-name","name":"geoip_isp_by_name","description":"Get the Internet Service Provider (ISP) name","tag":"refentry","type":"Function","methodName":"geoip_isp_by_name"},{"id":"function.geoip-netspeedcell-by-name","name":"geoip_netspeedcell_by_name","description":"Get the Internet connection speed","tag":"refentry","type":"Function","methodName":"geoip_netspeedcell_by_name"},{"id":"function.geoip-org-by-name","name":"geoip_org_by_name","description":"Get the organization name","tag":"refentry","type":"Function","methodName":"geoip_org_by_name"},{"id":"function.geoip-record-by-name","name":"geoip_record_by_name","description":"Returns the detailed City information found in the GeoIP Database","tag":"refentry","type":"Function","methodName":"geoip_record_by_name"},{"id":"function.geoip-region-by-name","name":"geoip_region_by_name","description":"Get the country code and region","tag":"refentry","type":"Function","methodName":"geoip_region_by_name"},{"id":"function.geoip-region-name-by-code","name":"geoip_region_name_by_code","description":"Returns the region name for some country and region code combo","tag":"refentry","type":"Function","methodName":"geoip_region_name_by_code"},{"id":"function.geoip-setup-custom-directory","name":"geoip_setup_custom_directory","description":"Set a custom directory for the GeoIP database","tag":"refentry","type":"Function","methodName":"geoip_setup_custom_directory"},{"id":"function.geoip-time-zone-by-country-and-region","name":"geoip_time_zone_by_country_and_region","description":"Returns the time zone for some country and region code combo","tag":"refentry","type":"Function","methodName":"geoip_time_zone_by_country_and_region"},{"id":"ref.geoip","name":"GeoIP Functions","description":"Geo IP Location","tag":"reference","type":"Extension","methodName":"GeoIP Functions"},{"id":"book.geoip","name":"GeoIP","description":"Geo IP Location","tag":"book","type":"Extension","methodName":"GeoIP"},{"id":"intro.fann","name":"Introduction","description":"FANN (Fast Artificial Neural Network)","tag":"preface","type":"General","methodName":"Introduction"},{"id":"fann.requirements","name":"Requirements","description":"FANN (Fast Artificial Neural Network)","tag":"section","type":"General","methodName":"Requirements"},{"id":"fann.installation","name":"Installation","description":"FANN (Fast Artificial Neural Network)","tag":"section","type":"General","methodName":"Installation"},{"id":"fann.resources","name":"Resource Types","description":"FANN (Fast Artificial Neural Network)","tag":"section","type":"General","methodName":"Resource Types"},{"id":"fann.setup","name":"Installing\/Configuring","description":"FANN (Fast Artificial Neural Network)","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"fann.constants","name":"Predefined Constants","description":"FANN (Fast Artificial Neural Network)","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"fann.examples-1","name":"XOR training","description":"FANN (Fast Artificial Neural Network)","tag":"section","type":"General","methodName":"XOR training"},{"id":"fann.examples","name":"Examples","description":"FANN (Fast Artificial Neural Network)","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.fann-cascadetrain-on-data","name":"fann_cascadetrain_on_data","description":"Trains on an entire dataset, for a period of time using the Cascade2 training algorithm","tag":"refentry","type":"Function","methodName":"fann_cascadetrain_on_data"},{"id":"function.fann-cascadetrain-on-file","name":"fann_cascadetrain_on_file","description":"Trains on an entire dataset read from file, for a period of time using the Cascade2 training algorithm","tag":"refentry","type":"Function","methodName":"fann_cascadetrain_on_file"},{"id":"function.fann-clear-scaling-params","name":"fann_clear_scaling_params","description":"Clears scaling parameters","tag":"refentry","type":"Function","methodName":"fann_clear_scaling_params"},{"id":"function.fann-copy","name":"fann_copy","description":"Creates a copy of a fann structure","tag":"refentry","type":"Function","methodName":"fann_copy"},{"id":"function.fann-create-from-file","name":"fann_create_from_file","description":"Constructs a backpropagation neural network from a configuration file","tag":"refentry","type":"Function","methodName":"fann_create_from_file"},{"id":"function.fann-create-shortcut","name":"fann_create_shortcut","description":"Creates a standard backpropagation neural network which is not fully connectected and has shortcut connections","tag":"refentry","type":"Function","methodName":"fann_create_shortcut"},{"id":"function.fann-create-shortcut-array","name":"fann_create_shortcut_array","description":"Creates a standard backpropagation neural network which is not fully connectected and has shortcut connections","tag":"refentry","type":"Function","methodName":"fann_create_shortcut_array"},{"id":"function.fann-create-sparse","name":"fann_create_sparse","description":"Creates a standard backpropagation neural network, which is not fully connected","tag":"refentry","type":"Function","methodName":"fann_create_sparse"},{"id":"function.fann-create-sparse-array","name":"fann_create_sparse_array","description":"Creates a standard backpropagation neural network, which is not fully connected using an array of layer sizes","tag":"refentry","type":"Function","methodName":"fann_create_sparse_array"},{"id":"function.fann-create-standard","name":"fann_create_standard","description":"Creates a standard fully connected backpropagation neural network","tag":"refentry","type":"Function","methodName":"fann_create_standard"},{"id":"function.fann-create-standard-array","name":"fann_create_standard_array","description":"Creates a standard fully connected backpropagation neural network using an array of layer sizes","tag":"refentry","type":"Function","methodName":"fann_create_standard_array"},{"id":"function.fann-create-train","name":"fann_create_train","description":"Creates an empty training data struct","tag":"refentry","type":"Function","methodName":"fann_create_train"},{"id":"function.fann-create-train-from-callback","name":"fann_create_train_from_callback","description":"Creates the training data struct from a user supplied function","tag":"refentry","type":"Function","methodName":"fann_create_train_from_callback"},{"id":"function.fann-descale-input","name":"fann_descale_input","description":"Scale data in input vector after get it from ann based on previously calculated parameters","tag":"refentry","type":"Function","methodName":"fann_descale_input"},{"id":"function.fann-descale-output","name":"fann_descale_output","description":"Scale data in output vector after get it from ann based on previously calculated parameters","tag":"refentry","type":"Function","methodName":"fann_descale_output"},{"id":"function.fann-descale-train","name":"fann_descale_train","description":"Descale input and output data based on previously calculated parameters","tag":"refentry","type":"Function","methodName":"fann_descale_train"},{"id":"function.fann-destroy","name":"fann_destroy","description":"Destroys the entire network and properly freeing all the associated memory","tag":"refentry","type":"Function","methodName":"fann_destroy"},{"id":"function.fann-destroy-train","name":"fann_destroy_train","description":"Destructs the training data","tag":"refentry","type":"Function","methodName":"fann_destroy_train"},{"id":"function.fann-duplicate-train-data","name":"fann_duplicate_train_data","description":"Returns an exact copy of a fann train data","tag":"refentry","type":"Function","methodName":"fann_duplicate_train_data"},{"id":"function.fann-get-activation-function","name":"fann_get_activation_function","description":"Returns the activation function","tag":"refentry","type":"Function","methodName":"fann_get_activation_function"},{"id":"function.fann-get-activation-steepness","name":"fann_get_activation_steepness","description":"Returns the activation steepness for supplied neuron and layer number","tag":"refentry","type":"Function","methodName":"fann_get_activation_steepness"},{"id":"function.fann-get-bias-array","name":"fann_get_bias_array","description":"Get the number of bias in each layer in the network","tag":"refentry","type":"Function","methodName":"fann_get_bias_array"},{"id":"function.fann-get-bit-fail","name":"fann_get_bit_fail","description":"The number of fail bits","tag":"refentry","type":"Function","methodName":"fann_get_bit_fail"},{"id":"function.fann-get-bit-fail-limit","name":"fann_get_bit_fail_limit","description":"Returns the bit fail limit used during training","tag":"refentry","type":"Function","methodName":"fann_get_bit_fail_limit"},{"id":"function.fann-get-cascade-activation-functions","name":"fann_get_cascade_activation_functions","description":"Returns the cascade activation functions","tag":"refentry","type":"Function","methodName":"fann_get_cascade_activation_functions"},{"id":"function.fann-get-cascade-activation-functions-count","name":"fann_get_cascade_activation_functions_count","description":"Returns the number of cascade activation functions","tag":"refentry","type":"Function","methodName":"fann_get_cascade_activation_functions_count"},{"id":"function.fann-get-cascade-activation-steepnesses","name":"fann_get_cascade_activation_steepnesses","description":"Returns the cascade activation steepnesses","tag":"refentry","type":"Function","methodName":"fann_get_cascade_activation_steepnesses"},{"id":"function.fann-get-cascade-activation-steepnesses-count","name":"fann_get_cascade_activation_steepnesses_count","description":"The number of activation steepnesses","tag":"refentry","type":"Function","methodName":"fann_get_cascade_activation_steepnesses_count"},{"id":"function.fann-get-cascade-candidate-change-fraction","name":"fann_get_cascade_candidate_change_fraction","description":"Returns the cascade candidate change fraction","tag":"refentry","type":"Function","methodName":"fann_get_cascade_candidate_change_fraction"},{"id":"function.fann-get-cascade-candidate-limit","name":"fann_get_cascade_candidate_limit","description":"Return the candidate limit","tag":"refentry","type":"Function","methodName":"fann_get_cascade_candidate_limit"},{"id":"function.fann-get-cascade-candidate-stagnation-epochs","name":"fann_get_cascade_candidate_stagnation_epochs","description":"Returns the number of cascade candidate stagnation epochs","tag":"refentry","type":"Function","methodName":"fann_get_cascade_candidate_stagnation_epochs"},{"id":"function.fann-get-cascade-max-cand-epochs","name":"fann_get_cascade_max_cand_epochs","description":"Returns the maximum candidate epochs","tag":"refentry","type":"Function","methodName":"fann_get_cascade_max_cand_epochs"},{"id":"function.fann-get-cascade-max-out-epochs","name":"fann_get_cascade_max_out_epochs","description":"Returns the maximum out epochs","tag":"refentry","type":"Function","methodName":"fann_get_cascade_max_out_epochs"},{"id":"function.fann-get-cascade-min-cand-epochs","name":"fann_get_cascade_min_cand_epochs","description":"Returns the minimum candidate epochs","tag":"refentry","type":"Function","methodName":"fann_get_cascade_min_cand_epochs"},{"id":"function.fann-get-cascade-min-out-epochs","name":"fann_get_cascade_min_out_epochs","description":"Returns the minimum out epochs","tag":"refentry","type":"Function","methodName":"fann_get_cascade_min_out_epochs"},{"id":"function.fann-get-cascade-num-candidate-groups","name":"fann_get_cascade_num_candidate_groups","description":"Returns the number of candidate groups","tag":"refentry","type":"Function","methodName":"fann_get_cascade_num_candidate_groups"},{"id":"function.fann-get-cascade-num-candidates","name":"fann_get_cascade_num_candidates","description":"Returns the number of candidates used during training","tag":"refentry","type":"Function","methodName":"fann_get_cascade_num_candidates"},{"id":"function.fann-get-cascade-output-change-fraction","name":"fann_get_cascade_output_change_fraction","description":"Returns the cascade output change fraction","tag":"refentry","type":"Function","methodName":"fann_get_cascade_output_change_fraction"},{"id":"function.fann-get-cascade-output-stagnation-epochs","name":"fann_get_cascade_output_stagnation_epochs","description":"Returns the number of cascade output stagnation epochs","tag":"refentry","type":"Function","methodName":"fann_get_cascade_output_stagnation_epochs"},{"id":"function.fann-get-cascade-weight-multiplier","name":"fann_get_cascade_weight_multiplier","description":"Returns the weight multiplier","tag":"refentry","type":"Function","methodName":"fann_get_cascade_weight_multiplier"},{"id":"function.fann-get-connection-array","name":"fann_get_connection_array","description":"Get connections in the network","tag":"refentry","type":"Function","methodName":"fann_get_connection_array"},{"id":"function.fann-get-connection-rate","name":"fann_get_connection_rate","description":"Get the connection rate used when the network was created","tag":"refentry","type":"Function","methodName":"fann_get_connection_rate"},{"id":"function.fann-get-errno","name":"fann_get_errno","description":"Returns the last error number","tag":"refentry","type":"Function","methodName":"fann_get_errno"},{"id":"function.fann-get-errstr","name":"fann_get_errstr","description":"Returns the last errstr","tag":"refentry","type":"Function","methodName":"fann_get_errstr"},{"id":"function.fann-get-layer-array","name":"fann_get_layer_array","description":"Get the number of neurons in each layer in the network","tag":"refentry","type":"Function","methodName":"fann_get_layer_array"},{"id":"function.fann-get-learning-momentum","name":"fann_get_learning_momentum","description":"Returns the learning momentum","tag":"refentry","type":"Function","methodName":"fann_get_learning_momentum"},{"id":"function.fann-get-learning-rate","name":"fann_get_learning_rate","description":"Returns the learning rate","tag":"refentry","type":"Function","methodName":"fann_get_learning_rate"},{"id":"function.fann-get-mse","name":"fann_get_MSE","description":"Reads the mean square error from the network","tag":"refentry","type":"Function","methodName":"fann_get_MSE"},{"id":"function.fann-get-network-type","name":"fann_get_network_type","description":"Get the type of neural network it was created as","tag":"refentry","type":"Function","methodName":"fann_get_network_type"},{"id":"function.fann-get-num-input","name":"fann_get_num_input","description":"Get the number of input neurons","tag":"refentry","type":"Function","methodName":"fann_get_num_input"},{"id":"function.fann-get-num-layers","name":"fann_get_num_layers","description":"Get the number of layers in the neural network","tag":"refentry","type":"Function","methodName":"fann_get_num_layers"},{"id":"function.fann-get-num-output","name":"fann_get_num_output","description":"Get the number of output neurons","tag":"refentry","type":"Function","methodName":"fann_get_num_output"},{"id":"function.fann-get-quickprop-decay","name":"fann_get_quickprop_decay","description":"Returns the decay which is a factor that weights should decrease in each iteration during quickprop training","tag":"refentry","type":"Function","methodName":"fann_get_quickprop_decay"},{"id":"function.fann-get-quickprop-mu","name":"fann_get_quickprop_mu","description":"Returns the mu factor","tag":"refentry","type":"Function","methodName":"fann_get_quickprop_mu"},{"id":"function.fann-get-rprop-decrease-factor","name":"fann_get_rprop_decrease_factor","description":"Returns the increase factor used during RPROP training","tag":"refentry","type":"Function","methodName":"fann_get_rprop_decrease_factor"},{"id":"function.fann-get-rprop-delta-max","name":"fann_get_rprop_delta_max","description":"Returns the maximum step-size","tag":"refentry","type":"Function","methodName":"fann_get_rprop_delta_max"},{"id":"function.fann-get-rprop-delta-min","name":"fann_get_rprop_delta_min","description":"Returns the minimum step-size","tag":"refentry","type":"Function","methodName":"fann_get_rprop_delta_min"},{"id":"function.fann-get-rprop-delta-zero","name":"fann_get_rprop_delta_zero","description":"Returns the initial step-size","tag":"refentry","type":"Function","methodName":"fann_get_rprop_delta_zero"},{"id":"function.fann-get-rprop-increase-factor","name":"fann_get_rprop_increase_factor","description":"Returns the increase factor used during RPROP training","tag":"refentry","type":"Function","methodName":"fann_get_rprop_increase_factor"},{"id":"function.fann-get-sarprop-step-error-shift","name":"fann_get_sarprop_step_error_shift","description":"Returns the sarprop step error shift","tag":"refentry","type":"Function","methodName":"fann_get_sarprop_step_error_shift"},{"id":"function.fann-get-sarprop-step-error-threshold-factor","name":"fann_get_sarprop_step_error_threshold_factor","description":"Returns the sarprop step error threshold factor","tag":"refentry","type":"Function","methodName":"fann_get_sarprop_step_error_threshold_factor"},{"id":"function.fann-get-sarprop-temperature","name":"fann_get_sarprop_temperature","description":"Returns the sarprop temperature","tag":"refentry","type":"Function","methodName":"fann_get_sarprop_temperature"},{"id":"function.fann-get-sarprop-weight-decay-shift","name":"fann_get_sarprop_weight_decay_shift","description":"Returns the sarprop weight decay shift","tag":"refentry","type":"Function","methodName":"fann_get_sarprop_weight_decay_shift"},{"id":"function.fann-get-total-connections","name":"fann_get_total_connections","description":"Get the total number of connections in the entire network","tag":"refentry","type":"Function","methodName":"fann_get_total_connections"},{"id":"function.fann-get-total-neurons","name":"fann_get_total_neurons","description":"Get the total number of neurons in the entire network","tag":"refentry","type":"Function","methodName":"fann_get_total_neurons"},{"id":"function.fann-get-train-error-function","name":"fann_get_train_error_function","description":"Returns the error function used during training","tag":"refentry","type":"Function","methodName":"fann_get_train_error_function"},{"id":"function.fann-get-train-stop-function","name":"fann_get_train_stop_function","description":"Returns the stop function used during training","tag":"refentry","type":"Function","methodName":"fann_get_train_stop_function"},{"id":"function.fann-get-training-algorithm","name":"fann_get_training_algorithm","description":"Returns the training algorithm","tag":"refentry","type":"Function","methodName":"fann_get_training_algorithm"},{"id":"function.fann-init-weights","name":"fann_init_weights","description":"Initialize the weights using Widrow + Nguyen\u2019s algorithm","tag":"refentry","type":"Function","methodName":"fann_init_weights"},{"id":"function.fann-length-train-data","name":"fann_length_train_data","description":"Returns the number of training patterns in the train data","tag":"refentry","type":"Function","methodName":"fann_length_train_data"},{"id":"function.fann-merge-train-data","name":"fann_merge_train_data","description":"Merges the train data","tag":"refentry","type":"Function","methodName":"fann_merge_train_data"},{"id":"function.fann-num-input-train-data","name":"fann_num_input_train_data","description":"Returns the number of inputs in each of the training patterns in the train data","tag":"refentry","type":"Function","methodName":"fann_num_input_train_data"},{"id":"function.fann-num-output-train-data","name":"fann_num_output_train_data","description":"Returns the number of outputs in each of the training patterns in the train data","tag":"refentry","type":"Function","methodName":"fann_num_output_train_data"},{"id":"function.fann-print-error","name":"fann_print_error","description":"Prints the error string","tag":"refentry","type":"Function","methodName":"fann_print_error"},{"id":"function.fann-randomize-weights","name":"fann_randomize_weights","description":"Give each connection a random weight between min_weight and max_weight","tag":"refentry","type":"Function","methodName":"fann_randomize_weights"},{"id":"function.fann-read-train-from-file","name":"fann_read_train_from_file","description":"Reads a file that stores training data","tag":"refentry","type":"Function","methodName":"fann_read_train_from_file"},{"id":"function.fann-reset-errno","name":"fann_reset_errno","description":"Resets the last error number","tag":"refentry","type":"Function","methodName":"fann_reset_errno"},{"id":"function.fann-reset-errstr","name":"fann_reset_errstr","description":"Resets the last error string","tag":"refentry","type":"Function","methodName":"fann_reset_errstr"},{"id":"function.fann-reset-mse","name":"fann_reset_MSE","description":"Resets the mean square error from the network","tag":"refentry","type":"Function","methodName":"fann_reset_MSE"},{"id":"function.fann-run","name":"fann_run","description":"Will run input through the neural network","tag":"refentry","type":"Function","methodName":"fann_run"},{"id":"function.fann-save","name":"fann_save","description":"Saves the entire network to a configuration file","tag":"refentry","type":"Function","methodName":"fann_save"},{"id":"function.fann-save-train","name":"fann_save_train","description":"Save the training structure to a file","tag":"refentry","type":"Function","methodName":"fann_save_train"},{"id":"function.fann-scale-input","name":"fann_scale_input","description":"Scale data in input vector before feed it to ann based on previously calculated parameters","tag":"refentry","type":"Function","methodName":"fann_scale_input"},{"id":"function.fann-scale-input-train-data","name":"fann_scale_input_train_data","description":"Scales the inputs in the training data to the specified range","tag":"refentry","type":"Function","methodName":"fann_scale_input_train_data"},{"id":"function.fann-scale-output","name":"fann_scale_output","description":"Scale data in output vector before feed it to ann based on previously calculated parameters","tag":"refentry","type":"Function","methodName":"fann_scale_output"},{"id":"function.fann-scale-output-train-data","name":"fann_scale_output_train_data","description":"Scales the outputs in the training data to the specified range","tag":"refentry","type":"Function","methodName":"fann_scale_output_train_data"},{"id":"function.fann-scale-train","name":"fann_scale_train","description":"Scale input and output data based on previously calculated parameters","tag":"refentry","type":"Function","methodName":"fann_scale_train"},{"id":"function.fann-scale-train-data","name":"fann_scale_train_data","description":"Scales the inputs and outputs in the training data to the specified range","tag":"refentry","type":"Function","methodName":"fann_scale_train_data"},{"id":"function.fann-set-activation-function","name":"fann_set_activation_function","description":"Sets the activation function for supplied neuron and layer","tag":"refentry","type":"Function","methodName":"fann_set_activation_function"},{"id":"function.fann-set-activation-function-hidden","name":"fann_set_activation_function_hidden","description":"Sets the activation function for all of the hidden layers","tag":"refentry","type":"Function","methodName":"fann_set_activation_function_hidden"},{"id":"function.fann-set-activation-function-layer","name":"fann_set_activation_function_layer","description":"Sets the activation function for all the neurons in the supplied layer","tag":"refentry","type":"Function","methodName":"fann_set_activation_function_layer"},{"id":"function.fann-set-activation-function-output","name":"fann_set_activation_function_output","description":"Sets the activation function for the output layer","tag":"refentry","type":"Function","methodName":"fann_set_activation_function_output"},{"id":"function.fann-set-activation-steepness","name":"fann_set_activation_steepness","description":"Sets the activation steepness for supplied neuron and layer number","tag":"refentry","type":"Function","methodName":"fann_set_activation_steepness"},{"id":"function.fann-set-activation-steepness-hidden","name":"fann_set_activation_steepness_hidden","description":"Sets the steepness of the activation steepness for all neurons in the all hidden layers","tag":"refentry","type":"Function","methodName":"fann_set_activation_steepness_hidden"},{"id":"function.fann-set-activation-steepness-layer","name":"fann_set_activation_steepness_layer","description":"Sets the activation steepness for all of the neurons in the supplied layer number","tag":"refentry","type":"Function","methodName":"fann_set_activation_steepness_layer"},{"id":"function.fann-set-activation-steepness-output","name":"fann_set_activation_steepness_output","description":"Sets the steepness of the activation steepness in the output layer","tag":"refentry","type":"Function","methodName":"fann_set_activation_steepness_output"},{"id":"function.fann-set-bit-fail-limit","name":"fann_set_bit_fail_limit","description":"Set the bit fail limit used during training","tag":"refentry","type":"Function","methodName":"fann_set_bit_fail_limit"},{"id":"function.fann-set-callback","name":"fann_set_callback","description":"Sets the callback function for use during training","tag":"refentry","type":"Function","methodName":"fann_set_callback"},{"id":"function.fann-set-cascade-activation-functions","name":"fann_set_cascade_activation_functions","description":"Sets the array of cascade candidate activation functions","tag":"refentry","type":"Function","methodName":"fann_set_cascade_activation_functions"},{"id":"function.fann-set-cascade-activation-steepnesses","name":"fann_set_cascade_activation_steepnesses","description":"Sets the array of cascade candidate activation steepnesses","tag":"refentry","type":"Function","methodName":"fann_set_cascade_activation_steepnesses"},{"id":"function.fann-set-cascade-candidate-change-fraction","name":"fann_set_cascade_candidate_change_fraction","description":"Sets the cascade candidate change fraction","tag":"refentry","type":"Function","methodName":"fann_set_cascade_candidate_change_fraction"},{"id":"function.fann-set-cascade-candidate-limit","name":"fann_set_cascade_candidate_limit","description":"Sets the candidate limit","tag":"refentry","type":"Function","methodName":"fann_set_cascade_candidate_limit"},{"id":"function.fann-set-cascade-candidate-stagnation-epochs","name":"fann_set_cascade_candidate_stagnation_epochs","description":"Sets the number of cascade candidate stagnation epochs","tag":"refentry","type":"Function","methodName":"fann_set_cascade_candidate_stagnation_epochs"},{"id":"function.fann-set-cascade-max-cand-epochs","name":"fann_set_cascade_max_cand_epochs","description":"Sets the max candidate epochs","tag":"refentry","type":"Function","methodName":"fann_set_cascade_max_cand_epochs"},{"id":"function.fann-set-cascade-max-out-epochs","name":"fann_set_cascade_max_out_epochs","description":"Sets the maximum out epochs","tag":"refentry","type":"Function","methodName":"fann_set_cascade_max_out_epochs"},{"id":"function.fann-set-cascade-min-cand-epochs","name":"fann_set_cascade_min_cand_epochs","description":"Sets the min candidate epochs","tag":"refentry","type":"Function","methodName":"fann_set_cascade_min_cand_epochs"},{"id":"function.fann-set-cascade-min-out-epochs","name":"fann_set_cascade_min_out_epochs","description":"Sets the minimum out epochs","tag":"refentry","type":"Function","methodName":"fann_set_cascade_min_out_epochs"},{"id":"function.fann-set-cascade-num-candidate-groups","name":"fann_set_cascade_num_candidate_groups","description":"Sets the number of candidate groups","tag":"refentry","type":"Function","methodName":"fann_set_cascade_num_candidate_groups"},{"id":"function.fann-set-cascade-output-change-fraction","name":"fann_set_cascade_output_change_fraction","description":"Sets the cascade output change fraction","tag":"refentry","type":"Function","methodName":"fann_set_cascade_output_change_fraction"},{"id":"function.fann-set-cascade-output-stagnation-epochs","name":"fann_set_cascade_output_stagnation_epochs","description":"Sets the number of cascade output stagnation epochs","tag":"refentry","type":"Function","methodName":"fann_set_cascade_output_stagnation_epochs"},{"id":"function.fann-set-cascade-weight-multiplier","name":"fann_set_cascade_weight_multiplier","description":"Sets the weight multiplier","tag":"refentry","type":"Function","methodName":"fann_set_cascade_weight_multiplier"},{"id":"function.fann-set-error-log","name":"fann_set_error_log","description":"Sets where the errors are logged to","tag":"refentry","type":"Function","methodName":"fann_set_error_log"},{"id":"function.fann-set-input-scaling-params","name":"fann_set_input_scaling_params","description":"Calculate input scaling parameters for future use based on training data","tag":"refentry","type":"Function","methodName":"fann_set_input_scaling_params"},{"id":"function.fann-set-learning-momentum","name":"fann_set_learning_momentum","description":"Sets the learning momentum","tag":"refentry","type":"Function","methodName":"fann_set_learning_momentum"},{"id":"function.fann-set-learning-rate","name":"fann_set_learning_rate","description":"Sets the learning rate","tag":"refentry","type":"Function","methodName":"fann_set_learning_rate"},{"id":"function.fann-set-output-scaling-params","name":"fann_set_output_scaling_params","description":"Calculate output scaling parameters for future use based on training data","tag":"refentry","type":"Function","methodName":"fann_set_output_scaling_params"},{"id":"function.fann-set-quickprop-decay","name":"fann_set_quickprop_decay","description":"Sets the quickprop decay factor","tag":"refentry","type":"Function","methodName":"fann_set_quickprop_decay"},{"id":"function.fann-set-quickprop-mu","name":"fann_set_quickprop_mu","description":"Sets the quickprop mu factor","tag":"refentry","type":"Function","methodName":"fann_set_quickprop_mu"},{"id":"function.fann-set-rprop-decrease-factor","name":"fann_set_rprop_decrease_factor","description":"Sets the decrease factor used during RPROP training","tag":"refentry","type":"Function","methodName":"fann_set_rprop_decrease_factor"},{"id":"function.fann-set-rprop-delta-max","name":"fann_set_rprop_delta_max","description":"Sets the maximum step-size","tag":"refentry","type":"Function","methodName":"fann_set_rprop_delta_max"},{"id":"function.fann-set-rprop-delta-min","name":"fann_set_rprop_delta_min","description":"Sets the minimum step-size","tag":"refentry","type":"Function","methodName":"fann_set_rprop_delta_min"},{"id":"function.fann-set-rprop-delta-zero","name":"fann_set_rprop_delta_zero","description":"Sets the initial step-size","tag":"refentry","type":"Function","methodName":"fann_set_rprop_delta_zero"},{"id":"function.fann-set-rprop-increase-factor","name":"fann_set_rprop_increase_factor","description":"Sets the increase factor used during RPROP training","tag":"refentry","type":"Function","methodName":"fann_set_rprop_increase_factor"},{"id":"function.fann-set-sarprop-step-error-shift","name":"fann_set_sarprop_step_error_shift","description":"Sets the sarprop step error shift","tag":"refentry","type":"Function","methodName":"fann_set_sarprop_step_error_shift"},{"id":"function.fann-set-sarprop-step-error-threshold-factor","name":"fann_set_sarprop_step_error_threshold_factor","description":"Sets the sarprop step error threshold factor","tag":"refentry","type":"Function","methodName":"fann_set_sarprop_step_error_threshold_factor"},{"id":"function.fann-set-sarprop-temperature","name":"fann_set_sarprop_temperature","description":"Sets the sarprop temperature","tag":"refentry","type":"Function","methodName":"fann_set_sarprop_temperature"},{"id":"function.fann-set-sarprop-weight-decay-shift","name":"fann_set_sarprop_weight_decay_shift","description":"Sets the sarprop weight decay shift","tag":"refentry","type":"Function","methodName":"fann_set_sarprop_weight_decay_shift"},{"id":"function.fann-set-scaling-params","name":"fann_set_scaling_params","description":"Calculate input and output scaling parameters for future use based on training data","tag":"refentry","type":"Function","methodName":"fann_set_scaling_params"},{"id":"function.fann-set-train-error-function","name":"fann_set_train_error_function","description":"Sets the error function used during training","tag":"refentry","type":"Function","methodName":"fann_set_train_error_function"},{"id":"function.fann-set-train-stop-function","name":"fann_set_train_stop_function","description":"Sets the stop function used during training","tag":"refentry","type":"Function","methodName":"fann_set_train_stop_function"},{"id":"function.fann-set-training-algorithm","name":"fann_set_training_algorithm","description":"Sets the training algorithm","tag":"refentry","type":"Function","methodName":"fann_set_training_algorithm"},{"id":"function.fann-set-weight","name":"fann_set_weight","description":"Set a connection in the network","tag":"refentry","type":"Function","methodName":"fann_set_weight"},{"id":"function.fann-set-weight-array","name":"fann_set_weight_array","description":"Set connections in the network","tag":"refentry","type":"Function","methodName":"fann_set_weight_array"},{"id":"function.fann-shuffle-train-data","name":"fann_shuffle_train_data","description":"Shuffles training data, randomizing the order","tag":"refentry","type":"Function","methodName":"fann_shuffle_train_data"},{"id":"function.fann-subset-train-data","name":"fann_subset_train_data","description":"Returns an copy of a subset of the train data","tag":"refentry","type":"Function","methodName":"fann_subset_train_data"},{"id":"function.fann-test","name":"fann_test","description":"Test with a set of inputs, and a set of desired outputs","tag":"refentry","type":"Function","methodName":"fann_test"},{"id":"function.fann-test-data","name":"fann_test_data","description":"Test a set of training data and calculates the MSE for the training data","tag":"refentry","type":"Function","methodName":"fann_test_data"},{"id":"function.fann-train","name":"fann_train","description":"Train one iteration with a set of inputs, and a set of desired outputs","tag":"refentry","type":"Function","methodName":"fann_train"},{"id":"function.fann-train-epoch","name":"fann_train_epoch","description":"Train one epoch with a set of training data","tag":"refentry","type":"Function","methodName":"fann_train_epoch"},{"id":"function.fann-train-on-data","name":"fann_train_on_data","description":"Trains on an entire dataset for a period of time","tag":"refentry","type":"Function","methodName":"fann_train_on_data"},{"id":"function.fann-train-on-file","name":"fann_train_on_file","description":"Trains on an entire dataset, which is read from file, for a period of time","tag":"refentry","type":"Function","methodName":"fann_train_on_file"},{"id":"ref.fann","name":"Fann Functions","description":"FANN (Fast Artificial Neural Network)","tag":"reference","type":"Extension","methodName":"Fann Functions"},{"id":"fannconnection.construct","name":"FANNConnection::__construct","description":"The connection constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"fannconnection.getfromneuron","name":"FANNConnection::getFromNeuron","description":"Returns the postions of starting neuron","tag":"refentry","type":"Function","methodName":"getFromNeuron"},{"id":"fannconnection.gettoneuron","name":"FANNConnection::getToNeuron","description":"Returns the postions of terminating neuron","tag":"refentry","type":"Function","methodName":"getToNeuron"},{"id":"fannconnection.getweight","name":"FANNConnection::getWeight","description":"Returns the connection weight","tag":"refentry","type":"Function","methodName":"getWeight"},{"id":"fannconnection.setweight","name":"FANNConnection::setWeight","description":"Sets the connections weight","tag":"refentry","type":"Function","methodName":"setWeight"},{"id":"class.fannconnection","name":"FANNConnection","description":"The FANNConnection class","tag":"phpdoc:classref","type":"Class","methodName":"FANNConnection"},{"id":"book.fann","name":"FANN","description":"FANN (Fast Artificial Neural Network)","tag":"book","type":"Extension","methodName":"FANN"},{"id":"intro.igbinary","name":"Introduction","description":"Igbinary","tag":"preface","type":"General","methodName":"Introduction"},{"id":"igbinary.installation","name":"Installation","description":"Igbinary","tag":"section","type":"General","methodName":"Installation"},{"id":"igbinary.configuration","name":"Runtime Configuration","description":"Igbinary","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"igbinary.setup","name":"Installing\/Configuring","description":"Igbinary","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.igbinary-serialize","name":"igbinary_serialize","description":"Generates a compact, storable binary representation of a value","tag":"refentry","type":"Function","methodName":"igbinary_serialize"},{"id":"function.igbinary-unserialize","name":"igbinary_unserialize","description":"Creates a PHP value from a stored representation from igbinary_serialize","tag":"refentry","type":"Function","methodName":"igbinary_unserialize"},{"id":"ref.igbinary","name":"Igbinary Functions","description":"Igbinary","tag":"reference","type":"Extension","methodName":"Igbinary Functions"},{"id":"book.igbinary","name":"Igbinary","description":"Igbinary","tag":"book","type":"Extension","methodName":"Igbinary"},{"id":"intro.json","name":"Introduction","description":"JavaScript Object Notation","tag":"preface","type":"General","methodName":"Introduction"},{"id":"json.installation","name":"Installation","description":"JavaScript Object Notation","tag":"section","type":"General","methodName":"Installation"},{"id":"json.setup","name":"Installing\/Configuring","description":"JavaScript Object Notation","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"json.constants","name":"Predefined Constants","description":"JavaScript Object Notation","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"class.jsonexception","name":"JsonException","description":"The JsonException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"JsonException"},{"id":"jsonserializable.jsonserialize","name":"JsonSerializable::jsonSerialize","description":"Specify data which should be serialized to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"class.jsonserializable","name":"JsonSerializable","description":"The JsonSerializable interface","tag":"phpdoc:classref","type":"Class","methodName":"JsonSerializable"},{"id":"function.json-decode","name":"json_decode","description":"Decodes a JSON string","tag":"refentry","type":"Function","methodName":"json_decode"},{"id":"function.json-encode","name":"json_encode","description":"Returns the JSON representation of a value","tag":"refentry","type":"Function","methodName":"json_encode"},{"id":"function.json-last-error","name":"json_last_error","description":"Returns the last error occurred","tag":"refentry","type":"Function","methodName":"json_last_error"},{"id":"function.json-last-error-msg","name":"json_last_error_msg","description":"Returns the error string of the last json_validate(), json_encode() or json_decode() call","tag":"refentry","type":"Function","methodName":"json_last_error_msg"},{"id":"function.json-validate","name":"json_validate","description":"Checks if a string contains valid JSON","tag":"refentry","type":"Function","methodName":"json_validate"},{"id":"ref.json","name":"JSON Functions","description":"JavaScript Object Notation","tag":"reference","type":"Extension","methodName":"JSON Functions"},{"id":"book.json","name":"JSON","description":"JavaScript Object Notation","tag":"book","type":"Extension","methodName":"JSON"},{"id":"intro.simdjson","name":"Introduction","description":"Simdjson","tag":"preface","type":"General","methodName":"Introduction"},{"id":"simdjson.installation","name":"Installation","description":"Simdjson","tag":"section","type":"General","methodName":"Installation"},{"id":"simdjson.setup","name":"Installing\/Configuring","description":"Simdjson","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"simdjson.constants","name":"Predefined Constants","description":"Simdjson","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.simdjson-decode","name":"simdjson_decode","description":"Decodes a JSON string","tag":"refentry","type":"Function","methodName":"simdjson_decode"},{"id":"function.simdjson-is-valid","name":"simdjson_is_valid","description":"Check if a JSON string is valid","tag":"refentry","type":"Function","methodName":"simdjson_is_valid"},{"id":"function.simdjson-key-count","name":"simdjson_key_count","description":"Returns the value at a JSON pointer.","tag":"refentry","type":"Function","methodName":"simdjson_key_count"},{"id":"function.simdjson-key-exists","name":"simdjson_key_exists","description":"Check if the JSON contains the value referred to by a JSON pointer.","tag":"refentry","type":"Function","methodName":"simdjson_key_exists"},{"id":"function.simdjson-key-value","name":"simdjson_key_value","description":"Decodes the value of a JSON string located at the requested JSON pointer.","tag":"refentry","type":"Function","methodName":"simdjson_key_value"},{"id":"ref.simdjson","name":"Simdjson Functions","description":"Simdjson","tag":"reference","type":"Extension","methodName":"Simdjson Functions"},{"id":"class.simdjsonexception","name":"SimdJsonException","description":"The SimdJsonException class","tag":"phpdoc:classref","type":"Class","methodName":"SimdJsonException"},{"id":"class.simdjsonvalueerror","name":"SimdJsonValueError","description":"The SimdJsonValueError class","tag":"phpdoc:classref","type":"Class","methodName":"SimdJsonValueError"},{"id":"book.simdjson","name":"Simdjson","description":"Simdjson","tag":"book","type":"Extension","methodName":"Simdjson"},{"id":"intro.lua","name":"Introduction","description":"Lua","tag":"preface","type":"General","methodName":"Introduction"},{"id":"lua.requirements","name":"Requirements","description":"Lua","tag":"section","type":"General","methodName":"Requirements"},{"id":"lua.installation","name":"Installation","description":"Lua","tag":"section","type":"General","methodName":"Installation"},{"id":"lua.setup","name":"Installing\/Configuring","description":"Lua","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"lua.assign","name":"Lua::assign","description":"Assign a PHP variable to Lua","tag":"refentry","type":"Function","methodName":"assign"},{"id":"lua.call","name":"Lua::__call","description":"Call Lua functions","tag":"refentry","type":"Function","methodName":"__call"},{"id":"lua.call","name":"Lua::call","description":"Call Lua functions","tag":"refentry","type":"Function","methodName":"call"},{"id":"lua.construct","name":"Lua::__construct","description":"Lua constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"lua.eval","name":"Lua::eval","description":"Evaluate a string as Lua code","tag":"refentry","type":"Function","methodName":"eval"},{"id":"lua.getversion","name":"Lua::getVersion","description":"The getversion purpose","tag":"refentry","type":"Function","methodName":"getVersion"},{"id":"lua.include","name":"Lua::include","description":"Parse a Lua script file","tag":"refentry","type":"Function","methodName":"include"},{"id":"lua.registercallback","name":"Lua::registerCallback","description":"Register a PHP function to Lua","tag":"refentry","type":"Function","methodName":"registerCallback"},{"id":"class.lua","name":"Lua","description":"The Lua class","tag":"phpdoc:classref","type":"Class","methodName":"Lua"},{"id":"luaclosure.invoke","name":"LuaClosure::__invoke","description":"Invoke luaclosure","tag":"refentry","type":"Function","methodName":"__invoke"},{"id":"class.luaclosure","name":"LuaClosure","description":"The LuaClosure class","tag":"phpdoc:classref","type":"Class","methodName":"LuaClosure"},{"id":"book.lua","name":"Lua","description":"Lua","tag":"book","type":"Extension","methodName":"Lua"},{"id":"intro.luasandbox","name":"Introduction","description":"LuaSandbox","tag":"preface","type":"General","methodName":"Introduction"},{"id":"luasandbox.requirements","name":"Requirements","description":"LuaSandbox","tag":"section","type":"General","methodName":"Requirements"},{"id":"luasandbox.installation","name":"Installation","description":"LuaSandbox","tag":"section","type":"General","methodName":"Installation"},{"id":"luasandbox.setup","name":"Installing\/Configuring","description":"LuaSandbox","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"reference.luasandbox.differences","name":"Differences from Standard Lua","description":"LuaSandbox","tag":"chapter","type":"General","methodName":"Differences from Standard Lua"},{"id":"luasandbox.examples-basic","name":"Basic usage for LuaSandbox","description":"LuaSandbox","tag":"section","type":"General","methodName":"Basic usage for LuaSandbox"},{"id":"luasandbox.examples","name":"Examples","description":"LuaSandbox","tag":"chapter","type":"General","methodName":"Examples"},{"id":"luasandbox.callfunction","name":"LuaSandbox::callFunction","description":"Call a function in a Lua global variable","tag":"refentry","type":"Function","methodName":"callFunction"},{"id":"luasandbox.disableprofiler","name":"LuaSandbox::disableProfiler","description":"Disable the profiler","tag":"refentry","type":"Function","methodName":"disableProfiler"},{"id":"luasandbox.enableprofiler","name":"LuaSandbox::enableProfiler","description":"Enable the profiler.","tag":"refentry","type":"Function","methodName":"enableProfiler"},{"id":"luasandbox.getcpuusage","name":"LuaSandbox::getCPUUsage","description":"Fetch the current CPU time usage of the Lua environment","tag":"refentry","type":"Function","methodName":"getCPUUsage"},{"id":"luasandbox.getmemoryusage","name":"LuaSandbox::getMemoryUsage","description":"Fetch the current memory usage of the Lua environment","tag":"refentry","type":"Function","methodName":"getMemoryUsage"},{"id":"luasandbox.getpeakmemoryusage","name":"LuaSandbox::getPeakMemoryUsage","description":"Fetch the peak memory usage of the Lua environment","tag":"refentry","type":"Function","methodName":"getPeakMemoryUsage"},{"id":"luasandbox.getprofilerfunctionreport","name":"LuaSandbox::getProfilerFunctionReport","description":"Fetch profiler data","tag":"refentry","type":"Function","methodName":"getProfilerFunctionReport"},{"id":"luasandbox.getversioninfo","name":"LuaSandbox::getVersionInfo","description":"Return the versions of LuaSandbox and Lua","tag":"refentry","type":"Function","methodName":"getVersionInfo"},{"id":"luasandbox.loadbinary","name":"LuaSandbox::loadBinary","description":"Load a precompiled binary chunk into the Lua environment","tag":"refentry","type":"Function","methodName":"loadBinary"},{"id":"luasandbox.loadstring","name":"LuaSandbox::loadString","description":"Load Lua code into the Lua environment","tag":"refentry","type":"Function","methodName":"loadString"},{"id":"luasandbox.pauseusagetimer","name":"LuaSandbox::pauseUsageTimer","description":"Pause the CPU usage timer","tag":"refentry","type":"Function","methodName":"pauseUsageTimer"},{"id":"luasandbox.registerlibrary","name":"LuaSandbox::registerLibrary","description":"Register a set of PHP functions as a Lua library","tag":"refentry","type":"Function","methodName":"registerLibrary"},{"id":"luasandbox.setcpulimit","name":"LuaSandbox::setCPULimit","description":"Set the CPU time limit for the Lua environment","tag":"refentry","type":"Function","methodName":"setCPULimit"},{"id":"luasandbox.setmemorylimit","name":"LuaSandbox::setMemoryLimit","description":"Set the memory limit for the Lua environment","tag":"refentry","type":"Function","methodName":"setMemoryLimit"},{"id":"luasandbox.unpauseusagetimer","name":"LuaSandbox::unpauseUsageTimer","description":"Unpause the timer paused by LuaSandbox::pauseUsageTimer","tag":"refentry","type":"Function","methodName":"unpauseUsageTimer"},{"id":"luasandbox.wrapphpfunction","name":"LuaSandbox::wrapPhpFunction","description":"Wrap a PHP callable in a LuaSandboxFunction","tag":"refentry","type":"Function","methodName":"wrapPhpFunction"},{"id":"class.luasandbox","name":"LuaSandbox","description":"The LuaSandbox class","tag":"phpdoc:classref","type":"Class","methodName":"LuaSandbox"},{"id":"luasandboxfunction.call","name":"LuaSandboxFunction::call","description":"Call a Lua function","tag":"refentry","type":"Function","methodName":"call"},{"id":"luasandboxfunction.construct","name":"LuaSandboxFunction::__construct","description":"Unused","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"luasandboxfunction.dump","name":"LuaSandboxFunction::dump","description":"Dump the function as a binary blob","tag":"refentry","type":"Function","methodName":"dump"},{"id":"class.luasandboxfunction","name":"LuaSandboxFunction","description":"The LuaSandboxFunction class","tag":"phpdoc:classref","type":"Class","methodName":"LuaSandboxFunction"},{"id":"class.luasandboxerror","name":"LuaSandboxError","description":"The LuaSandboxError class","tag":"phpdoc:classref","type":"Class","methodName":"LuaSandboxError"},{"id":"class.luasandboxerrorerror","name":"LuaSandboxErrorError","description":"The LuaSandboxErrorError class","tag":"phpdoc:classref","type":"Class","methodName":"LuaSandboxErrorError"},{"id":"class.luasandboxfatalerror","name":"LuaSandboxFatalError","description":"The LuaSandboxFatalError class","tag":"phpdoc:classref","type":"Class","methodName":"LuaSandboxFatalError"},{"id":"class.luasandboxmemoryerror","name":"LuaSandboxMemoryError","description":"The LuaSandboxMemoryError class","tag":"phpdoc:classref","type":"Class","methodName":"LuaSandboxMemoryError"},{"id":"class.luasandboxruntimeerror","name":"LuaSandboxRuntimeError","description":"The LuaSandboxRuntimeError class","tag":"phpdoc:classref","type":"Class","methodName":"LuaSandboxRuntimeError"},{"id":"class.luasandboxsyntaxerror","name":"LuaSandboxSyntaxError","description":"The LuaSandboxSyntaxError class","tag":"phpdoc:classref","type":"Class","methodName":"LuaSandboxSyntaxError"},{"id":"class.luasandboxtimeouterror","name":"LuaSandboxTimeoutError","description":"The LuaSandboxTimeoutError class","tag":"phpdoc:classref","type":"Class","methodName":"LuaSandboxTimeoutError"},{"id":"book.luasandbox","name":"LuaSandbox","description":"LuaSandbox","tag":"book","type":"Extension","methodName":"LuaSandbox"},{"id":"intro.misc","name":"Introduction","description":"Miscellaneous Functions","tag":"preface","type":"General","methodName":"Introduction"},{"id":"misc.configuration","name":"Runtime Configuration","description":"Miscellaneous Functions","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"misc.setup","name":"Installing\/Configuring","description":"Miscellaneous Functions","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"misc.constants","name":"Predefined Constants","description":"Miscellaneous Functions","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.connection-aborted","name":"connection_aborted","description":"Check whether client disconnected","tag":"refentry","type":"Function","methodName":"connection_aborted"},{"id":"function.connection-status","name":"connection_status","description":"Returns connection status bitfield","tag":"refentry","type":"Function","methodName":"connection_status"},{"id":"function.constant","name":"constant","description":"Returns the value of a constant","tag":"refentry","type":"Function","methodName":"constant"},{"id":"function.define","name":"define","description":"Defines a named constant","tag":"refentry","type":"Function","methodName":"define"},{"id":"function.defined","name":"defined","description":"Checks whether a constant with the given name exists","tag":"refentry","type":"Function","methodName":"defined"},{"id":"function.die","name":"die","description":"Alias of exit","tag":"refentry","type":"Function","methodName":"die"},{"id":"function.eval","name":"eval","description":"Evaluate a string as PHP code","tag":"refentry","type":"Function","methodName":"eval"},{"id":"function.exit","name":"exit","description":"Terminate the current script with a status code or message","tag":"refentry","type":"Function","methodName":"exit"},{"id":"function.get-browser","name":"get_browser","description":"Tells what the user's browser is capable of","tag":"refentry","type":"Function","methodName":"get_browser"},{"id":"function.halt-compiler","name":"__halt_compiler","description":"Halts the compiler execution","tag":"refentry","type":"Function","methodName":"__halt_compiler"},{"id":"function.highlight-file","name":"highlight_file","description":"Syntax highlighting of a file","tag":"refentry","type":"Function","methodName":"highlight_file"},{"id":"function.highlight-string","name":"highlight_string","description":"Syntax highlighting of a string","tag":"refentry","type":"Function","methodName":"highlight_string"},{"id":"function.hrtime","name":"hrtime","description":"Get the system's high resolution time","tag":"refentry","type":"Function","methodName":"hrtime"},{"id":"function.ignore-user-abort","name":"ignore_user_abort","description":"Set whether a client disconnect should abort script execution","tag":"refentry","type":"Function","methodName":"ignore_user_abort"},{"id":"function.pack","name":"pack","description":"Pack data into binary string","tag":"refentry","type":"Function","methodName":"pack"},{"id":"function.php-strip-whitespace","name":"php_strip_whitespace","description":"Return source with stripped comments and whitespace","tag":"refentry","type":"Function","methodName":"php_strip_whitespace"},{"id":"function.sapi-windows-cp-conv","name":"sapi_windows_cp_conv","description":"Convert string from one codepage to another","tag":"refentry","type":"Function","methodName":"sapi_windows_cp_conv"},{"id":"function.sapi-windows-cp-get","name":"sapi_windows_cp_get","description":"Get current codepage","tag":"refentry","type":"Function","methodName":"sapi_windows_cp_get"},{"id":"function.sapi-windows-cp-is-utf8","name":"sapi_windows_cp_is_utf8","description":"Indicates whether the codepage is UTF-8 compatible","tag":"refentry","type":"Function","methodName":"sapi_windows_cp_is_utf8"},{"id":"function.sapi-windows-cp-set","name":"sapi_windows_cp_set","description":"Set process codepage","tag":"refentry","type":"Function","methodName":"sapi_windows_cp_set"},{"id":"function.sapi-windows-generate-ctrl-event","name":"sapi_windows_generate_ctrl_event","description":"Send a CTRL event to another process","tag":"refentry","type":"Function","methodName":"sapi_windows_generate_ctrl_event"},{"id":"function.sapi-windows-set-ctrl-handler","name":"sapi_windows_set_ctrl_handler","description":"Set or remove a CTRL event handler","tag":"refentry","type":"Function","methodName":"sapi_windows_set_ctrl_handler"},{"id":"function.sapi-windows-vt100-support","name":"sapi_windows_vt100_support","description":"Get or set VT100 support for the specified stream associated to an output buffer of a Windows console.","tag":"refentry","type":"Function","methodName":"sapi_windows_vt100_support"},{"id":"function.show-source","name":"show_source","description":"Alias of highlight_file","tag":"refentry","type":"Function","methodName":"show_source"},{"id":"function.sleep","name":"sleep","description":"Delay execution","tag":"refentry","type":"Function","methodName":"sleep"},{"id":"function.sys-getloadavg","name":"sys_getloadavg","description":"Gets system load average","tag":"refentry","type":"Function","methodName":"sys_getloadavg"},{"id":"function.time-nanosleep","name":"time_nanosleep","description":"Delay for a number of seconds and nanoseconds","tag":"refentry","type":"Function","methodName":"time_nanosleep"},{"id":"function.time-sleep-until","name":"time_sleep_until","description":"Make the script sleep until the specified time","tag":"refentry","type":"Function","methodName":"time_sleep_until"},{"id":"function.uniqid","name":"uniqid","description":"Generate a time-based identifier","tag":"refentry","type":"Function","methodName":"uniqid"},{"id":"function.unpack","name":"unpack","description":"Unpack data from binary string","tag":"refentry","type":"Function","methodName":"unpack"},{"id":"function.usleep","name":"usleep","description":"Delay execution in microseconds","tag":"refentry","type":"Function","methodName":"usleep"},{"id":"ref.misc","name":"Misc. Functions","description":"Miscellaneous Functions","tag":"reference","type":"Extension","methodName":"Misc. Functions"},{"id":"changelog.misc","name":"Changelog","description":"Miscellaneous Functions","tag":"appendix","type":"General","methodName":"Changelog"},{"id":"book.misc","name":"Misc.","description":"Miscellaneous Functions","tag":"book","type":"Extension","methodName":"Misc."},{"id":"intro.random","name":"Introduction","description":"Random Number Generators and Functions Related to Randomness","tag":"preface","type":"General","methodName":"Introduction"},{"id":"random.constants","name":"Predefined Constants","description":"Random Number Generators and Functions Related to Randomness","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"random.examples","name":"Examples","description":"Random Number Generators and Functions Related to Randomness","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.getrandmax","name":"getrandmax","description":"Show largest possible random value","tag":"refentry","type":"Function","methodName":"getrandmax"},{"id":"function.lcg-value","name":"lcg_value","description":"Combined linear congruential generator","tag":"refentry","type":"Function","methodName":"lcg_value"},{"id":"function.mt-getrandmax","name":"mt_getrandmax","description":"Show largest possible random value","tag":"refentry","type":"Function","methodName":"mt_getrandmax"},{"id":"function.mt-rand","name":"mt_rand","description":"Generate a random value via the Mersenne Twister Random Number Generator","tag":"refentry","type":"Function","methodName":"mt_rand"},{"id":"function.mt-srand","name":"mt_srand","description":"Seeds the Mersenne Twister Random Number Generator","tag":"refentry","type":"Function","methodName":"mt_srand"},{"id":"function.rand","name":"rand","description":"Generate a random integer","tag":"refentry","type":"Function","methodName":"rand"},{"id":"function.random-bytes","name":"random_bytes","description":"Get cryptographically secure random bytes","tag":"refentry","type":"Function","methodName":"random_bytes"},{"id":"function.random-int","name":"random_int","description":"Get a cryptographically secure, uniformly selected integer","tag":"refentry","type":"Function","methodName":"random_int"},{"id":"function.srand","name":"srand","description":"Seed the random number generator","tag":"refentry","type":"Function","methodName":"srand"},{"id":"ref.random","name":"Random Functions","description":"Random Number Generators and Functions Related to Randomness","tag":"reference","type":"Extension","methodName":"Random Functions"},{"id":"random-randomizer.construct","name":"Random\\Randomizer::__construct","description":"Constructs a new Randomizer","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"random-randomizer.getbytes","name":"Random\\Randomizer::getBytes","description":"Get random bytes","tag":"refentry","type":"Function","methodName":"getBytes"},{"id":"random-randomizer.getbytesfromstring","name":"Random\\Randomizer::getBytesFromString","description":"Get random bytes from a source string","tag":"refentry","type":"Function","methodName":"getBytesFromString"},{"id":"random-randomizer.getfloat","name":"Random\\Randomizer::getFloat","description":"Get a uniformly selected float","tag":"refentry","type":"Function","methodName":"getFloat"},{"id":"random-randomizer.getint","name":"Random\\Randomizer::getInt","description":"Get a uniformly selected integer","tag":"refentry","type":"Function","methodName":"getInt"},{"id":"random-randomizer.nextfloat","name":"Random\\Randomizer::nextFloat","description":"Get a float from the right-open interval [0.0, 1.0)","tag":"refentry","type":"Function","methodName":"nextFloat"},{"id":"random-randomizer.nextint","name":"Random\\Randomizer::nextInt","description":"Get a positive integer","tag":"refentry","type":"Function","methodName":"nextInt"},{"id":"random-randomizer.pickarraykeys","name":"Random\\Randomizer::pickArrayKeys","description":"Select random array keys","tag":"refentry","type":"Function","methodName":"pickArrayKeys"},{"id":"random-randomizer.serialize","name":"Random\\Randomizer::__serialize","description":"Serializes the Randomizer object","tag":"refentry","type":"Function","methodName":"__serialize"},{"id":"random-randomizer.shufflearray","name":"Random\\Randomizer::shuffleArray","description":"Get a permutation of an array","tag":"refentry","type":"Function","methodName":"shuffleArray"},{"id":"random-randomizer.shufflebytes","name":"Random\\Randomizer::shuffleBytes","description":"Get a byte-wise permutation of a string","tag":"refentry","type":"Function","methodName":"shuffleBytes"},{"id":"random-randomizer.unserialize","name":"Random\\Randomizer::__unserialize","description":"Deserializes the data parameter into a Randomizer object","tag":"refentry","type":"Function","methodName":"__unserialize"},{"id":"class.random-randomizer","name":"Random\\Randomizer","description":"The Random\\Randomizer class","tag":"phpdoc:classref","type":"Class","methodName":"Random\\Randomizer"},{"id":"enum.random-intervalboundary","name":"Random\\IntervalBoundary","description":"The Random\\IntervalBoundary Enum","tag":"phpdoc:classref","type":"Class","methodName":"Random\\IntervalBoundary"},{"id":"random-engine.generate","name":"Random\\Engine::generate","description":"Generates randomness","tag":"refentry","type":"Function","methodName":"generate"},{"id":"class.random-engine","name":"Random\\Engine","description":"The Random\\Engine interface","tag":"phpdoc:classref","type":"Class","methodName":"Random\\Engine"},{"id":"class.random-cryptosafeengine","name":"Random\\CryptoSafeEngine","description":"The Random\\CryptoSafeEngine interface","tag":"phpdoc:classref","type":"Class","methodName":"Random\\CryptoSafeEngine"},{"id":"random-engine-secure.generate","name":"Random\\Engine\\Secure::generate","description":"Generate cryptographically secure randomness","tag":"refentry","type":"Function","methodName":"generate"},{"id":"class.random-engine-secure","name":"Random\\Engine\\Secure","description":"The Random\\Engine\\Secure class","tag":"phpdoc:classref","type":"Class","methodName":"Random\\Engine\\Secure"},{"id":"random-engine-mt19937.construct","name":"Random\\Engine\\Mt19937::__construct","description":"Constructs a new Mt19937 engine","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"random-engine-mt19937.debuginfo","name":"Random\\Engine\\Mt19937::__debugInfo","description":"Returns the internal state of the engine","tag":"refentry","type":"Function","methodName":"__debugInfo"},{"id":"random-engine-mt19937.generate","name":"Random\\Engine\\Mt19937::generate","description":"Generate 32 bits of randomness","tag":"refentry","type":"Function","methodName":"generate"},{"id":"random-engine-mt19937.serialize","name":"Random\\Engine\\Mt19937::__serialize","description":"Serializes the Mt19937 object","tag":"refentry","type":"Function","methodName":"__serialize"},{"id":"random-engine-mt19937.unserialize","name":"Random\\Engine\\Mt19937::__unserialize","description":"Deserializes the data parameter into a Mt19937 object","tag":"refentry","type":"Function","methodName":"__unserialize"},{"id":"class.random-engine-mt19937","name":"Random\\Engine\\Mt19937","description":"The Random\\Engine\\Mt19937 class","tag":"phpdoc:classref","type":"Class","methodName":"Random\\Engine\\Mt19937"},{"id":"random-engine-pcgoneseq128xslrr64.construct","name":"Random\\Engine\\PcgOneseq128XslRr64::__construct","description":"Constructs a new PCG Oneseq 128 XSL RR 64 engine","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"random-engine-pcgoneseq128xslrr64.debuginfo","name":"Random\\Engine\\PcgOneseq128XslRr64::__debugInfo","description":"Returns the internal state of the engine","tag":"refentry","type":"Function","methodName":"__debugInfo"},{"id":"random-engine-pcgoneseq128xslrr64.generate","name":"Random\\Engine\\PcgOneseq128XslRr64::generate","description":"Generate 64 bits of randomness","tag":"refentry","type":"Function","methodName":"generate"},{"id":"random-engine-pcgoneseq128xslrr64.jump","name":"Random\\Engine\\PcgOneseq128XslRr64::jump","description":"Efficiently move the engine ahead multiple steps","tag":"refentry","type":"Function","methodName":"jump"},{"id":"random-engine-pcgoneseq128xslrr64.serialize","name":"Random\\Engine\\PcgOneseq128XslRr64::__serialize","description":"Serializes the PcgOneseq128XslRr64 object","tag":"refentry","type":"Function","methodName":"__serialize"},{"id":"random-engine-pcgoneseq128xslrr64.unserialize","name":"Random\\Engine\\PcgOneseq128XslRr64::__unserialize","description":"Deserializes the data parameter into a PcgOneseq128XslRr64 object","tag":"refentry","type":"Function","methodName":"__unserialize"},{"id":"class.random-engine-pcgoneseq128xslrr64","name":"Random\\Engine\\PcgOneseq128XslRr64","description":"The Random\\Engine\\PcgOneseq128XslRr64 class","tag":"phpdoc:classref","type":"Class","methodName":"Random\\Engine\\PcgOneseq128XslRr64"},{"id":"random-engine-xoshiro256starstar.construct","name":"Random\\Engine\\Xoshiro256StarStar::__construct","description":"Constructs a new xoshiro256** engine","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"random-engine-xoshiro256starstar.debuginfo","name":"Random\\Engine\\Xoshiro256StarStar::__debugInfo","description":"Returns the internal state of the engine","tag":"refentry","type":"Function","methodName":"__debugInfo"},{"id":"random-engine-xoshiro256starstar.generate","name":"Random\\Engine\\Xoshiro256StarStar::generate","description":"Generate 64 bits of randomness","tag":"refentry","type":"Function","methodName":"generate"},{"id":"random-engine-xoshiro256starstar.jump","name":"Random\\Engine\\Xoshiro256StarStar::jump","description":"Efficiently move the engine ahead by 2^128 steps","tag":"refentry","type":"Function","methodName":"jump"},{"id":"random-engine-xoshiro256starstar.jumplong","name":"Random\\Engine\\Xoshiro256StarStar::jumpLong","description":"Efficiently move the engine ahead by 2^192 steps","tag":"refentry","type":"Function","methodName":"jumpLong"},{"id":"random-engine-xoshiro256starstar.serialize","name":"Random\\Engine\\Xoshiro256StarStar::__serialize","description":"Serializes the Xoshiro256StarStar object","tag":"refentry","type":"Function","methodName":"__serialize"},{"id":"random-engine-xoshiro256starstar.unserialize","name":"Random\\Engine\\Xoshiro256StarStar::__unserialize","description":"Deserializes the data parameter into a Xoshiro256StarStar object","tag":"refentry","type":"Function","methodName":"__unserialize"},{"id":"class.random-engine-xoshiro256starstar","name":"Random\\Engine\\Xoshiro256StarStar","description":"The Random\\Engine\\Xoshiro256StarStar class","tag":"phpdoc:classref","type":"Class","methodName":"Random\\Engine\\Xoshiro256StarStar"},{"id":"class.random-randomerror","name":"Random\\RandomError","description":"The Random\\RandomError class","tag":"phpdoc:classref","type":"Class","methodName":"Random\\RandomError"},{"id":"class.random-brokenrandomengineerror","name":"Random\\BrokenRandomEngineError","description":"The Random\\BrokenRandomEngineError class","tag":"phpdoc:classref","type":"Class","methodName":"Random\\BrokenRandomEngineError"},{"id":"class.random-randomexception","name":"Random\\RandomException","description":"The Random\\RandomException class","tag":"phpdoc:classref","type":"Class","methodName":"Random\\RandomException"},{"id":"book.random","name":"Random","description":"Random Number Generators and Functions Related to Randomness","tag":"book","type":"Extension","methodName":"Random"},{"id":"intro.seaslog","name":"Introduction","description":"Seaslog","tag":"preface","type":"General","methodName":"Introduction"},{"id":"seaslog.requirements","name":"Requirements","description":"Seaslog","tag":"section","type":"General","methodName":"Requirements"},{"id":"seaslog.installation","name":"Installation","description":"Seaslog","tag":"section","type":"General","methodName":"Installation"},{"id":"seaslog.configuration","name":"Runtime Configuration","description":"Seaslog","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"seaslog.resources","name":"Resource Types","description":"Seaslog","tag":"section","type":"General","methodName":"Resource Types"},{"id":"seaslog.setup","name":"Installing\/Configuring","description":"Seaslog","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"seaslog.constants","name":"Predefined Constants","description":"Seaslog","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"seaslog.examples","name":"Examples","description":"Seaslog","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.seaslog-get-author","name":"seaslog_get_author","description":"Get SeasLog author.","tag":"refentry","type":"Function","methodName":"seaslog_get_author"},{"id":"function.seaslog-get-version","name":"seaslog_get_version","description":"Get SeasLog version.","tag":"refentry","type":"Function","methodName":"seaslog_get_version"},{"id":"ref.seaslog","name":"Seaslog Functions","description":"Seaslog","tag":"reference","type":"Extension","methodName":"Seaslog Functions"},{"id":"seaslog.alert","name":"SeasLog::alert","description":"Record alert log information","tag":"refentry","type":"Function","methodName":"alert"},{"id":"seaslog.analyzercount","name":"SeasLog::analyzerCount","description":"Get log count by level, log_path and key_word","tag":"refentry","type":"Function","methodName":"analyzerCount"},{"id":"seaslog.analyzerdetail","name":"SeasLog::analyzerDetail","description":"Get log detail by level, log_path, key_word, start, limit, order","tag":"refentry","type":"Function","methodName":"analyzerDetail"},{"id":"seaslog.closeloggerstream","name":"SeasLog::closeLoggerStream","description":"Manually release stream flow from logger","tag":"refentry","type":"Function","methodName":"closeLoggerStream"},{"id":"seaslog.construct","name":"SeasLog::__construct","description":"Description","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"seaslog.critical","name":"SeasLog::critical","description":"Record critical log information","tag":"refentry","type":"Function","methodName":"critical"},{"id":"seaslog.debug","name":"SeasLog::debug","description":"Record debug log information","tag":"refentry","type":"Function","methodName":"debug"},{"id":"seaslog.destruct","name":"SeasLog::__destruct","description":"Description","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"seaslog.emergency","name":"SeasLog::emergency","description":"Record emergency log information","tag":"refentry","type":"Function","methodName":"emergency"},{"id":"seaslog.error","name":"SeasLog::error","description":"Record error log information","tag":"refentry","type":"Function","methodName":"error"},{"id":"seaslog.flushbuffer","name":"SeasLog::flushBuffer","description":"Flush logs buffer, dump to appender file, or send to remote api with tcp\/udp","tag":"refentry","type":"Function","methodName":"flushBuffer"},{"id":"seaslog.getbasepath","name":"SeasLog::getBasePath","description":"Get SeasLog base path.","tag":"refentry","type":"Function","methodName":"getBasePath"},{"id":"seaslog.getbuffer","name":"SeasLog::getBuffer","description":"Get the logs buffer in memory as array","tag":"refentry","type":"Function","methodName":"getBuffer"},{"id":"seaslog.getbufferenabled","name":"SeasLog::getBufferEnabled","description":"Determin if buffer enabled","tag":"refentry","type":"Function","methodName":"getBufferEnabled"},{"id":"seaslog.getdatetimeformat","name":"SeasLog::getDatetimeFormat","description":"Get SeasLog datetime format style","tag":"refentry","type":"Function","methodName":"getDatetimeFormat"},{"id":"seaslog.getlastlogger","name":"SeasLog::getLastLogger","description":"Get SeasLog last logger path","tag":"refentry","type":"Function","methodName":"getLastLogger"},{"id":"seaslog.getrequestid","name":"SeasLog::getRequestID","description":"Get SeasLog request_id differentiated requests","tag":"refentry","type":"Function","methodName":"getRequestID"},{"id":"seaslog.getrequestvariable","name":"SeasLog::getRequestVariable","description":"Get SeasLog request variable","tag":"refentry","type":"Function","methodName":"getRequestVariable"},{"id":"seaslog.info","name":"SeasLog::info","description":"Record info log information","tag":"refentry","type":"Function","methodName":"info"},{"id":"seaslog.log","name":"SeasLog::log","description":"The Common Record Log Function","tag":"refentry","type":"Function","methodName":"log"},{"id":"seaslog.notice","name":"SeasLog::notice","description":"Record notice log information","tag":"refentry","type":"Function","methodName":"notice"},{"id":"seaslog.setbasepath","name":"SeasLog::setBasePath","description":"Set SeasLog base path","tag":"refentry","type":"Function","methodName":"setBasePath"},{"id":"seaslog.setdatetimeformat","name":"SeasLog::setDatetimeFormat","description":"Set SeasLog datetime format style","tag":"refentry","type":"Function","methodName":"setDatetimeFormat"},{"id":"seaslog.setlogger","name":"SeasLog::setLogger","description":"Set SeasLog logger name","tag":"refentry","type":"Function","methodName":"setLogger"},{"id":"seaslog.setrequestid","name":"SeasLog::setRequestID","description":"Set SeasLog request_id differentiated requests","tag":"refentry","type":"Function","methodName":"setRequestID"},{"id":"seaslog.setrequestvariable","name":"SeasLog::setRequestVariable","description":"Manually set SeasLog request variable","tag":"refentry","type":"Function","methodName":"setRequestVariable"},{"id":"seaslog.warning","name":"SeasLog::warning","description":"Record warning log information","tag":"refentry","type":"Function","methodName":"warning"},{"id":"class.seaslog","name":"SeasLog","description":"The SeasLog class","tag":"phpdoc:classref","type":"Class","methodName":"SeasLog"},{"id":"book.seaslog","name":"Seaslog","description":"Seaslog","tag":"book","type":"Extension","methodName":"Seaslog"},{"id":"outeriterator.getinneriterator","name":"OuterIterator::getInnerIterator","description":"Returns the inner iterator for the current entry","tag":"refentry","type":"Function","methodName":"getInnerIterator"},{"id":"class.outeriterator","name":"OuterIterator","description":"The OuterIterator interface","tag":"phpdoc:classref","type":"Class","methodName":"OuterIterator"},{"id":"recursiveiterator.getchildren","name":"RecursiveIterator::getChildren","description":"Returns an iterator for the current entry","tag":"refentry","type":"Function","methodName":"getChildren"},{"id":"recursiveiterator.haschildren","name":"RecursiveIterator::hasChildren","description":"Returns if an iterator can be created for the current entry","tag":"refentry","type":"Function","methodName":"hasChildren"},{"id":"class.recursiveiterator","name":"RecursiveIterator","description":"The RecursiveIterator interface","tag":"phpdoc:classref","type":"Class","methodName":"RecursiveIterator"},{"id":"seekableiterator.seek","name":"SeekableIterator::seek","description":"Seeks to a position","tag":"refentry","type":"Function","methodName":"seek"},{"id":"class.seekableiterator","name":"SeekableIterator","description":"The SeekableIterator interface","tag":"phpdoc:classref","type":"Class","methodName":"SeekableIterator"},{"id":"splobserver.update","name":"SplObserver::update","description":"Receive update from subject","tag":"refentry","type":"Function","methodName":"update"},{"id":"class.splobserver","name":"SplObserver","description":"The SplObserver interface","tag":"phpdoc:classref","type":"Class","methodName":"SplObserver"},{"id":"splsubject.attach","name":"SplSubject::attach","description":"Attach an SplObserver","tag":"refentry","type":"Function","methodName":"attach"},{"id":"splsubject.detach","name":"SplSubject::detach","description":"Detach an observer","tag":"refentry","type":"Function","methodName":"detach"},{"id":"splsubject.notify","name":"SplSubject::notify","description":"Notify an observer","tag":"refentry","type":"Function","methodName":"notify"},{"id":"class.splsubject","name":"SplSubject","description":"The SplSubject interface","tag":"phpdoc:classref","type":"Class","methodName":"SplSubject"},{"id":"spl.interfaces","name":"Interfaces","description":"Standard PHP Library (SPL)","tag":"part","type":"General","methodName":"Interfaces"},{"id":"spldoublylinkedlist.add","name":"SplDoublyLinkedList::add","description":"Add\/insert a new value at the specified index","tag":"refentry","type":"Function","methodName":"add"},{"id":"spldoublylinkedlist.bottom","name":"SplDoublyLinkedList::bottom","description":"Peeks at the node from the beginning of the doubly linked list","tag":"refentry","type":"Function","methodName":"bottom"},{"id":"spldoublylinkedlist.count","name":"SplDoublyLinkedList::count","description":"Counts the number of elements in the doubly linked list","tag":"refentry","type":"Function","methodName":"count"},{"id":"spldoublylinkedlist.current","name":"SplDoublyLinkedList::current","description":"Return current array entry","tag":"refentry","type":"Function","methodName":"current"},{"id":"spldoublylinkedlist.getiteratormode","name":"SplDoublyLinkedList::getIteratorMode","description":"Returns the mode of iteration","tag":"refentry","type":"Function","methodName":"getIteratorMode"},{"id":"spldoublylinkedlist.isempty","name":"SplDoublyLinkedList::isEmpty","description":"Checks whether the doubly linked list is empty","tag":"refentry","type":"Function","methodName":"isEmpty"},{"id":"spldoublylinkedlist.key","name":"SplDoublyLinkedList::key","description":"Return current node index","tag":"refentry","type":"Function","methodName":"key"},{"id":"spldoublylinkedlist.next","name":"SplDoublyLinkedList::next","description":"Move to next entry","tag":"refentry","type":"Function","methodName":"next"},{"id":"spldoublylinkedlist.offsetexists","name":"SplDoublyLinkedList::offsetExists","description":"Returns whether the requested $index exists","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"spldoublylinkedlist.offsetget","name":"SplDoublyLinkedList::offsetGet","description":"Returns the value at the specified $index","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"spldoublylinkedlist.offsetset","name":"SplDoublyLinkedList::offsetSet","description":"Sets the value at the specified $index to $value","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"spldoublylinkedlist.offsetunset","name":"SplDoublyLinkedList::offsetUnset","description":"Unsets the value at the specified $index","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"spldoublylinkedlist.pop","name":"SplDoublyLinkedList::pop","description":"Pops a node from the end of the doubly linked list","tag":"refentry","type":"Function","methodName":"pop"},{"id":"spldoublylinkedlist.prev","name":"SplDoublyLinkedList::prev","description":"Move to previous entry","tag":"refentry","type":"Function","methodName":"prev"},{"id":"spldoublylinkedlist.push","name":"SplDoublyLinkedList::push","description":"Pushes an element at the end of the doubly linked list","tag":"refentry","type":"Function","methodName":"push"},{"id":"spldoublylinkedlist.rewind","name":"SplDoublyLinkedList::rewind","description":"Rewind iterator back to the start","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"spldoublylinkedlist.serialize","name":"SplDoublyLinkedList::serialize","description":"Serializes the storage","tag":"refentry","type":"Function","methodName":"serialize"},{"id":"spldoublylinkedlist.setiteratormode","name":"SplDoublyLinkedList::setIteratorMode","description":"Sets the mode of iteration","tag":"refentry","type":"Function","methodName":"setIteratorMode"},{"id":"spldoublylinkedlist.shift","name":"SplDoublyLinkedList::shift","description":"Shifts a node from the beginning of the doubly linked list","tag":"refentry","type":"Function","methodName":"shift"},{"id":"spldoublylinkedlist.top","name":"SplDoublyLinkedList::top","description":"Peeks at the node from the end of the doubly linked list","tag":"refentry","type":"Function","methodName":"top"},{"id":"spldoublylinkedlist.unserialize","name":"SplDoublyLinkedList::unserialize","description":"Unserializes the storage","tag":"refentry","type":"Function","methodName":"unserialize"},{"id":"spldoublylinkedlist.unshift","name":"SplDoublyLinkedList::unshift","description":"Prepends the doubly linked list with an element","tag":"refentry","type":"Function","methodName":"unshift"},{"id":"spldoublylinkedlist.valid","name":"SplDoublyLinkedList::valid","description":"Check whether the doubly linked list contains more nodes","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.spldoublylinkedlist","name":"SplDoublyLinkedList","description":"The SplDoublyLinkedList class","tag":"phpdoc:classref","type":"Class","methodName":"SplDoublyLinkedList"},{"id":"class.splstack","name":"SplStack","description":"The SplStack class","tag":"phpdoc:classref","type":"Class","methodName":"SplStack"},{"id":"splqueue.dequeue","name":"SplQueue::dequeue","description":"Dequeues a node from the queue","tag":"refentry","type":"Function","methodName":"dequeue"},{"id":"splqueue.enqueue","name":"SplQueue::enqueue","description":"Adds an element to the queue","tag":"refentry","type":"Function","methodName":"enqueue"},{"id":"class.splqueue","name":"SplQueue","description":"The SplQueue class","tag":"phpdoc:classref","type":"Class","methodName":"SplQueue"},{"id":"splheap.compare","name":"SplHeap::compare","description":"Compare elements in order to place them correctly in the heap while sifting up","tag":"refentry","type":"Function","methodName":"compare"},{"id":"splheap.count","name":"SplHeap::count","description":"Counts the number of elements in the heap","tag":"refentry","type":"Function","methodName":"count"},{"id":"splheap.current","name":"SplHeap::current","description":"Return current node pointed by the iterator","tag":"refentry","type":"Function","methodName":"current"},{"id":"splheap.extract","name":"SplHeap::extract","description":"Extracts a node from top of the heap and sift up","tag":"refentry","type":"Function","methodName":"extract"},{"id":"splheap.insert","name":"SplHeap::insert","description":"Inserts an element in the heap by sifting it up","tag":"refentry","type":"Function","methodName":"insert"},{"id":"splheap.iscorrupted","name":"SplHeap::isCorrupted","description":"Tells if the heap is in a corrupted state","tag":"refentry","type":"Function","methodName":"isCorrupted"},{"id":"splheap.isempty","name":"SplHeap::isEmpty","description":"Checks whether the heap is empty","tag":"refentry","type":"Function","methodName":"isEmpty"},{"id":"splheap.key","name":"SplHeap::key","description":"Return current node index","tag":"refentry","type":"Function","methodName":"key"},{"id":"splheap.next","name":"SplHeap::next","description":"Move to the next node","tag":"refentry","type":"Function","methodName":"next"},{"id":"splheap.recoverfromcorruption","name":"SplHeap::recoverFromCorruption","description":"Recover from the corrupted state and allow further actions on the heap","tag":"refentry","type":"Function","methodName":"recoverFromCorruption"},{"id":"splheap.rewind","name":"SplHeap::rewind","description":"Rewind iterator back to the start (no-op)","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"splheap.top","name":"SplHeap::top","description":"Peeks at the node from the top of the heap","tag":"refentry","type":"Function","methodName":"top"},{"id":"splheap.valid","name":"SplHeap::valid","description":"Check whether the heap contains more nodes","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.splheap","name":"SplHeap","description":"The SplHeap class","tag":"phpdoc:classref","type":"Class","methodName":"SplHeap"},{"id":"splmaxheap.compare","name":"SplMaxHeap::compare","description":"Compare elements in order to place them correctly in the heap while sifting up","tag":"refentry","type":"Function","methodName":"compare"},{"id":"class.splmaxheap","name":"SplMaxHeap","description":"The SplMaxHeap class","tag":"phpdoc:classref","type":"Class","methodName":"SplMaxHeap"},{"id":"splminheap.compare","name":"SplMinHeap::compare","description":"Compare elements in order to place them correctly in the heap while sifting up","tag":"refentry","type":"Function","methodName":"compare"},{"id":"class.splminheap","name":"SplMinHeap","description":"The SplMinHeap class","tag":"phpdoc:classref","type":"Class","methodName":"SplMinHeap"},{"id":"splpriorityqueue.compare","name":"SplPriorityQueue::compare","description":"Compare priorities in order to place elements correctly in the heap while sifting up","tag":"refentry","type":"Function","methodName":"compare"},{"id":"splpriorityqueue.count","name":"SplPriorityQueue::count","description":"Counts the number of elements in the queue","tag":"refentry","type":"Function","methodName":"count"},{"id":"splpriorityqueue.current","name":"SplPriorityQueue::current","description":"Return current node pointed by the iterator","tag":"refentry","type":"Function","methodName":"current"},{"id":"splpriorityqueue.extract","name":"SplPriorityQueue::extract","description":"Extracts a node from top of the heap and sift up","tag":"refentry","type":"Function","methodName":"extract"},{"id":"splpriorityqueue.getextractflags","name":"SplPriorityQueue::getExtractFlags","description":"Get the flags of extraction","tag":"refentry","type":"Function","methodName":"getExtractFlags"},{"id":"splpriorityqueue.insert","name":"SplPriorityQueue::insert","description":"Inserts an element in the queue by sifting it up","tag":"refentry","type":"Function","methodName":"insert"},{"id":"splpriorityqueue.iscorrupted","name":"SplPriorityQueue::isCorrupted","description":"Tells if the priority queue is in a corrupted state","tag":"refentry","type":"Function","methodName":"isCorrupted"},{"id":"splpriorityqueue.isempty","name":"SplPriorityQueue::isEmpty","description":"Checks whether the queue is empty","tag":"refentry","type":"Function","methodName":"isEmpty"},{"id":"splpriorityqueue.key","name":"SplPriorityQueue::key","description":"Return current node index","tag":"refentry","type":"Function","methodName":"key"},{"id":"splpriorityqueue.next","name":"SplPriorityQueue::next","description":"Move to the next node","tag":"refentry","type":"Function","methodName":"next"},{"id":"splpriorityqueue.recoverfromcorruption","name":"SplPriorityQueue::recoverFromCorruption","description":"Recover from the corrupted state and allow further actions on the queue","tag":"refentry","type":"Function","methodName":"recoverFromCorruption"},{"id":"splpriorityqueue.rewind","name":"SplPriorityQueue::rewind","description":"Rewind iterator back to the start (no-op)","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"splpriorityqueue.setextractflags","name":"SplPriorityQueue::setExtractFlags","description":"Sets the mode of extraction","tag":"refentry","type":"Function","methodName":"setExtractFlags"},{"id":"splpriorityqueue.top","name":"SplPriorityQueue::top","description":"Peeks at the node from the top of the queue","tag":"refentry","type":"Function","methodName":"top"},{"id":"splpriorityqueue.valid","name":"SplPriorityQueue::valid","description":"Check whether the queue contains more nodes","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.splpriorityqueue","name":"SplPriorityQueue","description":"The SplPriorityQueue class","tag":"phpdoc:classref","type":"Class","methodName":"SplPriorityQueue"},{"id":"splfixedarray.construct","name":"SplFixedArray::__construct","description":"Constructs a new fixed array","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"splfixedarray.count","name":"SplFixedArray::count","description":"Returns the size of the array","tag":"refentry","type":"Function","methodName":"count"},{"id":"splfixedarray.current","name":"SplFixedArray::current","description":"Return current array entry","tag":"refentry","type":"Function","methodName":"current"},{"id":"splfixedarray.fromarray","name":"SplFixedArray::fromArray","description":"Import a PHP array in a SplFixedArray instance","tag":"refentry","type":"Function","methodName":"fromArray"},{"id":"splfixedarray.getiterator","name":"SplFixedArray::getIterator","description":"Retrieve the iterator to go through the array","tag":"refentry","type":"Function","methodName":"getIterator"},{"id":"splfixedarray.getsize","name":"SplFixedArray::getSize","description":"Gets the size of the array","tag":"refentry","type":"Function","methodName":"getSize"},{"id":"splfixedarray.jsonserialize","name":"SplFixedArray::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"splfixedarray.key","name":"SplFixedArray::key","description":"Return current array index","tag":"refentry","type":"Function","methodName":"key"},{"id":"splfixedarray.next","name":"SplFixedArray::next","description":"Move to next entry","tag":"refentry","type":"Function","methodName":"next"},{"id":"splfixedarray.offsetexists","name":"SplFixedArray::offsetExists","description":"Returns whether the requested index exists","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"splfixedarray.offsetget","name":"SplFixedArray::offsetGet","description":"Returns the value at the specified index","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"splfixedarray.offsetset","name":"SplFixedArray::offsetSet","description":"Sets a new value at a specified index","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"splfixedarray.offsetunset","name":"SplFixedArray::offsetUnset","description":"Unsets the value at the specified $index","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"splfixedarray.rewind","name":"SplFixedArray::rewind","description":"Rewind iterator back to the start","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"splfixedarray.serialize","name":"SplFixedArray::__serialize","description":"Serializes the SplFixedArray object","tag":"refentry","type":"Function","methodName":"__serialize"},{"id":"splfixedarray.setsize","name":"SplFixedArray::setSize","description":"Change the size of an array","tag":"refentry","type":"Function","methodName":"setSize"},{"id":"splfixedarray.toarray","name":"SplFixedArray::toArray","description":"Returns a PHP array from the fixed array","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"splfixedarray.unserialize","name":"SplFixedArray::__unserialize","description":"Deserializes the data parameter into an SplFixedArray object","tag":"refentry","type":"Function","methodName":"__unserialize"},{"id":"splfixedarray.valid","name":"SplFixedArray::valid","description":"Check whether the array contains more elements","tag":"refentry","type":"Function","methodName":"valid"},{"id":"splfixedarray.wakeup","name":"SplFixedArray::__wakeup","description":"Reinitialises the array after being unserialised","tag":"refentry","type":"Function","methodName":"__wakeup"},{"id":"class.splfixedarray","name":"SplFixedArray","description":"The SplFixedArray class","tag":"phpdoc:classref","type":"Class","methodName":"SplFixedArray"},{"id":"arrayobject.append","name":"ArrayObject::append","description":"Appends the value","tag":"refentry","type":"Function","methodName":"append"},{"id":"arrayobject.asort","name":"ArrayObject::asort","description":"Sort the entries by value","tag":"refentry","type":"Function","methodName":"asort"},{"id":"arrayobject.construct","name":"ArrayObject::__construct","description":"Construct a new array object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"arrayobject.count","name":"ArrayObject::count","description":"Get the number of public properties in the ArrayObject","tag":"refentry","type":"Function","methodName":"count"},{"id":"arrayobject.exchangearray","name":"ArrayObject::exchangeArray","description":"Exchange the array for another one","tag":"refentry","type":"Function","methodName":"exchangeArray"},{"id":"arrayobject.getarraycopy","name":"ArrayObject::getArrayCopy","description":"Creates a copy of the ArrayObject","tag":"refentry","type":"Function","methodName":"getArrayCopy"},{"id":"arrayobject.getflags","name":"ArrayObject::getFlags","description":"Gets the behavior flags","tag":"refentry","type":"Function","methodName":"getFlags"},{"id":"arrayobject.getiterator","name":"ArrayObject::getIterator","description":"Create a new iterator from an ArrayObject instance","tag":"refentry","type":"Function","methodName":"getIterator"},{"id":"arrayobject.getiteratorclass","name":"ArrayObject::getIteratorClass","description":"Gets the iterator classname for the ArrayObject","tag":"refentry","type":"Function","methodName":"getIteratorClass"},{"id":"arrayobject.ksort","name":"ArrayObject::ksort","description":"Sort the entries by key","tag":"refentry","type":"Function","methodName":"ksort"},{"id":"arrayobject.natcasesort","name":"ArrayObject::natcasesort","description":"Sort an array using a case insensitive \"natural order\" algorithm","tag":"refentry","type":"Function","methodName":"natcasesort"},{"id":"arrayobject.natsort","name":"ArrayObject::natsort","description":"Sort entries using a \"natural order\" algorithm","tag":"refentry","type":"Function","methodName":"natsort"},{"id":"arrayobject.offsetexists","name":"ArrayObject::offsetExists","description":"Returns whether the requested index exists","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"arrayobject.offsetget","name":"ArrayObject::offsetGet","description":"Returns the value at the specified index","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"arrayobject.offsetset","name":"ArrayObject::offsetSet","description":"Sets the value at the specified index to newval","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"arrayobject.offsetunset","name":"ArrayObject::offsetUnset","description":"Unsets the value at the specified index","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"arrayobject.serialize","name":"ArrayObject::serialize","description":"Serialize an ArrayObject","tag":"refentry","type":"Function","methodName":"serialize"},{"id":"arrayobject.setflags","name":"ArrayObject::setFlags","description":"Sets the behavior flags","tag":"refentry","type":"Function","methodName":"setFlags"},{"id":"arrayobject.setiteratorclass","name":"ArrayObject::setIteratorClass","description":"Sets the iterator classname for the ArrayObject","tag":"refentry","type":"Function","methodName":"setIteratorClass"},{"id":"arrayobject.uasort","name":"ArrayObject::uasort","description":"Sort the entries with a user-defined comparison function and maintain key association","tag":"refentry","type":"Function","methodName":"uasort"},{"id":"arrayobject.uksort","name":"ArrayObject::uksort","description":"Sort the entries by keys using a user-defined comparison function","tag":"refentry","type":"Function","methodName":"uksort"},{"id":"arrayobject.unserialize","name":"ArrayObject::unserialize","description":"Unserialize an ArrayObject","tag":"refentry","type":"Function","methodName":"unserialize"},{"id":"class.arrayobject","name":"ArrayObject","description":"The ArrayObject class","tag":"phpdoc:classref","type":"Class","methodName":"ArrayObject"},{"id":"splobjectstorage.addall","name":"SplObjectStorage::addAll","description":"Adds all objects from another storage","tag":"refentry","type":"Function","methodName":"addAll"},{"id":"splobjectstorage.attach","name":"SplObjectStorage::attach","description":"Adds an object in the storage","tag":"refentry","type":"Function","methodName":"attach"},{"id":"splobjectstorage.contains","name":"SplObjectStorage::contains","description":"Checks if the storage contains a specific object","tag":"refentry","type":"Function","methodName":"contains"},{"id":"splobjectstorage.count","name":"SplObjectStorage::count","description":"Returns the number of objects in the storage","tag":"refentry","type":"Function","methodName":"count"},{"id":"splobjectstorage.current","name":"SplObjectStorage::current","description":"Returns the current storage entry","tag":"refentry","type":"Function","methodName":"current"},{"id":"splobjectstorage.detach","name":"SplObjectStorage::detach","description":"Removes an object from the storage","tag":"refentry","type":"Function","methodName":"detach"},{"id":"splobjectstorage.gethash","name":"SplObjectStorage::getHash","description":"Calculate a unique identifier for the contained objects","tag":"refentry","type":"Function","methodName":"getHash"},{"id":"splobjectstorage.getinfo","name":"SplObjectStorage::getInfo","description":"Returns the data associated with the current iterator entry","tag":"refentry","type":"Function","methodName":"getInfo"},{"id":"splobjectstorage.key","name":"SplObjectStorage::key","description":"Returns the index at which the iterator currently is","tag":"refentry","type":"Function","methodName":"key"},{"id":"splobjectstorage.next","name":"SplObjectStorage::next","description":"Move to the next entry","tag":"refentry","type":"Function","methodName":"next"},{"id":"splobjectstorage.offsetexists","name":"SplObjectStorage::offsetExists","description":"Checks whether an object exists in the storage","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"splobjectstorage.offsetget","name":"SplObjectStorage::offsetGet","description":"Returns the data associated with an object","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"splobjectstorage.offsetset","name":"SplObjectStorage::offsetSet","description":"Associates data to an object in the storage","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"splobjectstorage.offsetunset","name":"SplObjectStorage::offsetUnset","description":"Removes an object from the storage","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"splobjectstorage.removeall","name":"SplObjectStorage::removeAll","description":"Removes objects contained in another storage from the current storage","tag":"refentry","type":"Function","methodName":"removeAll"},{"id":"splobjectstorage.removeallexcept","name":"SplObjectStorage::removeAllExcept","description":"Removes all objects except for those contained in another storage from the current storage","tag":"refentry","type":"Function","methodName":"removeAllExcept"},{"id":"splobjectstorage.rewind","name":"SplObjectStorage::rewind","description":"Rewind the iterator to the first storage element","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"splobjectstorage.seek","name":"SplObjectStorage::seek","description":"Seeks iterator to a position","tag":"refentry","type":"Function","methodName":"seek"},{"id":"splobjectstorage.serialize","name":"SplObjectStorage::serialize","description":"Serializes the storage","tag":"refentry","type":"Function","methodName":"serialize"},{"id":"splobjectstorage.setinfo","name":"SplObjectStorage::setInfo","description":"Sets the data associated with the current iterator entry","tag":"refentry","type":"Function","methodName":"setInfo"},{"id":"splobjectstorage.unserialize","name":"SplObjectStorage::unserialize","description":"Unserializes a storage from its string representation","tag":"refentry","type":"Function","methodName":"unserialize"},{"id":"splobjectstorage.valid","name":"SplObjectStorage::valid","description":"Returns if the current iterator entry is valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.splobjectstorage","name":"SplObjectStorage","description":"The SplObjectStorage class","tag":"phpdoc:classref","type":"Class","methodName":"SplObjectStorage"},{"id":"spl.datastructures","name":"Datastructures","description":"Standard PHP Library (SPL)","tag":"part","type":"General","methodName":"Datastructures"},{"id":"class.badfunctioncallexception","name":"BadFunctionCallException","description":"The BadFunctionCallException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"BadFunctionCallException"},{"id":"class.badmethodcallexception","name":"BadMethodCallException","description":"The BadMethodCallException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"BadMethodCallException"},{"id":"class.domainexception","name":"DomainException","description":"The DomainException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"DomainException"},{"id":"class.invalidargumentexception","name":"InvalidArgumentException","description":"The InvalidArgumentException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"InvalidArgumentException"},{"id":"class.lengthexception","name":"LengthException","description":"The LengthException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"LengthException"},{"id":"class.logicexception","name":"LogicException","description":"The LogicException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"LogicException"},{"id":"class.outofboundsexception","name":"OutOfBoundsException","description":"The OutOfBoundsException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"OutOfBoundsException"},{"id":"class.outofrangeexception","name":"OutOfRangeException","description":"The OutOfRangeException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"OutOfRangeException"},{"id":"class.overflowexception","name":"OverflowException","description":"The OverflowException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"OverflowException"},{"id":"class.rangeexception","name":"RangeException","description":"The RangeException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"RangeException"},{"id":"class.runtimeexception","name":"RuntimeException","description":"The RuntimeException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"RuntimeException"},{"id":"class.underflowexception","name":"UnderflowException","description":"The UnderflowException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"UnderflowException"},{"id":"class.unexpectedvalueexception","name":"UnexpectedValueException","description":"The UnexpectedValueException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"UnexpectedValueException"},{"id":"spl.exceptions","name":"Exceptions","description":"Standard PHP Library (SPL)","tag":"part","type":"General","methodName":"Exceptions"},{"id":"appenditerator.append","name":"AppendIterator::append","description":"Appends an iterator","tag":"refentry","type":"Function","methodName":"append"},{"id":"appenditerator.construct","name":"AppendIterator::__construct","description":"Constructs an AppendIterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"appenditerator.current","name":"AppendIterator::current","description":"Gets the current value","tag":"refentry","type":"Function","methodName":"current"},{"id":"appenditerator.getarrayiterator","name":"AppendIterator::getArrayIterator","description":"Gets the ArrayIterator","tag":"refentry","type":"Function","methodName":"getArrayIterator"},{"id":"appenditerator.getiteratorindex","name":"AppendIterator::getIteratorIndex","description":"Gets an index of iterators","tag":"refentry","type":"Function","methodName":"getIteratorIndex"},{"id":"appenditerator.key","name":"AppendIterator::key","description":"Gets the current key","tag":"refentry","type":"Function","methodName":"key"},{"id":"appenditerator.next","name":"AppendIterator::next","description":"Moves to the next element","tag":"refentry","type":"Function","methodName":"next"},{"id":"appenditerator.rewind","name":"AppendIterator::rewind","description":"Rewinds the Iterator","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"appenditerator.valid","name":"AppendIterator::valid","description":"Checks validity of the current element","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.appenditerator","name":"AppendIterator","description":"The AppendIterator class","tag":"phpdoc:classref","type":"Class","methodName":"AppendIterator"},{"id":"arrayiterator.append","name":"ArrayIterator::append","description":"Append an element","tag":"refentry","type":"Function","methodName":"append"},{"id":"arrayiterator.asort","name":"ArrayIterator::asort","description":"Sort entries by values","tag":"refentry","type":"Function","methodName":"asort"},{"id":"arrayiterator.construct","name":"ArrayIterator::__construct","description":"Construct an ArrayIterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"arrayiterator.count","name":"ArrayIterator::count","description":"Count elements","tag":"refentry","type":"Function","methodName":"count"},{"id":"arrayiterator.current","name":"ArrayIterator::current","description":"Return current array entry","tag":"refentry","type":"Function","methodName":"current"},{"id":"arrayiterator.getarraycopy","name":"ArrayIterator::getArrayCopy","description":"Get array copy","tag":"refentry","type":"Function","methodName":"getArrayCopy"},{"id":"arrayiterator.getflags","name":"ArrayIterator::getFlags","description":"Get behavior flags","tag":"refentry","type":"Function","methodName":"getFlags"},{"id":"arrayiterator.key","name":"ArrayIterator::key","description":"Return current array key","tag":"refentry","type":"Function","methodName":"key"},{"id":"arrayiterator.ksort","name":"ArrayIterator::ksort","description":"Sort entries by keys","tag":"refentry","type":"Function","methodName":"ksort"},{"id":"arrayiterator.natcasesort","name":"ArrayIterator::natcasesort","description":"Sort entries naturally, case insensitive","tag":"refentry","type":"Function","methodName":"natcasesort"},{"id":"arrayiterator.natsort","name":"ArrayIterator::natsort","description":"Sort entries naturally","tag":"refentry","type":"Function","methodName":"natsort"},{"id":"arrayiterator.next","name":"ArrayIterator::next","description":"Move to next entry","tag":"refentry","type":"Function","methodName":"next"},{"id":"arrayiterator.offsetexists","name":"ArrayIterator::offsetExists","description":"Check if offset exists","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"arrayiterator.offsetget","name":"ArrayIterator::offsetGet","description":"Get value for an offset","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"arrayiterator.offsetset","name":"ArrayIterator::offsetSet","description":"Set value for an offset","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"arrayiterator.offsetunset","name":"ArrayIterator::offsetUnset","description":"Unset value for an offset","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"arrayiterator.rewind","name":"ArrayIterator::rewind","description":"Rewind array back to the start","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"arrayiterator.seek","name":"ArrayIterator::seek","description":"Seeks to a position","tag":"refentry","type":"Function","methodName":"seek"},{"id":"arrayiterator.serialize","name":"ArrayIterator::serialize","description":"Serialize","tag":"refentry","type":"Function","methodName":"serialize"},{"id":"arrayiterator.setflags","name":"ArrayIterator::setFlags","description":"Set behaviour flags","tag":"refentry","type":"Function","methodName":"setFlags"},{"id":"arrayiterator.uasort","name":"ArrayIterator::uasort","description":"Sort with a user-defined comparison function and maintain index association","tag":"refentry","type":"Function","methodName":"uasort"},{"id":"arrayiterator.uksort","name":"ArrayIterator::uksort","description":"Sort by keys using a user-defined comparison function","tag":"refentry","type":"Function","methodName":"uksort"},{"id":"arrayiterator.unserialize","name":"ArrayIterator::unserialize","description":"Unserialize","tag":"refentry","type":"Function","methodName":"unserialize"},{"id":"arrayiterator.valid","name":"ArrayIterator::valid","description":"Check whether array contains more entries","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.arrayiterator","name":"ArrayIterator","description":"The ArrayIterator class","tag":"phpdoc:classref","type":"Class","methodName":"ArrayIterator"},{"id":"cachingiterator.construct","name":"CachingIterator::__construct","description":"Construct a new CachingIterator object for the iterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"cachingiterator.count","name":"CachingIterator::count","description":"The number of elements in the iterator","tag":"refentry","type":"Function","methodName":"count"},{"id":"cachingiterator.current","name":"CachingIterator::current","description":"Return the current element","tag":"refentry","type":"Function","methodName":"current"},{"id":"cachingiterator.getcache","name":"CachingIterator::getCache","description":"Retrieve the contents of the cache","tag":"refentry","type":"Function","methodName":"getCache"},{"id":"cachingiterator.getflags","name":"CachingIterator::getFlags","description":"Get flags used","tag":"refentry","type":"Function","methodName":"getFlags"},{"id":"cachingiterator.hasnext","name":"CachingIterator::hasNext","description":"Check whether the inner iterator has a valid next element","tag":"refentry","type":"Function","methodName":"hasNext"},{"id":"cachingiterator.key","name":"CachingIterator::key","description":"Return the key for the current element","tag":"refentry","type":"Function","methodName":"key"},{"id":"cachingiterator.next","name":"CachingIterator::next","description":"Move the iterator forward","tag":"refentry","type":"Function","methodName":"next"},{"id":"cachingiterator.offsetexists","name":"CachingIterator::offsetExists","description":"The offsetExists purpose","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"cachingiterator.offsetget","name":"CachingIterator::offsetGet","description":"The offsetGet purpose","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"cachingiterator.offsetset","name":"CachingIterator::offsetSet","description":"The offsetSet purpose","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"cachingiterator.offsetunset","name":"CachingIterator::offsetUnset","description":"The offsetUnset purpose","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"cachingiterator.rewind","name":"CachingIterator::rewind","description":"Rewind the iterator","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"cachingiterator.setflags","name":"CachingIterator::setFlags","description":"The setFlags purpose","tag":"refentry","type":"Function","methodName":"setFlags"},{"id":"cachingiterator.tostring","name":"CachingIterator::__toString","description":"Return the string representation of the current element","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"cachingiterator.valid","name":"CachingIterator::valid","description":"Check whether the current element is valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.cachingiterator","name":"CachingIterator","description":"The CachingIterator class","tag":"phpdoc:classref","type":"Class","methodName":"CachingIterator"},{"id":"callbackfilteriterator.accept","name":"CallbackFilterIterator::accept","description":"Calls the callback with the current value, the current key and the inner iterator as arguments","tag":"refentry","type":"Function","methodName":"accept"},{"id":"callbackfilteriterator.construct","name":"CallbackFilterIterator::__construct","description":"Create a filtered iterator from another iterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.callbackfilteriterator","name":"CallbackFilterIterator","description":"The CallbackFilterIterator class","tag":"phpdoc:classref","type":"Class","methodName":"CallbackFilterIterator"},{"id":"directoryiterator.construct","name":"DirectoryIterator::__construct","description":"Constructs a new directory iterator from a path","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"directoryiterator.current","name":"DirectoryIterator::current","description":"Return the current DirectoryIterator item","tag":"refentry","type":"Function","methodName":"current"},{"id":"directoryiterator.getbasename","name":"DirectoryIterator::getBasename","description":"Get base name of current DirectoryIterator item","tag":"refentry","type":"Function","methodName":"getBasename"},{"id":"directoryiterator.getextension","name":"DirectoryIterator::getExtension","description":"Gets the file extension","tag":"refentry","type":"Function","methodName":"getExtension"},{"id":"directoryiterator.getfilename","name":"DirectoryIterator::getFilename","description":"Return file name of current DirectoryIterator item","tag":"refentry","type":"Function","methodName":"getFilename"},{"id":"directoryiterator.isdot","name":"DirectoryIterator::isDot","description":"Determine if current DirectoryIterator item is '.' or '..'","tag":"refentry","type":"Function","methodName":"isDot"},{"id":"directoryiterator.key","name":"DirectoryIterator::key","description":"Return the key for the current DirectoryIterator item","tag":"refentry","type":"Function","methodName":"key"},{"id":"directoryiterator.next","name":"DirectoryIterator::next","description":"Move forward to next DirectoryIterator item","tag":"refentry","type":"Function","methodName":"next"},{"id":"directoryiterator.rewind","name":"DirectoryIterator::rewind","description":"Rewind the DirectoryIterator back to the start","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"directoryiterator.seek","name":"DirectoryIterator::seek","description":"Seek to a DirectoryIterator item","tag":"refentry","type":"Function","methodName":"seek"},{"id":"directoryiterator.tostring","name":"DirectoryIterator::__toString","description":"Get file name as a string","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"directoryiterator.valid","name":"DirectoryIterator::valid","description":"Check whether current DirectoryIterator position is a valid file","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.directoryiterator","name":"DirectoryIterator","description":"The DirectoryIterator class","tag":"phpdoc:classref","type":"Class","methodName":"DirectoryIterator"},{"id":"emptyiterator.current","name":"EmptyIterator::current","description":"The current() method","tag":"refentry","type":"Function","methodName":"current"},{"id":"emptyiterator.key","name":"EmptyIterator::key","description":"The key() method","tag":"refentry","type":"Function","methodName":"key"},{"id":"emptyiterator.next","name":"EmptyIterator::next","description":"The next() method","tag":"refentry","type":"Function","methodName":"next"},{"id":"emptyiterator.rewind","name":"EmptyIterator::rewind","description":"The rewind() method","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"emptyiterator.valid","name":"EmptyIterator::valid","description":"Checks whether the current element is valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.emptyiterator","name":"EmptyIterator","description":"The EmptyIterator class","tag":"phpdoc:classref","type":"Class","methodName":"EmptyIterator"},{"id":"filesystemiterator.construct","name":"FilesystemIterator::__construct","description":"Constructs a new filesystem iterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"filesystemiterator.current","name":"FilesystemIterator::current","description":"The current file","tag":"refentry","type":"Function","methodName":"current"},{"id":"filesystemiterator.getflags","name":"FilesystemIterator::getFlags","description":"Get the handling flags","tag":"refentry","type":"Function","methodName":"getFlags"},{"id":"filesystemiterator.key","name":"FilesystemIterator::key","description":"Retrieve the key for the current file","tag":"refentry","type":"Function","methodName":"key"},{"id":"filesystemiterator.next","name":"FilesystemIterator::next","description":"Move to the next file","tag":"refentry","type":"Function","methodName":"next"},{"id":"filesystemiterator.rewind","name":"FilesystemIterator::rewind","description":"Rewinds back to the beginning","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"filesystemiterator.setflags","name":"FilesystemIterator::setFlags","description":"Sets handling flags","tag":"refentry","type":"Function","methodName":"setFlags"},{"id":"class.filesystemiterator","name":"FilesystemIterator","description":"The FilesystemIterator class","tag":"phpdoc:classref","type":"Class","methodName":"FilesystemIterator"},{"id":"filteriterator.accept","name":"FilterIterator::accept","description":"Check whether the current element of the iterator is acceptable","tag":"refentry","type":"Function","methodName":"accept"},{"id":"filteriterator.construct","name":"FilterIterator::__construct","description":"Construct a filterIterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"filteriterator.current","name":"FilterIterator::current","description":"Get the current element value","tag":"refentry","type":"Function","methodName":"current"},{"id":"filteriterator.key","name":"FilterIterator::key","description":"Get the current key","tag":"refentry","type":"Function","methodName":"key"},{"id":"filteriterator.next","name":"FilterIterator::next","description":"Move the iterator forward","tag":"refentry","type":"Function","methodName":"next"},{"id":"filteriterator.rewind","name":"FilterIterator::rewind","description":"Rewind the iterator","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"filteriterator.valid","name":"FilterIterator::valid","description":"Check whether the current element is valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.filteriterator","name":"FilterIterator","description":"The FilterIterator class","tag":"phpdoc:classref","type":"Class","methodName":"FilterIterator"},{"id":"globiterator.construct","name":"GlobIterator::__construct","description":"Construct a directory using glob","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"globiterator.count","name":"GlobIterator::count","description":"Get the number of directories and files","tag":"refentry","type":"Function","methodName":"count"},{"id":"class.globiterator","name":"GlobIterator","description":"The GlobIterator class","tag":"phpdoc:classref","type":"Class","methodName":"GlobIterator"},{"id":"infiniteiterator.construct","name":"InfiniteIterator::__construct","description":"Constructs an InfiniteIterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"infiniteiterator.next","name":"InfiniteIterator::next","description":"Moves the inner Iterator forward or rewinds it","tag":"refentry","type":"Function","methodName":"next"},{"id":"class.infiniteiterator","name":"InfiniteIterator","description":"The InfiniteIterator class","tag":"phpdoc:classref","type":"Class","methodName":"InfiniteIterator"},{"id":"iteratoriterator.construct","name":"IteratorIterator::__construct","description":"Create an iterator from anything that is traversable","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"iteratoriterator.current","name":"IteratorIterator::current","description":"Get the current value","tag":"refentry","type":"Function","methodName":"current"},{"id":"iteratoriterator.getinneriterator","name":"IteratorIterator::getInnerIterator","description":"Get the inner iterator","tag":"refentry","type":"Function","methodName":"getInnerIterator"},{"id":"iteratoriterator.key","name":"IteratorIterator::key","description":"Get the key of the current element","tag":"refentry","type":"Function","methodName":"key"},{"id":"iteratoriterator.next","name":"IteratorIterator::next","description":"Forward to the next element","tag":"refentry","type":"Function","methodName":"next"},{"id":"iteratoriterator.rewind","name":"IteratorIterator::rewind","description":"Rewind to the first element","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"iteratoriterator.valid","name":"IteratorIterator::valid","description":"Checks if the current element is valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.iteratoriterator","name":"IteratorIterator","description":"The IteratorIterator class","tag":"phpdoc:classref","type":"Class","methodName":"IteratorIterator"},{"id":"limititerator.construct","name":"LimitIterator::__construct","description":"Construct a LimitIterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"limititerator.current","name":"LimitIterator::current","description":"Get current element","tag":"refentry","type":"Function","methodName":"current"},{"id":"limititerator.getposition","name":"LimitIterator::getPosition","description":"Return the current position","tag":"refentry","type":"Function","methodName":"getPosition"},{"id":"limititerator.key","name":"LimitIterator::key","description":"Get current key","tag":"refentry","type":"Function","methodName":"key"},{"id":"limititerator.next","name":"LimitIterator::next","description":"Move the iterator forward","tag":"refentry","type":"Function","methodName":"next"},{"id":"limititerator.rewind","name":"LimitIterator::rewind","description":"Rewind the iterator to the specified starting offset","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"limititerator.seek","name":"LimitIterator::seek","description":"Seek to the given position","tag":"refentry","type":"Function","methodName":"seek"},{"id":"limititerator.valid","name":"LimitIterator::valid","description":"Check whether the current element is valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.limititerator","name":"LimitIterator","description":"The LimitIterator class","tag":"phpdoc:classref","type":"Class","methodName":"LimitIterator"},{"id":"multipleiterator.attachiterator","name":"MultipleIterator::attachIterator","description":"Attaches iterator information","tag":"refentry","type":"Function","methodName":"attachIterator"},{"id":"multipleiterator.construct","name":"MultipleIterator::__construct","description":"Constructs a new MultipleIterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"multipleiterator.containsiterator","name":"MultipleIterator::containsIterator","description":"Checks if an iterator is attached","tag":"refentry","type":"Function","methodName":"containsIterator"},{"id":"multipleiterator.countiterators","name":"MultipleIterator::countIterators","description":"Gets the number of attached iterator instances","tag":"refentry","type":"Function","methodName":"countIterators"},{"id":"multipleiterator.current","name":"MultipleIterator::current","description":"Gets the registered iterator instances","tag":"refentry","type":"Function","methodName":"current"},{"id":"multipleiterator.detachiterator","name":"MultipleIterator::detachIterator","description":"Detaches an iterator","tag":"refentry","type":"Function","methodName":"detachIterator"},{"id":"multipleiterator.getflags","name":"MultipleIterator::getFlags","description":"Gets the flag information","tag":"refentry","type":"Function","methodName":"getFlags"},{"id":"multipleiterator.key","name":"MultipleIterator::key","description":"Gets the registered iterator instances","tag":"refentry","type":"Function","methodName":"key"},{"id":"multipleiterator.next","name":"MultipleIterator::next","description":"Moves all attached iterator instances forward","tag":"refentry","type":"Function","methodName":"next"},{"id":"multipleiterator.rewind","name":"MultipleIterator::rewind","description":"Rewinds all attached iterator instances","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"multipleiterator.setflags","name":"MultipleIterator::setFlags","description":"Sets flags","tag":"refentry","type":"Function","methodName":"setFlags"},{"id":"multipleiterator.valid","name":"MultipleIterator::valid","description":"Checks the validity of sub iterators","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.multipleiterator","name":"MultipleIterator","description":"The MultipleIterator class","tag":"phpdoc:classref","type":"Class","methodName":"MultipleIterator"},{"id":"norewinditerator.construct","name":"NoRewindIterator::__construct","description":"Construct a NoRewindIterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"norewinditerator.current","name":"NoRewindIterator::current","description":"Get the current value","tag":"refentry","type":"Function","methodName":"current"},{"id":"norewinditerator.key","name":"NoRewindIterator::key","description":"Get the current key","tag":"refentry","type":"Function","methodName":"key"},{"id":"norewinditerator.next","name":"NoRewindIterator::next","description":"Forward to the next element","tag":"refentry","type":"Function","methodName":"next"},{"id":"norewinditerator.rewind","name":"NoRewindIterator::rewind","description":"Prevents the rewind operation on the inner iterator","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"norewinditerator.valid","name":"NoRewindIterator::valid","description":"Validates the iterator","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.norewinditerator","name":"NoRewindIterator","description":"The NoRewindIterator class","tag":"phpdoc:classref","type":"Class","methodName":"NoRewindIterator"},{"id":"parentiterator.accept","name":"ParentIterator::accept","description":"Determines acceptability","tag":"refentry","type":"Function","methodName":"accept"},{"id":"parentiterator.construct","name":"ParentIterator::__construct","description":"Constructs a ParentIterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"parentiterator.getchildren","name":"ParentIterator::getChildren","description":"Return the inner iterator's children contained in a ParentIterator","tag":"refentry","type":"Function","methodName":"getChildren"},{"id":"parentiterator.haschildren","name":"ParentIterator::hasChildren","description":"Check whether the inner iterator's current element has children","tag":"refentry","type":"Function","methodName":"hasChildren"},{"id":"parentiterator.next","name":"ParentIterator::next","description":"Move the iterator forward","tag":"refentry","type":"Function","methodName":"next"},{"id":"parentiterator.rewind","name":"ParentIterator::rewind","description":"Rewind the iterator","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"class.parentiterator","name":"ParentIterator","description":"The ParentIterator class","tag":"phpdoc:classref","type":"Class","methodName":"ParentIterator"},{"id":"recursivearrayiterator.getchildren","name":"RecursiveArrayIterator::getChildren","description":"Returns an iterator for the current entry if it is an array or an object","tag":"refentry","type":"Function","methodName":"getChildren"},{"id":"recursivearrayiterator.haschildren","name":"RecursiveArrayIterator::hasChildren","description":"Returns whether current entry is an array or an object","tag":"refentry","type":"Function","methodName":"hasChildren"},{"id":"class.recursivearrayiterator","name":"RecursiveArrayIterator","description":"The RecursiveArrayIterator class","tag":"phpdoc:classref","type":"Class","methodName":"RecursiveArrayIterator"},{"id":"recursivecachingiterator.construct","name":"RecursiveCachingIterator::__construct","description":"Construct","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"recursivecachingiterator.getchildren","name":"RecursiveCachingIterator::getChildren","description":"Return the inner iterator's children as a RecursiveCachingIterator","tag":"refentry","type":"Function","methodName":"getChildren"},{"id":"recursivecachingiterator.haschildren","name":"RecursiveCachingIterator::hasChildren","description":"Check whether the current element of the inner iterator has children","tag":"refentry","type":"Function","methodName":"hasChildren"},{"id":"class.recursivecachingiterator","name":"RecursiveCachingIterator","description":"The RecursiveCachingIterator class","tag":"phpdoc:classref","type":"Class","methodName":"RecursiveCachingIterator"},{"id":"recursivecallbackfilteriterator.construct","name":"RecursiveCallbackFilterIterator::__construct","description":"Create a RecursiveCallbackFilterIterator from a RecursiveIterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"recursivecallbackfilteriterator.getchildren","name":"RecursiveCallbackFilterIterator::getChildren","description":"Return the inner iterator's children contained in a RecursiveCallbackFilterIterator","tag":"refentry","type":"Function","methodName":"getChildren"},{"id":"recursivecallbackfilteriterator.haschildren","name":"RecursiveCallbackFilterIterator::hasChildren","description":"Check whether the inner iterator's current element has children","tag":"refentry","type":"Function","methodName":"hasChildren"},{"id":"class.recursivecallbackfilteriterator","name":"RecursiveCallbackFilterIterator","description":"The RecursiveCallbackFilterIterator class","tag":"phpdoc:classref","type":"Class","methodName":"RecursiveCallbackFilterIterator"},{"id":"recursivedirectoryiterator.construct","name":"RecursiveDirectoryIterator::__construct","description":"Constructs a RecursiveDirectoryIterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"recursivedirectoryiterator.getchildren","name":"RecursiveDirectoryIterator::getChildren","description":"Returns an iterator for the current entry if it is a directory","tag":"refentry","type":"Function","methodName":"getChildren"},{"id":"recursivedirectoryiterator.getsubpath","name":"RecursiveDirectoryIterator::getSubPath","description":"Get sub path","tag":"refentry","type":"Function","methodName":"getSubPath"},{"id":"recursivedirectoryiterator.getsubpathname","name":"RecursiveDirectoryIterator::getSubPathname","description":"Get sub path and name","tag":"refentry","type":"Function","methodName":"getSubPathname"},{"id":"recursivedirectoryiterator.haschildren","name":"RecursiveDirectoryIterator::hasChildren","description":"Returns whether current entry is a directory and not '.' or '..'","tag":"refentry","type":"Function","methodName":"hasChildren"},{"id":"recursivedirectoryiterator.key","name":"RecursiveDirectoryIterator::key","description":"Return path and filename of current dir entry","tag":"refentry","type":"Function","methodName":"key"},{"id":"recursivedirectoryiterator.next","name":"RecursiveDirectoryIterator::next","description":"Move to next entry","tag":"refentry","type":"Function","methodName":"next"},{"id":"recursivedirectoryiterator.rewind","name":"RecursiveDirectoryIterator::rewind","description":"Rewind dir back to the start","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"class.recursivedirectoryiterator","name":"RecursiveDirectoryIterator","description":"The RecursiveDirectoryIterator class","tag":"phpdoc:classref","type":"Class","methodName":"RecursiveDirectoryIterator"},{"id":"recursivefilteriterator.construct","name":"RecursiveFilterIterator::__construct","description":"Create a RecursiveFilterIterator from a RecursiveIterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"recursivefilteriterator.getchildren","name":"RecursiveFilterIterator::getChildren","description":"Return the inner iterator's children contained in a RecursiveFilterIterator","tag":"refentry","type":"Function","methodName":"getChildren"},{"id":"recursivefilteriterator.haschildren","name":"RecursiveFilterIterator::hasChildren","description":"Check whether the inner iterator's current element has children","tag":"refentry","type":"Function","methodName":"hasChildren"},{"id":"class.recursivefilteriterator","name":"RecursiveFilterIterator","description":"The RecursiveFilterIterator class","tag":"phpdoc:classref","type":"Class","methodName":"RecursiveFilterIterator"},{"id":"recursiveiteratoriterator.beginchildren","name":"RecursiveIteratorIterator::beginChildren","description":"Begin children","tag":"refentry","type":"Function","methodName":"beginChildren"},{"id":"recursiveiteratoriterator.beginiteration","name":"RecursiveIteratorIterator::beginIteration","description":"Begin Iteration","tag":"refentry","type":"Function","methodName":"beginIteration"},{"id":"recursiveiteratoriterator.callgetchildren","name":"RecursiveIteratorIterator::callGetChildren","description":"Get children","tag":"refentry","type":"Function","methodName":"callGetChildren"},{"id":"recursiveiteratoriterator.callhaschildren","name":"RecursiveIteratorIterator::callHasChildren","description":"Has children","tag":"refentry","type":"Function","methodName":"callHasChildren"},{"id":"recursiveiteratoriterator.construct","name":"RecursiveIteratorIterator::__construct","description":"Construct a RecursiveIteratorIterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"recursiveiteratoriterator.current","name":"RecursiveIteratorIterator::current","description":"Access the current element value","tag":"refentry","type":"Function","methodName":"current"},{"id":"recursiveiteratoriterator.endchildren","name":"RecursiveIteratorIterator::endChildren","description":"End children","tag":"refentry","type":"Function","methodName":"endChildren"},{"id":"recursiveiteratoriterator.enditeration","name":"RecursiveIteratorIterator::endIteration","description":"End Iteration","tag":"refentry","type":"Function","methodName":"endIteration"},{"id":"recursiveiteratoriterator.getdepth","name":"RecursiveIteratorIterator::getDepth","description":"Get the current depth of the recursive iteration","tag":"refentry","type":"Function","methodName":"getDepth"},{"id":"recursiveiteratoriterator.getinneriterator","name":"RecursiveIteratorIterator::getInnerIterator","description":"Get inner iterator","tag":"refentry","type":"Function","methodName":"getInnerIterator"},{"id":"recursiveiteratoriterator.getmaxdepth","name":"RecursiveIteratorIterator::getMaxDepth","description":"Get max depth","tag":"refentry","type":"Function","methodName":"getMaxDepth"},{"id":"recursiveiteratoriterator.getsubiterator","name":"RecursiveIteratorIterator::getSubIterator","description":"The current active sub iterator","tag":"refentry","type":"Function","methodName":"getSubIterator"},{"id":"recursiveiteratoriterator.key","name":"RecursiveIteratorIterator::key","description":"Access the current key","tag":"refentry","type":"Function","methodName":"key"},{"id":"recursiveiteratoriterator.next","name":"RecursiveIteratorIterator::next","description":"Move forward to the next element","tag":"refentry","type":"Function","methodName":"next"},{"id":"recursiveiteratoriterator.nextelement","name":"RecursiveIteratorIterator::nextElement","description":"Next element","tag":"refentry","type":"Function","methodName":"nextElement"},{"id":"recursiveiteratoriterator.rewind","name":"RecursiveIteratorIterator::rewind","description":"Rewind the iterator to the first element of the top level inner iterator","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"recursiveiteratoriterator.setmaxdepth","name":"RecursiveIteratorIterator::setMaxDepth","description":"Set max depth","tag":"refentry","type":"Function","methodName":"setMaxDepth"},{"id":"recursiveiteratoriterator.valid","name":"RecursiveIteratorIterator::valid","description":"Check whether the current position is valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.recursiveiteratoriterator","name":"RecursiveIteratorIterator","description":"The RecursiveIteratorIterator class","tag":"phpdoc:classref","type":"Class","methodName":"RecursiveIteratorIterator"},{"id":"recursiveregexiterator.construct","name":"RecursiveRegexIterator::__construct","description":"Creates a new RecursiveRegexIterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"recursiveregexiterator.getchildren","name":"RecursiveRegexIterator::getChildren","description":"Returns an iterator for the current entry","tag":"refentry","type":"Function","methodName":"getChildren"},{"id":"recursiveregexiterator.haschildren","name":"RecursiveRegexIterator::hasChildren","description":"Returns whether an iterator can be obtained for the current entry","tag":"refentry","type":"Function","methodName":"hasChildren"},{"id":"class.recursiveregexiterator","name":"RecursiveRegexIterator","description":"The RecursiveRegexIterator class","tag":"phpdoc:classref","type":"Class","methodName":"RecursiveRegexIterator"},{"id":"recursivetreeiterator.beginchildren","name":"RecursiveTreeIterator::beginChildren","description":"Begin children","tag":"refentry","type":"Function","methodName":"beginChildren"},{"id":"recursivetreeiterator.beginiteration","name":"RecursiveTreeIterator::beginIteration","description":"Begin iteration","tag":"refentry","type":"Function","methodName":"beginIteration"},{"id":"recursivetreeiterator.callgetchildren","name":"RecursiveTreeIterator::callGetChildren","description":"Get children","tag":"refentry","type":"Function","methodName":"callGetChildren"},{"id":"recursivetreeiterator.callhaschildren","name":"RecursiveTreeIterator::callHasChildren","description":"Has children","tag":"refentry","type":"Function","methodName":"callHasChildren"},{"id":"recursivetreeiterator.construct","name":"RecursiveTreeIterator::__construct","description":"Construct a RecursiveTreeIterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"recursivetreeiterator.current","name":"RecursiveTreeIterator::current","description":"Get current element","tag":"refentry","type":"Function","methodName":"current"},{"id":"recursivetreeiterator.endchildren","name":"RecursiveTreeIterator::endChildren","description":"End children","tag":"refentry","type":"Function","methodName":"endChildren"},{"id":"recursivetreeiterator.enditeration","name":"RecursiveTreeIterator::endIteration","description":"End iteration","tag":"refentry","type":"Function","methodName":"endIteration"},{"id":"recursivetreeiterator.getentry","name":"RecursiveTreeIterator::getEntry","description":"Get current entry","tag":"refentry","type":"Function","methodName":"getEntry"},{"id":"recursivetreeiterator.getpostfix","name":"RecursiveTreeIterator::getPostfix","description":"Get the postfix","tag":"refentry","type":"Function","methodName":"getPostfix"},{"id":"recursivetreeiterator.getprefix","name":"RecursiveTreeIterator::getPrefix","description":"Get the prefix","tag":"refentry","type":"Function","methodName":"getPrefix"},{"id":"recursivetreeiterator.key","name":"RecursiveTreeIterator::key","description":"Get the key of the current element","tag":"refentry","type":"Function","methodName":"key"},{"id":"recursivetreeiterator.next","name":"RecursiveTreeIterator::next","description":"Move to next element","tag":"refentry","type":"Function","methodName":"next"},{"id":"recursivetreeiterator.nextelement","name":"RecursiveTreeIterator::nextElement","description":"Next element","tag":"refentry","type":"Function","methodName":"nextElement"},{"id":"recursivetreeiterator.rewind","name":"RecursiveTreeIterator::rewind","description":"Rewind iterator","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"recursivetreeiterator.setpostfix","name":"RecursiveTreeIterator::setPostfix","description":"Set postfix","tag":"refentry","type":"Function","methodName":"setPostfix"},{"id":"recursivetreeiterator.setprefixpart","name":"RecursiveTreeIterator::setPrefixPart","description":"Set a part of the prefix","tag":"refentry","type":"Function","methodName":"setPrefixPart"},{"id":"recursivetreeiterator.valid","name":"RecursiveTreeIterator::valid","description":"Check validity","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.recursivetreeiterator","name":"RecursiveTreeIterator","description":"The RecursiveTreeIterator class","tag":"phpdoc:classref","type":"Class","methodName":"RecursiveTreeIterator"},{"id":"regexiterator.accept","name":"RegexIterator::accept","description":"Get accept status","tag":"refentry","type":"Function","methodName":"accept"},{"id":"regexiterator.construct","name":"RegexIterator::__construct","description":"Create a new RegexIterator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"regexiterator.getflags","name":"RegexIterator::getFlags","description":"Get flags","tag":"refentry","type":"Function","methodName":"getFlags"},{"id":"regexiterator.getmode","name":"RegexIterator::getMode","description":"Returns operation mode","tag":"refentry","type":"Function","methodName":"getMode"},{"id":"regexiterator.getpregflags","name":"RegexIterator::getPregFlags","description":"Returns the regular expression flags","tag":"refentry","type":"Function","methodName":"getPregFlags"},{"id":"regexiterator.getregex","name":"RegexIterator::getRegex","description":"Returns current regular expression","tag":"refentry","type":"Function","methodName":"getRegex"},{"id":"regexiterator.setflags","name":"RegexIterator::setFlags","description":"Sets the flags","tag":"refentry","type":"Function","methodName":"setFlags"},{"id":"regexiterator.setmode","name":"RegexIterator::setMode","description":"Sets the operation mode","tag":"refentry","type":"Function","methodName":"setMode"},{"id":"regexiterator.setpregflags","name":"RegexIterator::setPregFlags","description":"Sets the regular expression flags","tag":"refentry","type":"Function","methodName":"setPregFlags"},{"id":"class.regexiterator","name":"RegexIterator","description":"The RegexIterator class","tag":"phpdoc:classref","type":"Class","methodName":"RegexIterator"},{"id":"spl.iterators","name":"Iterators","description":"Standard PHP Library (SPL)","tag":"part","type":"General","methodName":"Iterators"},{"id":"splfileinfo.construct","name":"SplFileInfo::__construct","description":"Construct a new SplFileInfo object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"splfileinfo.getatime","name":"SplFileInfo::getATime","description":"Gets last access time of the file","tag":"refentry","type":"Function","methodName":"getATime"},{"id":"splfileinfo.getbasename","name":"SplFileInfo::getBasename","description":"Gets the base name of the file","tag":"refentry","type":"Function","methodName":"getBasename"},{"id":"splfileinfo.getctime","name":"SplFileInfo::getCTime","description":"Gets the inode change time","tag":"refentry","type":"Function","methodName":"getCTime"},{"id":"splfileinfo.getextension","name":"SplFileInfo::getExtension","description":"Gets the file extension","tag":"refentry","type":"Function","methodName":"getExtension"},{"id":"splfileinfo.getfileinfo","name":"SplFileInfo::getFileInfo","description":"Gets an SplFileInfo object for the file","tag":"refentry","type":"Function","methodName":"getFileInfo"},{"id":"splfileinfo.getfilename","name":"SplFileInfo::getFilename","description":"Gets the filename","tag":"refentry","type":"Function","methodName":"getFilename"},{"id":"splfileinfo.getgroup","name":"SplFileInfo::getGroup","description":"Gets the file group","tag":"refentry","type":"Function","methodName":"getGroup"},{"id":"splfileinfo.getinode","name":"SplFileInfo::getInode","description":"Gets the inode for the file","tag":"refentry","type":"Function","methodName":"getInode"},{"id":"splfileinfo.getlinktarget","name":"SplFileInfo::getLinkTarget","description":"Gets the target of a link","tag":"refentry","type":"Function","methodName":"getLinkTarget"},{"id":"splfileinfo.getmtime","name":"SplFileInfo::getMTime","description":"Gets the last modified time","tag":"refentry","type":"Function","methodName":"getMTime"},{"id":"splfileinfo.getowner","name":"SplFileInfo::getOwner","description":"Gets the owner of the file","tag":"refentry","type":"Function","methodName":"getOwner"},{"id":"splfileinfo.getpath","name":"SplFileInfo::getPath","description":"Gets the path without filename","tag":"refentry","type":"Function","methodName":"getPath"},{"id":"splfileinfo.getpathinfo","name":"SplFileInfo::getPathInfo","description":"Gets an SplFileInfo object for the path","tag":"refentry","type":"Function","methodName":"getPathInfo"},{"id":"splfileinfo.getpathname","name":"SplFileInfo::getPathname","description":"Gets the path to the file","tag":"refentry","type":"Function","methodName":"getPathname"},{"id":"splfileinfo.getperms","name":"SplFileInfo::getPerms","description":"Gets file permissions","tag":"refentry","type":"Function","methodName":"getPerms"},{"id":"splfileinfo.getrealpath","name":"SplFileInfo::getRealPath","description":"Gets absolute path to file","tag":"refentry","type":"Function","methodName":"getRealPath"},{"id":"splfileinfo.getsize","name":"SplFileInfo::getSize","description":"Gets file size","tag":"refentry","type":"Function","methodName":"getSize"},{"id":"splfileinfo.gettype","name":"SplFileInfo::getType","description":"Gets file type","tag":"refentry","type":"Function","methodName":"getType"},{"id":"splfileinfo.isdir","name":"SplFileInfo::isDir","description":"Tells if the file is a directory","tag":"refentry","type":"Function","methodName":"isDir"},{"id":"splfileinfo.isexecutable","name":"SplFileInfo::isExecutable","description":"Tells if the file is executable","tag":"refentry","type":"Function","methodName":"isExecutable"},{"id":"splfileinfo.isfile","name":"SplFileInfo::isFile","description":"Tells if the object references a regular file","tag":"refentry","type":"Function","methodName":"isFile"},{"id":"splfileinfo.islink","name":"SplFileInfo::isLink","description":"Tells if the file is a link","tag":"refentry","type":"Function","methodName":"isLink"},{"id":"splfileinfo.isreadable","name":"SplFileInfo::isReadable","description":"Tells if file is readable","tag":"refentry","type":"Function","methodName":"isReadable"},{"id":"splfileinfo.iswritable","name":"SplFileInfo::isWritable","description":"Tells if the entry is writable","tag":"refentry","type":"Function","methodName":"isWritable"},{"id":"splfileinfo.openfile","name":"SplFileInfo::openFile","description":"Gets an SplFileObject object for the file","tag":"refentry","type":"Function","methodName":"openFile"},{"id":"splfileinfo.setfileclass","name":"SplFileInfo::setFileClass","description":"Sets the class used with SplFileInfo::openFile","tag":"refentry","type":"Function","methodName":"setFileClass"},{"id":"splfileinfo.setinfoclass","name":"SplFileInfo::setInfoClass","description":"Sets the class used with SplFileInfo::getFileInfo and SplFileInfo::getPathInfo","tag":"refentry","type":"Function","methodName":"setInfoClass"},{"id":"splfileinfo.tostring","name":"SplFileInfo::__toString","description":"Returns the path to the file as a string","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.splfileinfo","name":"SplFileInfo","description":"The SplFileInfo class","tag":"phpdoc:classref","type":"Class","methodName":"SplFileInfo"},{"id":"splfileobject.construct","name":"SplFileObject::__construct","description":"Construct a new file object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"splfileobject.current","name":"SplFileObject::current","description":"Retrieve current line of file","tag":"refentry","type":"Function","methodName":"current"},{"id":"splfileobject.eof","name":"SplFileObject::eof","description":"Reached end of file","tag":"refentry","type":"Function","methodName":"eof"},{"id":"splfileobject.fflush","name":"SplFileObject::fflush","description":"Flushes the output to the file","tag":"refentry","type":"Function","methodName":"fflush"},{"id":"splfileobject.fgetc","name":"SplFileObject::fgetc","description":"Gets character from file","tag":"refentry","type":"Function","methodName":"fgetc"},{"id":"splfileobject.fgetcsv","name":"SplFileObject::fgetcsv","description":"Gets line from file and parse as CSV fields","tag":"refentry","type":"Function","methodName":"fgetcsv"},{"id":"splfileobject.fgets","name":"SplFileObject::fgets","description":"Gets line from file","tag":"refentry","type":"Function","methodName":"fgets"},{"id":"splfileobject.fgetss","name":"SplFileObject::fgetss","description":"Gets line from file and strip HTML tags","tag":"refentry","type":"Function","methodName":"fgetss"},{"id":"splfileobject.flock","name":"SplFileObject::flock","description":"Portable file locking","tag":"refentry","type":"Function","methodName":"flock"},{"id":"splfileobject.fpassthru","name":"SplFileObject::fpassthru","description":"Output all remaining data on a file pointer","tag":"refentry","type":"Function","methodName":"fpassthru"},{"id":"splfileobject.fputcsv","name":"SplFileObject::fputcsv","description":"Write a field array as a CSV line","tag":"refentry","type":"Function","methodName":"fputcsv"},{"id":"splfileobject.fread","name":"SplFileObject::fread","description":"Read from file","tag":"refentry","type":"Function","methodName":"fread"},{"id":"splfileobject.fscanf","name":"SplFileObject::fscanf","description":"Parses input from file according to a format","tag":"refentry","type":"Function","methodName":"fscanf"},{"id":"splfileobject.fseek","name":"SplFileObject::fseek","description":"Seek to a position","tag":"refentry","type":"Function","methodName":"fseek"},{"id":"splfileobject.fstat","name":"SplFileObject::fstat","description":"Gets information about the file","tag":"refentry","type":"Function","methodName":"fstat"},{"id":"splfileobject.ftell","name":"SplFileObject::ftell","description":"Return current file position","tag":"refentry","type":"Function","methodName":"ftell"},{"id":"splfileobject.ftruncate","name":"SplFileObject::ftruncate","description":"Truncates the file to a given length","tag":"refentry","type":"Function","methodName":"ftruncate"},{"id":"splfileobject.fwrite","name":"SplFileObject::fwrite","description":"Write to file","tag":"refentry","type":"Function","methodName":"fwrite"},{"id":"splfileobject.getchildren","name":"SplFileObject::getChildren","description":"No purpose","tag":"refentry","type":"Function","methodName":"getChildren"},{"id":"splfileobject.getcsvcontrol","name":"SplFileObject::getCsvControl","description":"Get the delimiter, enclosure and escape character for CSV","tag":"refentry","type":"Function","methodName":"getCsvControl"},{"id":"splfileobject.getcurrentline","name":"SplFileObject::getCurrentLine","description":"Alias of SplFileObject::fgets","tag":"refentry","type":"Function","methodName":"getCurrentLine"},{"id":"splfileobject.getflags","name":"SplFileObject::getFlags","description":"Gets flags for the SplFileObject","tag":"refentry","type":"Function","methodName":"getFlags"},{"id":"splfileobject.getmaxlinelen","name":"SplFileObject::getMaxLineLen","description":"Get maximum line length","tag":"refentry","type":"Function","methodName":"getMaxLineLen"},{"id":"splfileobject.haschildren","name":"SplFileObject::hasChildren","description":"SplFileObject does not have children","tag":"refentry","type":"Function","methodName":"hasChildren"},{"id":"splfileobject.key","name":"SplFileObject::key","description":"Get line number","tag":"refentry","type":"Function","methodName":"key"},{"id":"splfileobject.next","name":"SplFileObject::next","description":"Read next line","tag":"refentry","type":"Function","methodName":"next"},{"id":"splfileobject.rewind","name":"SplFileObject::rewind","description":"Rewind the file to the first line","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"splfileobject.seek","name":"SplFileObject::seek","description":"Seek to specified line","tag":"refentry","type":"Function","methodName":"seek"},{"id":"splfileobject.setcsvcontrol","name":"SplFileObject::setCsvControl","description":"Set the delimiter, enclosure and escape character for CSV","tag":"refentry","type":"Function","methodName":"setCsvControl"},{"id":"splfileobject.setflags","name":"SplFileObject::setFlags","description":"Sets flags for the SplFileObject","tag":"refentry","type":"Function","methodName":"setFlags"},{"id":"splfileobject.setmaxlinelen","name":"SplFileObject::setMaxLineLen","description":"Set maximum line length","tag":"refentry","type":"Function","methodName":"setMaxLineLen"},{"id":"splfileobject.tostring","name":"SplFileObject::__toString","description":"Returns the current line as a string","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"splfileobject.valid","name":"SplFileObject::valid","description":"Not at EOF","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.splfileobject","name":"SplFileObject","description":"The SplFileObject class","tag":"phpdoc:classref","type":"Class","methodName":"SplFileObject"},{"id":"spltempfileobject.construct","name":"SplTempFileObject::__construct","description":"Construct a new temporary file object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.spltempfileobject","name":"SplTempFileObject","description":"The SplTempFileObject class","tag":"phpdoc:classref","type":"Class","methodName":"SplTempFileObject"},{"id":"spl.files","name":"File Handling","description":"Standard PHP Library (SPL)","tag":"part","type":"General","methodName":"File Handling"},{"id":"function.class-implements","name":"class_implements","description":"Return the interfaces which are implemented by the given class or interface","tag":"refentry","type":"Function","methodName":"class_implements"},{"id":"function.class-parents","name":"class_parents","description":"Return the parent classes of the given class","tag":"refentry","type":"Function","methodName":"class_parents"},{"id":"function.class-uses","name":"class_uses","description":"Return the traits used by the given class","tag":"refentry","type":"Function","methodName":"class_uses"},{"id":"function.iterator-apply","name":"iterator_apply","description":"Call a function for every element in an iterator","tag":"refentry","type":"Function","methodName":"iterator_apply"},{"id":"function.iterator-count","name":"iterator_count","description":"Count the elements in an iterator","tag":"refentry","type":"Function","methodName":"iterator_count"},{"id":"function.iterator-to-array","name":"iterator_to_array","description":"Copy the iterator into an array","tag":"refentry","type":"Function","methodName":"iterator_to_array"},{"id":"function.spl-autoload","name":"spl_autoload","description":"Default implementation for __autoload()","tag":"refentry","type":"Function","methodName":"spl_autoload"},{"id":"function.spl-autoload-call","name":"spl_autoload_call","description":"Try all registered __autoload() functions to load the requested class","tag":"refentry","type":"Function","methodName":"spl_autoload_call"},{"id":"function.spl-autoload-extensions","name":"spl_autoload_extensions","description":"Register and return default file extensions for spl_autoload","tag":"refentry","type":"Function","methodName":"spl_autoload_extensions"},{"id":"function.spl-autoload-functions","name":"spl_autoload_functions","description":"Return all registered __autoload() functions","tag":"refentry","type":"Function","methodName":"spl_autoload_functions"},{"id":"function.spl-autoload-register","name":"spl_autoload_register","description":"Register given function as __autoload() implementation","tag":"refentry","type":"Function","methodName":"spl_autoload_register"},{"id":"function.spl-autoload-unregister","name":"spl_autoload_unregister","description":"Unregister given function as __autoload() implementation","tag":"refentry","type":"Function","methodName":"spl_autoload_unregister"},{"id":"function.spl-classes","name":"spl_classes","description":"Return available SPL classes","tag":"refentry","type":"Function","methodName":"spl_classes"},{"id":"function.spl-object-hash","name":"spl_object_hash","description":"Return hash id for given object","tag":"refentry","type":"Function","methodName":"spl_object_hash"},{"id":"function.spl-object-id","name":"spl_object_id","description":"Return the integer object handle for given object","tag":"refentry","type":"Function","methodName":"spl_object_id"},{"id":"ref.spl","name":"SPL Functions","description":"Standard PHP Library (SPL)","tag":"reference","type":"Extension","methodName":"SPL Functions"},{"id":"book.spl","name":"SPL","description":"Standard PHP Library (SPL)","tag":"book","type":"Extension","methodName":"SPL"},{"id":"intro.stream","name":"Introduction","description":"Streams","tag":"preface","type":"General","methodName":"Introduction"},{"id":"stream.resources","name":"Stream Classes","description":"Streams","tag":"section","type":"General","methodName":"Stream Classes"},{"id":"stream.setup","name":"Installing\/Configuring","description":"Streams","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"stream.constants","name":"Predefined Constants","description":"Streams","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"stream.filters","name":"Stream Filters","description":"Streams","tag":"chapter","type":"General","methodName":"Stream Filters"},{"id":"stream.contexts","name":"Stream Contexts","description":"Streams","tag":"chapter","type":"General","methodName":"Stream Contexts"},{"id":"stream.errors","name":"Stream Errors","description":"Streams","tag":"chapter","type":"General","methodName":"Stream Errors"},{"id":"stream.streamwrapper.example-1","name":"Example class registered as stream wrapper","description":"Streams","tag":"section","type":"General","methodName":"Example class registered as stream wrapper"},{"id":"stream.examples","name":"Examples","description":"Streams","tag":"chapter","type":"General","methodName":"Examples"},{"id":"php-user-filter.filter","name":"php_user_filter::filter","description":"Called when applying the filter","tag":"refentry","type":"Function","methodName":"filter"},{"id":"php-user-filter.onclose","name":"php_user_filter::onClose","description":"Called when closing the filter","tag":"refentry","type":"Function","methodName":"onClose"},{"id":"php-user-filter.oncreate","name":"php_user_filter::onCreate","description":"Called when creating the filter","tag":"refentry","type":"Function","methodName":"onCreate"},{"id":"class.php-user-filter","name":"php_user_filter","description":"The php_user_filter class","tag":"phpdoc:classref","type":"Class","methodName":"php_user_filter"},{"id":"streamwrapper.construct","name":"streamWrapper::__construct","description":"Constructs a new stream wrapper","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"streamwrapper.destruct","name":"streamWrapper::__destruct","description":"Destructs an existing stream wrapper","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"streamwrapper.dir-closedir","name":"streamWrapper::dir_closedir","description":"Close directory handle","tag":"refentry","type":"Function","methodName":"dir_closedir"},{"id":"streamwrapper.dir-opendir","name":"streamWrapper::dir_opendir","description":"Open directory handle","tag":"refentry","type":"Function","methodName":"dir_opendir"},{"id":"streamwrapper.dir-readdir","name":"streamWrapper::dir_readdir","description":"Read entry from directory handle","tag":"refentry","type":"Function","methodName":"dir_readdir"},{"id":"streamwrapper.dir-rewinddir","name":"streamWrapper::dir_rewinddir","description":"Rewind directory handle","tag":"refentry","type":"Function","methodName":"dir_rewinddir"},{"id":"streamwrapper.mkdir","name":"streamWrapper::mkdir","description":"Create a directory","tag":"refentry","type":"Function","methodName":"mkdir"},{"id":"streamwrapper.rename","name":"streamWrapper::rename","description":"Renames a file or directory","tag":"refentry","type":"Function","methodName":"rename"},{"id":"streamwrapper.rmdir","name":"streamWrapper::rmdir","description":"Removes a directory","tag":"refentry","type":"Function","methodName":"rmdir"},{"id":"streamwrapper.stream-cast","name":"streamWrapper::stream_cast","description":"Retrieve the underlying resource","tag":"refentry","type":"Function","methodName":"stream_cast"},{"id":"streamwrapper.stream-close","name":"streamWrapper::stream_close","description":"Close a resource","tag":"refentry","type":"Function","methodName":"stream_close"},{"id":"streamwrapper.stream-eof","name":"streamWrapper::stream_eof","description":"Tests for end-of-file on a file pointer","tag":"refentry","type":"Function","methodName":"stream_eof"},{"id":"streamwrapper.stream-flush","name":"streamWrapper::stream_flush","description":"Flushes the output","tag":"refentry","type":"Function","methodName":"stream_flush"},{"id":"streamwrapper.stream-lock","name":"streamWrapper::stream_lock","description":"Advisory file locking","tag":"refentry","type":"Function","methodName":"stream_lock"},{"id":"streamwrapper.stream-metadata","name":"streamWrapper::stream_metadata","description":"Change stream metadata","tag":"refentry","type":"Function","methodName":"stream_metadata"},{"id":"streamwrapper.stream-open","name":"streamWrapper::stream_open","description":"Opens file or URL","tag":"refentry","type":"Function","methodName":"stream_open"},{"id":"streamwrapper.stream-read","name":"streamWrapper::stream_read","description":"Read from stream","tag":"refentry","type":"Function","methodName":"stream_read"},{"id":"streamwrapper.stream-seek","name":"streamWrapper::stream_seek","description":"Seeks to specific location in a stream","tag":"refentry","type":"Function","methodName":"stream_seek"},{"id":"streamwrapper.stream-set-option","name":"streamWrapper::stream_set_option","description":"Change stream options","tag":"refentry","type":"Function","methodName":"stream_set_option"},{"id":"streamwrapper.stream-stat","name":"streamWrapper::stream_stat","description":"Retrieve information about a file resource","tag":"refentry","type":"Function","methodName":"stream_stat"},{"id":"streamwrapper.stream-tell","name":"streamWrapper::stream_tell","description":"Retrieve the current position of a stream","tag":"refentry","type":"Function","methodName":"stream_tell"},{"id":"streamwrapper.stream-truncate","name":"streamWrapper::stream_truncate","description":"Truncate stream","tag":"refentry","type":"Function","methodName":"stream_truncate"},{"id":"streamwrapper.stream-write","name":"streamWrapper::stream_write","description":"Write to stream","tag":"refentry","type":"Function","methodName":"stream_write"},{"id":"streamwrapper.unlink","name":"streamWrapper::unlink","description":"Delete a file","tag":"refentry","type":"Function","methodName":"unlink"},{"id":"streamwrapper.url-stat","name":"streamWrapper::url_stat","description":"Retrieve information about a file","tag":"refentry","type":"Function","methodName":"url_stat"},{"id":"class.streamwrapper","name":"streamWrapper","description":"The streamWrapper class","tag":"phpdoc:classref","type":"Class","methodName":"streamWrapper"},{"id":"function.stream-bucket-append","name":"stream_bucket_append","description":"Append bucket to brigade","tag":"refentry","type":"Function","methodName":"stream_bucket_append"},{"id":"function.stream-bucket-make-writeable","name":"stream_bucket_make_writeable","description":"Returns a bucket object from the brigade to operate on","tag":"refentry","type":"Function","methodName":"stream_bucket_make_writeable"},{"id":"function.stream-bucket-new","name":"stream_bucket_new","description":"Create a new bucket for use on the current stream","tag":"refentry","type":"Function","methodName":"stream_bucket_new"},{"id":"function.stream-bucket-prepend","name":"stream_bucket_prepend","description":"Prepend bucket to brigade","tag":"refentry","type":"Function","methodName":"stream_bucket_prepend"},{"id":"function.stream-context-create","name":"stream_context_create","description":"Creates a stream context","tag":"refentry","type":"Function","methodName":"stream_context_create"},{"id":"function.stream-context-get-default","name":"stream_context_get_default","description":"Retrieve the default stream context","tag":"refentry","type":"Function","methodName":"stream_context_get_default"},{"id":"function.stream-context-get-options","name":"stream_context_get_options","description":"Retrieve options for a stream\/wrapper\/context","tag":"refentry","type":"Function","methodName":"stream_context_get_options"},{"id":"function.stream-context-get-params","name":"stream_context_get_params","description":"Retrieves parameters from a context","tag":"refentry","type":"Function","methodName":"stream_context_get_params"},{"id":"function.stream-context-set-default","name":"stream_context_set_default","description":"Set the default stream context","tag":"refentry","type":"Function","methodName":"stream_context_set_default"},{"id":"function.stream-context-set-option","name":"stream_context_set_option","description":"Sets an option for a stream\/wrapper\/context","tag":"refentry","type":"Function","methodName":"stream_context_set_option"},{"id":"function.stream-context-set-options","name":"stream_context_set_options","description":"Sets options on the specified context","tag":"refentry","type":"Function","methodName":"stream_context_set_options"},{"id":"function.stream-context-set-params","name":"stream_context_set_params","description":"Set parameters for a stream\/wrapper\/context","tag":"refentry","type":"Function","methodName":"stream_context_set_params"},{"id":"function.stream-copy-to-stream","name":"stream_copy_to_stream","description":"Copies data from one stream to another","tag":"refentry","type":"Function","methodName":"stream_copy_to_stream"},{"id":"function.stream-filter-append","name":"stream_filter_append","description":"Attach a filter to a stream","tag":"refentry","type":"Function","methodName":"stream_filter_append"},{"id":"function.stream-filter-prepend","name":"stream_filter_prepend","description":"Attach a filter to a stream","tag":"refentry","type":"Function","methodName":"stream_filter_prepend"},{"id":"function.stream-filter-register","name":"stream_filter_register","description":"Register a user defined stream filter","tag":"refentry","type":"Function","methodName":"stream_filter_register"},{"id":"function.stream-filter-remove","name":"stream_filter_remove","description":"Remove a filter from a stream","tag":"refentry","type":"Function","methodName":"stream_filter_remove"},{"id":"function.stream-get-contents","name":"stream_get_contents","description":"Reads remainder of a stream into a string","tag":"refentry","type":"Function","methodName":"stream_get_contents"},{"id":"function.stream-get-filters","name":"stream_get_filters","description":"Retrieve list of registered filters","tag":"refentry","type":"Function","methodName":"stream_get_filters"},{"id":"function.stream-get-line","name":"stream_get_line","description":"Gets line from stream resource up to a given delimiter","tag":"refentry","type":"Function","methodName":"stream_get_line"},{"id":"function.stream-get-meta-data","name":"stream_get_meta_data","description":"Retrieves header\/meta data from streams\/file pointers","tag":"refentry","type":"Function","methodName":"stream_get_meta_data"},{"id":"function.stream-get-transports","name":"stream_get_transports","description":"Retrieve list of registered socket transports","tag":"refentry","type":"Function","methodName":"stream_get_transports"},{"id":"function.stream-get-wrappers","name":"stream_get_wrappers","description":"Retrieve list of registered streams","tag":"refentry","type":"Function","methodName":"stream_get_wrappers"},{"id":"function.stream-is-local","name":"stream_is_local","description":"Checks if a stream is a local stream","tag":"refentry","type":"Function","methodName":"stream_is_local"},{"id":"function.stream-isatty","name":"stream_isatty","description":"Check if a stream is a TTY","tag":"refentry","type":"Function","methodName":"stream_isatty"},{"id":"function.stream-notification-callback","name":"stream_notification_callback","description":"A callback function for the notification context parameter","tag":"refentry","type":"Function","methodName":"stream_notification_callback"},{"id":"function.stream-register-wrapper","name":"stream_register_wrapper","description":"Alias of stream_wrapper_register","tag":"refentry","type":"Function","methodName":"stream_register_wrapper"},{"id":"function.stream-resolve-include-path","name":"stream_resolve_include_path","description":"Resolve filename against the include path","tag":"refentry","type":"Function","methodName":"stream_resolve_include_path"},{"id":"function.stream-select","name":"stream_select","description":"Runs the equivalent of the select() system call on the given\n arrays of streams with a timeout specified by seconds and microseconds","tag":"refentry","type":"Function","methodName":"stream_select"},{"id":"function.stream-set-blocking","name":"stream_set_blocking","description":"Set blocking\/non-blocking mode on a stream","tag":"refentry","type":"Function","methodName":"stream_set_blocking"},{"id":"function.stream-set-chunk-size","name":"stream_set_chunk_size","description":"Set the stream chunk size","tag":"refentry","type":"Function","methodName":"stream_set_chunk_size"},{"id":"function.stream-set-read-buffer","name":"stream_set_read_buffer","description":"Set read file buffering on the given stream","tag":"refentry","type":"Function","methodName":"stream_set_read_buffer"},{"id":"function.stream-set-timeout","name":"stream_set_timeout","description":"Set timeout period on a stream","tag":"refentry","type":"Function","methodName":"stream_set_timeout"},{"id":"function.stream-set-write-buffer","name":"stream_set_write_buffer","description":"Sets write file buffering on the given stream","tag":"refentry","type":"Function","methodName":"stream_set_write_buffer"},{"id":"function.stream-socket-accept","name":"stream_socket_accept","description":"Accept a connection on a socket created by stream_socket_server","tag":"refentry","type":"Function","methodName":"stream_socket_accept"},{"id":"function.stream-socket-client","name":"stream_socket_client","description":"Open Internet or Unix domain socket connection","tag":"refentry","type":"Function","methodName":"stream_socket_client"},{"id":"function.stream-socket-enable-crypto","name":"stream_socket_enable_crypto","description":"Turns encryption on\/off on an already connected socket","tag":"refentry","type":"Function","methodName":"stream_socket_enable_crypto"},{"id":"function.stream-socket-get-name","name":"stream_socket_get_name","description":"Retrieve the name of the local or remote sockets","tag":"refentry","type":"Function","methodName":"stream_socket_get_name"},{"id":"function.stream-socket-pair","name":"stream_socket_pair","description":"Creates a pair of connected, indistinguishable socket streams","tag":"refentry","type":"Function","methodName":"stream_socket_pair"},{"id":"function.stream-socket-recvfrom","name":"stream_socket_recvfrom","description":"Receives data from a socket, connected or not","tag":"refentry","type":"Function","methodName":"stream_socket_recvfrom"},{"id":"function.stream-socket-sendto","name":"stream_socket_sendto","description":"Sends a message to a socket, whether it is connected or not","tag":"refentry","type":"Function","methodName":"stream_socket_sendto"},{"id":"function.stream-socket-server","name":"stream_socket_server","description":"Create an Internet or Unix domain server socket","tag":"refentry","type":"Function","methodName":"stream_socket_server"},{"id":"function.stream-socket-shutdown","name":"stream_socket_shutdown","description":"Shutdown a full-duplex connection","tag":"refentry","type":"Function","methodName":"stream_socket_shutdown"},{"id":"function.stream-supports-lock","name":"stream_supports_lock","description":"Tells whether the stream supports locking","tag":"refentry","type":"Function","methodName":"stream_supports_lock"},{"id":"function.stream-wrapper-register","name":"stream_wrapper_register","description":"Register a URL wrapper implemented as a PHP class","tag":"refentry","type":"Function","methodName":"stream_wrapper_register"},{"id":"function.stream-wrapper-restore","name":"stream_wrapper_restore","description":"Restores a previously unregistered built-in wrapper","tag":"refentry","type":"Function","methodName":"stream_wrapper_restore"},{"id":"function.stream-wrapper-unregister","name":"stream_wrapper_unregister","description":"Unregister a URL wrapper","tag":"refentry","type":"Function","methodName":"stream_wrapper_unregister"},{"id":"ref.stream","name":"Stream Functions","description":"Streams","tag":"reference","type":"Extension","methodName":"Stream Functions"},{"id":"book.stream","name":"Streams","description":"Other Basic Extensions","tag":"book","type":"Extension","methodName":"Streams"},{"id":"intro.swoole","name":"Introduction","description":"Swoole","tag":"preface","type":"General","methodName":"Introduction"},{"id":"swoole.requirements","name":"Requirements","description":"Swoole","tag":"section","type":"General","methodName":"Requirements"},{"id":"swoole.installation","name":"Installation","description":"Swoole","tag":"section","type":"General","methodName":"Installation"},{"id":"swoole.configuration","name":"Runtime Configuration","description":"Swoole","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"swoole.setup","name":"Installing\/Configuring","description":"Swoole","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"swoole.constants","name":"Predefined Constants","description":"Swoole","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.swoole-async-dns-lookup","name":"swoole_async_dns_lookup","description":"Async and non-blocking hostname to IP lookup","tag":"refentry","type":"Function","methodName":"swoole_async_dns_lookup"},{"id":"function.swoole-async-read","name":"swoole_async_read","description":"Read file stream asynchronously","tag":"refentry","type":"Function","methodName":"swoole_async_read"},{"id":"function.swoole-async-readfile","name":"swoole_async_readfile","description":"Read a file asynchronously","tag":"refentry","type":"Function","methodName":"swoole_async_readfile"},{"id":"function.swoole-async-set","name":"swoole_async_set","description":"Update the async I\/O options","tag":"refentry","type":"Function","methodName":"swoole_async_set"},{"id":"function.swoole-async-write","name":"swoole_async_write","description":"Write data to a file stream asynchronously","tag":"refentry","type":"Function","methodName":"swoole_async_write"},{"id":"function.swoole-async-writefile","name":"swoole_async_writefile","description":"Write data to a file asynchronously","tag":"refentry","type":"Function","methodName":"swoole_async_writefile"},{"id":"function.swoole-clear-error","name":"swoole_clear_error","description":"Clear errors in the socket or on the last error code","tag":"refentry","type":"Function","methodName":"swoole_clear_error"},{"id":"function.swoole-client-select","name":"swoole_client_select","description":"Get the file description which are ready to read\/write or error","tag":"refentry","type":"Function","methodName":"swoole_client_select"},{"id":"function.swoole-cpu-num","name":"swoole_cpu_num","description":"Get the number of CPU","tag":"refentry","type":"Function","methodName":"swoole_cpu_num"},{"id":"function.swoole-errno","name":"swoole_errno","description":"Get the error code of the latest system call","tag":"refentry","type":"Function","methodName":"swoole_errno"},{"id":"function.swoole-error-log","name":"swoole_error_log","description":"Output error messages to the log","tag":"refentry","type":"Function","methodName":"swoole_error_log"},{"id":"function.swoole-event-add","name":"swoole_event_add","description":"Add new callback functions of a socket into the EventLoop","tag":"refentry","type":"Function","methodName":"swoole_event_add"},{"id":"function.swoole-event-defer","name":"swoole_event_defer","description":"Add callback function to the next event loop","tag":"refentry","type":"Function","methodName":"swoole_event_defer"},{"id":"function.swoole-event-del","name":"swoole_event_del","description":"Remove all event callback functions of a socket","tag":"refentry","type":"Function","methodName":"swoole_event_del"},{"id":"function.swoole-event-exit","name":"swoole_event_exit","description":"Exit the eventloop, only available at the client side","tag":"refentry","type":"Function","methodName":"swoole_event_exit"},{"id":"function.swoole-event-set","name":"swoole_event_set","description":"Update the event callback functions of a socket","tag":"refentry","type":"Function","methodName":"swoole_event_set"},{"id":"function.swoole-event-wait","name":"swoole_event_wait","description":"Start the event loop","tag":"refentry","type":"Function","methodName":"swoole_event_wait"},{"id":"function.swoole-event-write","name":"swoole_event_write","description":"Write data to a socket","tag":"refentry","type":"Function","methodName":"swoole_event_write"},{"id":"function.swoole-get-local-ip","name":"swoole_get_local_ip","description":"Get the IPv4 IP addresses of each NIC on the machine","tag":"refentry","type":"Function","methodName":"swoole_get_local_ip"},{"id":"function.swoole-last-error","name":"swoole_last_error","description":"Get the lastest error message","tag":"refentry","type":"Function","methodName":"swoole_last_error"},{"id":"function.swoole-load-module","name":"swoole_load_module","description":"Load a swoole extension","tag":"refentry","type":"Function","methodName":"swoole_load_module"},{"id":"function.swoole-select","name":"swoole_select","description":"Select the file descriptions which are ready to read\/write or error in the eventloop","tag":"refentry","type":"Function","methodName":"swoole_select"},{"id":"function.swoole-set-process-name","name":"swoole_set_process_name","description":"Set the process name","tag":"refentry","type":"Function","methodName":"swoole_set_process_name"},{"id":"function.swoole-strerror","name":"swoole_strerror","description":"Convert the Errno into error messages","tag":"refentry","type":"Function","methodName":"swoole_strerror"},{"id":"function.swoole-timer-after","name":"swoole_timer_after","description":"Trigger a one time callback function in the future","tag":"refentry","type":"Function","methodName":"swoole_timer_after"},{"id":"function.swoole-timer-exists","name":"swoole_timer_exists","description":"Check if a timer callback function is existed","tag":"refentry","type":"Function","methodName":"swoole_timer_exists"},{"id":"function.swoole-timer-tick","name":"swoole_timer_tick","description":"Trigger a timer tick callback function by time interval","tag":"refentry","type":"Function","methodName":"swoole_timer_tick"},{"id":"function.swoole-version","name":"swoole_version","description":"Get the version of Swoole","tag":"refentry","type":"Function","methodName":"swoole_version"},{"id":"ref.swoole-funcs","name":"Swoole Functions","description":"Swoole","tag":"reference","type":"Extension","methodName":"Swoole Functions"},{"id":"swoole-async.dnslookup","name":"Swoole\\Async::dnsLookup","description":"Async and non-blocking hostname to IP lookup.","tag":"refentry","type":"Function","methodName":"dnsLookup"},{"id":"swoole-async.read","name":"Swoole\\Async::read","description":"Read file stream asynchronously.","tag":"refentry","type":"Function","methodName":"read"},{"id":"swoole-async.readfile","name":"Swoole\\Async::readFile","description":"Read a file asynchronously.","tag":"refentry","type":"Function","methodName":"readFile"},{"id":"swoole-async.set","name":"Swoole\\Async::set","description":"Update the async I\/O options.","tag":"refentry","type":"Function","methodName":"set"},{"id":"swoole-async.write","name":"Swoole\\Async::write","description":"Write data to a file stream asynchronously.","tag":"refentry","type":"Function","methodName":"write"},{"id":"swoole-async.writefile","name":"Swoole\\Async::writeFile","description":"Description","tag":"refentry","type":"Function","methodName":"writeFile"},{"id":"class.swoole-async","name":"Swoole\\Async","description":"The Swoole\\Async class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Async"},{"id":"swoole-atomic.add","name":"Swoole\\Atomic::add","description":"Add a number to the value to the atomic object.","tag":"refentry","type":"Function","methodName":"add"},{"id":"swoole-atomic.cmpset","name":"Swoole\\Atomic::cmpset","description":"Compare and set the value of the atomic object.","tag":"refentry","type":"Function","methodName":"cmpset"},{"id":"swoole-atomic.construct","name":"Swoole\\Atomic::__construct","description":"Construct a swoole atomic object.","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"swoole-atomic.get","name":"Swoole\\Atomic::get","description":"Get the current value of the atomic object.","tag":"refentry","type":"Function","methodName":"get"},{"id":"swoole-atomic.set","name":"Swoole\\Atomic::set","description":"Set a new value to the atomic object.","tag":"refentry","type":"Function","methodName":"set"},{"id":"swoole-atomic.sub","name":"Swoole\\Atomic::sub","description":"Subtract a number to the value of the atomic object.","tag":"refentry","type":"Function","methodName":"sub"},{"id":"class.swoole-atomic","name":"Swoole\\Atomic","description":"The Swoole\\Atomic class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Atomic"},{"id":"swoole-buffer.append","name":"Swoole\\Buffer::append","description":"Append the string or binary data at the end of the memory buffer and return the new size of memory allocated.","tag":"refentry","type":"Function","methodName":"append"},{"id":"swoole-buffer.clear","name":"Swoole\\Buffer::clear","description":"Reset the memory buffer.","tag":"refentry","type":"Function","methodName":"clear"},{"id":"swoole-buffer.construct","name":"Swoole\\Buffer::__construct","description":"Fixed size memory blocks allocation.","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"swoole-buffer.destruct","name":"Swoole\\Buffer::__destruct","description":"Destruct the Swoole memory buffer.","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"swoole-buffer.expand","name":"Swoole\\Buffer::expand","description":"Expand the size of memory buffer.","tag":"refentry","type":"Function","methodName":"expand"},{"id":"swoole-buffer.read","name":"Swoole\\Buffer::read","description":"Read data from the memory buffer based on offset and length.","tag":"refentry","type":"Function","methodName":"read"},{"id":"swoole-buffer.recycle","name":"Swoole\\Buffer::recycle","description":"Release the memory to OS which is not used by the memory buffer.","tag":"refentry","type":"Function","methodName":"recycle"},{"id":"swoole-buffer.substr","name":"Swoole\\Buffer::substr","description":"Read data from the memory buffer based on offset and length. Or remove data from the memory buffer.","tag":"refentry","type":"Function","methodName":"substr"},{"id":"swoole-buffer.tostring","name":"Swoole\\Buffer::__toString","description":"Get the string value of the memory buffer.","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"swoole-buffer.write","name":"Swoole\\Buffer::write","description":"Write data to the memory buffer. The memory allocated for the buffer will not be changed.","tag":"refentry","type":"Function","methodName":"write"},{"id":"class.swoole-buffer","name":"Swoole\\Buffer","description":"The Swoole\\Buffer class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Buffer"},{"id":"swoole-channel.construct","name":"Swoole\\Channel::__construct","description":"Construct a Swoole Channel","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"swoole-channel.destruct","name":"Swoole\\Channel::__destruct","description":"Destruct a Swoole channel.","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"swoole-channel.pop","name":"Swoole\\Channel::pop","description":"Read and pop data from swoole channel.","tag":"refentry","type":"Function","methodName":"pop"},{"id":"swoole-channel.push","name":"Swoole\\Channel::push","description":"Write and push data into Swoole channel.","tag":"refentry","type":"Function","methodName":"push"},{"id":"swoole-channel.stats","name":"Swoole\\Channel::stats","description":"Get stats of swoole channel.","tag":"refentry","type":"Function","methodName":"stats"},{"id":"class.swoole-channel","name":"Swoole\\Channel","description":"The Swoole\\Channel class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Channel"},{"id":"swoole-client.close","name":"Swoole\\Client::close","description":"Close the connection established.","tag":"refentry","type":"Function","methodName":"close"},{"id":"swoole-client.connect","name":"Swoole\\Client::connect","description":"Connect to the remote TCP or UDP port.","tag":"refentry","type":"Function","methodName":"connect"},{"id":"swoole-client.construct","name":"Swoole\\Client::__construct","description":"Create Swoole sync or async TCP\/UDP client, with or without SSL.","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"swoole-client.destruct","name":"Swoole\\Client::__destruct","description":"Destruct the Swoole client.","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"swoole-client.getpeername","name":"Swoole\\Client::getpeername","description":"Get the remote socket name of the connection.","tag":"refentry","type":"Function","methodName":"getpeername"},{"id":"swoole-client.getsockname","name":"Swoole\\Client::getsockname","description":"Get the local socket name of the connection.","tag":"refentry","type":"Function","methodName":"getsockname"},{"id":"swoole-client.isconnected","name":"Swoole\\Client::isConnected","description":"Check if the connection is established.","tag":"refentry","type":"Function","methodName":"isConnected"},{"id":"swoole-client.on","name":"Swoole\\Client::on","description":"Add callback functions triggered by events.","tag":"refentry","type":"Function","methodName":"on"},{"id":"swoole-client.pause","name":"Swoole\\Client::pause","description":"Pause receiving data.","tag":"refentry","type":"Function","methodName":"pause"},{"id":"swoole-client.pipe","name":"Swoole\\Client::pipe","description":"Redirect the data to another file descriptor.","tag":"refentry","type":"Function","methodName":"pipe"},{"id":"swoole-client.recv","name":"Swoole\\Client::recv","description":"Receive data from the remote socket.","tag":"refentry","type":"Function","methodName":"recv"},{"id":"swoole-client.resume","name":"Swoole\\Client::resume","description":"Resume receiving data.","tag":"refentry","type":"Function","methodName":"resume"},{"id":"swoole-client.send","name":"Swoole\\Client::send","description":"Send data to the remote TCP socket.","tag":"refentry","type":"Function","methodName":"send"},{"id":"swoole-client.sendfile","name":"Swoole\\Client::sendfile","description":"Send file to the remote TCP socket.","tag":"refentry","type":"Function","methodName":"sendfile"},{"id":"swoole-client.sendto","name":"Swoole\\Client::sendto","description":"Send data to the remote UDP address.","tag":"refentry","type":"Function","methodName":"sendto"},{"id":"swoole-client.set","name":"Swoole\\Client::set","description":"Set the Swoole client parameters before the connection is established.","tag":"refentry","type":"Function","methodName":"set"},{"id":"swoole-client.sleep","name":"Swoole\\Client::sleep","description":"Remove the TCP client from system event loop.","tag":"refentry","type":"Function","methodName":"sleep"},{"id":"swoole-client.wakeup","name":"Swoole\\Client::wakeup","description":"Add the TCP client back into the system event loop.","tag":"refentry","type":"Function","methodName":"wakeup"},{"id":"class.swoole-client","name":"Swoole\\Client","description":"The Swoole\\Client class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Client"},{"id":"swoole-connection-iterator.count","name":"Swoole\\Connection\\Iterator::count","description":"Count connections.","tag":"refentry","type":"Function","methodName":"count"},{"id":"swoole-connection-iterator.current","name":"Swoole\\Connection\\Iterator::current","description":"Return current connection entry.","tag":"refentry","type":"Function","methodName":"current"},{"id":"swoole-connection-iterator.key","name":"Swoole\\Connection\\Iterator::key","description":"Return key of the current connection.","tag":"refentry","type":"Function","methodName":"key"},{"id":"swoole-connection-iterator.next","name":"Swoole\\Connection\\Iterator::next","description":"Move to the next connection.","tag":"refentry","type":"Function","methodName":"next"},{"id":"swoole-connection-iterator.offsetexists","name":"Swoole\\Connection\\Iterator::offsetExists","description":"Check if offset exists.","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"swoole-connection-iterator.offsetget","name":"Swoole\\Connection\\Iterator::offsetGet","description":"Offset to retrieve.","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"swoole-connection-iterator.offsetset","name":"Swoole\\Connection\\Iterator::offsetSet","description":"Assign a Connection to the specified offset.","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"swoole-connection-iterator.offsetunset","name":"Swoole\\Connection\\Iterator::offsetUnset","description":"Unset an offset.","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"swoole-connection-iterator.rewind","name":"Swoole\\Connection\\Iterator::rewind","description":"Rewinds iterator","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"swoole-connection-iterator.valid","name":"Swoole\\Connection\\Iterator::valid","description":"Check if current position is valid.","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.swoole-connection-iterator","name":"Swoole\\Connection\\Iterator","description":"The Swoole\\Connection\\Iterator class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Connection\\Iterator"},{"id":"swoole-coroutine.call-user-func","name":"Swoole\\Coroutine::call_user_func","description":"Call a callback given by the first parameter","tag":"refentry","type":"Function","methodName":"call_user_func"},{"id":"swoole-coroutine.call-user-func-array","name":"Swoole\\Coroutine::call_user_func_array","description":"Call a callback with an array of parameters","tag":"refentry","type":"Function","methodName":"call_user_func_array"},{"id":"swoole-coroutine.cli-wait","name":"Swoole\\Coroutine::cli_wait","description":"Description","tag":"refentry","type":"Function","methodName":"cli_wait"},{"id":"swoole-coroutine.create","name":"Swoole\\Coroutine::create","description":"Description","tag":"refentry","type":"Function","methodName":"create"},{"id":"swoole-coroutine.getuid","name":"Swoole\\Coroutine::getuid","description":"Description","tag":"refentry","type":"Function","methodName":"getuid"},{"id":"swoole-coroutine.resume","name":"Swoole\\Coroutine::resume","description":"Description","tag":"refentry","type":"Function","methodName":"resume"},{"id":"swoole-coroutine.suspend","name":"Swoole\\Coroutine::suspend","description":"Description","tag":"refentry","type":"Function","methodName":"suspend"},{"id":"class.swoole-coroutine","name":"Swoole\\Coroutine","description":"The Swoole\\Coroutine class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Coroutine"},{"id":"swoole-coroutine-lock.construct","name":"Swoole\\Coroutine\\Lock::__construct","description":"Construct a new coroutine lock","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"swoole-coroutine-lock.lock","name":"Swoole\\Coroutine\\Lock::lock","description":"Acquire the lock, blocking if necessary","tag":"refentry","type":"Function","methodName":"lock"},{"id":"swoole-coroutine-lock.trylock","name":"Swoole\\Coroutine\\Lock::trylock","description":"Attempt to acquire the lock without blocking","tag":"refentry","type":"Function","methodName":"trylock"},{"id":"swoole-coroutine-lock.unlock","name":"Swoole\\Coroutine\\Lock::unlock","description":"Release the lock","tag":"refentry","type":"Function","methodName":"unlock"},{"id":"class.swoole-coroutine-lock","name":"Swoole\\Coroutine\\Lock","description":"The Swoole\\Coroutine\\Lock class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Coroutine\\Lock"},{"id":"swoole-event.add","name":"Swoole\\Event::add","description":"Add new callback functions of a socket into the EventLoop.","tag":"refentry","type":"Function","methodName":"add"},{"id":"swoole-event.defer","name":"Swoole\\Event::defer","description":"Add a callback function to the next event loop.","tag":"refentry","type":"Function","methodName":"defer"},{"id":"swoole-event.del","name":"Swoole\\Event::del","description":"Remove all event callback functions of a socket.","tag":"refentry","type":"Function","methodName":"del"},{"id":"swoole-event.exit","name":"Swoole\\Event::exit","description":"Exit the eventloop, only available at client side.","tag":"refentry","type":"Function","methodName":"exit"},{"id":"swoole-event.set","name":"Swoole\\Event::set","description":"Update the event callback functions of a socket.","tag":"refentry","type":"Function","methodName":"set"},{"id":"swoole-event.wait","name":"Swoole\\Event::wait","description":"Description","tag":"refentry","type":"Function","methodName":"wait"},{"id":"swoole-event.write","name":"Swoole\\Event::write","description":"Write data to the socket.","tag":"refentry","type":"Function","methodName":"write"},{"id":"class.swoole-event","name":"Swoole\\Event","description":"The Swoole\\Event class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Event"},{"id":"class.swoole-exception","name":"Swoole\\Exception","description":"The Swoole\\Exception class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Exception"},{"id":"swoole-http-client.addfile","name":"Swoole\\Http\\Client::addFile","description":"Add a file to the post form.","tag":"refentry","type":"Function","methodName":"addFile"},{"id":"swoole-http-client.close","name":"Swoole\\Http\\Client::close","description":"Close the http connection.","tag":"refentry","type":"Function","methodName":"close"},{"id":"swoole-http-client.construct","name":"Swoole\\Http\\Client::__construct","description":"Construct the async HTTP client.","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"swoole-http-client.destruct","name":"Swoole\\Http\\Client::__destruct","description":"Destruct the HTTP client.","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"swoole-http-client.download","name":"Swoole\\Http\\Client::download","description":"Download a file from the remote server.","tag":"refentry","type":"Function","methodName":"download"},{"id":"swoole-http-client.execute","name":"Swoole\\Http\\Client::execute","description":"Send the HTTP request after setting the parameters.","tag":"refentry","type":"Function","methodName":"execute"},{"id":"swoole-http-client.get","name":"Swoole\\Http\\Client::get","description":"Send GET http request to the remote server.","tag":"refentry","type":"Function","methodName":"get"},{"id":"swoole-http-client.isconnected","name":"Swoole\\Http\\Client::isConnected","description":"Check if the HTTP connection is connected.","tag":"refentry","type":"Function","methodName":"isConnected"},{"id":"swoole-http-client.on","name":"Swoole\\Http\\Client::on","description":"Register callback function by event name.","tag":"refentry","type":"Function","methodName":"on"},{"id":"swoole-http-client.post","name":"Swoole\\Http\\Client::post","description":"Send POST http request to the remote server.","tag":"refentry","type":"Function","methodName":"post"},{"id":"swoole-http-client.push","name":"Swoole\\Http\\Client::push","description":"Push data to websocket client.","tag":"refentry","type":"Function","methodName":"push"},{"id":"swoole-http-client.set","name":"Swoole\\Http\\Client::set","description":"Update the HTTP client parameters.","tag":"refentry","type":"Function","methodName":"set"},{"id":"swoole-http-client.setcookies","name":"Swoole\\Http\\Client::setCookies","description":"Set the http request cookies.","tag":"refentry","type":"Function","methodName":"setCookies"},{"id":"swoole-http-client.setdata","name":"Swoole\\Http\\Client::setData","description":"Set the HTTP request body data.","tag":"refentry","type":"Function","methodName":"setData"},{"id":"swoole-http-client.setheaders","name":"Swoole\\Http\\Client::setHeaders","description":"Set the HTTP request headers.","tag":"refentry","type":"Function","methodName":"setHeaders"},{"id":"swoole-http-client.setmethod","name":"Swoole\\Http\\Client::setMethod","description":"Set the HTTP request method.","tag":"refentry","type":"Function","methodName":"setMethod"},{"id":"swoole-http-client.upgrade","name":"Swoole\\Http\\Client::upgrade","description":"Upgrade to websocket protocol.","tag":"refentry","type":"Function","methodName":"upgrade"},{"id":"class.swoole-http-client","name":"Swoole\\Http\\Client","description":"The Swoole\\Http\\Client class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Http\\Client"},{"id":"swoole-http-request.destruct","name":"Swoole\\Http\\Request::__destruct","description":"Destruct the HTTP request.","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"swoole-http-request.rawcontent","name":"Swoole\\Http\\Request::rawcontent","description":"Get the raw HTTP POST body.","tag":"refentry","type":"Function","methodName":"rawcontent"},{"id":"class.swoole-http-request","name":"Swoole\\Http\\Request","description":"The Swoole\\Http\\Request class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Http\\Request"},{"id":"swoole-http-response.cookie","name":"Swoole\\Http\\Response::cookie","description":"Set the cookies of the HTTP response.","tag":"refentry","type":"Function","methodName":"cookie"},{"id":"swoole-http-response.destruct","name":"Swoole\\Http\\Response::__destruct","description":"Destruct the HTTP response.","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"swoole-http-response.end","name":"Swoole\\Http\\Response::end","description":"Send data for the HTTP request and finish the response.","tag":"refentry","type":"Function","methodName":"end"},{"id":"swoole-http-response.gzip","name":"Swoole\\Http\\Response::gzip","description":"Enable the gzip of response content.","tag":"refentry","type":"Function","methodName":"gzip"},{"id":"swoole-http-response.header","name":"Swoole\\Http\\Response::header","description":"Set the HTTP response headers.","tag":"refentry","type":"Function","methodName":"header"},{"id":"swoole-http-response.initheader","name":"Swoole\\Http\\Response::initHeader","description":"Init the HTTP response header.","tag":"refentry","type":"Function","methodName":"initHeader"},{"id":"swoole-http-response.rawcookie","name":"Swoole\\Http\\Response::rawcookie","description":"Set the raw cookies to the HTTP response.","tag":"refentry","type":"Function","methodName":"rawcookie"},{"id":"swoole-http-response.sendfile","name":"Swoole\\Http\\Response::sendfile","description":"Send file through the HTTP response.","tag":"refentry","type":"Function","methodName":"sendfile"},{"id":"swoole-http-response.status","name":"Swoole\\Http\\Response::status","description":"Set the status code of the HTTP response.","tag":"refentry","type":"Function","methodName":"status"},{"id":"swoole-http-response.write","name":"Swoole\\Http\\Response::write","description":"Append HTTP body content to the HTTP response.","tag":"refentry","type":"Function","methodName":"write"},{"id":"class.swoole-http-response","name":"Swoole\\Http\\Response","description":"The Swoole\\Http\\Response class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Http\\Response"},{"id":"swoole-http-server.on","name":"Swoole\\Http\\Server::on","description":"Bind callback function to HTTP server by event name.","tag":"refentry","type":"Function","methodName":"on"},{"id":"swoole-http-server.start","name":"Swoole\\Http\\Server::start","description":"Start the swoole http server.","tag":"refentry","type":"Function","methodName":"start"},{"id":"class.swoole-http-server","name":"Swoole\\Http\\Server","description":"The Swoole\\Http\\Server class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Http\\Server"},{"id":"swoole-lock.construct","name":"Swoole\\Lock::__construct","description":"Construct a memory lock.","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"swoole-lock.destruct","name":"Swoole\\Lock::__destruct","description":"Destroy a Swoole memory lock.","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"swoole-lock.lock","name":"Swoole\\Lock::lock","description":"Try to acquire the lock. It will block if the lock is not available.","tag":"refentry","type":"Function","methodName":"lock"},{"id":"swoole-lock.lock-read","name":"Swoole\\Lock::lock_read","description":"Lock a read-write lock for reading.","tag":"refentry","type":"Function","methodName":"lock_read"},{"id":"swoole-lock.trylock","name":"Swoole\\Lock::trylock","description":"Try to acquire the lock and return straight away even the lock is not available.","tag":"refentry","type":"Function","methodName":"trylock"},{"id":"swoole-lock.trylock-read","name":"Swoole\\Lock::trylock_read","description":"Try to lock a read-write lock for reading and return straight away even the lock is not available.","tag":"refentry","type":"Function","methodName":"trylock_read"},{"id":"swoole-lock.unlock","name":"Swoole\\Lock::unlock","description":"Release the lock.","tag":"refentry","type":"Function","methodName":"unlock"},{"id":"class.swoole-lock","name":"Swoole\\Lock","description":"The Swoole\\Lock class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Lock"},{"id":"swoole-mmap.open","name":"Swoole\\Mmap::open","description":"Map a file into memory and return the stream resource which can be used by PHP stream operations.","tag":"refentry","type":"Function","methodName":"open"},{"id":"class.swoole-mmap","name":"Swoole\\Mmap","description":"The Swoole\\Mmap class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Mmap"},{"id":"swoole-mysql.close","name":"Swoole\\MySQL::close","description":"Close the async MySQL connection.","tag":"refentry","type":"Function","methodName":"close"},{"id":"swoole-mysql.connect","name":"Swoole\\MySQL::connect","description":"Connect to the remote MySQL server.","tag":"refentry","type":"Function","methodName":"connect"},{"id":"swoole-mysql.construct","name":"Swoole\\MySQL::__construct","description":"Construct an async MySQL client.","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"swoole-mysql.destruct","name":"Swoole\\MySQL::__destruct","description":"Destroy the async MySQL client.","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"swoole-mysql.getbuffer","name":"Swoole\\MySQL::getBuffer","description":"Description","tag":"refentry","type":"Function","methodName":"getBuffer"},{"id":"swoole-mysql.on","name":"Swoole\\MySQL::on","description":"Register callback function based on event name.","tag":"refentry","type":"Function","methodName":"on"},{"id":"swoole-mysql.query","name":"Swoole\\MySQL::query","description":"Run the SQL query.","tag":"refentry","type":"Function","methodName":"query"},{"id":"class.swoole-mysql","name":"Swoole\\MySQL","description":"The Swoole\\MySQL class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\MySQL"},{"id":"class.swoole-mysql-exception","name":"Swoole\\MySQL\\Exception","description":"The Swoole\\MySQL\\Exception class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\MySQL\\Exception"},{"id":"swoole-process.alarm","name":"Swoole\\Process::alarm","description":"High precision timer which triggers signal with fixed interval.","tag":"refentry","type":"Function","methodName":"alarm"},{"id":"swoole-process.close","name":"Swoole\\Process::close","description":"Close the pipe to the child process.","tag":"refentry","type":"Function","methodName":"close"},{"id":"swoole-process.construct","name":"Swoole\\Process::__construct","description":"Construct a process.","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"swoole-process.daemon","name":"Swoole\\Process::daemon","description":"Change the process to be a daemon process.","tag":"refentry","type":"Function","methodName":"daemon"},{"id":"swoole-process.destruct","name":"Swoole\\Process::__destruct","description":"Destroy the process.","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"swoole-process.exec","name":"Swoole\\Process::exec","description":"Execute system commands.","tag":"refentry","type":"Function","methodName":"exec"},{"id":"swoole-process.exit","name":"Swoole\\Process::exit","description":"Stop the child processes.","tag":"refentry","type":"Function","methodName":"exit"},{"id":"swoole-process.freequeue","name":"Swoole\\Process::freeQueue","description":"Destroy the message queue created by swoole_process::useQueue.","tag":"refentry","type":"Function","methodName":"freeQueue"},{"id":"swoole-process.kill","name":"Swoole\\Process::kill","description":"Send signal to the child process.","tag":"refentry","type":"Function","methodName":"kill"},{"id":"swoole-process.name","name":"Swoole\\Process::name","description":"Set name of the process.","tag":"refentry","type":"Function","methodName":"name"},{"id":"swoole-process.pop","name":"Swoole\\Process::pop","description":"Read and pop data from the message queue.","tag":"refentry","type":"Function","methodName":"pop"},{"id":"swoole-process.push","name":"Swoole\\Process::push","description":"Write and push data into the message queue.","tag":"refentry","type":"Function","methodName":"push"},{"id":"swoole-process.read","name":"Swoole\\Process::read","description":"Read data sending to the process.","tag":"refentry","type":"Function","methodName":"read"},{"id":"swoole-process.signal","name":"Swoole\\Process::signal","description":"Send signal to the child processes.","tag":"refentry","type":"Function","methodName":"signal"},{"id":"swoole-process.start","name":"Swoole\\Process::start","description":"Start the process.","tag":"refentry","type":"Function","methodName":"start"},{"id":"swoole-process.statqueue","name":"Swoole\\Process::statQueue","description":"Get the stats of the message queue used as the communication method between processes.","tag":"refentry","type":"Function","methodName":"statQueue"},{"id":"swoole-process.usequeue","name":"Swoole\\Process::useQueue","description":"Create a message queue as the communication method between the parent process and child processes.","tag":"refentry","type":"Function","methodName":"useQueue"},{"id":"swoole-process.wait","name":"Swoole\\Process::wait","description":"Wait for the events of child processes.","tag":"refentry","type":"Function","methodName":"wait"},{"id":"swoole-process.write","name":"Swoole\\Process::write","description":"Write data into the pipe and communicate with the parent process or child processes.","tag":"refentry","type":"Function","methodName":"write"},{"id":"class.swoole-process","name":"Swoole\\Process","description":"The Swoole\\Process class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Process"},{"id":"swoole-redis-server.format","name":"Swoole\\Redis\\Server::format","description":"Description","tag":"refentry","type":"Function","methodName":"format"},{"id":"swoole-redis-server.sethandler","name":"Swoole\\Redis\\Server::setHandler","description":"Description","tag":"refentry","type":"Function","methodName":"setHandler"},{"id":"swoole-redis-server.start","name":"Swoole\\Redis\\Server::start","description":"Description","tag":"refentry","type":"Function","methodName":"start"},{"id":"class.swoole-redis-server","name":"Swoole\\Redis\\Server","description":"The Swoole\\Redis\\Server class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Redis\\Server"},{"id":"swoole-runtime.enable-coroutine","name":"Swoole\\Runtime::enableCoroutine","description":"Enable coroutine for specified functions","tag":"refentry","type":"Function","methodName":"enableCoroutine"},{"id":"swoole-runtime.get-hook-flags","name":"Swoole\\Runtime::getHookFlags","description":"Get current hook flags","tag":"refentry","type":"Function","methodName":"getHookFlags"},{"id":"swoole-runtime.set-hook-flags","name":"Swoole\\Runtime::setHookFlags","description":"Set hook flags for coroutine","tag":"refentry","type":"Function","methodName":"setHookFlags"},{"id":"class.swoole-runtime","name":"Swoole\\Runtime","description":"The Swoole\\Runtime class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Runtime"},{"id":"swoole-serialize.pack","name":"Swoole\\Serialize::pack","description":"Serialize the data.","tag":"refentry","type":"Function","methodName":"pack"},{"id":"swoole-serialize.unpack","name":"Swoole\\Serialize::unpack","description":"Unserialize the data.","tag":"refentry","type":"Function","methodName":"unpack"},{"id":"class.swoole-serialize","name":"Swoole\\Serialize","description":"The Swoole\\Serialize class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Serialize"},{"id":"swoole-server.addlistener","name":"Swoole\\Server::addlistener","description":"Add a new listener to the server.","tag":"refentry","type":"Function","methodName":"addlistener"},{"id":"swoole-server.addprocess","name":"Swoole\\Server::addProcess","description":"Add a user defined swoole_process to the server.","tag":"refentry","type":"Function","methodName":"addProcess"},{"id":"swoole-server.after","name":"Swoole\\Server::after","description":"Trigger a callback function after a period of time.","tag":"refentry","type":"Function","methodName":"after"},{"id":"swoole-server.bind","name":"Swoole\\Server::bind","description":"Bind the connection to a user defined user ID.","tag":"refentry","type":"Function","methodName":"bind"},{"id":"swoole-server.cleartimer","name":"swoole_timer_clear","description":"Stop and destroy a timer.","tag":"refentry","type":"Function","methodName":"swoole_timer_clear"},{"id":"swoole-server.cleartimer","name":"Swoole\\Server::clearTimer","description":"Stop and destroy a timer.","tag":"refentry","type":"Function","methodName":"clearTimer"},{"id":"swoole-server.close","name":"Swoole\\Server::close","description":"Close a connection to the client.","tag":"refentry","type":"Function","methodName":"close"},{"id":"swoole-server.confirm","name":"Swoole\\Server::confirm","description":"Check status of the connection.","tag":"refentry","type":"Function","methodName":"confirm"},{"id":"swoole-server.connection-info","name":"Swoole\\Server::connection_info","description":"Get the connection info by file description.","tag":"refentry","type":"Function","methodName":"connection_info"},{"id":"swoole-server.connection-list","name":"Swoole\\Server::connection_list","description":"Get all of the established connections.","tag":"refentry","type":"Function","methodName":"connection_list"},{"id":"swoole-server.construct","name":"Swoole\\Server::__construct","description":"Construct a Swoole server.","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"swoole-server.defer","name":"Swoole\\Server::defer","description":"Delay execution of the callback function at the end of current EventLoop.","tag":"refentry","type":"Function","methodName":"defer"},{"id":"swoole-server.exist","name":"Swoole\\Server::exist","description":"Check if the connection is existed.","tag":"refentry","type":"Function","methodName":"exist"},{"id":"swoole-server.finish","name":"Swoole\\Server::finish","description":"Used in task process for sending result to the worker process when the task is finished.","tag":"refentry","type":"Function","methodName":"finish"},{"id":"swoole-server.getclientinfo","name":"Swoole\\Server::getClientInfo","description":"Get the connection info by file description.","tag":"refentry","type":"Function","methodName":"getClientInfo"},{"id":"swoole-server.getclientlist","name":"Swoole\\Server::getClientList","description":"Get all of the established connections.","tag":"refentry","type":"Function","methodName":"getClientList"},{"id":"swoole-server.getlasterror","name":"Swoole\\Server::getLastError","description":"Get the error code of the most recent error.","tag":"refentry","type":"Function","methodName":"getLastError"},{"id":"swoole-server.heartbeat","name":"Swoole\\Server::heartbeat","description":"Check all the connections on the server.","tag":"refentry","type":"Function","methodName":"heartbeat"},{"id":"swoole-server.listen","name":"Swoole\\Server::listen","description":"Listen on the given IP and port, socket type.","tag":"refentry","type":"Function","methodName":"listen"},{"id":"swoole-server.on","name":"Swoole\\Server::on","description":"Register a callback function by event name.","tag":"refentry","type":"Function","methodName":"on"},{"id":"swoole-server.pause","name":"Swoole\\Server::pause","description":"Stop receiving data from the connection.","tag":"refentry","type":"Function","methodName":"pause"},{"id":"swoole-server.protect","name":"Swoole\\Server::protect","description":"Set the connection to be protected mode.","tag":"refentry","type":"Function","methodName":"protect"},{"id":"swoole-server.reload","name":"Swoole\\Server::reload","description":"Restart all the worker process.","tag":"refentry","type":"Function","methodName":"reload"},{"id":"swoole-server.resume","name":"Swoole\\Server::resume","description":"Start receiving data from the connection.","tag":"refentry","type":"Function","methodName":"resume"},{"id":"swoole-server.send","name":"Swoole\\Server::send","description":"Send data to the client.","tag":"refentry","type":"Function","methodName":"send"},{"id":"swoole-server.sendfile","name":"Swoole\\Server::sendfile","description":"Send file to the connection.","tag":"refentry","type":"Function","methodName":"sendfile"},{"id":"swoole-server.sendmessage","name":"Swoole\\Server::sendMessage","description":"Send message to worker processes by ID.","tag":"refentry","type":"Function","methodName":"sendMessage"},{"id":"swoole-server.sendto","name":"Swoole\\Server::sendto","description":"Send data to the remote UDP address.","tag":"refentry","type":"Function","methodName":"sendto"},{"id":"swoole-server.sendwait","name":"Swoole\\Server::sendwait","description":"Send data to the remote socket in the blocking way.","tag":"refentry","type":"Function","methodName":"sendwait"},{"id":"swoole-server.set","name":"Swoole\\Server::set","description":"Set the runtime settings of the swoole server.","tag":"refentry","type":"Function","methodName":"set"},{"id":"swoole-server.shutdown","name":"Swoole\\Server::shutdown","description":"Shutdown the master server process, this function can be called in worker processes.","tag":"refentry","type":"Function","methodName":"shutdown"},{"id":"swoole-server.start","name":"Swoole\\Server::start","description":"Start the Swoole server.","tag":"refentry","type":"Function","methodName":"start"},{"id":"swoole-server.stats","name":"Swoole\\Server::stats","description":"Get the stats of the Swoole server.","tag":"refentry","type":"Function","methodName":"stats"},{"id":"swoole-server.stop","name":"Swoole\\Server::stop","description":"Stop the Swoole server.","tag":"refentry","type":"Function","methodName":"stop"},{"id":"swoole-server.task","name":"Swoole\\Server::task","description":"Send data to the task worker processes.","tag":"refentry","type":"Function","methodName":"task"},{"id":"swoole-server.taskwait","name":"Swoole\\Server::taskwait","description":"Send data to the task worker processes in blocking way.","tag":"refentry","type":"Function","methodName":"taskwait"},{"id":"swoole-server.taskwaitmulti","name":"Swoole\\Server::taskWaitMulti","description":"Execute multiple tasks concurrently.","tag":"refentry","type":"Function","methodName":"taskWaitMulti"},{"id":"swoole-server.tick","name":"Swoole\\Server::tick","description":"Repeats a given function at every given time-interval.","tag":"refentry","type":"Function","methodName":"tick"},{"id":"class.swoole-server","name":"Swoole\\Server","description":"The Swoole\\Server class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Server"},{"id":"swoole-table.column","name":"Swoole\\Table::column","description":"Set the data type and size of the columns.","tag":"refentry","type":"Function","methodName":"column"},{"id":"swoole-table.construct","name":"Swoole\\Table::__construct","description":"Construct a Swoole memory table with fixed size.","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"swoole-table.count","name":"Swoole\\Table::count","description":"Count the rows in the table, or count all the elements in the table if $mode = 1.","tag":"refentry","type":"Function","methodName":"count"},{"id":"swoole-table.create","name":"Swoole\\Table::create","description":"Create the swoole memory table.","tag":"refentry","type":"Function","methodName":"create"},{"id":"swoole-table.current","name":"Swoole\\Table::current","description":"Get the current row.","tag":"refentry","type":"Function","methodName":"current"},{"id":"swoole-table.decr","name":"Swoole\\Table::decr","description":"Decrement the value in the Swoole table by $key and $column","tag":"refentry","type":"Function","methodName":"decr"},{"id":"swoole-table.del","name":"Swoole\\Table::del","description":"Delete a row in the Swoole table by $key","tag":"refentry","type":"Function","methodName":"del"},{"id":"swoole-table.destroy","name":"Swoole\\Table::destroy","description":"Destroy the Swoole table.","tag":"refentry","type":"Function","methodName":"destroy"},{"id":"swoole-table.exist","name":"Swoole\\Table::exist","description":"Check if a row is existed by $row_key.","tag":"refentry","type":"Function","methodName":"exist"},{"id":"swoole-table.get","name":"Swoole\\Table::get","description":"Get the value in the Swoole table by $key and $field.","tag":"refentry","type":"Function","methodName":"get"},{"id":"swoole-table.incr","name":"Swoole\\Table::incr","description":"Increment the value by $key and $column","tag":"refentry","type":"Function","methodName":"incr"},{"id":"swoole-table.key","name":"Swoole\\Table::key","description":"Get the key of current row.","tag":"refentry","type":"Function","methodName":"key"},{"id":"swoole-table.next","name":"Swoole\\Table::next","description":"Iterator the next row","tag":"refentry","type":"Function","methodName":"next"},{"id":"swoole-table.rewind","name":"Swoole\\Table::rewind","description":"Rewind the iterator.","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"swoole-table.set","name":"Swoole\\Table::set","description":"Update a row of the table by $key.","tag":"refentry","type":"Function","methodName":"set"},{"id":"swoole-table.valid","name":"Swoole\\Table::valid","description":"Check if the current row is valid.","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.swoole-table","name":"Swoole\\Table","description":"The Swoole\\Table class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Table"},{"id":"swoole-timer.after","name":"Swoole\\Timer::after","description":"Trigger a callback function after a period of time.","tag":"refentry","type":"Function","methodName":"after"},{"id":"swoole-timer.clear","name":"Swoole\\Timer::clear","description":"Delete a timer by timer ID.","tag":"refentry","type":"Function","methodName":"clear"},{"id":"swoole-timer.exists","name":"Swoole\\Timer::exists","description":"Check if a timer is existed.","tag":"refentry","type":"Function","methodName":"exists"},{"id":"swoole-timer.tick","name":"Swoole\\Timer::tick","description":"Repeats a given function at every given time-interval.","tag":"refentry","type":"Function","methodName":"tick"},{"id":"class.swoole-timer","name":"Swoole\\Timer","description":"The Swoole\\Timer class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\Timer"},{"id":"class.swoole-websocket-frame","name":"Swoole\\WebSocket\\Frame","description":"The Swoole\\WebSocket\\Frame class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\WebSocket\\Frame"},{"id":"swoole-websocket-server.exist","name":"Swoole\\WebSocket\\Server::exist","description":"Check if the file descriptor exists.","tag":"refentry","type":"Function","methodName":"exist"},{"id":"swoole-websocket-server.on","name":"Swoole\\WebSocket\\Server::on","description":"Register event callback function","tag":"refentry","type":"Function","methodName":"on"},{"id":"swoole-websocket-server.pack","name":"Swoole\\WebSocket\\Server::pack","description":"Get a pack of binary data to send in a single frame.","tag":"refentry","type":"Function","methodName":"pack"},{"id":"swoole-websocket-server.push","name":"Swoole\\WebSocket\\Server::push","description":"Push data to the remote client.","tag":"refentry","type":"Function","methodName":"push"},{"id":"swoole-websocket-server.unpack","name":"Swoole\\WebSocket\\Server::unpack","description":"Unpack the binary data received from the client.","tag":"refentry","type":"Function","methodName":"unpack"},{"id":"class.swoole-websocket-server","name":"Swoole\\WebSocket\\Server","description":"The Swoole\\WebSocket\\Server class","tag":"phpdoc:classref","type":"Class","methodName":"Swoole\\WebSocket\\Server"},{"id":"book.swoole","name":"Swoole","description":"Swoole","tag":"book","type":"Extension","methodName":"Swoole"},{"id":"intro.tidy","name":"Introduction","description":"Tidy","tag":"preface","type":"General","methodName":"Introduction"},{"id":"tidy.requirements","name":"Requirements","description":"Tidy","tag":"section","type":"General","methodName":"Requirements"},{"id":"tidy.installation","name":"Installation","description":"Tidy","tag":"section","type":"General","methodName":"Installation"},{"id":"tidy.configuration","name":"Runtime Configuration","description":"Tidy","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"tidy.setup","name":"Installing\/Configuring","description":"Tidy","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"tidy.constants","name":"Predefined Constants","description":"Tidy","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"tidy.examples.basic","name":"Tidy example","description":"Tidy","tag":"section","type":"General","methodName":"Tidy example"},{"id":"tidy.examples","name":"Examples","description":"Tidy","tag":"appendix","type":"General","methodName":"Examples"},{"id":"tidy.body","name":"tidy_get_body","description":"Returns a tidyNode object starting from the tag of the tidy parse tree","tag":"refentry","type":"Function","methodName":"tidy_get_body"},{"id":"tidy.body","name":"tidy::body","description":"Returns a tidyNode object starting from the tag of the tidy parse tree","tag":"refentry","type":"Function","methodName":"body"},{"id":"tidy.cleanrepair","name":"tidy_clean_repair","description":"Execute configured cleanup and repair operations on parsed markup","tag":"refentry","type":"Function","methodName":"tidy_clean_repair"},{"id":"tidy.cleanrepair","name":"tidy::cleanRepair","description":"Execute configured cleanup and repair operations on parsed markup","tag":"refentry","type":"Function","methodName":"cleanRepair"},{"id":"tidy.construct","name":"tidy::__construct","description":"Constructs a new tidy object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"tidy.diagnose","name":"tidy_diagnose","description":"Run configured diagnostics on parsed and repaired markup","tag":"refentry","type":"Function","methodName":"tidy_diagnose"},{"id":"tidy.diagnose","name":"tidy::diagnose","description":"Run configured diagnostics on parsed and repaired markup","tag":"refentry","type":"Function","methodName":"diagnose"},{"id":"tidy.props.errorbuffer","name":"tidy_get_error_buffer","description":"Return warnings and errors which occurred parsing the specified document","tag":"refentry","type":"Function","methodName":"tidy_get_error_buffer"},{"id":"tidy.props.errorbuffer","name":"tidy::$errorBuffer","description":"Return warnings and errors which occurred parsing the specified document","tag":"refentry","type":"Function","methodName":"$errorBuffer"},{"id":"tidy.getconfig","name":"tidy_get_config","description":"Get current Tidy configuration","tag":"refentry","type":"Function","methodName":"tidy_get_config"},{"id":"tidy.getconfig","name":"tidy::getConfig","description":"Get current Tidy configuration","tag":"refentry","type":"Function","methodName":"getConfig"},{"id":"tidy.gethtmlver","name":"tidy_get_html_ver","description":"Get the Detected HTML version for the specified document","tag":"refentry","type":"Function","methodName":"tidy_get_html_ver"},{"id":"tidy.gethtmlver","name":"tidy::getHtmlVer","description":"Get the Detected HTML version for the specified document","tag":"refentry","type":"Function","methodName":"getHtmlVer"},{"id":"tidy.getopt","name":"tidy_getopt","description":"Returns the value of the specified configuration option for the tidy document","tag":"refentry","type":"Function","methodName":"tidy_getopt"},{"id":"tidy.getopt","name":"tidy::getOpt","description":"Returns the value of the specified configuration option for the tidy document","tag":"refentry","type":"Function","methodName":"getOpt"},{"id":"tidy.getoptdoc","name":"tidy_get_opt_doc","description":"Returns the documentation for the given option name","tag":"refentry","type":"Function","methodName":"tidy_get_opt_doc"},{"id":"tidy.getoptdoc","name":"tidy::getOptDoc","description":"Returns the documentation for the given option name","tag":"refentry","type":"Function","methodName":"getOptDoc"},{"id":"tidy.getrelease","name":"tidy_get_release","description":"Get release date (version) for Tidy library","tag":"refentry","type":"Function","methodName":"tidy_get_release"},{"id":"tidy.getrelease","name":"tidy::getRelease","description":"Get release date (version) for Tidy library","tag":"refentry","type":"Function","methodName":"getRelease"},{"id":"tidy.getstatus","name":"tidy_get_status","description":"Get status of specified document","tag":"refentry","type":"Function","methodName":"tidy_get_status"},{"id":"tidy.getstatus","name":"tidy::getStatus","description":"Get status of specified document","tag":"refentry","type":"Function","methodName":"getStatus"},{"id":"tidy.head","name":"tidy_get_head","description":"Returns a tidyNode object starting from the tag of the tidy parse tree","tag":"refentry","type":"Function","methodName":"tidy_get_head"},{"id":"tidy.head","name":"tidy::head","description":"Returns a tidyNode object starting from the tag of the tidy parse tree","tag":"refentry","type":"Function","methodName":"head"},{"id":"tidy.html","name":"tidy_get_html","description":"Returns a tidyNode object starting from the tag of the tidy parse tree","tag":"refentry","type":"Function","methodName":"tidy_get_html"},{"id":"tidy.html","name":"tidy::html","description":"Returns a tidyNode object starting from the tag of the tidy parse tree","tag":"refentry","type":"Function","methodName":"html"},{"id":"tidy.isxhtml","name":"tidy_is_xhtml","description":"Indicates if the document is a XHTML document","tag":"refentry","type":"Function","methodName":"tidy_is_xhtml"},{"id":"tidy.isxhtml","name":"tidy::isXhtml","description":"Indicates if the document is a XHTML document","tag":"refentry","type":"Function","methodName":"isXhtml"},{"id":"tidy.isxml","name":"tidy_is_xml","description":"Indicates if the document is a generic (non HTML\/XHTML) XML document","tag":"refentry","type":"Function","methodName":"tidy_is_xml"},{"id":"tidy.isxml","name":"tidy::isXml","description":"Indicates if the document is a generic (non HTML\/XHTML) XML document","tag":"refentry","type":"Function","methodName":"isXml"},{"id":"tidy.parsefile","name":"tidy_parse_file","description":"Parse markup in file or URI","tag":"refentry","type":"Function","methodName":"tidy_parse_file"},{"id":"tidy.parsefile","name":"tidy::parseFile","description":"Parse markup in file or URI","tag":"refentry","type":"Function","methodName":"parseFile"},{"id":"tidy.parsestring","name":"tidy_parse_string","description":"Parse a document stored in a string","tag":"refentry","type":"Function","methodName":"tidy_parse_string"},{"id":"tidy.parsestring","name":"tidy::parseString","description":"Parse a document stored in a string","tag":"refentry","type":"Function","methodName":"parseString"},{"id":"tidy.repairfile","name":"tidy_repair_file","description":"Repair a file and return it as a string","tag":"refentry","type":"Function","methodName":"tidy_repair_file"},{"id":"tidy.repairfile","name":"tidy::repairFile","description":"Repair a file and return it as a string","tag":"refentry","type":"Function","methodName":"repairFile"},{"id":"tidy.repairstring","name":"tidy_repair_string","description":"Repair a string using an optionally provided configuration file","tag":"refentry","type":"Function","methodName":"tidy_repair_string"},{"id":"tidy.repairstring","name":"tidy::repairString","description":"Repair a string using an optionally provided configuration file","tag":"refentry","type":"Function","methodName":"repairString"},{"id":"tidy.root","name":"tidy_get_root","description":"Returns a tidyNode object representing the root of the tidy parse tree","tag":"refentry","type":"Function","methodName":"tidy_get_root"},{"id":"tidy.root","name":"tidy::root","description":"Returns a tidyNode object representing the root of the tidy parse tree","tag":"refentry","type":"Function","methodName":"root"},{"id":"class.tidy","name":"tidy","description":"The tidy class","tag":"phpdoc:classref","type":"Class","methodName":"tidy"},{"id":"tidynode.construct","name":"tidyNode::__construct","description":"Private constructor to disallow direct instantiation","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"tidynode.getnextsibling","name":"tidyNode::getNextSibling","description":"Returns the next sibling node of the current node","tag":"refentry","type":"Function","methodName":"getNextSibling"},{"id":"tidynode.getparent","name":"tidyNode::getParent","description":"Returns the parent node of the current node","tag":"refentry","type":"Function","methodName":"getParent"},{"id":"tidynode.getprevioussibling","name":"tidyNode::getPreviousSibling","description":"Returns the previous sibling node of the current node","tag":"refentry","type":"Function","methodName":"getPreviousSibling"},{"id":"tidynode.haschildren","name":"tidyNode::hasChildren","description":"Checks if a node has children","tag":"refentry","type":"Function","methodName":"hasChildren"},{"id":"tidynode.hassiblings","name":"tidyNode::hasSiblings","description":"Checks if a node has siblings","tag":"refentry","type":"Function","methodName":"hasSiblings"},{"id":"tidynode.isasp","name":"tidyNode::isAsp","description":"Checks if this node is ASP","tag":"refentry","type":"Function","methodName":"isAsp"},{"id":"tidynode.iscomment","name":"tidyNode::isComment","description":"Checks if a node represents a comment","tag":"refentry","type":"Function","methodName":"isComment"},{"id":"tidynode.ishtml","name":"tidyNode::isHtml","description":"Checks if a node is an element node","tag":"refentry","type":"Function","methodName":"isHtml"},{"id":"tidynode.isjste","name":"tidyNode::isJste","description":"Checks if this node is JSTE","tag":"refentry","type":"Function","methodName":"isJste"},{"id":"tidynode.isphp","name":"tidyNode::isPhp","description":"Checks if a node is PHP","tag":"refentry","type":"Function","methodName":"isPhp"},{"id":"tidynode.istext","name":"tidyNode::isText","description":"Checks if a node represents text (no markup)","tag":"refentry","type":"Function","methodName":"isText"},{"id":"class.tidynode","name":"tidyNode","description":"The tidyNode class","tag":"phpdoc:classref","type":"Class","methodName":"tidyNode"},{"id":"function.ob-tidyhandler","name":"ob_tidyhandler","description":"ob_start callback function to repair the buffer","tag":"refentry","type":"Function","methodName":"ob_tidyhandler"},{"id":"function.tidy-access-count","name":"tidy_access_count","description":"Returns the Number of Tidy accessibility warnings encountered for specified document","tag":"refentry","type":"Function","methodName":"tidy_access_count"},{"id":"function.tidy-config-count","name":"tidy_config_count","description":"Returns the Number of Tidy configuration errors encountered for specified document","tag":"refentry","type":"Function","methodName":"tidy_config_count"},{"id":"function.tidy-error-count","name":"tidy_error_count","description":"Returns the Number of Tidy errors encountered for specified document","tag":"refentry","type":"Function","methodName":"tidy_error_count"},{"id":"function.tidy-get-output","name":"tidy_get_output","description":"Return a string representing the parsed tidy markup","tag":"refentry","type":"Function","methodName":"tidy_get_output"},{"id":"function.tidy-warning-count","name":"tidy_warning_count","description":"Returns the Number of Tidy warnings encountered for specified document","tag":"refentry","type":"Function","methodName":"tidy_warning_count"},{"id":"ref.tidy","name":"Tidy Functions","description":"Tidy","tag":"reference","type":"Extension","methodName":"Tidy Functions"},{"id":"book.tidy","name":"Tidy","description":"Tidy","tag":"book","type":"Extension","methodName":"Tidy"},{"id":"intro.tokenizer","name":"Introduction","description":"Tokenizer","tag":"preface","type":"General","methodName":"Introduction"},{"id":"tokenizer.installation","name":"Installation","description":"Tokenizer","tag":"section","type":"General","methodName":"Installation"},{"id":"tokenizer.setup","name":"Installing\/Configuring","description":"Tokenizer","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"tokenizer.constants","name":"Predefined Constants","description":"Tokenizer","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"tokenizer.examples","name":"Examples","description":"Tokenizer","tag":"appendix","type":"General","methodName":"Examples"},{"id":"phptoken.construct","name":"PhpToken::__construct","description":"Returns a new PhpToken object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"phptoken.gettokenname","name":"PhpToken::getTokenName","description":"Returns the name of the token.","tag":"refentry","type":"Function","methodName":"getTokenName"},{"id":"phptoken.is","name":"PhpToken::is","description":"Tells whether the token is of given kind.","tag":"refentry","type":"Function","methodName":"is"},{"id":"phptoken.isignorable","name":"PhpToken::isIgnorable","description":"Tells whether the token would be ignored by the PHP parser.","tag":"refentry","type":"Function","methodName":"isIgnorable"},{"id":"phptoken.tostring","name":"PhpToken::__toString","description":"Returns the textual content of the token.","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"phptoken.tokenize","name":"PhpToken::tokenize","description":"Splits given source into PHP tokens, represented by PhpToken objects.","tag":"refentry","type":"Function","methodName":"tokenize"},{"id":"class.phptoken","name":"PhpToken","description":"The PhpToken class","tag":"phpdoc:classref","type":"Class","methodName":"PhpToken"},{"id":"function.token-get-all","name":"token_get_all","description":"Split given source into PHP tokens","tag":"refentry","type":"Function","methodName":"token_get_all"},{"id":"function.token-name","name":"token_name","description":"Get the symbolic name of a given PHP token","tag":"refentry","type":"Function","methodName":"token_name"},{"id":"ref.tokenizer","name":"Tokenizer Functions","description":"Tokenizer","tag":"reference","type":"Extension","methodName":"Tokenizer Functions"},{"id":"book.tokenizer","name":"Tokenizer","description":"Tokenizer","tag":"book","type":"Extension","methodName":"Tokenizer"},{"id":"intro.url","name":"Introduction","description":"URLs","tag":"preface","type":"General","methodName":"Introduction"},{"id":"url.constants","name":"Predefined Constants","description":"URLs","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.base64-decode","name":"base64_decode","description":"Decodes data encoded with MIME base64","tag":"refentry","type":"Function","methodName":"base64_decode"},{"id":"function.base64-encode","name":"base64_encode","description":"Encodes data with MIME base64","tag":"refentry","type":"Function","methodName":"base64_encode"},{"id":"function.get-headers","name":"get_headers","description":"Fetches all the headers sent by the server in response to an HTTP request","tag":"refentry","type":"Function","methodName":"get_headers"},{"id":"function.get-meta-tags","name":"get_meta_tags","description":"Extracts all meta tag content attributes from a file and returns an array","tag":"refentry","type":"Function","methodName":"get_meta_tags"},{"id":"function.http-build-query","name":"http_build_query","description":"Generate URL-encoded query string","tag":"refentry","type":"Function","methodName":"http_build_query"},{"id":"function.parse-url","name":"parse_url","description":"Parse a URL and return its components","tag":"refentry","type":"Function","methodName":"parse_url"},{"id":"function.rawurldecode","name":"rawurldecode","description":"Decode URL-encoded strings","tag":"refentry","type":"Function","methodName":"rawurldecode"},{"id":"function.rawurlencode","name":"rawurlencode","description":"URL-encode according to RFC 3986","tag":"refentry","type":"Function","methodName":"rawurlencode"},{"id":"function.urldecode","name":"urldecode","description":"Decodes URL-encoded string","tag":"refentry","type":"Function","methodName":"urldecode"},{"id":"function.urlencode","name":"urlencode","description":"URL-encodes string","tag":"refentry","type":"Function","methodName":"urlencode"},{"id":"ref.url","name":"URL Functions","description":"URLs","tag":"reference","type":"Extension","methodName":"URL Functions"},{"id":"book.url","name":"URLs","description":"URLs","tag":"book","type":"Extension","methodName":"URLs"},{"id":"intro.v8js","name":"Introduction","description":"V8 Javascript Engine Integration","tag":"preface","type":"General","methodName":"Introduction"},{"id":"v8js.requirements","name":"Requirements","description":"V8 Javascript Engine Integration","tag":"section","type":"General","methodName":"Requirements"},{"id":"v8js.installation","name":"Installation","description":"V8 Javascript Engine Integration","tag":"section","type":"General","methodName":"Installation"},{"id":"v8js.configuration","name":"Runtime Configuration","description":"V8 Javascript Engine Integration","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"v8js.setup","name":"Installing\/Configuring","description":"V8 Javascript Engine Integration","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"v8js.examples","name":"Examples","description":"V8 Javascript Engine Integration","tag":"chapter","type":"General","methodName":"Examples"},{"id":"v8js.construct","name":"V8Js::__construct","description":"Construct a new V8Js object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"v8js.executestring","name":"V8Js::executeString","description":"Execute a string as Javascript code","tag":"refentry","type":"Function","methodName":"executeString"},{"id":"v8js.getextensions","name":"V8Js::getExtensions","description":"Return an array of registered extensions","tag":"refentry","type":"Function","methodName":"getExtensions"},{"id":"v8js.getpendingexception","name":"V8Js::getPendingException","description":"Return pending uncaught Javascript exception","tag":"refentry","type":"Function","methodName":"getPendingException"},{"id":"v8js.registerextension","name":"V8Js::registerExtension","description":"Register Javascript extensions for V8Js","tag":"refentry","type":"Function","methodName":"registerExtension"},{"id":"class.v8js","name":"V8Js","description":"The V8Js class","tag":"phpdoc:classref","type":"Class","methodName":"V8Js"},{"id":"v8jsexception.getjsfilename","name":"V8JsException::getJsFileName","description":"The getJsFileName purpose","tag":"refentry","type":"Function","methodName":"getJsFileName"},{"id":"v8jsexception.getjslinenumber","name":"V8JsException::getJsLineNumber","description":"The getJsLineNumber purpose","tag":"refentry","type":"Function","methodName":"getJsLineNumber"},{"id":"v8jsexception.getjssourceline","name":"V8JsException::getJsSourceLine","description":"The getJsSourceLine purpose","tag":"refentry","type":"Function","methodName":"getJsSourceLine"},{"id":"v8jsexception.getjstrace","name":"V8JsException::getJsTrace","description":"The getJsTrace purpose","tag":"refentry","type":"Function","methodName":"getJsTrace"},{"id":"class.v8jsexception","name":"V8JsException","description":"The V8JsException class","tag":"phpdoc:classref","type":"Class","methodName":"V8JsException"},{"id":"book.v8js","name":"V8js","description":"V8 Javascript Engine Integration","tag":"book","type":"Extension","methodName":"V8js"},{"id":"intro.yaml","name":"Introduction","description":"YAML Data Serialization","tag":"preface","type":"General","methodName":"Introduction"},{"id":"yaml.requirements","name":"Requirements","description":"YAML Data Serialization","tag":"section","type":"General","methodName":"Requirements"},{"id":"yaml.installation","name":"Installation","description":"YAML Data Serialization","tag":"section","type":"General","methodName":"Installation"},{"id":"yaml.configuration","name":"Runtime Configuration","description":"YAML Data Serialization","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"yaml.setup","name":"Installing\/Configuring","description":"YAML Data Serialization","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"yaml.constants","name":"Predefined Constants","description":"YAML Data Serialization","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"yaml.examples","name":"Examples","description":"YAML Data Serialization","tag":"chapter","type":"General","methodName":"Examples"},{"id":"yaml.callbacks.parse","name":"Parse callbacks","description":"YAML Data Serialization","tag":"section","type":"General","methodName":"Parse callbacks"},{"id":"yaml.callbacks.emit","name":"Emit callbacks","description":"YAML Data Serialization","tag":"section","type":"General","methodName":"Emit callbacks"},{"id":"yaml.callbacks","name":"Callbacks","description":"YAML Data Serialization","tag":"chapter","type":"General","methodName":"Callbacks"},{"id":"function.yaml-emit","name":"yaml_emit","description":"Returns the YAML representation of a value","tag":"refentry","type":"Function","methodName":"yaml_emit"},{"id":"function.yaml-emit-file","name":"yaml_emit_file","description":"Send the YAML representation of a value to a file","tag":"refentry","type":"Function","methodName":"yaml_emit_file"},{"id":"function.yaml-parse","name":"yaml_parse","description":"Parse a YAML stream","tag":"refentry","type":"Function","methodName":"yaml_parse"},{"id":"function.yaml-parse-file","name":"yaml_parse_file","description":"Parse a YAML stream from a file","tag":"refentry","type":"Function","methodName":"yaml_parse_file"},{"id":"function.yaml-parse-url","name":"yaml_parse_url","description":"Parse a Yaml stream from a URL","tag":"refentry","type":"Function","methodName":"yaml_parse_url"},{"id":"ref.yaml","name":"Yaml Functions","description":"YAML Data Serialization","tag":"reference","type":"Extension","methodName":"Yaml Functions"},{"id":"book.yaml","name":"Yaml","description":"YAML Data Serialization","tag":"book","type":"Extension","methodName":"Yaml"},{"id":"intro.yaf","name":"Introduction","description":"Yet Another Framework","tag":"preface","type":"General","methodName":"Introduction"},{"id":"yaf.installation","name":"Installation","description":"Yet Another Framework","tag":"section","type":"General","methodName":"Installation"},{"id":"yaf.configuration","name":"Runtime Configuration","description":"Yet Another Framework","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"yaf.setup","name":"Installing\/Configuring","description":"Yet Another Framework","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"yaf.constants","name":"Predefined Constants","description":"Yet Another Framework","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"yaf.tutorials","name":"Examples","description":"Yet Another Framework","tag":"chapter","type":"General","methodName":"Examples"},{"id":"yaf.appconfig","name":"Application Configuration","description":"Yet Another Framework","tag":"chapter","type":"General","methodName":"Application Configuration"},{"id":"yaf-application.app","name":"Yaf_Application::app","description":"Retrieve an Application instance","tag":"refentry","type":"Function","methodName":"app"},{"id":"yaf-application.bootstrap","name":"Yaf_Application::bootstrap","description":"Call bootstrap","tag":"refentry","type":"Function","methodName":"bootstrap"},{"id":"yaf-application.clearlasterror","name":"Yaf_Application::clearLastError","description":"Clear the last error info","tag":"refentry","type":"Function","methodName":"clearLastError"},{"id":"yaf-application.construct","name":"Yaf_Application::__construct","description":"Yaf_Application constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-application.destruct","name":"Yaf_Application::__destruct","description":"The __destruct purpose","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"yaf-application.environ","name":"Yaf_Application::environ","description":"Retrive environ","tag":"refentry","type":"Function","methodName":"environ"},{"id":"yaf-application.execute","name":"Yaf_Application::execute","description":"Execute a callback","tag":"refentry","type":"Function","methodName":"execute"},{"id":"yaf-application.getappdirectory","name":"Yaf_Application::getAppDirectory","description":"Get the application directory","tag":"refentry","type":"Function","methodName":"getAppDirectory"},{"id":"yaf-application.getconfig","name":"Yaf_Application::getConfig","description":"Retrive the config instance","tag":"refentry","type":"Function","methodName":"getConfig"},{"id":"yaf-application.getdispatcher","name":"Yaf_Application::getDispatcher","description":"Get Yaf_Dispatcher instance","tag":"refentry","type":"Function","methodName":"getDispatcher"},{"id":"yaf-application.getlasterrormsg","name":"Yaf_Application::getLastErrorMsg","description":"Get message of the last occurred error","tag":"refentry","type":"Function","methodName":"getLastErrorMsg"},{"id":"yaf-application.getlasterrorno","name":"Yaf_Application::getLastErrorNo","description":"Get code of last occurred error","tag":"refentry","type":"Function","methodName":"getLastErrorNo"},{"id":"yaf-application.getmodules","name":"Yaf_Application::getModules","description":"Get defined module names","tag":"refentry","type":"Function","methodName":"getModules"},{"id":"yaf-application.run","name":"Yaf_Application::run","description":"Start Yaf_Application","tag":"refentry","type":"Function","methodName":"run"},{"id":"yaf-application.setappdirectory","name":"Yaf_Application::setAppDirectory","description":"Change the application directory","tag":"refentry","type":"Function","methodName":"setAppDirectory"},{"id":"class.yaf-application","name":"Yaf_Application","description":"The Yaf_Application class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Application"},{"id":"class.yaf-bootstrap-abstract","name":"Yaf_Bootstrap_Abstract","description":"The Yaf_Bootstrap_Abstract class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Bootstrap_Abstract"},{"id":"yaf-dispatcher.autorender","name":"Yaf_Dispatcher::autoRender","description":"Switch on\/off autorendering","tag":"refentry","type":"Function","methodName":"autoRender"},{"id":"yaf-dispatcher.catchexception","name":"Yaf_Dispatcher::catchException","description":"Switch on\/off exception catching","tag":"refentry","type":"Function","methodName":"catchException"},{"id":"yaf-dispatcher.construct","name":"Yaf_Dispatcher::__construct","description":"Yaf_Dispatcher constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-dispatcher.disableview","name":"Yaf_Dispatcher::disableView","description":"Disable view rendering","tag":"refentry","type":"Function","methodName":"disableView"},{"id":"yaf-dispatcher.dispatch","name":"Yaf_Dispatcher::dispatch","description":"Dispatch a request","tag":"refentry","type":"Function","methodName":"dispatch"},{"id":"yaf-dispatcher.enableview","name":"Yaf_Dispatcher::enableView","description":"Enable view rendering","tag":"refentry","type":"Function","methodName":"enableView"},{"id":"yaf-dispatcher.flushinstantly","name":"Yaf_Dispatcher::flushInstantly","description":"Switch on\/off the instant flushing","tag":"refentry","type":"Function","methodName":"flushInstantly"},{"id":"yaf-dispatcher.getapplication","name":"Yaf_Dispatcher::getApplication","description":"Retrieve the application","tag":"refentry","type":"Function","methodName":"getApplication"},{"id":"yaf-dispatcher.getdefaultaction","name":"Yaf_Dispatcher::getDefaultAction","description":"Retrive the default action name","tag":"refentry","type":"Function","methodName":"getDefaultAction"},{"id":"yaf-dispatcher.getdefaultcontroller","name":"Yaf_Dispatcher::getDefaultController","description":"Retrive the default controller name","tag":"refentry","type":"Function","methodName":"getDefaultController"},{"id":"yaf-dispatcher.getdefaultmodule","name":"Yaf_Dispatcher::getDefaultModule","description":"Retrive the default module name","tag":"refentry","type":"Function","methodName":"getDefaultModule"},{"id":"yaf-dispatcher.getinstance","name":"Yaf_Dispatcher::getInstance","description":"Retrive the dispatcher instance","tag":"refentry","type":"Function","methodName":"getInstance"},{"id":"yaf-dispatcher.getrequest","name":"Yaf_Dispatcher::getRequest","description":"Retrive the request instance","tag":"refentry","type":"Function","methodName":"getRequest"},{"id":"yaf-dispatcher.getrouter","name":"Yaf_Dispatcher::getRouter","description":"Retrive router instance","tag":"refentry","type":"Function","methodName":"getRouter"},{"id":"yaf-dispatcher.initview","name":"Yaf_Dispatcher::initView","description":"Initialize view and return it","tag":"refentry","type":"Function","methodName":"initView"},{"id":"yaf-dispatcher.registerplugin","name":"Yaf_Dispatcher::registerPlugin","description":"Register a plugin","tag":"refentry","type":"Function","methodName":"registerPlugin"},{"id":"yaf-dispatcher.returnresponse","name":"Yaf_Dispatcher::returnResponse","description":"The returnResponse purpose","tag":"refentry","type":"Function","methodName":"returnResponse"},{"id":"yaf-dispatcher.setdefaultaction","name":"Yaf_Dispatcher::setDefaultAction","description":"Change default action name","tag":"refentry","type":"Function","methodName":"setDefaultAction"},{"id":"yaf-dispatcher.setdefaultcontroller","name":"Yaf_Dispatcher::setDefaultController","description":"Change default controller name","tag":"refentry","type":"Function","methodName":"setDefaultController"},{"id":"yaf-dispatcher.setdefaultmodule","name":"Yaf_Dispatcher::setDefaultModule","description":"Change default module name","tag":"refentry","type":"Function","methodName":"setDefaultModule"},{"id":"yaf-dispatcher.seterrorhandler","name":"Yaf_Dispatcher::setErrorHandler","description":"Set error handler","tag":"refentry","type":"Function","methodName":"setErrorHandler"},{"id":"yaf-dispatcher.setrequest","name":"Yaf_Dispatcher::setRequest","description":"The setRequest purpose","tag":"refentry","type":"Function","methodName":"setRequest"},{"id":"yaf-dispatcher.setview","name":"Yaf_Dispatcher::setView","description":"Set a custom view engine","tag":"refentry","type":"Function","methodName":"setView"},{"id":"yaf-dispatcher.throwexception","name":"Yaf_Dispatcher::throwException","description":"Switch on\/off exception throwing","tag":"refentry","type":"Function","methodName":"throwException"},{"id":"class.yaf-dispatcher","name":"Yaf_Dispatcher","description":"The Yaf_Dispatcher class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Dispatcher"},{"id":"yaf-config-abstract.get","name":"Yaf_Config_Abstract::get","description":"Getter","tag":"refentry","type":"Function","methodName":"get"},{"id":"yaf-config-abstract.readonly","name":"Yaf_Config_Abstract::readonly","description":"Find a config whether readonly","tag":"refentry","type":"Function","methodName":"readonly"},{"id":"yaf-config-abstract.set","name":"Yaf_Config_Abstract::set","description":"Setter","tag":"refentry","type":"Function","methodName":"set"},{"id":"yaf-config-abstract.toarray","name":"Yaf_Config_Abstract::toArray","description":"Cast to array","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"class.yaf-config-abstract","name":"Yaf_Config_Abstract","description":"The Yaf_Config_Abstract class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Config_Abstract"},{"id":"yaf-config-ini.construct","name":"Yaf_Config_Ini::__construct","description":"Yaf_Config_Ini constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-config-ini.count","name":"Yaf_Config_Ini::count","description":"Count all elements in Yaf_Config.ini","tag":"refentry","type":"Function","methodName":"count"},{"id":"yaf-config-ini.current","name":"Yaf_Config_Ini::current","description":"Retrieve the current value","tag":"refentry","type":"Function","methodName":"current"},{"id":"yaf-config-ini.get","name":"Yaf_Config_Ini::__get","description":"Retrieve a element","tag":"refentry","type":"Function","methodName":"__get"},{"id":"yaf-config-ini.isset","name":"Yaf_Config_Ini::__isset","description":"Determine if a key is exists","tag":"refentry","type":"Function","methodName":"__isset"},{"id":"yaf-config-ini.key","name":"Yaf_Config_Ini::key","description":"Fetch current element's key","tag":"refentry","type":"Function","methodName":"key"},{"id":"yaf-config-ini.next","name":"Yaf_Config_Ini::next","description":"Advance the internal pointer","tag":"refentry","type":"Function","methodName":"next"},{"id":"yaf-config-ini.offsetexists","name":"Yaf_Config_Ini::offsetExists","description":"The offsetExists purpose","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"yaf-config-ini.offsetget","name":"Yaf_Config_Ini::offsetGet","description":"The offsetGet purpose","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"yaf-config-ini.offsetset","name":"Yaf_Config_Ini::offsetSet","description":"The offsetSet purpose","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"yaf-config-ini.offsetunset","name":"Yaf_Config_Ini::offsetUnset","description":"The offsetUnset purpose","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"yaf-config-ini.readonly","name":"Yaf_Config_Ini::readonly","description":"The readonly purpose","tag":"refentry","type":"Function","methodName":"readonly"},{"id":"yaf-config-ini.rewind","name":"Yaf_Config_Ini::rewind","description":"The rewind purpose","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"yaf-config-ini.set","name":"Yaf_Config_Ini::__set","description":"The __set purpose","tag":"refentry","type":"Function","methodName":"__set"},{"id":"yaf-config-ini.toarray","name":"Yaf_Config_Ini::toArray","description":"Return config as a PHP array","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"yaf-config-ini.valid","name":"Yaf_Config_Ini::valid","description":"The valid purpose","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.yaf-config-ini","name":"Yaf_Config_Ini","description":"The Yaf_Config_Ini class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Config_Ini"},{"id":"yaf-config-simple.construct","name":"Yaf_Config_Simple::__construct","description":"The __construct purpose","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-config-simple.count","name":"Yaf_Config_Simple::count","description":"The count purpose","tag":"refentry","type":"Function","methodName":"count"},{"id":"yaf-config-simple.current","name":"Yaf_Config_Simple::current","description":"The current purpose","tag":"refentry","type":"Function","methodName":"current"},{"id":"yaf-config-simple.get","name":"Yaf_Config_Simple::__get","description":"The __get purpose","tag":"refentry","type":"Function","methodName":"__get"},{"id":"yaf-config-simple.isset","name":"Yaf_Config_Simple::__isset","description":"The __isset purpose","tag":"refentry","type":"Function","methodName":"__isset"},{"id":"yaf-config-simple.key","name":"Yaf_Config_Simple::key","description":"The key purpose","tag":"refentry","type":"Function","methodName":"key"},{"id":"yaf-config-simple.next","name":"Yaf_Config_Simple::next","description":"The next purpose","tag":"refentry","type":"Function","methodName":"next"},{"id":"yaf-config-simple.offsetexists","name":"Yaf_Config_Simple::offsetExists","description":"The offsetExists purpose","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"yaf-config-simple.offsetget","name":"Yaf_Config_Simple::offsetGet","description":"The offsetGet purpose","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"yaf-config-simple.offsetset","name":"Yaf_Config_Simple::offsetSet","description":"The offsetSet purpose","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"yaf-config-simple.offsetunset","name":"Yaf_Config_Simple::offsetUnset","description":"The offsetUnset purpose","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"yaf-config-simple.readonly","name":"Yaf_Config_Simple::readonly","description":"The readonly purpose","tag":"refentry","type":"Function","methodName":"readonly"},{"id":"yaf-config-simple.rewind","name":"Yaf_Config_Simple::rewind","description":"The rewind purpose","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"yaf-config-simple.set","name":"Yaf_Config_Simple::__set","description":"The __set purpose","tag":"refentry","type":"Function","methodName":"__set"},{"id":"yaf-config-simple.toarray","name":"Yaf_Config_Simple::toArray","description":"Returns a PHP array","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"yaf-config-simple.valid","name":"Yaf_Config_Simple::valid","description":"The valid purpose","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.yaf-config-simple","name":"Yaf_Config_Simple","description":"The Yaf_Config_Simple class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Config_Simple"},{"id":"yaf-controller-abstract.construct","name":"Yaf_Controller_Abstract::__construct","description":"Yaf_Controller_Abstract constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-controller-abstract.display","name":"Yaf_Controller_Abstract::display","description":"The display purpose","tag":"refentry","type":"Function","methodName":"display"},{"id":"yaf-controller-abstract.forward","name":"Yaf_Controller_Abstract::forward","description":"Forward to another action","tag":"refentry","type":"Function","methodName":"forward"},{"id":"yaf-controller-abstract.getinvokearg","name":"Yaf_Controller_Abstract::getInvokeArg","description":"The getInvokeArg purpose","tag":"refentry","type":"Function","methodName":"getInvokeArg"},{"id":"yaf-controller-abstract.getinvokeargs","name":"Yaf_Controller_Abstract::getInvokeArgs","description":"The getInvokeArgs purpose","tag":"refentry","type":"Function","methodName":"getInvokeArgs"},{"id":"yaf-controller-abstract.getmodulename","name":"Yaf_Controller_Abstract::getModuleName","description":"Get module name","tag":"refentry","type":"Function","methodName":"getModuleName"},{"id":"yaf-controller-abstract.getname","name":"Yaf_Controller_Abstract::getName","description":"Get self name","tag":"refentry","type":"Function","methodName":"getName"},{"id":"yaf-controller-abstract.getrequest","name":"Yaf_Controller_Abstract::getRequest","description":"Retrieve current request object","tag":"refentry","type":"Function","methodName":"getRequest"},{"id":"yaf-controller-abstract.getresponse","name":"Yaf_Controller_Abstract::getResponse","description":"Retrieve current response object","tag":"refentry","type":"Function","methodName":"getResponse"},{"id":"yaf-controller-abstract.getview","name":"Yaf_Controller_Abstract::getView","description":"Retrieve the view engine","tag":"refentry","type":"Function","methodName":"getView"},{"id":"yaf-controller-abstract.getviewpath","name":"Yaf_Controller_Abstract::getViewpath","description":"The getViewpath purpose","tag":"refentry","type":"Function","methodName":"getViewpath"},{"id":"yaf-controller-abstract.init","name":"Yaf_Controller_Abstract::init","description":"Controller initializer","tag":"refentry","type":"Function","methodName":"init"},{"id":"yaf-controller-abstract.initview","name":"Yaf_Controller_Abstract::initView","description":"The initView purpose","tag":"refentry","type":"Function","methodName":"initView"},{"id":"yaf-controller-abstract.redirect","name":"Yaf_Controller_Abstract::redirect","description":"Redirect to a URL","tag":"refentry","type":"Function","methodName":"redirect"},{"id":"yaf-controller-abstract.render","name":"Yaf_Controller_Abstract::render","description":"Render view template","tag":"refentry","type":"Function","methodName":"render"},{"id":"yaf-controller-abstract.setviewpath","name":"Yaf_Controller_Abstract::setViewpath","description":"The setViewpath purpose","tag":"refentry","type":"Function","methodName":"setViewpath"},{"id":"class.yaf-controller-abstract","name":"Yaf_Controller_Abstract","description":"The Yaf_Controller_Abstract class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Controller_Abstract"},{"id":"yaf-action-abstract.execute","name":"Yaf_Action_Abstract::execute","description":"Action entry point","tag":"refentry","type":"Function","methodName":"execute"},{"id":"yaf-action-abstract.getcontroller","name":"Yaf_Action_Abstract::getController","description":"Retrieve controller object","tag":"refentry","type":"Function","methodName":"getController"},{"id":"yaf-controller-abstract.getcontrollername","name":"Yaf_Action_Abstract::getControllerName","description":"Get controller name","tag":"refentry","type":"Function","methodName":"getControllerName"},{"id":"class.yaf-action-abstract","name":"Yaf_Action_Abstract","description":"The Yaf_Action_Abstract class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Action_Abstract"},{"id":"yaf-view-interface.assign","name":"Yaf_View_Interface::assign","description":"Assign value to View engine","tag":"refentry","type":"Function","methodName":"assign"},{"id":"yaf-view-interface.display","name":"Yaf_View_Interface::display","description":"Render and output a template","tag":"refentry","type":"Function","methodName":"display"},{"id":"yaf-view-interface.getscriptpath","name":"Yaf_View_Interface::getScriptPath","description":"The getScriptPath purpose","tag":"refentry","type":"Function","methodName":"getScriptPath"},{"id":"yaf-view-interface.render","name":"Yaf_View_Interface::render","description":"Render a template","tag":"refentry","type":"Function","methodName":"render"},{"id":"yaf-view-interface.setscriptpath","name":"Yaf_View_Interface::setScriptPath","description":"The setScriptPath purpose","tag":"refentry","type":"Function","methodName":"setScriptPath"},{"id":"class.yaf-view-interface","name":"Yaf_View_Interface","description":"The Yaf_View_Interface class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_View_Interface"},{"id":"yaf-view-simple.assign","name":"Yaf_View_Simple::assign","description":"Assign values","tag":"refentry","type":"Function","methodName":"assign"},{"id":"yaf-view-simple.assignref","name":"Yaf_View_Simple::assignRef","description":"The assignRef purpose","tag":"refentry","type":"Function","methodName":"assignRef"},{"id":"yaf-view-simple.clear","name":"Yaf_View_Simple::clear","description":"Clear Assigned values","tag":"refentry","type":"Function","methodName":"clear"},{"id":"yaf-view-simple.construct","name":"Yaf_View_Simple::__construct","description":"Constructor of Yaf_View_Simple","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-view-simple.display","name":"Yaf_View_Simple::display","description":"Render and display","tag":"refentry","type":"Function","methodName":"display"},{"id":"yaf-view-simple.eval","name":"Yaf_View_Simple::eval","description":"Render template","tag":"refentry","type":"Function","methodName":"eval"},{"id":"yaf-view-simple.get","name":"Yaf_View_Simple::__get","description":"Retrieve assigned variable","tag":"refentry","type":"Function","methodName":"__get"},{"id":"yaf-view-simple.getscriptpath","name":"Yaf_View_Simple::getScriptPath","description":"Get templates directory","tag":"refentry","type":"Function","methodName":"getScriptPath"},{"id":"yaf-view-simple.isset","name":"Yaf_View_Simple::__isset","description":"The __isset purpose","tag":"refentry","type":"Function","methodName":"__isset"},{"id":"yaf-view-simple.render","name":"Yaf_View_Simple::render","description":"Render template","tag":"refentry","type":"Function","methodName":"render"},{"id":"yaf-view-simple.set","name":"Yaf_View_Simple::__set","description":"Set value to engine","tag":"refentry","type":"Function","methodName":"__set"},{"id":"yaf-view-simple.setscriptpath","name":"Yaf_View_Simple::setScriptPath","description":"Set tempaltes directory","tag":"refentry","type":"Function","methodName":"setScriptPath"},{"id":"class.yaf-view-simple","name":"Yaf_View_Simple","description":"The Yaf_View_Simple class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_View_Simple"},{"id":"yaf-loader.autoload","name":"Yaf_Loader::autoload","description":"The autoload purpose","tag":"refentry","type":"Function","methodName":"autoload"},{"id":"yaf-loader.clearlocalnamespace","name":"Yaf_Loader::clearLocalNamespace","description":"The clearLocalNamespace purpose","tag":"refentry","type":"Function","methodName":"clearLocalNamespace"},{"id":"yaf-loader.construct","name":"Yaf_Loader::__construct","description":"The __construct purpose","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-loader.getinstance","name":"Yaf_Loader::getInstance","description":"The getInstance purpose","tag":"refentry","type":"Function","methodName":"getInstance"},{"id":"yaf-loader.getlibrarypath","name":"Yaf_Loader::getLibraryPath","description":"Get the library path","tag":"refentry","type":"Function","methodName":"getLibraryPath"},{"id":"yaf-loader.getlocalnamespace","name":"Yaf_Loader::getLocalNamespace","description":"The getLocalNamespace purpose","tag":"refentry","type":"Function","methodName":"getLocalNamespace"},{"id":"yaf-loader.getnamespacepath","name":"Yaf_Loader::getNamespacePath","description":"Retieve path of a registered namespace","tag":"refentry","type":"Function","methodName":"getNamespacePath"},{"id":"yaf-loader.getnamespaces","name":"Yaf_Loader::getLocalNamespace","description":"Retrive all register namespaces info","tag":"refentry","type":"Function","methodName":"getLocalNamespace"},{"id":"yaf-loader.import","name":"Yaf_Loader::import","description":"The import purpose","tag":"refentry","type":"Function","methodName":"import"},{"id":"yaf-loader.islocalname","name":"Yaf_Loader::isLocalName","description":"The isLocalName purpose","tag":"refentry","type":"Function","methodName":"isLocalName"},{"id":"yaf-loader.registerlocalnamespace","name":"Yaf_Loader::registerLocalNamespace","description":"Register local class prefix","tag":"refentry","type":"Function","methodName":"registerLocalNamespace"},{"id":"yaf-loader.registernamespace","name":"Yaf_Loader::registerNamespace","description":"Register namespace with searching path","tag":"refentry","type":"Function","methodName":"registerNamespace"},{"id":"yaf-loader.setlibrarypath","name":"Yaf_Loader::setLibraryPath","description":"Change the library path","tag":"refentry","type":"Function","methodName":"setLibraryPath"},{"id":"class.yaf-loader","name":"Yaf_Loader","description":"The Yaf_Loader class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Loader"},{"id":"yaf-plugin-abstract.dispatchloopshutdown","name":"Yaf_Plugin_Abstract::dispatchLoopShutdown","description":"The dispatchLoopShutdown purpose","tag":"refentry","type":"Function","methodName":"dispatchLoopShutdown"},{"id":"yaf-plugin-abstract.dispatchloopstartup","name":"Yaf_Plugin_Abstract::dispatchLoopStartup","description":"Hook before dispatch loop","tag":"refentry","type":"Function","methodName":"dispatchLoopStartup"},{"id":"yaf-plugin-abstract.postdispatch","name":"Yaf_Plugin_Abstract::postDispatch","description":"The postDispatch purpose","tag":"refentry","type":"Function","methodName":"postDispatch"},{"id":"yaf-plugin-abstract.predispatch","name":"Yaf_Plugin_Abstract::preDispatch","description":"The preDispatch purpose","tag":"refentry","type":"Function","methodName":"preDispatch"},{"id":"yaf-plugin-abstract.preresponse","name":"Yaf_Plugin_Abstract::preResponse","description":"The preResponse purpose","tag":"refentry","type":"Function","methodName":"preResponse"},{"id":"yaf-plugin-abstract.routershutdown","name":"Yaf_Plugin_Abstract::routerShutdown","description":"The routerShutdown purpose","tag":"refentry","type":"Function","methodName":"routerShutdown"},{"id":"yaf-plugin-abstract.routerstartup","name":"Yaf_Plugin_Abstract::routerStartup","description":"RouterStartup hook","tag":"refentry","type":"Function","methodName":"routerStartup"},{"id":"class.yaf-plugin-abstract","name":"Yaf_Plugin_Abstract","description":"The Yaf_Plugin_Abstract class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Plugin_Abstract"},{"id":"yaf-registry.construct","name":"Yaf_Registry::__construct","description":"Yaf_Registry implements singleton","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-registry.del","name":"Yaf_Registry::del","description":"Remove an item from registry","tag":"refentry","type":"Function","methodName":"del"},{"id":"yaf-registry.get","name":"Yaf_Registry::get","description":"Retrieve an item from registry","tag":"refentry","type":"Function","methodName":"get"},{"id":"yaf-registry.has","name":"Yaf_Registry::has","description":"Check whether an item exists","tag":"refentry","type":"Function","methodName":"has"},{"id":"yaf-registry.set","name":"Yaf_Registry::set","description":"Add an item into registry","tag":"refentry","type":"Function","methodName":"set"},{"id":"class.yaf-registry","name":"Yaf_Registry","description":"The Yaf_Registry class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Registry"},{"id":"yaf-request-abstract.clearparams","name":"Yaf_Request_Abstract::clearParams","description":"Remove all params","tag":"refentry","type":"Function","methodName":"clearParams"},{"id":"yaf-request-abstract.getactionname","name":"Yaf_Request_Abstract::getActionName","description":"The getActionName purpose","tag":"refentry","type":"Function","methodName":"getActionName"},{"id":"yaf-request-abstract.getbaseuri","name":"Yaf_Request_Abstract::getBaseUri","description":"The getBaseUri purpose","tag":"refentry","type":"Function","methodName":"getBaseUri"},{"id":"yaf-request-abstract.getcontrollername","name":"Yaf_Request_Abstract::getControllerName","description":"The getControllerName purpose","tag":"refentry","type":"Function","methodName":"getControllerName"},{"id":"yaf-request-abstract.getenv","name":"Yaf_Request_Abstract::getEnv","description":"Retrieve ENV varialbe","tag":"refentry","type":"Function","methodName":"getEnv"},{"id":"yaf-request-abstract.getexception","name":"Yaf_Request_Abstract::getException","description":"The getException purpose","tag":"refentry","type":"Function","methodName":"getException"},{"id":"yaf-request-abstract.getlanguage","name":"Yaf_Request_Abstract::getLanguage","description":"Retrieve client's preferred language","tag":"refentry","type":"Function","methodName":"getLanguage"},{"id":"yaf-request-abstract.getmethod","name":"Yaf_Request_Abstract::getMethod","description":"Retrieve the request method","tag":"refentry","type":"Function","methodName":"getMethod"},{"id":"yaf-request-abstract.getmodulename","name":"Yaf_Request_Abstract::getModuleName","description":"The getModuleName purpose","tag":"refentry","type":"Function","methodName":"getModuleName"},{"id":"yaf-request-abstract.getparam","name":"Yaf_Request_Abstract::getParam","description":"Retrieve calling parameter","tag":"refentry","type":"Function","methodName":"getParam"},{"id":"yaf-request-abstract.getparams","name":"Yaf_Request_Abstract::getParams","description":"Retrieve all calling parameters","tag":"refentry","type":"Function","methodName":"getParams"},{"id":"yaf-request-abstract.getrequesturi","name":"Yaf_Request_Abstract::getRequestUri","description":"The getRequestUri purpose","tag":"refentry","type":"Function","methodName":"getRequestUri"},{"id":"yaf-request-abstract.getserver","name":"Yaf_Request_Abstract::getServer","description":"Retrieve SERVER variable","tag":"refentry","type":"Function","methodName":"getServer"},{"id":"yaf-request-abstract.iscli","name":"Yaf_Request_Abstract::isCli","description":"Determine if request is CLI request","tag":"refentry","type":"Function","methodName":"isCli"},{"id":"yaf-request-abstract.isdispatched","name":"Yaf_Request_Abstract::isDispatched","description":"Determin if the request is dispatched","tag":"refentry","type":"Function","methodName":"isDispatched"},{"id":"yaf-request-abstract.isget","name":"Yaf_Request_Abstract::isGet","description":"Determine if request is GET request","tag":"refentry","type":"Function","methodName":"isGet"},{"id":"yaf-request-abstract.ishead","name":"Yaf_Request_Abstract::isHead","description":"Determine if request is HEAD request","tag":"refentry","type":"Function","methodName":"isHead"},{"id":"yaf-request-abstract.isoptions","name":"Yaf_Request_Abstract::isOptions","description":"Determine if request is OPTIONS request","tag":"refentry","type":"Function","methodName":"isOptions"},{"id":"yaf-request-abstract.ispost","name":"Yaf_Request_Abstract::isPost","description":"Determine if request is POST request","tag":"refentry","type":"Function","methodName":"isPost"},{"id":"yaf-request-abstract.isput","name":"Yaf_Request_Abstract::isPut","description":"Determine if request is PUT request","tag":"refentry","type":"Function","methodName":"isPut"},{"id":"yaf-request-abstract.isrouted","name":"Yaf_Request_Abstract::isRouted","description":"Determin if request has been routed","tag":"refentry","type":"Function","methodName":"isRouted"},{"id":"yaf-request-abstract.isxmlhttprequest","name":"Yaf_Request_Abstract::isXmlHttpRequest","description":"Determine if request is AJAX request","tag":"refentry","type":"Function","methodName":"isXmlHttpRequest"},{"id":"yaf-request-abstract.setactionname","name":"Yaf_Request_Abstract::setActionName","description":"Set action name","tag":"refentry","type":"Function","methodName":"setActionName"},{"id":"yaf-request-abstract.setbaseuri","name":"Yaf_Request_Abstract::setBaseUri","description":"Set base URI","tag":"refentry","type":"Function","methodName":"setBaseUri"},{"id":"yaf-request-abstract.setcontrollername","name":"Yaf_Request_Abstract::setControllerName","description":"Set controller name","tag":"refentry","type":"Function","methodName":"setControllerName"},{"id":"yaf-request-abstract.setdispatched","name":"Yaf_Request_Abstract::setDispatched","description":"The setDispatched purpose","tag":"refentry","type":"Function","methodName":"setDispatched"},{"id":"yaf-request-abstract.setmodulename","name":"Yaf_Request_Abstract::setModuleName","description":"Set module name","tag":"refentry","type":"Function","methodName":"setModuleName"},{"id":"yaf-request-abstract.setparam","name":"Yaf_Request_Abstract::setParam","description":"Set a calling parameter to a request","tag":"refentry","type":"Function","methodName":"setParam"},{"id":"yaf-request-abstract.setrequesturi","name":"Yaf_Request_Abstract::setRequestUri","description":"The setRequestUri purpose","tag":"refentry","type":"Function","methodName":"setRequestUri"},{"id":"yaf-request-abstract.setrouted","name":"Yaf_Request_Abstract::setRouted","description":"The setRouted purpose","tag":"refentry","type":"Function","methodName":"setRouted"},{"id":"class.yaf-request-abstract","name":"Yaf_Request_Abstract","description":"The Yaf_Request_Abstract class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Request_Abstract"},{"id":"yaf-request-http.construct","name":"Yaf_Request_Http::__construct","description":"Constructor of Yaf_Request_Http","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-request-http.get","name":"Yaf_Request_Http::get","description":"Retrieve variable from client","tag":"refentry","type":"Function","methodName":"get"},{"id":"yaf-request-http.getcookie","name":"Yaf_Request_Http::getCookie","description":"Retrieve Cookie variable","tag":"refentry","type":"Function","methodName":"getCookie"},{"id":"yaf-request-http.getfiles","name":"Yaf_Request_Http::getFiles","description":"The getFiles purpose","tag":"refentry","type":"Function","methodName":"getFiles"},{"id":"yaf-request-http.getpost","name":"Yaf_Request_Http::getPost","description":"Retrieve POST variable","tag":"refentry","type":"Function","methodName":"getPost"},{"id":"yaf-request-http.getquery","name":"Yaf_Request_Http::getQuery","description":"Fetch a query parameter","tag":"refentry","type":"Function","methodName":"getQuery"},{"id":"yaf-request-http.getraw","name":"Yaf_Request_Http::getRaw","description":"Retrieve Raw request body","tag":"refentry","type":"Function","methodName":"getRaw"},{"id":"yaf-request-http.getrequest","name":"Yaf_Request_Http::getRequest","description":"The getRequest purpose","tag":"refentry","type":"Function","methodName":"getRequest"},{"id":"yaf-request-http.isxmlhttprequest","name":"Yaf_Request_Http::isXmlHttpRequest","description":"Determin if request is Ajax Request","tag":"refentry","type":"Function","methodName":"isXmlHttpRequest"},{"id":"class.yaf-request-http","name":"Yaf_Request_Http","description":"The Yaf_Request_Http class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Request_Http"},{"id":"yaf-request-simple.construct","name":"Yaf_Request_Simple::__construct","description":"Constructor of Yaf_Request_Simple","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-request-simple.get","name":"Yaf_Request_Simple::get","description":"The get purpose","tag":"refentry","type":"Function","methodName":"get"},{"id":"yaf-request-simple.getcookie","name":"Yaf_Request_Simple::getCookie","description":"The getCookie purpose","tag":"refentry","type":"Function","methodName":"getCookie"},{"id":"yaf-request-simple.getfiles","name":"Yaf_Request_Simple::getFiles","description":"The getFiles purpose","tag":"refentry","type":"Function","methodName":"getFiles"},{"id":"yaf-request-simple.getpost","name":"Yaf_Request_Simple::getPost","description":"The getPost purpose","tag":"refentry","type":"Function","methodName":"getPost"},{"id":"yaf-request-simple.getquery","name":"Yaf_Request_Simple::getQuery","description":"The getQuery purpose","tag":"refentry","type":"Function","methodName":"getQuery"},{"id":"yaf-request-simple.getrequest","name":"Yaf_Request_Simple::getRequest","description":"The getRequest purpose","tag":"refentry","type":"Function","methodName":"getRequest"},{"id":"yaf-request-simple.isxmlhttprequest","name":"Yaf_Request_Simple::isXmlHttpRequest","description":"Determin if request is AJAX request","tag":"refentry","type":"Function","methodName":"isXmlHttpRequest"},{"id":"class.yaf-request-simple","name":"Yaf_Request_Simple","description":"The Yaf_Request_Simple class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Request_Simple"},{"id":"yaf-response-abstract.appendbody","name":"Yaf_Response_Abstract::appendBody","description":"Append to response body","tag":"refentry","type":"Function","methodName":"appendBody"},{"id":"yaf-response-abstract.clearbody","name":"Yaf_Response_Abstract::clearBody","description":"Discard all exists response body","tag":"refentry","type":"Function","methodName":"clearBody"},{"id":"yaf-response-abstract.clearheaders","name":"Yaf_Response_Abstract::clearHeaders","description":"Discard all set headers","tag":"refentry","type":"Function","methodName":"clearHeaders"},{"id":"yaf-response-abstract.construct","name":"Yaf_Response_Abstract::__construct","description":"The __construct purpose","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-response-abstract.destruct","name":"Yaf_Response_Abstract::__destruct","description":"The __destruct purpose","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"yaf-response-abstract.getbody","name":"Yaf_Response_Abstract::getBody","description":"Retrieve a exists content","tag":"refentry","type":"Function","methodName":"getBody"},{"id":"yaf-response-abstract.getheader","name":"Yaf_Response_Abstract::getHeader","description":"The getHeader purpose","tag":"refentry","type":"Function","methodName":"getHeader"},{"id":"yaf-response-abstract.prependbody","name":"Yaf_Response_Abstract::prependBody","description":"The prependBody purpose","tag":"refentry","type":"Function","methodName":"prependBody"},{"id":"yaf-response-abstract.response","name":"Yaf_Response_Abstract::response","description":"Send response","tag":"refentry","type":"Function","methodName":"response"},{"id":"yaf-response-abstract.setallheaders","name":"Yaf_Response_Abstract::setAllHeaders","description":"The setAllHeaders purpose","tag":"refentry","type":"Function","methodName":"setAllHeaders"},{"id":"yaf-response-abstract.setbody","name":"Yaf_Response_Abstract::setBody","description":"Set content to response","tag":"refentry","type":"Function","methodName":"setBody"},{"id":"yaf-response-abstract.setheader","name":"Yaf_Response_Abstract::setHeader","description":"Set reponse header","tag":"refentry","type":"Function","methodName":"setHeader"},{"id":"yaf-response-abstract.setredirect","name":"Yaf_Response_Abstract::setRedirect","description":"The setRedirect purpose","tag":"refentry","type":"Function","methodName":"setRedirect"},{"id":"yaf-response-abstract.tostring","name":"Yaf_Response_Abstract::__toString","description":"Retrieve all bodys as string","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.yaf-response-abstract","name":"Yaf_Response_Abstract","description":"The Yaf_Response_Abstract class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Response_Abstract"},{"id":"yaf-route-interface.assemble","name":"Yaf_Route_Interface::assemble","description":"Assemble a request","tag":"refentry","type":"Function","methodName":"assemble"},{"id":"yaf-route-interface.route","name":"Yaf_Route_Interface::route","description":"Route a request","tag":"refentry","type":"Function","methodName":"route"},{"id":"class.yaf-route-interface","name":"Yaf_Route_Interface","description":"The Yaf_Route_Interface class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Route_Interface"},{"id":"yaf-route-map.assemble","name":"Yaf_Route_Map::assemble","description":"Assemble a url","tag":"refentry","type":"Function","methodName":"assemble"},{"id":"yaf-route-map.construct","name":"Yaf_Route_Map::__construct","description":"The __construct purpose","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-route-map.route","name":"Yaf_Route_Map::route","description":"The route purpose","tag":"refentry","type":"Function","methodName":"route"},{"id":"class.yaf-route-map","name":"Yaf_Route_Map","description":"The Yaf_Route_Map class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Route_Map"},{"id":"yaf-route-regex.assemble","name":"Yaf_Route_Regex::assemble","description":"Assemble a url","tag":"refentry","type":"Function","methodName":"assemble"},{"id":"yaf-route-regex.construct","name":"Yaf_Route_Regex::__construct","description":"Yaf_Route_Regex constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-route-regex.route","name":"Yaf_Route_Regex::route","description":"The route purpose","tag":"refentry","type":"Function","methodName":"route"},{"id":"class.yaf-route-regex","name":"Yaf_Route_Regex","description":"The Yaf_Route_Regex class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Route_Regex"},{"id":"yaf-route-rewrite.assemble","name":"Yaf_Route_Rewrite::assemble","description":"Assemble a url","tag":"refentry","type":"Function","methodName":"assemble"},{"id":"yaf-route-rewrite.construct","name":"Yaf_Route_Rewrite::__construct","description":"Yaf_Route_Rewrite constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-route-rewrite.route","name":"Yaf_Route_Rewrite::route","description":"The route purpose","tag":"refentry","type":"Function","methodName":"route"},{"id":"class.yaf-route-rewrite","name":"Yaf_Route_Rewrite","description":"The Yaf_Route_Rewrite class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Route_Rewrite"},{"id":"yaf-router.addconfig","name":"Yaf_Router::addConfig","description":"Add config-defined routes into Router","tag":"refentry","type":"Function","methodName":"addConfig"},{"id":"yaf-router.addroute","name":"Yaf_Router::addRoute","description":"Add new Route into Router","tag":"refentry","type":"Function","methodName":"addRoute"},{"id":"yaf-router.construct","name":"Yaf_Router::__construct","description":"Yaf_Router constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-router.getcurrentroute","name":"Yaf_Router::getCurrentRoute","description":"Get the effective route name","tag":"refentry","type":"Function","methodName":"getCurrentRoute"},{"id":"yaf-router.getroute","name":"Yaf_Router::getRoute","description":"Retrieve a route by name","tag":"refentry","type":"Function","methodName":"getRoute"},{"id":"yaf-router.getroutes","name":"Yaf_Router::getRoutes","description":"Retrieve registered routes","tag":"refentry","type":"Function","methodName":"getRoutes"},{"id":"yaf-router.route","name":"Yaf_Router::route","description":"The route purpose","tag":"refentry","type":"Function","methodName":"route"},{"id":"class.yaf-router","name":"Yaf_Router","description":"The Yaf_Router class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Router"},{"id":"yaf-route-simple.assemble","name":"Yaf_Route_Simple::assemble","description":"Assemble a url","tag":"refentry","type":"Function","methodName":"assemble"},{"id":"yaf-route-simple.construct","name":"Yaf_Route_Simple::__construct","description":"Yaf_Route_Simple constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-route-simple.route","name":"Yaf_Route_Simple::route","description":"Route a request","tag":"refentry","type":"Function","methodName":"route"},{"id":"class.yaf-route-simple","name":"Yaf_Route_Simple","description":"The Yaf_Route_Simple class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Route_Simple"},{"id":"yaf-route-static.assemble","name":"Yaf_Route_Static::assemble","description":"Assemble a url","tag":"refentry","type":"Function","methodName":"assemble"},{"id":"yaf-route-static.match","name":"Yaf_Route_Static::match","description":"The match purpose","tag":"refentry","type":"Function","methodName":"match"},{"id":"yaf-route-static.route","name":"Yaf_Route_Static::route","description":"Route a request","tag":"refentry","type":"Function","methodName":"route"},{"id":"class.yaf-route-static","name":"Yaf_Route_Static","description":"The Yaf_Route_Static class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Route_Static"},{"id":"yaf-route-supervar.assemble","name":"Yaf_Route_Supervar::assemble","description":"Assemble a url","tag":"refentry","type":"Function","methodName":"assemble"},{"id":"yaf-route-supervar.construct","name":"Yaf_Route_Supervar::__construct","description":"The __construct purpose","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-route-supervar.route","name":"Yaf_Route_Supervar::route","description":"The route purpose","tag":"refentry","type":"Function","methodName":"route"},{"id":"class.yaf-route-supervar","name":"Yaf_Route_Supervar","description":"The Yaf_Route_Supervar class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Route_Supervar"},{"id":"yaf-session.construct","name":"Yaf_Session::__construct","description":"Constructor of Yaf_Session","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-session.count","name":"Yaf_Session::count","description":"The count purpose","tag":"refentry","type":"Function","methodName":"count"},{"id":"yaf-session.current","name":"Yaf_Session::current","description":"The current purpose","tag":"refentry","type":"Function","methodName":"current"},{"id":"yaf-session.del","name":"Yaf_Session::del","description":"The del purpose","tag":"refentry","type":"Function","methodName":"del"},{"id":"yaf-session.get","name":"Yaf_Session::__get","description":"The __get purpose","tag":"refentry","type":"Function","methodName":"__get"},{"id":"yaf-session.getinstance","name":"Yaf_Session::getInstance","description":"The getInstance purpose","tag":"refentry","type":"Function","methodName":"getInstance"},{"id":"yaf-session.has","name":"Yaf_Session::has","description":"The has purpose","tag":"refentry","type":"Function","methodName":"has"},{"id":"yaf-session.isset","name":"Yaf_Session::__isset","description":"The __isset purpose","tag":"refentry","type":"Function","methodName":"__isset"},{"id":"yaf-session.key","name":"Yaf_Session::key","description":"The key purpose","tag":"refentry","type":"Function","methodName":"key"},{"id":"yaf-session.next","name":"Yaf_Session::next","description":"The next purpose","tag":"refentry","type":"Function","methodName":"next"},{"id":"yaf-session.offsetexists","name":"Yaf_Session::offsetExists","description":"The offsetExists purpose","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"yaf-session.offsetget","name":"Yaf_Session::offsetGet","description":"The offsetGet purpose","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"yaf-session.offsetset","name":"Yaf_Session::offsetSet","description":"The offsetSet purpose","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"yaf-session.offsetunset","name":"Yaf_Session::offsetUnset","description":"The offsetUnset purpose","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"yaf-session.rewind","name":"Yaf_Session::rewind","description":"The rewind purpose","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"yaf-session.set","name":"Yaf_Session::__set","description":"The __set purpose","tag":"refentry","type":"Function","methodName":"__set"},{"id":"yaf-session.start","name":"Yaf_Session::start","description":"The start purpose","tag":"refentry","type":"Function","methodName":"start"},{"id":"yaf-session.unset","name":"Yaf_Session::__unset","description":"The __unset purpose","tag":"refentry","type":"Function","methodName":"__unset"},{"id":"yaf-session.valid","name":"Yaf_Session::valid","description":"The valid purpose","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.yaf-session","name":"Yaf_Session","description":"The Yaf_Session class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Session"},{"id":"yaf-exception.construct","name":"Yaf_Exception::__construct","description":"The __construct purpose","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yaf-exception.getprevious","name":"Yaf_Exception::getPrevious","description":"The getPrevious purpose","tag":"refentry","type":"Function","methodName":"getPrevious"},{"id":"class.yaf-exception","name":"Yaf_Exception","description":"The Yaf_Exception class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Exception"},{"id":"class.yaf-exception-typeerror","name":"Yaf_Exception_TypeError","description":"The Yaf_Exception_TypeError class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Exception_TypeError"},{"id":"class.yaf-exception-startuperror","name":"Yaf_Exception_StartupError","description":"The Yaf_Exception_StartupError class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Exception_StartupError"},{"id":"class.yaf-exception-dispatchfailed","name":"Yaf_Exception_DispatchFailed","description":"The Yaf_Exception_DispatchFailed class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Exception_DispatchFailed"},{"id":"class.yaf-exception-routerfailed","name":"Yaf_Exception_RouterFailed","description":"The Yaf_Exception_RouterFailed class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Exception_RouterFailed"},{"id":"class.yaf-exception-loadfailed","name":"Yaf_Exception_LoadFailed","description":"The Yaf_Exception_LoadFailed class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Exception_LoadFailed"},{"id":"class.yaf-exception-loadfailed-module","name":"Yaf_Exception_LoadFailed_Module","description":"The Yaf_Exception_LoadFailed_Module class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Exception_LoadFailed_Module"},{"id":"class.yaf-exception-loadfailed-controller","name":"Yaf_Exception_LoadFailed_Controller","description":"The Yaf_Exception_LoadFailed_Controller class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Exception_LoadFailed_Controller"},{"id":"class.yaf-exception-loadfailed-action","name":"Yaf_Exception_LoadFailed_Action","description":"The Yaf_Exception_LoadFailed_Action class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Exception_LoadFailed_Action"},{"id":"class.yaf-exception-loadfailed-view","name":"Yaf_Exception_LoadFailed_View","description":"The Yaf_Exception_LoadFailed_View class","tag":"phpdoc:classref","type":"Class","methodName":"Yaf_Exception_LoadFailed_View"},{"id":"book.yaf","name":"Yaf","description":"Yet Another Framework","tag":"book","type":"Extension","methodName":"Yaf"},{"id":"intro.yaconf","name":"Introduction","description":"Yaconf","tag":"preface","type":"General","methodName":"Introduction"},{"id":"yaconf.requirements","name":"Requirements","description":"Yaconf","tag":"section","type":"General","methodName":"Requirements"},{"id":"yaconf.installation","name":"Installation","description":"Yaconf","tag":"section","type":"General","methodName":"Installation"},{"id":"yaconf.configuration","name":"Runtime Configuration","description":"Yaconf","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"yaconf.resources","name":"Resource Types","description":"Yaconf","tag":"section","type":"General","methodName":"Resource Types"},{"id":"yaconf.setup","name":"Installing\/Configuring","description":"Yaconf","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"yaconf.get","name":"Yaconf::get","description":"Retrieve a item","tag":"refentry","type":"Function","methodName":"get"},{"id":"yaconf.has","name":"Yaconf::has","description":"Determine if a item exists","tag":"refentry","type":"Function","methodName":"has"},{"id":"class.yaconf","name":"Yaconf","description":"The Yaconf class","tag":"phpdoc:classref","type":"Class","methodName":"Yaconf"},{"id":"book.yaconf","name":"Yaconf","description":"Yaconf","tag":"book","type":"Extension","methodName":"Yaconf"},{"id":"intro.taint","name":"Introduction","description":"Taint","tag":"preface","type":"General","methodName":"Introduction"},{"id":"taint.installation","name":"Installation","description":"Taint","tag":"section","type":"General","methodName":"Installation"},{"id":"taint.configuration","name":"Runtime Configuration","description":"Taint","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"taint.setup","name":"Installing\/Configuring","description":"Taint","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"taint.detail.basic","name":"Functions and Statements which will spread the tainted mark of a\n tainted string","description":"Taint","tag":"section","type":"General","methodName":"Functions and Statements which will spread the tainted mark of a\n tainted string"},{"id":"taint.detail.taint","name":"Functions and statements which will check tainted string","description":"Taint","tag":"section","type":"General","methodName":"Functions and statements which will check tainted string"},{"id":"taint.detail.untaint","name":"Functions which untaint the tainted string","description":"Taint","tag":"section","type":"General","methodName":"Functions which untaint the tainted string"},{"id":"taint.detail","name":"More Details","description":"Taint","tag":"chapter","type":"General","methodName":"More Details"},{"id":"function.is-tainted","name":"is_tainted","description":"Checks whether a string is tainted","tag":"refentry","type":"Function","methodName":"is_tainted"},{"id":"function.taint","name":"taint","description":"Taint a string","tag":"refentry","type":"Function","methodName":"taint"},{"id":"function.untaint","name":"untaint","description":"Untaint strings","tag":"refentry","type":"Function","methodName":"untaint"},{"id":"ref.taint","name":"Taint Functions","description":"Taint","tag":"reference","type":"Extension","methodName":"Taint Functions"},{"id":"book.taint","name":"Taint","description":"Taint","tag":"book","type":"Extension","methodName":"Taint"},{"id":"intro.ds","name":"Introduction","description":"Data Structures","tag":"preface","type":"General","methodName":"Introduction"},{"id":"ds.requirements","name":"Requirements","description":"Data Structures","tag":"section","type":"General","methodName":"Requirements"},{"id":"ds.installation","name":"Installation","description":"Data Structures","tag":"section","type":"General","methodName":"Installation"},{"id":"ds.setup","name":"Installing\/Configuring","description":"Data Structures","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"ds.examples","name":"Examples","description":"Data Structures","tag":"chapter","type":"General","methodName":"Examples"},{"id":"ds-collection.clear","name":"Ds\\Collection::clear","description":"Removes all values","tag":"refentry","type":"Function","methodName":"clear"},{"id":"ds-collection.copy","name":"Ds\\Collection::copy","description":"Returns a shallow copy of the collection","tag":"refentry","type":"Function","methodName":"copy"},{"id":"ds-collection.isempty","name":"Ds\\Collection::isEmpty","description":"Returns whether the collection is empty","tag":"refentry","type":"Function","methodName":"isEmpty"},{"id":"ds-collection.toarray","name":"Ds\\Collection::toArray","description":"Converts the collection to an array","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"class.ds-collection","name":"Ds\\Collection","description":"The Collection interface","tag":"phpdoc:classref","type":"Class","methodName":"Ds\\Collection"},{"id":"ds-hashable.equals","name":"Ds\\Hashable::equals","description":"Determines whether an object is equal to the current instance","tag":"refentry","type":"Function","methodName":"equals"},{"id":"ds-hashable.hash","name":"Ds\\Hashable::hash","description":"Returns a scalar value to be used as a hash value","tag":"refentry","type":"Function","methodName":"hash"},{"id":"class.ds-hashable","name":"Ds\\Hashable","description":"The Hashable interface","tag":"phpdoc:classref","type":"Class","methodName":"Ds\\Hashable"},{"id":"ds-sequence.allocate","name":"Ds\\Sequence::allocate","description":"Allocates enough memory for a required capacity","tag":"refentry","type":"Function","methodName":"allocate"},{"id":"ds-sequence.apply","name":"Ds\\Sequence::apply","description":"Updates all values by applying a callback function to each value","tag":"refentry","type":"Function","methodName":"apply"},{"id":"ds-sequence.capacity","name":"Ds\\Sequence::capacity","description":"Returns the current capacity","tag":"refentry","type":"Function","methodName":"capacity"},{"id":"ds-sequence.contains","name":"Ds\\Sequence::contains","description":"Determines if the sequence contains given values","tag":"refentry","type":"Function","methodName":"contains"},{"id":"ds-sequence.filter","name":"Ds\\Sequence::filter","description":"Creates a new sequence using a callable to\n determine which values to include","tag":"refentry","type":"Function","methodName":"filter"},{"id":"ds-sequence.find","name":"Ds\\Sequence::find","description":"Attempts to find a value's index","tag":"refentry","type":"Function","methodName":"find"},{"id":"ds-sequence.first","name":"Ds\\Sequence::first","description":"Returns the first value in the sequence","tag":"refentry","type":"Function","methodName":"first"},{"id":"ds-sequence.get","name":"Ds\\Sequence::get","description":"Returns the value at a given index","tag":"refentry","type":"Function","methodName":"get"},{"id":"ds-sequence.insert","name":"Ds\\Sequence::insert","description":"Inserts values at a given index","tag":"refentry","type":"Function","methodName":"insert"},{"id":"ds-sequence.join","name":"Ds\\Sequence::join","description":"Joins all values together as a string","tag":"refentry","type":"Function","methodName":"join"},{"id":"ds-sequence.last","name":"Ds\\Sequence::last","description":"Returns the last value","tag":"refentry","type":"Function","methodName":"last"},{"id":"ds-sequence.map","name":"Ds\\Sequence::map","description":"Returns the result of applying a callback to each value","tag":"refentry","type":"Function","methodName":"map"},{"id":"ds-sequence.merge","name":"Ds\\Sequence::merge","description":"Returns the result of adding all given values to the sequence","tag":"refentry","type":"Function","methodName":"merge"},{"id":"ds-sequence.pop","name":"Ds\\Sequence::pop","description":"Removes and returns the last value","tag":"refentry","type":"Function","methodName":"pop"},{"id":"ds-sequence.push","name":"Ds\\Sequence::push","description":"Adds values to the end of the sequence","tag":"refentry","type":"Function","methodName":"push"},{"id":"ds-sequence.reduce","name":"Ds\\Sequence::reduce","description":"Reduces the sequence to a single value using a callback function","tag":"refentry","type":"Function","methodName":"reduce"},{"id":"ds-sequence.remove","name":"Ds\\Sequence::remove","description":"Removes and returns a value by index","tag":"refentry","type":"Function","methodName":"remove"},{"id":"ds-sequence.reverse","name":"Ds\\Sequence::reverse","description":"Reverses the sequence in-place","tag":"refentry","type":"Function","methodName":"reverse"},{"id":"ds-sequence.reversed","name":"Ds\\Sequence::reversed","description":"Returns a reversed copy","tag":"refentry","type":"Function","methodName":"reversed"},{"id":"ds-sequence.rotate","name":"Ds\\Sequence::rotate","description":"Rotates the sequence by a given number of rotations","tag":"refentry","type":"Function","methodName":"rotate"},{"id":"ds-sequence.set","name":"Ds\\Sequence::set","description":"Updates a value at a given index","tag":"refentry","type":"Function","methodName":"set"},{"id":"ds-sequence.shift","name":"Ds\\Sequence::shift","description":"Removes and returns the first value","tag":"refentry","type":"Function","methodName":"shift"},{"id":"ds-sequence.slice","name":"Ds\\Sequence::slice","description":"Returns a sub-sequence of a given range","tag":"refentry","type":"Function","methodName":"slice"},{"id":"ds-sequence.sort","name":"Ds\\Sequence::sort","description":"Sorts the sequence in-place","tag":"refentry","type":"Function","methodName":"sort"},{"id":"ds-sequence.sorted","name":"Ds\\Sequence::sorted","description":"Returns a sorted copy","tag":"refentry","type":"Function","methodName":"sorted"},{"id":"ds-sequence.sum","name":"Ds\\Sequence::sum","description":"Returns the sum of all values in the sequence","tag":"refentry","type":"Function","methodName":"sum"},{"id":"ds-sequence.unshift","name":"Ds\\Sequence::unshift","description":"Adds values to the front of the sequence","tag":"refentry","type":"Function","methodName":"unshift"},{"id":"class.ds-sequence","name":"Ds\\Sequence","description":"The Sequence interface","tag":"phpdoc:classref","type":"Class","methodName":"Ds\\Sequence"},{"id":"ds-vector.allocate","name":"Ds\\Vector::allocate","description":"Allocates enough memory for a required capacity","tag":"refentry","type":"Function","methodName":"allocate"},{"id":"ds-vector.apply","name":"Ds\\Vector::apply","description":"Updates all values by applying a callback function to each value","tag":"refentry","type":"Function","methodName":"apply"},{"id":"ds-vector.capacity","name":"Ds\\Vector::capacity","description":"Returns the current capacity","tag":"refentry","type":"Function","methodName":"capacity"},{"id":"ds-vector.clear","name":"Ds\\Vector::clear","description":"Removes all values","tag":"refentry","type":"Function","methodName":"clear"},{"id":"ds-vector.construct","name":"Ds\\Vector::__construct","description":"Creates a new instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ds-vector.contains","name":"Ds\\Vector::contains","description":"Determines if the vector contains given values","tag":"refentry","type":"Function","methodName":"contains"},{"id":"ds-vector.copy","name":"Ds\\Vector::copy","description":"Returns a shallow copy of the vector","tag":"refentry","type":"Function","methodName":"copy"},{"id":"ds-vector.count","name":"Ds\\Vector::count","description":"Returns the number of values in the collection","tag":"refentry","type":"Function","methodName":"count"},{"id":"ds-vector.filter","name":"Ds\\Vector::filter","description":"Creates a new vector using a callable to\n determine which values to include","tag":"refentry","type":"Function","methodName":"filter"},{"id":"ds-vector.find","name":"Ds\\Vector::find","description":"Attempts to find a value's index","tag":"refentry","type":"Function","methodName":"find"},{"id":"ds-vector.first","name":"Ds\\Vector::first","description":"Returns the first value in the vector","tag":"refentry","type":"Function","methodName":"first"},{"id":"ds-vector.get","name":"Ds\\Vector::get","description":"Returns the value at a given index","tag":"refentry","type":"Function","methodName":"get"},{"id":"ds-vector.insert","name":"Ds\\Vector::insert","description":"Inserts values at a given index","tag":"refentry","type":"Function","methodName":"insert"},{"id":"ds-vector.isempty","name":"Ds\\Vector::isEmpty","description":"Returns whether the vector is empty","tag":"refentry","type":"Function","methodName":"isEmpty"},{"id":"ds-vector.join","name":"Ds\\Vector::join","description":"Joins all values together as a string","tag":"refentry","type":"Function","methodName":"join"},{"id":"ds-vector.jsonserialize","name":"Ds\\Vector::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"ds-vector.last","name":"Ds\\Vector::last","description":"Returns the last value","tag":"refentry","type":"Function","methodName":"last"},{"id":"ds-vector.map","name":"Ds\\Vector::map","description":"Returns the result of applying a callback to each value","tag":"refentry","type":"Function","methodName":"map"},{"id":"ds-vector.merge","name":"Ds\\Vector::merge","description":"Returns the result of adding all given values to the vector","tag":"refentry","type":"Function","methodName":"merge"},{"id":"ds-vector.pop","name":"Ds\\Vector::pop","description":"Removes and returns the last value","tag":"refentry","type":"Function","methodName":"pop"},{"id":"ds-vector.push","name":"Ds\\Vector::push","description":"Adds values to the end of the vector","tag":"refentry","type":"Function","methodName":"push"},{"id":"ds-vector.reduce","name":"Ds\\Vector::reduce","description":"Reduces the vector to a single value using a callback function","tag":"refentry","type":"Function","methodName":"reduce"},{"id":"ds-vector.remove","name":"Ds\\Vector::remove","description":"Removes and returns a value by index","tag":"refentry","type":"Function","methodName":"remove"},{"id":"ds-vector.reverse","name":"Ds\\Vector::reverse","description":"Reverses the vector in-place","tag":"refentry","type":"Function","methodName":"reverse"},{"id":"ds-vector.reversed","name":"Ds\\Vector::reversed","description":"Returns a reversed copy","tag":"refentry","type":"Function","methodName":"reversed"},{"id":"ds-vector.rotate","name":"Ds\\Vector::rotate","description":"Rotates the vector by a given number of rotations","tag":"refentry","type":"Function","methodName":"rotate"},{"id":"ds-vector.set","name":"Ds\\Vector::set","description":"Updates a value at a given index","tag":"refentry","type":"Function","methodName":"set"},{"id":"ds-vector.shift","name":"Ds\\Vector::shift","description":"Removes and returns the first value","tag":"refentry","type":"Function","methodName":"shift"},{"id":"ds-vector.slice","name":"Ds\\Vector::slice","description":"Returns a sub-vector of a given range","tag":"refentry","type":"Function","methodName":"slice"},{"id":"ds-vector.sort","name":"Ds\\Vector::sort","description":"Sorts the vector in-place","tag":"refentry","type":"Function","methodName":"sort"},{"id":"ds-vector.sorted","name":"Ds\\Vector::sorted","description":"Returns a sorted copy","tag":"refentry","type":"Function","methodName":"sorted"},{"id":"ds-vector.sum","name":"Ds\\Vector::sum","description":"Returns the sum of all values in the vector","tag":"refentry","type":"Function","methodName":"sum"},{"id":"ds-vector.toarray","name":"Ds\\Vector::toArray","description":"Converts the vector to an array","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"ds-vector.unshift","name":"Ds\\Vector::unshift","description":"Adds values to the front of the vector","tag":"refentry","type":"Function","methodName":"unshift"},{"id":"class.ds-vector","name":"Ds\\Vector","description":"The Vector class","tag":"phpdoc:classref","type":"Class","methodName":"Ds\\Vector"},{"id":"ds-deque.allocate","name":"Ds\\Deque::allocate","description":"Allocates enough memory for a required capacity","tag":"refentry","type":"Function","methodName":"allocate"},{"id":"ds-deque.apply","name":"Ds\\Deque::apply","description":"Updates all values by applying a callback function to each value","tag":"refentry","type":"Function","methodName":"apply"},{"id":"ds-deque.capacity","name":"Ds\\Deque::capacity","description":"Returns the current capacity","tag":"refentry","type":"Function","methodName":"capacity"},{"id":"ds-deque.clear","name":"Ds\\Deque::clear","description":"Removes all values from the deque","tag":"refentry","type":"Function","methodName":"clear"},{"id":"ds-deque.construct","name":"Ds\\Deque::__construct","description":"Creates a new instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ds-deque.contains","name":"Ds\\Deque::contains","description":"Determines if the deque contains given values","tag":"refentry","type":"Function","methodName":"contains"},{"id":"ds-deque.copy","name":"Ds\\Deque::copy","description":"Returns a shallow copy of the deque","tag":"refentry","type":"Function","methodName":"copy"},{"id":"ds-deque.count","name":"Ds\\Deque::count","description":"Returns the number of values in the collection","tag":"refentry","type":"Function","methodName":"count"},{"id":"ds-deque.filter","name":"Ds\\Deque::filter","description":"Creates a new deque using a callable to\n determine which values to include","tag":"refentry","type":"Function","methodName":"filter"},{"id":"ds-deque.find","name":"Ds\\Deque::find","description":"Attempts to find a value's index","tag":"refentry","type":"Function","methodName":"find"},{"id":"ds-deque.first","name":"Ds\\Deque::first","description":"Returns the first value in the deque","tag":"refentry","type":"Function","methodName":"first"},{"id":"ds-deque.get","name":"Ds\\Deque::get","description":"Returns the value at a given index","tag":"refentry","type":"Function","methodName":"get"},{"id":"ds-deque.insert","name":"Ds\\Deque::insert","description":"Inserts values at a given index","tag":"refentry","type":"Function","methodName":"insert"},{"id":"ds-deque.isempty","name":"Ds\\Deque::isEmpty","description":"Returns whether the deque is empty","tag":"refentry","type":"Function","methodName":"isEmpty"},{"id":"ds-deque.join","name":"Ds\\Deque::join","description":"Joins all values together as a string","tag":"refentry","type":"Function","methodName":"join"},{"id":"ds-deque.jsonserialize","name":"Ds\\Deque::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"ds-deque.last","name":"Ds\\Deque::last","description":"Returns the last value","tag":"refentry","type":"Function","methodName":"last"},{"id":"ds-deque.map","name":"Ds\\Deque::map","description":"Returns the result of applying a callback to each value","tag":"refentry","type":"Function","methodName":"map"},{"id":"ds-deque.merge","name":"Ds\\Deque::merge","description":"Returns the result of adding all given values to the deque","tag":"refentry","type":"Function","methodName":"merge"},{"id":"ds-deque.pop","name":"Ds\\Deque::pop","description":"Removes and returns the last value","tag":"refentry","type":"Function","methodName":"pop"},{"id":"ds-deque.push","name":"Ds\\Deque::push","description":"Adds values to the end of the deque","tag":"refentry","type":"Function","methodName":"push"},{"id":"ds-deque.reduce","name":"Ds\\Deque::reduce","description":"Reduces the deque to a single value using a callback function","tag":"refentry","type":"Function","methodName":"reduce"},{"id":"ds-deque.remove","name":"Ds\\Deque::remove","description":"Removes and returns a value by index","tag":"refentry","type":"Function","methodName":"remove"},{"id":"ds-deque.reverse","name":"Ds\\Deque::reverse","description":"Reverses the deque in-place","tag":"refentry","type":"Function","methodName":"reverse"},{"id":"ds-deque.reversed","name":"Ds\\Deque::reversed","description":"Returns a reversed copy","tag":"refentry","type":"Function","methodName":"reversed"},{"id":"ds-deque.rotate","name":"Ds\\Deque::rotate","description":"Rotates the deque by a given number of rotations","tag":"refentry","type":"Function","methodName":"rotate"},{"id":"ds-deque.set","name":"Ds\\Deque::set","description":"Updates a value at a given index","tag":"refentry","type":"Function","methodName":"set"},{"id":"ds-deque.shift","name":"Ds\\Deque::shift","description":"Removes and returns the first value","tag":"refentry","type":"Function","methodName":"shift"},{"id":"ds-deque.slice","name":"Ds\\Deque::slice","description":"Returns a sub-deque of a given range","tag":"refentry","type":"Function","methodName":"slice"},{"id":"ds-deque.sort","name":"Ds\\Deque::sort","description":"Sorts the deque in-place","tag":"refentry","type":"Function","methodName":"sort"},{"id":"ds-deque.sorted","name":"Ds\\Deque::sorted","description":"Returns a sorted copy","tag":"refentry","type":"Function","methodName":"sorted"},{"id":"ds-deque.sum","name":"Ds\\Deque::sum","description":"Returns the sum of all values in the deque","tag":"refentry","type":"Function","methodName":"sum"},{"id":"ds-deque.toarray","name":"Ds\\Deque::toArray","description":"Converts the deque to an array","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"ds-deque.unshift","name":"Ds\\Deque::unshift","description":"Adds values to the front of the deque","tag":"refentry","type":"Function","methodName":"unshift"},{"id":"class.ds-deque","name":"Ds\\Deque","description":"The Deque class","tag":"phpdoc:classref","type":"Class","methodName":"Ds\\Deque"},{"id":"ds-map.allocate","name":"Ds\\Map::allocate","description":"Allocates enough memory for a required capacity","tag":"refentry","type":"Function","methodName":"allocate"},{"id":"ds-map.apply","name":"Ds\\Map::apply","description":"Updates all values by applying a callback function to each value","tag":"refentry","type":"Function","methodName":"apply"},{"id":"ds-map.capacity","name":"Ds\\Map::capacity","description":"Returns the current capacity","tag":"refentry","type":"Function","methodName":"capacity"},{"id":"ds-map.clear","name":"Ds\\Map::clear","description":"Removes all values","tag":"refentry","type":"Function","methodName":"clear"},{"id":"ds-map.construct","name":"Ds\\Map::__construct","description":"Creates a new instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ds-map.copy","name":"Ds\\Map::copy","description":"Returns a shallow copy of the map","tag":"refentry","type":"Function","methodName":"copy"},{"id":"ds-map.count","name":"Ds\\Map::count","description":"Returns the number of values in the map","tag":"refentry","type":"Function","methodName":"count"},{"id":"ds-map.diff","name":"Ds\\Map::diff","description":"Creates a new map using keys that aren't in another map","tag":"refentry","type":"Function","methodName":"diff"},{"id":"ds-map.filter","name":"Ds\\Map::filter","description":"Creates a new map using a callable to determine which pairs to include","tag":"refentry","type":"Function","methodName":"filter"},{"id":"ds-map.first","name":"Ds\\Map::first","description":"Returns the first pair in the map","tag":"refentry","type":"Function","methodName":"first"},{"id":"ds-map.get","name":"Ds\\Map::get","description":"Returns the value for a given key","tag":"refentry","type":"Function","methodName":"get"},{"id":"ds-map.haskey","name":"Ds\\Map::hasKey","description":"Determines whether the map contains a given key","tag":"refentry","type":"Function","methodName":"hasKey"},{"id":"ds-map.hasvalue","name":"Ds\\Map::hasValue","description":"Determines whether the map contains a given value","tag":"refentry","type":"Function","methodName":"hasValue"},{"id":"ds-map.intersect","name":"Ds\\Map::intersect","description":"Creates a new map by intersecting keys with another map","tag":"refentry","type":"Function","methodName":"intersect"},{"id":"ds-map.isempty","name":"Ds\\Map::isEmpty","description":"Returns whether the map is empty","tag":"refentry","type":"Function","methodName":"isEmpty"},{"id":"ds-map.jsonserialize","name":"Ds\\Map::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"ds-map.keys","name":"Ds\\Map::keys","description":"Returns a set of the map's keys","tag":"refentry","type":"Function","methodName":"keys"},{"id":"ds-map.ksort","name":"Ds\\Map::ksort","description":"Sorts the map in-place by key","tag":"refentry","type":"Function","methodName":"ksort"},{"id":"ds-map.ksorted","name":"Ds\\Map::ksorted","description":"Returns a copy, sorted by key","tag":"refentry","type":"Function","methodName":"ksorted"},{"id":"ds-map.last","name":"Ds\\Map::last","description":"Returns the last pair of the map","tag":"refentry","type":"Function","methodName":"last"},{"id":"ds-map.map","name":"Ds\\Map::map","description":"Returns the result of applying a callback to each value","tag":"refentry","type":"Function","methodName":"map"},{"id":"ds-map.merge","name":"Ds\\Map::merge","description":"Returns the result of adding all given associations","tag":"refentry","type":"Function","methodName":"merge"},{"id":"ds-map.pairs","name":"Ds\\Map::pairs","description":"Returns a sequence containing all the pairs of the map","tag":"refentry","type":"Function","methodName":"pairs"},{"id":"ds-map.put","name":"Ds\\Map::put","description":"Associates a key with a value","tag":"refentry","type":"Function","methodName":"put"},{"id":"ds-map.putall","name":"Ds\\Map::putAll","description":"Associates all key-value pairs of a traversable object or array","tag":"refentry","type":"Function","methodName":"putAll"},{"id":"ds-map.reduce","name":"Ds\\Map::reduce","description":"Reduces the map to a single value using a callback function","tag":"refentry","type":"Function","methodName":"reduce"},{"id":"ds-map.remove","name":"Ds\\Map::remove","description":"Removes and returns a value by key","tag":"refentry","type":"Function","methodName":"remove"},{"id":"ds-map.reverse","name":"Ds\\Map::reverse","description":"Reverses the map in-place","tag":"refentry","type":"Function","methodName":"reverse"},{"id":"ds-map.reversed","name":"Ds\\Map::reversed","description":"Returns a reversed copy","tag":"refentry","type":"Function","methodName":"reversed"},{"id":"ds-map.skip","name":"Ds\\Map::skip","description":"Returns the pair at a given positional index","tag":"refentry","type":"Function","methodName":"skip"},{"id":"ds-map.slice","name":"Ds\\Map::slice","description":"Returns a subset of the map defined by a starting index and length","tag":"refentry","type":"Function","methodName":"slice"},{"id":"ds-map.sort","name":"Ds\\Map::sort","description":"Sorts the map in-place by value","tag":"refentry","type":"Function","methodName":"sort"},{"id":"ds-map.sorted","name":"Ds\\Map::sorted","description":"Returns a copy, sorted by value","tag":"refentry","type":"Function","methodName":"sorted"},{"id":"ds-map.sum","name":"Ds\\Map::sum","description":"Returns the sum of all values in the map","tag":"refentry","type":"Function","methodName":"sum"},{"id":"ds-map.toarray","name":"Ds\\Map::toArray","description":"Converts the map to an array","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"ds-map.union","name":"Ds\\Map::union","description":"Creates a new map using values from the current instance and another map","tag":"refentry","type":"Function","methodName":"union"},{"id":"ds-map.values","name":"Ds\\Map::values","description":"Returns a sequence of the map's values","tag":"refentry","type":"Function","methodName":"values"},{"id":"ds-map.xor","name":"Ds\\Map::xor","description":"Creates a new map using keys of either the current instance or of another map, but not of both","tag":"refentry","type":"Function","methodName":"xor"},{"id":"class.ds-map","name":"Ds\\Map","description":"The Map class","tag":"phpdoc:classref","type":"Class","methodName":"Ds\\Map"},{"id":"ds-pair.clear","name":"Ds\\Pair::clear","description":"Removes all values","tag":"refentry","type":"Function","methodName":"clear"},{"id":"ds-pair.construct","name":"Ds\\Pair::__construct","description":"Creates a new instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ds-pair.copy","name":"Ds\\Pair::copy","description":"Returns a shallow copy of the pair","tag":"refentry","type":"Function","methodName":"copy"},{"id":"ds-pair.isempty","name":"Ds\\Pair::isEmpty","description":"Returns whether the pair is empty","tag":"refentry","type":"Function","methodName":"isEmpty"},{"id":"ds-pair.jsonserialize","name":"Ds\\Pair::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"ds-pair.toarray","name":"Ds\\Pair::toArray","description":"Converts the pair to an array","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"class.ds-pair","name":"Ds\\Pair","description":"The Pair class","tag":"phpdoc:classref","type":"Class","methodName":"Ds\\Pair"},{"id":"ds-set.add","name":"Ds\\Set::add","description":"Adds values to the set","tag":"refentry","type":"Function","methodName":"add"},{"id":"ds-set.allocate","name":"Ds\\Set::allocate","description":"Allocates enough memory for a required capacity","tag":"refentry","type":"Function","methodName":"allocate"},{"id":"ds-set.capacity","name":"Ds\\Set::capacity","description":"Returns the current capacity","tag":"refentry","type":"Function","methodName":"capacity"},{"id":"ds-set.clear","name":"Ds\\Set::clear","description":"Removes all values","tag":"refentry","type":"Function","methodName":"clear"},{"id":"ds-set.construct","name":"Ds\\Set::__construct","description":"Creates a new instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ds-set.contains","name":"Ds\\Set::contains","description":"Determines if the set contains all values","tag":"refentry","type":"Function","methodName":"contains"},{"id":"ds-set.copy","name":"Ds\\Set::copy","description":"Returns a shallow copy of the set","tag":"refentry","type":"Function","methodName":"copy"},{"id":"ds-set.count","name":"Ds\\Set::count","description":"Returns the number of values in the set","tag":"refentry","type":"Function","methodName":"count"},{"id":"ds-set.diff","name":"Ds\\Set::diff","description":"Creates a new set using values that aren't in another set","tag":"refentry","type":"Function","methodName":"diff"},{"id":"ds-set.filter","name":"Ds\\Set::filter","description":"Creates a new set using a callable to\n determine which values to include","tag":"refentry","type":"Function","methodName":"filter"},{"id":"ds-set.first","name":"Ds\\Set::first","description":"Returns the first value in the set","tag":"refentry","type":"Function","methodName":"first"},{"id":"ds-set.get","name":"Ds\\Set::get","description":"Returns the value at a given index","tag":"refentry","type":"Function","methodName":"get"},{"id":"ds-set.intersect","name":"Ds\\Set::intersect","description":"Creates a new set by intersecting values with another set","tag":"refentry","type":"Function","methodName":"intersect"},{"id":"ds-set.isempty","name":"Ds\\Set::isEmpty","description":"Returns whether the set is empty","tag":"refentry","type":"Function","methodName":"isEmpty"},{"id":"ds-set.join","name":"Ds\\Set::join","description":"Joins all values together as a string","tag":"refentry","type":"Function","methodName":"join"},{"id":"ds-set.jsonserialize","name":"Ds\\Set::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"ds-set.last","name":"Ds\\Set::last","description":"Returns the last value in the set","tag":"refentry","type":"Function","methodName":"last"},{"id":"ds-set.map","name":"Ds\\Set::map","description":"Returns the result of applying a callback to each value","tag":"refentry","type":"Function","methodName":"map"},{"id":"ds-set.merge","name":"Ds\\Set::merge","description":"Returns the result of adding all given values to the set","tag":"refentry","type":"Function","methodName":"merge"},{"id":"ds-set.reduce","name":"Ds\\Set::reduce","description":"Reduces the set to a single value using a callback function","tag":"refentry","type":"Function","methodName":"reduce"},{"id":"ds-set.remove","name":"Ds\\Set::remove","description":"Removes all given values from the set","tag":"refentry","type":"Function","methodName":"remove"},{"id":"ds-set.reverse","name":"Ds\\Set::reverse","description":"Reverses the set in-place","tag":"refentry","type":"Function","methodName":"reverse"},{"id":"ds-set.reversed","name":"Ds\\Set::reversed","description":"Returns a reversed copy","tag":"refentry","type":"Function","methodName":"reversed"},{"id":"ds-set.slice","name":"Ds\\Set::slice","description":"Returns a sub-set of a given range","tag":"refentry","type":"Function","methodName":"slice"},{"id":"ds-set.sort","name":"Ds\\Set::sort","description":"Sorts the set in-place","tag":"refentry","type":"Function","methodName":"sort"},{"id":"ds-set.sorted","name":"Ds\\Set::sorted","description":"Returns a sorted copy","tag":"refentry","type":"Function","methodName":"sorted"},{"id":"ds-set.sum","name":"Ds\\Set::sum","description":"Returns the sum of all values in the set","tag":"refentry","type":"Function","methodName":"sum"},{"id":"ds-set.toarray","name":"Ds\\Set::toArray","description":"Converts the set to an array","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"ds-set.union","name":"Ds\\Set::union","description":"Creates a new set using values from the current instance and another set","tag":"refentry","type":"Function","methodName":"union"},{"id":"ds-set.xor","name":"Ds\\Set::xor","description":"Creates a new set using values in either the current instance or in another set, but not in both","tag":"refentry","type":"Function","methodName":"xor"},{"id":"class.ds-set","name":"Ds\\Set","description":"The Set class","tag":"phpdoc:classref","type":"Class","methodName":"Ds\\Set"},{"id":"ds-stack.allocate","name":"Ds\\Stack::allocate","description":"Allocates enough memory for a required capacity","tag":"refentry","type":"Function","methodName":"allocate"},{"id":"ds-stack.capacity","name":"Ds\\Stack::capacity","description":"Returns the current capacity","tag":"refentry","type":"Function","methodName":"capacity"},{"id":"ds-stack.clear","name":"Ds\\Stack::clear","description":"Removes all values","tag":"refentry","type":"Function","methodName":"clear"},{"id":"ds-stack.construct","name":"Ds\\Stack::__construct","description":"Creates a new instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ds-stack.copy","name":"Ds\\Stack::copy","description":"Returns a shallow copy of the stack","tag":"refentry","type":"Function","methodName":"copy"},{"id":"ds-stack.count","name":"Ds\\Stack::count","description":"Returns the number of values in the stack","tag":"refentry","type":"Function","methodName":"count"},{"id":"ds-stack.isempty","name":"Ds\\Stack::isEmpty","description":"Returns whether the stack is empty","tag":"refentry","type":"Function","methodName":"isEmpty"},{"id":"ds-stack.jsonserialize","name":"Ds\\Stack::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"ds-stack.peek","name":"Ds\\Stack::peek","description":"Returns the value at the top of the stack","tag":"refentry","type":"Function","methodName":"peek"},{"id":"ds-stack.pop","name":"Ds\\Stack::pop","description":"Removes and returns the value at the top of the stack","tag":"refentry","type":"Function","methodName":"pop"},{"id":"ds-stack.push","name":"Ds\\Stack::push","description":"Pushes values onto the stack","tag":"refentry","type":"Function","methodName":"push"},{"id":"ds-stack.toarray","name":"Ds\\Stack::toArray","description":"Converts the stack to an array","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"class.ds-stack","name":"Ds\\Stack","description":"The Stack class","tag":"phpdoc:classref","type":"Class","methodName":"Ds\\Stack"},{"id":"ds-queue.allocate","name":"Ds\\Queue::allocate","description":"Allocates enough memory for a required capacity","tag":"refentry","type":"Function","methodName":"allocate"},{"id":"ds-queue.capacity","name":"Ds\\Queue::capacity","description":"Returns the current capacity","tag":"refentry","type":"Function","methodName":"capacity"},{"id":"ds-queue.clear","name":"Ds\\Queue::clear","description":"Removes all values","tag":"refentry","type":"Function","methodName":"clear"},{"id":"ds-queue.construct","name":"Ds\\Queue::__construct","description":"Creates a new instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ds-queue.copy","name":"Ds\\Queue::copy","description":"Returns a shallow copy of the queue","tag":"refentry","type":"Function","methodName":"copy"},{"id":"ds-queue.count","name":"Ds\\Queue::count","description":"Returns the number of values in the queue","tag":"refentry","type":"Function","methodName":"count"},{"id":"ds-queue.isempty","name":"Ds\\Queue::isEmpty","description":"Returns whether the queue is empty","tag":"refentry","type":"Function","methodName":"isEmpty"},{"id":"ds-queue.jsonserialize","name":"Ds\\Queue::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"ds-queue.peek","name":"Ds\\Queue::peek","description":"Returns the value at the front of the queue","tag":"refentry","type":"Function","methodName":"peek"},{"id":"ds-queue.pop","name":"Ds\\Queue::pop","description":"Removes and returns the value at the front of the queue","tag":"refentry","type":"Function","methodName":"pop"},{"id":"ds-queue.push","name":"Ds\\Queue::push","description":"Pushes values into the queue","tag":"refentry","type":"Function","methodName":"push"},{"id":"ds-queue.toarray","name":"Ds\\Queue::toArray","description":"Converts the queue to an array","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"class.ds-queue","name":"Ds\\Queue","description":"The Queue class","tag":"phpdoc:classref","type":"Class","methodName":"Ds\\Queue"},{"id":"ds-priorityqueue.allocate","name":"Ds\\PriorityQueue::allocate","description":"Allocates enough memory for a required capacity","tag":"refentry","type":"Function","methodName":"allocate"},{"id":"ds-priorityqueue.capacity","name":"Ds\\PriorityQueue::capacity","description":"Returns the current capacity","tag":"refentry","type":"Function","methodName":"capacity"},{"id":"ds-priorityqueue.clear","name":"Ds\\PriorityQueue::clear","description":"Removes all values","tag":"refentry","type":"Function","methodName":"clear"},{"id":"ds-priorityqueue.construct","name":"Ds\\PriorityQueue::__construct","description":"Creates a new instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ds-priorityqueue.copy","name":"Ds\\PriorityQueue::copy","description":"Returns a shallow copy of the queue","tag":"refentry","type":"Function","methodName":"copy"},{"id":"ds-priorityqueue.count","name":"Ds\\PriorityQueue::count","description":"Returns the number of values in the queue","tag":"refentry","type":"Function","methodName":"count"},{"id":"ds-priorityqueue.isempty","name":"Ds\\PriorityQueue::isEmpty","description":"Returns whether the queue is empty","tag":"refentry","type":"Function","methodName":"isEmpty"},{"id":"ds-priorityqueue.jsonserialize","name":"Ds\\PriorityQueue::jsonSerialize","description":"Returns a representation that can be converted to JSON","tag":"refentry","type":"Function","methodName":"jsonSerialize"},{"id":"ds-priorityqueue.peek","name":"Ds\\PriorityQueue::peek","description":"Returns the value at the front of the queue","tag":"refentry","type":"Function","methodName":"peek"},{"id":"ds-priorityqueue.pop","name":"Ds\\PriorityQueue::pop","description":"Removes and returns the value with the highest priority","tag":"refentry","type":"Function","methodName":"pop"},{"id":"ds-priorityqueue.push","name":"Ds\\PriorityQueue::push","description":"Pushes values into the queue","tag":"refentry","type":"Function","methodName":"push"},{"id":"ds-priorityqueue.toarray","name":"Ds\\PriorityQueue::toArray","description":"Converts the queue to an array","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"class.ds-priorityqueue","name":"Ds\\PriorityQueue","description":"The PriorityQueue class","tag":"phpdoc:classref","type":"Class","methodName":"Ds\\PriorityQueue"},{"id":"book.ds","name":"Data Structures","description":"Other Basic Extensions","tag":"book","type":"Extension","methodName":"Data Structures"},{"id":"intro.var_representation","name":"Introduction","description":"var_representation","tag":"preface","type":"General","methodName":"Introduction"},{"id":"var-representation.installation","name":"Installation","description":"var_representation","tag":"section","type":"General","methodName":"Installation"},{"id":"var-representation.setup","name":"Installing\/Configuring","description":"var_representation","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"var-representation.constants","name":"Predefined Constants","description":"var_representation","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.var-representation","name":"var_representation","description":"Returns a short, readable, parsable string representation of a variable","tag":"refentry","type":"Function","methodName":"var_representation"},{"id":"ref.var-representation","name":"var_representation Functions","description":"var_representation","tag":"reference","type":"Extension","methodName":"var_representation Functions"},{"id":"book.var_representation","name":"var_representation","description":"var_representation","tag":"book","type":"Extension","methodName":"var_representation"},{"id":"refs.basic.other","name":"Other Basic Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"Other Basic Extensions"},{"id":"intro.curl","name":"Introduction","description":"Client URL Library","tag":"preface","type":"General","methodName":"Introduction"},{"id":"curl.requirements","name":"Requirements","description":"Client URL Library","tag":"section","type":"General","methodName":"Requirements"},{"id":"curl.installation","name":"Installation","description":"Client URL Library","tag":"section","type":"General","methodName":"Installation"},{"id":"curl.configuration","name":"Runtime Configuration","description":"Client URL Library","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"curl.resources","name":"Resource Types","description":"Client URL Library","tag":"section","type":"General","methodName":"Resource Types"},{"id":"curl.setup","name":"Installing\/Configuring","description":"Client URL Library","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"curl.constants","name":"Predefined Constants","description":"Client URL Library","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"curl.examples-basic","name":"Basic curl example","description":"Client URL Library","tag":"section","type":"General","methodName":"Basic curl example"},{"id":"curl.examples","name":"Examples","description":"Client URL Library","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.curl-close","name":"curl_close","description":"Close a cURL session","tag":"refentry","type":"Function","methodName":"curl_close"},{"id":"function.curl-copy-handle","name":"curl_copy_handle","description":"Copy a cURL handle along with all of its preferences","tag":"refentry","type":"Function","methodName":"curl_copy_handle"},{"id":"function.curl-errno","name":"curl_errno","description":"Return the last error number","tag":"refentry","type":"Function","methodName":"curl_errno"},{"id":"function.curl-error","name":"curl_error","description":"Return a string containing the last error for the current session","tag":"refentry","type":"Function","methodName":"curl_error"},{"id":"function.curl-escape","name":"curl_escape","description":"URL encodes the given string","tag":"refentry","type":"Function","methodName":"curl_escape"},{"id":"function.curl-exec","name":"curl_exec","description":"Perform a cURL session","tag":"refentry","type":"Function","methodName":"curl_exec"},{"id":"function.curl-getinfo","name":"curl_getinfo","description":"Get information regarding a specific transfer","tag":"refentry","type":"Function","methodName":"curl_getinfo"},{"id":"function.curl-init","name":"curl_init","description":"Initialize a cURL session","tag":"refentry","type":"Function","methodName":"curl_init"},{"id":"function.curl-multi-add-handle","name":"curl_multi_add_handle","description":"Add a normal cURL handle to a cURL multi handle","tag":"refentry","type":"Function","methodName":"curl_multi_add_handle"},{"id":"function.curl-multi-close","name":"curl_multi_close","description":"Remove all cURL handles from a multi handle","tag":"refentry","type":"Function","methodName":"curl_multi_close"},{"id":"function.curl-multi-errno","name":"curl_multi_errno","description":"Return the last multi curl error number","tag":"refentry","type":"Function","methodName":"curl_multi_errno"},{"id":"function.curl-multi-exec","name":"curl_multi_exec","description":"Run the sub-connections of the current cURL handle","tag":"refentry","type":"Function","methodName":"curl_multi_exec"},{"id":"function.curl-multi-getcontent","name":"curl_multi_getcontent","description":"Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set","tag":"refentry","type":"Function","methodName":"curl_multi_getcontent"},{"id":"function.curl-multi-info-read","name":"curl_multi_info_read","description":"Get information about the current transfers","tag":"refentry","type":"Function","methodName":"curl_multi_info_read"},{"id":"function.curl-multi-init","name":"curl_multi_init","description":"Returns a new cURL multi handle","tag":"refentry","type":"Function","methodName":"curl_multi_init"},{"id":"function.curl-multi-remove-handle","name":"curl_multi_remove_handle","description":"Remove a handle from a set of cURL handles","tag":"refentry","type":"Function","methodName":"curl_multi_remove_handle"},{"id":"function.curl-multi-select","name":"curl_multi_select","description":"Wait until reading or writing is possible for any cURL multi handle connection","tag":"refentry","type":"Function","methodName":"curl_multi_select"},{"id":"function.curl-multi-setopt","name":"curl_multi_setopt","description":"Set a cURL multi option","tag":"refentry","type":"Function","methodName":"curl_multi_setopt"},{"id":"function.curl-multi-strerror","name":"curl_multi_strerror","description":"Return string describing error code","tag":"refentry","type":"Function","methodName":"curl_multi_strerror"},{"id":"function.curl-pause","name":"curl_pause","description":"Pause and unpause a connection","tag":"refentry","type":"Function","methodName":"curl_pause"},{"id":"function.curl-reset","name":"curl_reset","description":"Reset all options of a libcurl session handle","tag":"refentry","type":"Function","methodName":"curl_reset"},{"id":"function.curl-setopt","name":"curl_setopt","description":"Set an option for a cURL transfer","tag":"refentry","type":"Function","methodName":"curl_setopt"},{"id":"function.curl-setopt-array","name":"curl_setopt_array","description":"Set multiple options for a cURL transfer","tag":"refentry","type":"Function","methodName":"curl_setopt_array"},{"id":"function.curl-share-close","name":"curl_share_close","description":"Close a cURL share handle","tag":"refentry","type":"Function","methodName":"curl_share_close"},{"id":"function.curl-share-errno","name":"curl_share_errno","description":"Return the last share curl error number","tag":"refentry","type":"Function","methodName":"curl_share_errno"},{"id":"function.curl-share-init","name":"curl_share_init","description":"Initialize a cURL share handle","tag":"refentry","type":"Function","methodName":"curl_share_init"},{"id":"function.curl-share-init-persistent","name":"curl_share_init_persistent","description":"Initialize a persistent cURL share handle","tag":"refentry","type":"Function","methodName":"curl_share_init_persistent"},{"id":"function.curl-share-setopt","name":"curl_share_setopt","description":"Set an option for a cURL share handle","tag":"refentry","type":"Function","methodName":"curl_share_setopt"},{"id":"function.curl-share-strerror","name":"curl_share_strerror","description":"Return string describing the given error code","tag":"refentry","type":"Function","methodName":"curl_share_strerror"},{"id":"function.curl-strerror","name":"curl_strerror","description":"Return string describing the given error code","tag":"refentry","type":"Function","methodName":"curl_strerror"},{"id":"function.curl-unescape","name":"curl_unescape","description":"Decodes the given URL encoded string","tag":"refentry","type":"Function","methodName":"curl_unescape"},{"id":"function.curl_upkeep","name":"curl_upkeep","description":"Performs any connection upkeep checks","tag":"refentry","type":"Function","methodName":"curl_upkeep"},{"id":"function.curl-version","name":"curl_version","description":"Gets cURL version information","tag":"refentry","type":"Function","methodName":"curl_version"},{"id":"ref.curl","name":"cURL Functions","description":"Client URL Library","tag":"reference","type":"Extension","methodName":"cURL Functions"},{"id":"class.curlhandle","name":"CurlHandle","description":"The CurlHandle class","tag":"phpdoc:classref","type":"Class","methodName":"CurlHandle"},{"id":"class.curlmultihandle","name":"CurlMultiHandle","description":"The CurlMultiHandle class","tag":"phpdoc:classref","type":"Class","methodName":"CurlMultiHandle"},{"id":"class.curlsharehandle","name":"CurlShareHandle","description":"The CurlShareHandle class","tag":"phpdoc:classref","type":"Class","methodName":"CurlShareHandle"},{"id":"class.curlsharepersistenthandle","name":"CurlSharePersistentHandle","description":"The CurlSharePersistentHandle class","tag":"phpdoc:classref","type":"Class","methodName":"CurlSharePersistentHandle"},{"id":"curlfile.construct","name":"curl_file_create","description":"Create a CURLFile object","tag":"refentry","type":"Function","methodName":"curl_file_create"},{"id":"curlfile.construct","name":"CURLFile::__construct","description":"Create a CURLFile object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"curlfile.getfilename","name":"CURLFile::getFilename","description":"Get file name","tag":"refentry","type":"Function","methodName":"getFilename"},{"id":"curlfile.getmimetype","name":"CURLFile::getMimeType","description":"Get MIME type","tag":"refentry","type":"Function","methodName":"getMimeType"},{"id":"curlfile.getpostfilename","name":"CURLFile::getPostFilename","description":"Get file name for POST","tag":"refentry","type":"Function","methodName":"getPostFilename"},{"id":"curlfile.setmimetype","name":"CURLFile::setMimeType","description":"Set MIME type","tag":"refentry","type":"Function","methodName":"setMimeType"},{"id":"curlfile.setpostfilename","name":"CURLFile::setPostFilename","description":"Set file name for POST","tag":"refentry","type":"Function","methodName":"setPostFilename"},{"id":"class.curlfile","name":"CURLFile","description":"The CURLFile class","tag":"phpdoc:classref","type":"Class","methodName":"CURLFile"},{"id":"curlstringfile.construct","name":"CURLStringFile::__construct","description":"Create a CURLStringFile object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.curlstringfile","name":"CURLStringFile","description":"The CURLStringFile class","tag":"phpdoc:classref","type":"Class","methodName":"CURLStringFile"},{"id":"book.curl","name":"cURL","description":"Client URL Library","tag":"book","type":"Extension","methodName":"cURL"},{"id":"intro.event","name":"Introduction","description":"Event","tag":"preface","type":"General","methodName":"Introduction"},{"id":"event.requirements","name":"Requirements","description":"Event","tag":"section","type":"General","methodName":"Requirements"},{"id":"event.installation","name":"Installation","description":"Event","tag":"section","type":"General","methodName":"Installation"},{"id":"event.setup","name":"Installing\/Configuring","description":"Event","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"event.examples","name":"Examples","description":"Event","tag":"chapter","type":"General","methodName":"Examples"},{"id":"event.flags","name":"Event flags","description":"Event","tag":"chapter","type":"General","methodName":"Event flags"},{"id":"event.persistence","name":"About event persistence","description":"Event","tag":"chapter","type":"General","methodName":"About event persistence"},{"id":"event.callbacks","name":"Event callbacks","description":"Event","tag":"chapter","type":"General","methodName":"Event callbacks"},{"id":"event.constructing.signal.events","name":"Constructing signal events","description":"Event","tag":"chapter","type":"General","methodName":"Constructing signal events"},{"id":"event.add","name":"Event::add","description":"Makes event pending","tag":"refentry","type":"Function","methodName":"add"},{"id":"event.addsignal","name":"Event::addSignal","description":"Alias of Event::add","tag":"refentry","type":"Function","methodName":"addSignal"},{"id":"event.addtimer","name":"Event::addTimer","description":"Alias of Event::add","tag":"refentry","type":"Function","methodName":"addTimer"},{"id":"event.construct","name":"Event::__construct","description":"Constructs Event object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"event.del","name":"Event::del","description":"Makes event non-pending","tag":"refentry","type":"Function","methodName":"del"},{"id":"event.delsignal","name":"Event::delSignal","description":"Alias of Event::del","tag":"refentry","type":"Function","methodName":"delSignal"},{"id":"event.deltimer","name":"Event::delTimer","description":"Alias of Event::del","tag":"refentry","type":"Function","methodName":"delTimer"},{"id":"event.free","name":"Event::free","description":"Make event non-pending and free resources allocated for this\n event","tag":"refentry","type":"Function","methodName":"free"},{"id":"event.getsupportedmethods","name":"Event::getSupportedMethods","description":"Returns array with of the names of the methods supported in this version of Libevent","tag":"refentry","type":"Function","methodName":"getSupportedMethods"},{"id":"event.pending","name":"Event::pending","description":"Detects whether event is pending or scheduled","tag":"refentry","type":"Function","methodName":"pending"},{"id":"event.set","name":"Event::set","description":"Re-configures event","tag":"refentry","type":"Function","methodName":"set"},{"id":"event.setpriority","name":"Event::setPriority","description":"Set event priority","tag":"refentry","type":"Function","methodName":"setPriority"},{"id":"event.settimer","name":"Event::setTimer","description":"Re-configures timer event","tag":"refentry","type":"Function","methodName":"setTimer"},{"id":"event.signal","name":"Event::signal","description":"Constructs signal event object","tag":"refentry","type":"Function","methodName":"signal"},{"id":"event.timer","name":"Event::timer","description":"Constructs timer event object","tag":"refentry","type":"Function","methodName":"timer"},{"id":"class.event","name":"Event","description":"The Event class","tag":"phpdoc:classref","type":"Class","methodName":"Event"},{"id":"eventbase.construct","name":"EventBase::__construct","description":"Constructs EventBase object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"eventbase.dispatch","name":"EventBase::dispatch","description":"Dispatch pending events","tag":"refentry","type":"Function","methodName":"dispatch"},{"id":"eventbase.exit","name":"EventBase::exit","description":"Stop dispatching events","tag":"refentry","type":"Function","methodName":"exit"},{"id":"eventbase.free","name":"EventBase::free","description":"Free resources allocated for this event base","tag":"refentry","type":"Function","methodName":"free"},{"id":"eventbase.getfeatures","name":"EventBase::getFeatures","description":"Returns bitmask of features supported","tag":"refentry","type":"Function","methodName":"getFeatures"},{"id":"eventbase.getmethod","name":"EventBase::getMethod","description":"Returns event method in use","tag":"refentry","type":"Function","methodName":"getMethod"},{"id":"eventbase.gettimeofdaycached","name":"EventBase::getTimeOfDayCached","description":"Returns the current event base time","tag":"refentry","type":"Function","methodName":"getTimeOfDayCached"},{"id":"eventbase.gotexit","name":"EventBase::gotExit","description":"Checks if the event loop was told to exit","tag":"refentry","type":"Function","methodName":"gotExit"},{"id":"eventbase.gotstop","name":"EventBase::gotStop","description":"Checks if the event loop was told to exit","tag":"refentry","type":"Function","methodName":"gotStop"},{"id":"eventbase.loop","name":"EventBase::loop","description":"Dispatch pending events","tag":"refentry","type":"Function","methodName":"loop"},{"id":"eventbase.priorityinit","name":"EventBase::priorityInit","description":"Sets number of priorities per event base","tag":"refentry","type":"Function","methodName":"priorityInit"},{"id":"eventbase.reinit","name":"EventBase::reInit","description":"Re-initialize event base(after a fork)","tag":"refentry","type":"Function","methodName":"reInit"},{"id":"eventbase.stop","name":"EventBase::stop","description":"Tells event_base to stop dispatching events","tag":"refentry","type":"Function","methodName":"stop"},{"id":"class.eventbase","name":"EventBase","description":"The EventBase class","tag":"phpdoc:classref","type":"Class","methodName":"EventBase"},{"id":"eventbuffer.add","name":"EventBuffer::add","description":"Append data to the end of an event buffer","tag":"refentry","type":"Function","methodName":"add"},{"id":"eventbuffer.addbuffer","name":"EventBuffer::addBuffer","description":"Move all data from a buffer provided to the current instance of EventBuffer","tag":"refentry","type":"Function","methodName":"addBuffer"},{"id":"eventbuffer.appendfrom","name":"EventBuffer::appendFrom","description":"Moves the specified number of bytes from a source buffer to the\n end of the current buffer","tag":"refentry","type":"Function","methodName":"appendFrom"},{"id":"eventbuffer.construct","name":"EventBuffer::__construct","description":"Constructs EventBuffer object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"eventbuffer.copyout","name":"EventBuffer::copyout","description":"Copies out specified number of bytes from the front of the buffer","tag":"refentry","type":"Function","methodName":"copyout"},{"id":"eventbuffer.drain","name":"EventBuffer::drain","description":"Removes specified number of bytes from the front of the buffer\n without copying it anywhere","tag":"refentry","type":"Function","methodName":"drain"},{"id":"eventbuffer.enablelocking","name":"EventBuffer::enableLocking","description":"Description","tag":"refentry","type":"Function","methodName":"enableLocking"},{"id":"eventbuffer.expand","name":"EventBuffer::expand","description":"Reserves space in buffer","tag":"refentry","type":"Function","methodName":"expand"},{"id":"eventbuffer.freeze","name":"EventBuffer::freeze","description":"Prevent calls that modify an event buffer from succeeding","tag":"refentry","type":"Function","methodName":"freeze"},{"id":"eventbuffer.lock","name":"EventBuffer::lock","description":"Acquires a lock on buffer","tag":"refentry","type":"Function","methodName":"lock"},{"id":"eventbuffer.prepend","name":"EventBuffer::prepend","description":"Prepend data to the front of the buffer","tag":"refentry","type":"Function","methodName":"prepend"},{"id":"eventbuffer.prependbuffer","name":"EventBuffer::prependBuffer","description":"Moves all data from source buffer to the front of current buffer","tag":"refentry","type":"Function","methodName":"prependBuffer"},{"id":"eventbuffer.pullup","name":"EventBuffer::pullup","description":"Linearizes data within buffer\n and returns it's contents as a string","tag":"refentry","type":"Function","methodName":"pullup"},{"id":"eventbuffer.read","name":"EventBuffer::read","description":"Read data from an evbuffer and drain the bytes read","tag":"refentry","type":"Function","methodName":"read"},{"id":"eventbuffer.readfrom","name":"EventBuffer::readFrom","description":"Read data from a file onto the end of the buffer","tag":"refentry","type":"Function","methodName":"readFrom"},{"id":"eventbuffer.readline","name":"EventBuffer::readLine","description":"Extracts a line from the front of the buffer","tag":"refentry","type":"Function","methodName":"readLine"},{"id":"eventbuffer.search","name":"EventBuffer::search","description":"Scans the buffer for an occurrence of a string","tag":"refentry","type":"Function","methodName":"search"},{"id":"eventbuffer.searcheol","name":"EventBuffer::searchEol","description":"Scans the buffer for an occurrence of an end of line","tag":"refentry","type":"Function","methodName":"searchEol"},{"id":"eventbuffer.substr","name":"EventBuffer::substr","description":"Substracts a portion of the buffer data","tag":"refentry","type":"Function","methodName":"substr"},{"id":"eventbuffer.unfreeze","name":"EventBuffer::unfreeze","description":"Re-enable calls that modify an event buffer","tag":"refentry","type":"Function","methodName":"unfreeze"},{"id":"eventbuffer.unlock","name":"EventBuffer::unlock","description":"Releases lock acquired by EventBuffer::lock","tag":"refentry","type":"Function","methodName":"unlock"},{"id":"eventbuffer.write","name":"EventBuffer::write","description":"Write contents of the buffer to a file or socket","tag":"refentry","type":"Function","methodName":"write"},{"id":"class.eventbuffer","name":"EventBuffer","description":"The EventBuffer class","tag":"phpdoc:classref","type":"Class","methodName":"EventBuffer"},{"id":"eventbufferevent.close","name":"EventBufferEvent::close","description":"Closes file descriptor associated with the current buffer event","tag":"refentry","type":"Function","methodName":"close"},{"id":"eventbufferevent.connect","name":"EventBufferEvent::connect","description":"Connect buffer event's file descriptor to given address or\n UNIX socket","tag":"refentry","type":"Function","methodName":"connect"},{"id":"eventbufferevent.connecthost","name":"EventBufferEvent::connectHost","description":"Connects to a hostname with optionally asyncronous DNS resolving","tag":"refentry","type":"Function","methodName":"connectHost"},{"id":"eventbufferevent.construct","name":"EventBufferEvent::__construct","description":"Constructs EventBufferEvent object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"eventbufferevent.createpair","name":"EventBufferEvent::createPair","description":"Creates two buffer events connected to each other","tag":"refentry","type":"Function","methodName":"createPair"},{"id":"eventbufferevent.disable","name":"EventBufferEvent::disable","description":"Disable events read, write, or both on a buffer event","tag":"refentry","type":"Function","methodName":"disable"},{"id":"eventbufferevent.enable","name":"EventBufferEvent::enable","description":"Enable events read, write, or both on a buffer event","tag":"refentry","type":"Function","methodName":"enable"},{"id":"eventbufferevent.free","name":"EventBufferEvent::free","description":"Free a buffer event","tag":"refentry","type":"Function","methodName":"free"},{"id":"eventbufferevent.getdnserrorstring","name":"EventBufferEvent::getDnsErrorString","description":"Returns string describing the last failed DNS lookup attempt","tag":"refentry","type":"Function","methodName":"getDnsErrorString"},{"id":"eventbufferevent.getenabled","name":"EventBufferEvent::getEnabled","description":"Returns bitmask of events currently enabled on the buffer event","tag":"refentry","type":"Function","methodName":"getEnabled"},{"id":"eventbufferevent.getinput","name":"EventBufferEvent::getInput","description":"Returns underlying input buffer associated with current buffer\n event","tag":"refentry","type":"Function","methodName":"getInput"},{"id":"eventbufferevent.getoutput","name":"EventBufferEvent::getOutput","description":"Returns underlying output buffer associated with current buffer\n event","tag":"refentry","type":"Function","methodName":"getOutput"},{"id":"eventbufferevent.read","name":"EventBufferEvent::read","description":"Read buffer's data","tag":"refentry","type":"Function","methodName":"read"},{"id":"eventbufferevent.readbuffer","name":"EventBufferEvent::readBuffer","description":"Drains the entire contents of the input buffer and places them into buf","tag":"refentry","type":"Function","methodName":"readBuffer"},{"id":"eventbufferevent.setcallbacks","name":"EventBufferEvent::setCallbacks","description":"Assigns read, write and event(status) callbacks","tag":"refentry","type":"Function","methodName":"setCallbacks"},{"id":"eventbufferevent.setpriority","name":"EventBufferEvent::setPriority","description":"Assign a priority to a bufferevent","tag":"refentry","type":"Function","methodName":"setPriority"},{"id":"eventbufferevent.settimeouts","name":"EventBufferEvent::setTimeouts","description":"Set the read and write timeout for a buffer event","tag":"refentry","type":"Function","methodName":"setTimeouts"},{"id":"eventbufferevent.setwatermark","name":"EventBufferEvent::setWatermark","description":"Adjusts read and\/or write watermarks","tag":"refentry","type":"Function","methodName":"setWatermark"},{"id":"eventbufferevent.sslerror","name":"EventBufferEvent::sslError","description":"Returns most recent OpenSSL error reported on the buffer event","tag":"refentry","type":"Function","methodName":"sslError"},{"id":"eventbufferevent.sslfilter","name":"EventBufferEvent::sslFilter","description":"Create a new SSL buffer event to send its data over another buffer event","tag":"refentry","type":"Function","methodName":"sslFilter"},{"id":"eventbufferevent.sslgetcipherinfo","name":"EventBufferEvent::sslGetCipherInfo","description":"Returns a textual description of the cipher","tag":"refentry","type":"Function","methodName":"sslGetCipherInfo"},{"id":"eventbufferevent.sslgetciphername","name":"EventBufferEvent::sslGetCipherName","description":"Returns the current cipher name of the SSL connection","tag":"refentry","type":"Function","methodName":"sslGetCipherName"},{"id":"eventbufferevent.sslgetcipherversion","name":"EventBufferEvent::sslGetCipherVersion","description":"Returns version of cipher used by current SSL connection","tag":"refentry","type":"Function","methodName":"sslGetCipherVersion"},{"id":"eventbufferevent.sslgetprotocol","name":"EventBufferEvent::sslGetProtocol","description":"Returns the name of the protocol used for current SSL connection","tag":"refentry","type":"Function","methodName":"sslGetProtocol"},{"id":"eventbufferevent.sslrenegotiate","name":"EventBufferEvent::sslRenegotiate","description":"Tells a bufferevent to begin SSL renegotiation","tag":"refentry","type":"Function","methodName":"sslRenegotiate"},{"id":"eventbufferevent.sslsocket","name":"EventBufferEvent::sslSocket","description":"Creates a new SSL buffer event to send its data over an SSL on a socket","tag":"refentry","type":"Function","methodName":"sslSocket"},{"id":"eventbufferevent.write","name":"EventBufferEvent::write","description":"Adds data to a buffer event's output buffer","tag":"refentry","type":"Function","methodName":"write"},{"id":"eventbufferevent.writebuffer","name":"EventBufferEvent::writeBuffer","description":"Adds contents of the entire buffer to a buffer event's output\n buffer","tag":"refentry","type":"Function","methodName":"writeBuffer"},{"id":"class.eventbufferevent","name":"EventBufferEvent","description":"The EventBufferEvent class","tag":"phpdoc:classref","type":"Class","methodName":"EventBufferEvent"},{"id":"eventbufferevent.about.callbacks","name":"About buffer event callbacks","description":"Event","tag":"chapter","type":"General","methodName":"About buffer event callbacks"},{"id":"eventconfig.avoidmethod","name":"EventConfig::avoidMethod","description":"Tells libevent to avoid specific event method","tag":"refentry","type":"Function","methodName":"avoidMethod"},{"id":"eventconfig.construct","name":"EventConfig::__construct","description":"Constructs EventConfig object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"eventconfig.requirefeatures","name":"EventConfig::requireFeatures","description":"Enters a required event method feature that the application demands","tag":"refentry","type":"Function","methodName":"requireFeatures"},{"id":"eventconfig.setflags","name":"EventConfig::setFlags","description":"Sets one or more flags to configure the eventual EventBase will be initialized","tag":"refentry","type":"Function","methodName":"setFlags"},{"id":"eventconfig.setmaxdispatchinterval","name":"EventConfig::setMaxDispatchInterval","description":"Prevents priority inversion","tag":"refentry","type":"Function","methodName":"setMaxDispatchInterval"},{"id":"class.eventconfig","name":"EventConfig","description":"The EventConfig class","tag":"phpdoc:classref","type":"Class","methodName":"EventConfig"},{"id":"eventdnsbase.addnameserverip","name":"EventDnsBase::addNameserverIp","description":"Adds a nameserver to the DNS base","tag":"refentry","type":"Function","methodName":"addNameserverIp"},{"id":"eventdnsbase.addsearch","name":"EventDnsBase::addSearch","description":"Adds a domain to the list of search domains","tag":"refentry","type":"Function","methodName":"addSearch"},{"id":"eventdnsbase.clearsearch","name":"EventDnsBase::clearSearch","description":"Removes all current search suffixes","tag":"refentry","type":"Function","methodName":"clearSearch"},{"id":"eventdnsbase.construct","name":"EventDnsBase::__construct","description":"Constructs EventDnsBase object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"eventdnsbase.countnameservers","name":"EventDnsBase::countNameservers","description":"Gets the number of configured nameservers","tag":"refentry","type":"Function","methodName":"countNameservers"},{"id":"eventdnsbase.loadhosts","name":"EventDnsBase::loadHosts","description":"Loads a hosts file (in the same format as \/etc\/hosts) from hosts file","tag":"refentry","type":"Function","methodName":"loadHosts"},{"id":"eventdnsbase.parseresolvconf","name":"EventDnsBase::parseResolvConf","description":"Scans the resolv.conf-formatted file","tag":"refentry","type":"Function","methodName":"parseResolvConf"},{"id":"eventdnsbase.setoption","name":"EventDnsBase::setOption","description":"Set the value of a configuration option","tag":"refentry","type":"Function","methodName":"setOption"},{"id":"eventdnsbase.setsearchndots","name":"EventDnsBase::setSearchNdots","description":"Set the 'ndots' parameter for searches","tag":"refentry","type":"Function","methodName":"setSearchNdots"},{"id":"class.eventdnsbase","name":"EventDnsBase","description":"The EventDnsBase class","tag":"phpdoc:classref","type":"Class","methodName":"EventDnsBase"},{"id":"eventhttp.accept","name":"EventHttp::accept","description":"Makes an HTTP server accept connections on the specified socket stream or resource","tag":"refentry","type":"Function","methodName":"accept"},{"id":"eventhttp.addserveralias","name":"EventHttp::addServerAlias","description":"Adds a server alias to the HTTP server object","tag":"refentry","type":"Function","methodName":"addServerAlias"},{"id":"eventhttp.bind","name":"EventHttp::bind","description":"Binds an HTTP server on the specified address and port","tag":"refentry","type":"Function","methodName":"bind"},{"id":"eventhttp.construct","name":"EventHttp::__construct","description":"Constructs EventHttp object (the HTTP server)","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"eventhttp.removeserveralias","name":"EventHttp::removeServerAlias","description":"Removes server alias","tag":"refentry","type":"Function","methodName":"removeServerAlias"},{"id":"eventhttp.setallowedmethods","name":"EventHttp::setAllowedMethods","description":"Sets the what HTTP methods are supported in requests accepted by this server, and passed to user callbacks","tag":"refentry","type":"Function","methodName":"setAllowedMethods"},{"id":"eventhttp.setcallback","name":"EventHttp::setCallback","description":"Sets a callback for specified URI","tag":"refentry","type":"Function","methodName":"setCallback"},{"id":"eventhttp.setdefaultcallback","name":"EventHttp::setDefaultCallback","description":"Sets default callback to handle requests that are not caught by specific callbacks","tag":"refentry","type":"Function","methodName":"setDefaultCallback"},{"id":"eventhttp.setmaxbodysize","name":"EventHttp::setMaxBodySize","description":"Sets maximum request body size","tag":"refentry","type":"Function","methodName":"setMaxBodySize"},{"id":"eventhttp.setmaxheaderssize","name":"EventHttp::setMaxHeadersSize","description":"Sets maximum HTTP header size","tag":"refentry","type":"Function","methodName":"setMaxHeadersSize"},{"id":"eventhttp.settimeout","name":"EventHttp::setTimeout","description":"Sets the timeout for an HTTP request","tag":"refentry","type":"Function","methodName":"setTimeout"},{"id":"class.eventhttp","name":"EventHttp","description":"The EventHttp class","tag":"phpdoc:classref","type":"Class","methodName":"EventHttp"},{"id":"eventhttpconnection.construct","name":"EventHttpConnection::__construct","description":"Constructs EventHttpConnection object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"eventhttpconnection.getbase","name":"EventHttpConnection::getBase","description":"Returns event base associated with the connection","tag":"refentry","type":"Function","methodName":"getBase"},{"id":"eventhttpconnection.getpeer","name":"EventHttpConnection::getPeer","description":"Gets the remote address and port associated with the connection","tag":"refentry","type":"Function","methodName":"getPeer"},{"id":"eventhttpconnection.makerequest","name":"EventHttpConnection::makeRequest","description":"Makes an HTTP request over the specified connection","tag":"refentry","type":"Function","methodName":"makeRequest"},{"id":"eventhttpconnection.setclosecallback","name":"EventHttpConnection::setCloseCallback","description":"Set callback for connection close","tag":"refentry","type":"Function","methodName":"setCloseCallback"},{"id":"eventhttpconnection.setlocaladdress","name":"EventHttpConnection::setLocalAddress","description":"Sets the IP address from which HTTP connections are made","tag":"refentry","type":"Function","methodName":"setLocalAddress"},{"id":"eventhttpconnection.setlocalport","name":"EventHttpConnection::setLocalPort","description":"Sets the local port from which connections are made","tag":"refentry","type":"Function","methodName":"setLocalPort"},{"id":"eventhttpconnection.setmaxbodysize","name":"EventHttpConnection::setMaxBodySize","description":"Sets maximum body size for the connection","tag":"refentry","type":"Function","methodName":"setMaxBodySize"},{"id":"eventhttpconnection.setmaxheaderssize","name":"EventHttpConnection::setMaxHeadersSize","description":"Sets maximum header size","tag":"refentry","type":"Function","methodName":"setMaxHeadersSize"},{"id":"eventhttpconnection.setretries","name":"EventHttpConnection::setRetries","description":"Sets the retry limit for the connection","tag":"refentry","type":"Function","methodName":"setRetries"},{"id":"eventhttpconnection.settimeout","name":"EventHttpConnection::setTimeout","description":"Sets the timeout for the connection","tag":"refentry","type":"Function","methodName":"setTimeout"},{"id":"class.eventhttpconnection","name":"EventHttpConnection","description":"The EventHttpConnection class","tag":"phpdoc:classref","type":"Class","methodName":"EventHttpConnection"},{"id":"eventhttprequest.addheader","name":"EventHttpRequest::addHeader","description":"Adds an HTTP header to the headers of the request","tag":"refentry","type":"Function","methodName":"addHeader"},{"id":"eventhttprequest.cancel","name":"EventHttpRequest::cancel","description":"Cancels a pending HTTP request","tag":"refentry","type":"Function","methodName":"cancel"},{"id":"eventhttprequest.clearheaders","name":"EventHttpRequest::clearHeaders","description":"Removes all output headers from the header list of the request","tag":"refentry","type":"Function","methodName":"clearHeaders"},{"id":"eventhttprequest.closeconnection","name":"EventHttpRequest::closeConnection","description":"Closes associated HTTP connection","tag":"refentry","type":"Function","methodName":"closeConnection"},{"id":"eventhttprequest.construct","name":"EventHttpRequest::__construct","description":"Constructs EventHttpRequest object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"eventhttprequest.findheader","name":"EventHttpRequest::findHeader","description":"Finds the value belonging a header","tag":"refentry","type":"Function","methodName":"findHeader"},{"id":"eventhttprequest.free","name":"EventHttpRequest::free","description":"Frees the object and removes associated events","tag":"refentry","type":"Function","methodName":"free"},{"id":"eventhttprequest.getbufferevent","name":"EventHttpRequest::getBufferEvent","description":"Returns EventBufferEvent object","tag":"refentry","type":"Function","methodName":"getBufferEvent"},{"id":"eventhttprequest.getcommand","name":"EventHttpRequest::getCommand","description":"Returns the request command(method)","tag":"refentry","type":"Function","methodName":"getCommand"},{"id":"eventhttprequest.getconnection","name":"EventHttpRequest::getConnection","description":"Returns EventHttpConnection object","tag":"refentry","type":"Function","methodName":"getConnection"},{"id":"eventhttprequest.gethost","name":"EventHttpRequest::getHost","description":"Returns the request host","tag":"refentry","type":"Function","methodName":"getHost"},{"id":"eventhttprequest.getinputbuffer","name":"EventHttpRequest::getInputBuffer","description":"Returns the input buffer","tag":"refentry","type":"Function","methodName":"getInputBuffer"},{"id":"eventhttprequest.getinputheaders","name":"EventHttpRequest::getInputHeaders","description":"Returns associative array of the input headers","tag":"refentry","type":"Function","methodName":"getInputHeaders"},{"id":"eventhttprequest.getoutputbuffer","name":"EventHttpRequest::getOutputBuffer","description":"Returns the output buffer of the request","tag":"refentry","type":"Function","methodName":"getOutputBuffer"},{"id":"eventhttprequest.getoutputheaders","name":"EventHttpRequest::getOutputHeaders","description":"Returns associative array of the output headers","tag":"refentry","type":"Function","methodName":"getOutputHeaders"},{"id":"eventhttprequest.getresponsecode","name":"EventHttpRequest::getResponseCode","description":"Returns the response code","tag":"refentry","type":"Function","methodName":"getResponseCode"},{"id":"eventhttprequest.geturi","name":"EventHttpRequest::getUri","description":"Returns the request URI","tag":"refentry","type":"Function","methodName":"getUri"},{"id":"eventhttprequest.removeheader","name":"EventHttpRequest::removeHeader","description":"Removes an HTTP header from the headers of the request","tag":"refentry","type":"Function","methodName":"removeHeader"},{"id":"eventhttprequest.senderror","name":"EventHttpRequest::sendError","description":"Send an HTML error message to the client","tag":"refentry","type":"Function","methodName":"sendError"},{"id":"eventhttprequest.sendreply","name":"EventHttpRequest::sendReply","description":"Send an HTML reply to the client","tag":"refentry","type":"Function","methodName":"sendReply"},{"id":"eventhttprequest.sendreplychunk","name":"EventHttpRequest::sendReplyChunk","description":"Send another data chunk as part of an ongoing chunked reply","tag":"refentry","type":"Function","methodName":"sendReplyChunk"},{"id":"eventhttprequest.sendreplyend","name":"EventHttpRequest::sendReplyEnd","description":"Complete a chunked reply, freeing the request as appropriate","tag":"refentry","type":"Function","methodName":"sendReplyEnd"},{"id":"eventhttprequest.sendreplystart","name":"EventHttpRequest::sendReplyStart","description":"Initiate a chunked reply","tag":"refentry","type":"Function","methodName":"sendReplyStart"},{"id":"class.eventhttprequest","name":"EventHttpRequest","description":"The EventHttpRequest class","tag":"phpdoc:classref","type":"Class","methodName":"EventHttpRequest"},{"id":"eventlistener.construct","name":"EventListener::__construct","description":"Creates new connection listener associated with an event base","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"eventlistener.disable","name":"EventListener::disable","description":"Disables an event connect listener object","tag":"refentry","type":"Function","methodName":"disable"},{"id":"eventlistener.enable","name":"EventListener::enable","description":"Enables an event connect listener object","tag":"refentry","type":"Function","methodName":"enable"},{"id":"eventlistener.getbase","name":"EventListener::getBase","description":"Returns event base associated with the event listener","tag":"refentry","type":"Function","methodName":"getBase"},{"id":"eventlistener.getsocketname","name":"EventListener::getSocketName","description":"Retreives the current address to which the\n listener's socket is bound","tag":"refentry","type":"Function","methodName":"getSocketName"},{"id":"eventlistener.setcallback","name":"EventListener::setCallback","description":"The setCallback purpose","tag":"refentry","type":"Function","methodName":"setCallback"},{"id":"eventlistener.seterrorcallback","name":"EventListener::setErrorCallback","description":"Set event listener's error callback","tag":"refentry","type":"Function","methodName":"setErrorCallback"},{"id":"class.eventlistener","name":"EventListener","description":"The EventListener class","tag":"phpdoc:classref","type":"Class","methodName":"EventListener"},{"id":"eventsslcontext.construct","name":"EventSslContext::__construct","description":"Constructs an OpenSSL context for use with Event classes","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.eventsslcontext","name":"EventSslContext","description":"The EventSslContext class","tag":"phpdoc:classref","type":"Class","methodName":"EventSslContext"},{"id":"eventutil.construct","name":"EventUtil::__construct","description":"The abstract constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"eventutil.getlastsocketerrno","name":"EventUtil::getLastSocketErrno","description":"Returns the most recent socket error number","tag":"refentry","type":"Function","methodName":"getLastSocketErrno"},{"id":"eventutil.getlastsocketerror","name":"EventUtil::getLastSocketError","description":"Returns the most recent socket error","tag":"refentry","type":"Function","methodName":"getLastSocketError"},{"id":"eventutil.getsocketfd","name":"EventUtil::getSocketFd","description":"Returns numeric file descriptor of a socket, or stream","tag":"refentry","type":"Function","methodName":"getSocketFd"},{"id":"eventutil.getsocketname","name":"EventUtil::getSocketName","description":"Retreives the current address to which the\n socket is bound","tag":"refentry","type":"Function","methodName":"getSocketName"},{"id":"eventutil.setsocketoption","name":"EventUtil::setSocketOption","description":"Sets socket options","tag":"refentry","type":"Function","methodName":"setSocketOption"},{"id":"eventutil.sslrandpoll","name":"EventUtil::sslRandPoll","description":"Generates entropy by means of OpenSSL's RAND_poll()","tag":"refentry","type":"Function","methodName":"sslRandPoll"},{"id":"class.eventutil","name":"EventUtil","description":"The EventUtil class","tag":"phpdoc:classref","type":"Class","methodName":"EventUtil"},{"id":"class.eventexception","name":"EventException","description":"The EventException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"EventException"},{"id":"book.event","name":"Event","description":"Event","tag":"book","type":"Extension","methodName":"Event"},{"id":"intro.ftp","name":"Introduction","description":"FTP","tag":"preface","type":"General","methodName":"Introduction"},{"id":"ftp.installation","name":"Installation","description":"FTP","tag":"section","type":"General","methodName":"Installation"},{"id":"ftp.resources","name":"Resource Types","description":"FTP","tag":"section","type":"General","methodName":"Resource Types"},{"id":"ftp.setup","name":"Installing\/Configuring","description":"FTP","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"ftp.constants","name":"Predefined Constants","description":"FTP","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"ftp.examples-basic","name":"Basic usage","description":"FTP","tag":"section","type":"General","methodName":"Basic usage"},{"id":"ftp.examples","name":"Examples","description":"FTP","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.ftp-alloc","name":"ftp_alloc","description":"Allocates space for a file to be uploaded","tag":"refentry","type":"Function","methodName":"ftp_alloc"},{"id":"function.ftp-append","name":"ftp_append","description":"Append the contents of a file to another file on the FTP server","tag":"refentry","type":"Function","methodName":"ftp_append"},{"id":"function.ftp-cdup","name":"ftp_cdup","description":"Changes to the parent directory","tag":"refentry","type":"Function","methodName":"ftp_cdup"},{"id":"function.ftp-chdir","name":"ftp_chdir","description":"Changes the current directory on a FTP server","tag":"refentry","type":"Function","methodName":"ftp_chdir"},{"id":"function.ftp-chmod","name":"ftp_chmod","description":"Set permissions on a file via FTP","tag":"refentry","type":"Function","methodName":"ftp_chmod"},{"id":"function.ftp-close","name":"ftp_close","description":"Closes an FTP connection","tag":"refentry","type":"Function","methodName":"ftp_close"},{"id":"function.ftp-connect","name":"ftp_connect","description":"Opens an FTP connection","tag":"refentry","type":"Function","methodName":"ftp_connect"},{"id":"function.ftp-delete","name":"ftp_delete","description":"Deletes a file on the FTP server","tag":"refentry","type":"Function","methodName":"ftp_delete"},{"id":"function.ftp-exec","name":"ftp_exec","description":"Requests execution of a command on the FTP server","tag":"refentry","type":"Function","methodName":"ftp_exec"},{"id":"function.ftp-fget","name":"ftp_fget","description":"Downloads a file from the FTP server and saves to an open file","tag":"refentry","type":"Function","methodName":"ftp_fget"},{"id":"function.ftp-fput","name":"ftp_fput","description":"Uploads from an open file to the FTP server","tag":"refentry","type":"Function","methodName":"ftp_fput"},{"id":"function.ftp-get","name":"ftp_get","description":"Downloads a file from the FTP server","tag":"refentry","type":"Function","methodName":"ftp_get"},{"id":"function.ftp-get-option","name":"ftp_get_option","description":"Retrieves various runtime behaviours of the current FTP connection","tag":"refentry","type":"Function","methodName":"ftp_get_option"},{"id":"function.ftp-login","name":"ftp_login","description":"Logs in to an FTP connection","tag":"refentry","type":"Function","methodName":"ftp_login"},{"id":"function.ftp-mdtm","name":"ftp_mdtm","description":"Returns the last modified time of the given file","tag":"refentry","type":"Function","methodName":"ftp_mdtm"},{"id":"function.ftp-mkdir","name":"ftp_mkdir","description":"Creates a directory","tag":"refentry","type":"Function","methodName":"ftp_mkdir"},{"id":"function.ftp-mlsd","name":"ftp_mlsd","description":"Returns a list of files in the given directory","tag":"refentry","type":"Function","methodName":"ftp_mlsd"},{"id":"function.ftp-nb-continue","name":"ftp_nb_continue","description":"Continues retrieving\/sending a file (non-blocking)","tag":"refentry","type":"Function","methodName":"ftp_nb_continue"},{"id":"function.ftp-nb-fget","name":"ftp_nb_fget","description":"Retrieves a file from the FTP server and writes it to an open file (non-blocking)","tag":"refentry","type":"Function","methodName":"ftp_nb_fget"},{"id":"function.ftp-nb-fput","name":"ftp_nb_fput","description":"Stores a file from an open file to the FTP server (non-blocking)","tag":"refentry","type":"Function","methodName":"ftp_nb_fput"},{"id":"function.ftp-nb-get","name":"ftp_nb_get","description":"Retrieves a file from the FTP server and writes it to a local file (non-blocking)","tag":"refentry","type":"Function","methodName":"ftp_nb_get"},{"id":"function.ftp-nb-put","name":"ftp_nb_put","description":"Stores a file on the FTP server (non-blocking)","tag":"refentry","type":"Function","methodName":"ftp_nb_put"},{"id":"function.ftp-nlist","name":"ftp_nlist","description":"Returns a list of files in the given directory","tag":"refentry","type":"Function","methodName":"ftp_nlist"},{"id":"function.ftp-pasv","name":"ftp_pasv","description":"Turns passive mode on or off","tag":"refentry","type":"Function","methodName":"ftp_pasv"},{"id":"function.ftp-put","name":"ftp_put","description":"Uploads a file to the FTP server","tag":"refentry","type":"Function","methodName":"ftp_put"},{"id":"function.ftp-pwd","name":"ftp_pwd","description":"Returns the current directory name","tag":"refentry","type":"Function","methodName":"ftp_pwd"},{"id":"function.ftp-quit","name":"ftp_quit","description":"Alias of ftp_close","tag":"refentry","type":"Function","methodName":"ftp_quit"},{"id":"function.ftp-raw","name":"ftp_raw","description":"Sends an arbitrary command to an FTP server","tag":"refentry","type":"Function","methodName":"ftp_raw"},{"id":"function.ftp-rawlist","name":"ftp_rawlist","description":"Returns a detailed list of files in the given directory","tag":"refentry","type":"Function","methodName":"ftp_rawlist"},{"id":"function.ftp-rename","name":"ftp_rename","description":"Renames a file or a directory on the FTP server","tag":"refentry","type":"Function","methodName":"ftp_rename"},{"id":"function.ftp-rmdir","name":"ftp_rmdir","description":"Removes a directory","tag":"refentry","type":"Function","methodName":"ftp_rmdir"},{"id":"function.ftp-set-option","name":"ftp_set_option","description":"Set miscellaneous runtime FTP options","tag":"refentry","type":"Function","methodName":"ftp_set_option"},{"id":"function.ftp-site","name":"ftp_site","description":"Sends a SITE command to the server","tag":"refentry","type":"Function","methodName":"ftp_site"},{"id":"function.ftp-size","name":"ftp_size","description":"Returns the size of the given file","tag":"refentry","type":"Function","methodName":"ftp_size"},{"id":"function.ftp-ssl-connect","name":"ftp_ssl_connect","description":"Opens a Secure SSL-FTP connection","tag":"refentry","type":"Function","methodName":"ftp_ssl_connect"},{"id":"function.ftp-systype","name":"ftp_systype","description":"Returns the system type identifier of the remote FTP server","tag":"refentry","type":"Function","methodName":"ftp_systype"},{"id":"ref.ftp","name":"FTP Functions","description":"FTP","tag":"reference","type":"Extension","methodName":"FTP Functions"},{"id":"class.ftp-connection","name":"FTP\\Connection","description":"The FTP\\Connection class","tag":"phpdoc:classref","type":"Class","methodName":"FTP\\Connection"},{"id":"book.ftp","name":"FTP","description":"Other Services","tag":"book","type":"Extension","methodName":"FTP"},{"id":"intro.gearman","name":"Introduction","description":"Gearman","tag":"preface","type":"General","methodName":"Introduction"},{"id":"gearman.requirements","name":"Requirements","description":"Gearman","tag":"section","type":"General","methodName":"Requirements"},{"id":"gearman.installation","name":"Installation","description":"Gearman","tag":"section","type":"General","methodName":"Installation"},{"id":"gearman.setup","name":"Installing\/Configuring","description":"Gearman","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"gearman.constants","name":"Predefined Constants","description":"Gearman","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"gearman.examples-reverse","name":"Basic usage","description":"Gearman","tag":"section","type":"General","methodName":"Basic usage"},{"id":"gearman.examples-reverse-bg","name":"Basic Gearman client and worker, background","description":"Gearman","tag":"section","type":"General","methodName":"Basic Gearman client and worker, background"},{"id":"gearman.examples-reverse-task","name":"Basic Gearman client and worker, submitting tasks","description":"Gearman","tag":"section","type":"General","methodName":"Basic Gearman client and worker, submitting tasks"},{"id":"gearman.examples","name":"Examples","description":"Gearman","tag":"chapter","type":"General","methodName":"Examples"},{"id":"gearmanclient.addoptions","name":"GearmanClient::addOptions","description":"Add client options","tag":"refentry","type":"Function","methodName":"addOptions"},{"id":"gearmanclient.addserver","name":"GearmanClient::addServer","description":"Add a job server to the client","tag":"refentry","type":"Function","methodName":"addServer"},{"id":"gearmanclient.addservers","name":"GearmanClient::addServers","description":"Add a list of job servers to the client","tag":"refentry","type":"Function","methodName":"addServers"},{"id":"gearmanclient.addtask","name":"GearmanClient::addTask","description":"Add a task to be run in parallel","tag":"refentry","type":"Function","methodName":"addTask"},{"id":"gearmanclient.addtaskbackground","name":"GearmanClient::addTaskBackground","description":"Add a background task to be run in parallel","tag":"refentry","type":"Function","methodName":"addTaskBackground"},{"id":"gearmanclient.addtaskhigh","name":"GearmanClient::addTaskHigh","description":"Add a high priority task to run in parallel","tag":"refentry","type":"Function","methodName":"addTaskHigh"},{"id":"gearmanclient.addtaskhighbackground","name":"GearmanClient::addTaskHighBackground","description":"Add a high priority background task to be run in parallel","tag":"refentry","type":"Function","methodName":"addTaskHighBackground"},{"id":"gearmanclient.addtasklow","name":"GearmanClient::addTaskLow","description":"Add a low priority task to run in parallel","tag":"refentry","type":"Function","methodName":"addTaskLow"},{"id":"gearmanclient.addtasklowbackground","name":"GearmanClient::addTaskLowBackground","description":"Add a low priority background task to be run in parallel","tag":"refentry","type":"Function","methodName":"addTaskLowBackground"},{"id":"gearmanclient.addtaskstatus","name":"GearmanClient::addTaskStatus","description":"Add a task to get status","tag":"refentry","type":"Function","methodName":"addTaskStatus"},{"id":"gearmanclient.clearcallbacks","name":"GearmanClient::clearCallbacks","description":"Clear all task callback functions","tag":"refentry","type":"Function","methodName":"clearCallbacks"},{"id":"gearmanclient.clone","name":"GearmanClient::clone","description":"Create a copy of a GearmanClient object","tag":"refentry","type":"Function","methodName":"clone"},{"id":"gearmanclient.construct","name":"GearmanClient::__construct","description":"Create a GearmanClient instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"gearmanclient.context","name":"GearmanClient::context","description":"Get the application context","tag":"refentry","type":"Function","methodName":"context"},{"id":"gearmanclient.data","name":"GearmanClient::data","description":"Get the application data (deprecated)","tag":"refentry","type":"Function","methodName":"data"},{"id":"gearmanclient.do","name":"GearmanClient::do","description":"Run a single task and return a result [deprecated]","tag":"refentry","type":"Function","methodName":"do"},{"id":"gearmanclient.dobackground","name":"GearmanClient::doBackground","description":"Run a task in the background","tag":"refentry","type":"Function","methodName":"doBackground"},{"id":"gearmanclient.dohigh","name":"GearmanClient::doHigh","description":"Run a single high priority task","tag":"refentry","type":"Function","methodName":"doHigh"},{"id":"gearmanclient.dohighbackground","name":"GearmanClient::doHighBackground","description":"Run a high priority task in the background","tag":"refentry","type":"Function","methodName":"doHighBackground"},{"id":"gearmanclient.dojobhandle","name":"GearmanClient::doJobHandle","description":"Get the job handle for the running task","tag":"refentry","type":"Function","methodName":"doJobHandle"},{"id":"gearmanclient.dolow","name":"GearmanClient::doLow","description":"Run a single low priority task","tag":"refentry","type":"Function","methodName":"doLow"},{"id":"gearmanclient.dolowbackground","name":"GearmanClient::doLowBackground","description":"Run a low priority task in the background","tag":"refentry","type":"Function","methodName":"doLowBackground"},{"id":"gearmanclient.donormal","name":"GearmanClient::doNormal","description":"Run a single task and return a result","tag":"refentry","type":"Function","methodName":"doNormal"},{"id":"gearmanclient.dostatus","name":"GearmanClient::doStatus","description":"Get the status for the running task","tag":"refentry","type":"Function","methodName":"doStatus"},{"id":"gearmanclient.echo","name":"GearmanClient::echo","description":"Send data to all job servers to see if they echo it back [deprecated]","tag":"refentry","type":"Function","methodName":"echo"},{"id":"gearmanclient.error","name":"GearmanClient::error","description":"Returns an error string for the last error encountered","tag":"refentry","type":"Function","methodName":"error"},{"id":"gearmanclient.geterrno","name":"GearmanClient::getErrno","description":"Get an errno value","tag":"refentry","type":"Function","methodName":"getErrno"},{"id":"gearmanclient.jobstatus","name":"gearman_job_status","description":"Get the status of a background job","tag":"refentry","type":"Function","methodName":"gearman_job_status"},{"id":"gearmanclient.jobstatus","name":"GearmanClient::jobStatus","description":"Get the status of a background job","tag":"refentry","type":"Function","methodName":"jobStatus"},{"id":"gearmanclient.ping","name":"GearmanClient::ping","description":"Send data to all job servers to see if they echo it back","tag":"refentry","type":"Function","methodName":"ping"},{"id":"gearmanclient.removeoptions","name":"GearmanClient::removeOptions","description":"Remove client options","tag":"refentry","type":"Function","methodName":"removeOptions"},{"id":"gearmanclient.returncode","name":"GearmanClient::returnCode","description":"Get the last Gearman return code","tag":"refentry","type":"Function","methodName":"returnCode"},{"id":"gearmanclient.runtasks","name":"GearmanClient::runTasks","description":"Run a list of tasks in parallel","tag":"refentry","type":"Function","methodName":"runTasks"},{"id":"gearmanclient.setclientcallback","name":"GearmanClient::setClientCallback","description":"Callback function when there is a data packet for a task (deprecated)","tag":"refentry","type":"Function","methodName":"setClientCallback"},{"id":"gearmanclient.setcompletecallback","name":"GearmanClient::setCompleteCallback","description":"Set a function to be called on task completion","tag":"refentry","type":"Function","methodName":"setCompleteCallback"},{"id":"gearmanclient.setcontext","name":"GearmanClient::setContext","description":"Set application context","tag":"refentry","type":"Function","methodName":"setContext"},{"id":"gearmanclient.setcreatedcallback","name":"GearmanClient::setCreatedCallback","description":"Set a callback for when a task is queued","tag":"refentry","type":"Function","methodName":"setCreatedCallback"},{"id":"gearmanclient.setdata","name":"GearmanClient::setData","description":"Set application data (deprecated)","tag":"refentry","type":"Function","methodName":"setData"},{"id":"gearmanclient.setdatacallback","name":"GearmanClient::setDataCallback","description":"Callback function when there is a data packet for a task","tag":"refentry","type":"Function","methodName":"setDataCallback"},{"id":"gearmanclient.setexceptioncallback","name":"GearmanClient::setExceptionCallback","description":"Set a callback for worker exceptions","tag":"refentry","type":"Function","methodName":"setExceptionCallback"},{"id":"gearmanclient.setfailcallback","name":"GearmanClient::setFailCallback","description":"Set callback for job failure","tag":"refentry","type":"Function","methodName":"setFailCallback"},{"id":"gearmanclient.setoptions","name":"GearmanClient::setOptions","description":"Set client options","tag":"refentry","type":"Function","methodName":"setOptions"},{"id":"gearmanclient.setstatuscallback","name":"GearmanClient::setStatusCallback","description":"Set a callback for collecting task status","tag":"refentry","type":"Function","methodName":"setStatusCallback"},{"id":"gearmanclient.settimeout","name":"GearmanClient::setTimeout","description":"Set socket I\/O activity timeout","tag":"refentry","type":"Function","methodName":"setTimeout"},{"id":"gearmanclient.setwarningcallback","name":"GearmanClient::setWarningCallback","description":"Set a callback for worker warnings","tag":"refentry","type":"Function","methodName":"setWarningCallback"},{"id":"gearmanclient.setworkloadcallback","name":"GearmanClient::setWorkloadCallback","description":"Set a callback for accepting incremental data updates","tag":"refentry","type":"Function","methodName":"setWorkloadCallback"},{"id":"gearmanclient.timeout","name":"GearmanClient::timeout","description":"Get current socket I\/O activity timeout value","tag":"refentry","type":"Function","methodName":"timeout"},{"id":"gearmanclient.wait","name":"GearmanClient::wait","description":"Wait for I\/O activity on all connections in a client","tag":"refentry","type":"Function","methodName":"wait"},{"id":"class.gearmanclient","name":"GearmanClient","description":"The GearmanClient class","tag":"phpdoc:classref","type":"Class","methodName":"GearmanClient"},{"id":"gearmanjob.complete","name":"GearmanJob::complete","description":"Send the result and complete status (deprecated)","tag":"refentry","type":"Function","methodName":"complete"},{"id":"gearmanjob.construct","name":"GearmanJob::__construct","description":"Create a GearmanJob instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"gearmanjob.data","name":"GearmanJob::data","description":"Send data for a running job (deprecated)","tag":"refentry","type":"Function","methodName":"data"},{"id":"gearmanjob.exception","name":"GearmanJob::exception","description":"Send exception for running job (deprecated)","tag":"refentry","type":"Function","methodName":"exception"},{"id":"gearmanjob.fail","name":"GearmanJob::fail","description":"Send fail status (deprecated)","tag":"refentry","type":"Function","methodName":"fail"},{"id":"gearmanjob.functionname","name":"GearmanJob::functionName","description":"Get function name","tag":"refentry","type":"Function","methodName":"functionName"},{"id":"gearmanjob.handle","name":"GearmanJob::handle","description":"Get the job handle","tag":"refentry","type":"Function","methodName":"handle"},{"id":"gearmanjob.returncode","name":"GearmanJob::returnCode","description":"Get last return code","tag":"refentry","type":"Function","methodName":"returnCode"},{"id":"gearmanjob.sendcomplete","name":"GearmanJob::sendComplete","description":"Send the result and complete status","tag":"refentry","type":"Function","methodName":"sendComplete"},{"id":"gearmanjob.senddata","name":"GearmanJob::sendData","description":"Send data for a running job","tag":"refentry","type":"Function","methodName":"sendData"},{"id":"gearmanjob.sendexception","name":"GearmanJob::sendException","description":"Send exception for running job (exception)","tag":"refentry","type":"Function","methodName":"sendException"},{"id":"gearmanjob.sendfail","name":"GearmanJob::sendFail","description":"Send fail status","tag":"refentry","type":"Function","methodName":"sendFail"},{"id":"gearmanjob.sendstatus","name":"GearmanJob::sendStatus","description":"Send status","tag":"refentry","type":"Function","methodName":"sendStatus"},{"id":"gearmanjob.sendwarning","name":"GearmanJob::sendWarning","description":"Send a warning","tag":"refentry","type":"Function","methodName":"sendWarning"},{"id":"gearmanjob.setreturn","name":"GearmanJob::setReturn","description":"Set a return value","tag":"refentry","type":"Function","methodName":"setReturn"},{"id":"gearmanjob.status","name":"GearmanJob::status","description":"Send status (deprecated)","tag":"refentry","type":"Function","methodName":"status"},{"id":"gearmanjob.unique","name":"GearmanJob::unique","description":"Get the unique identifier","tag":"refentry","type":"Function","methodName":"unique"},{"id":"gearmanjob.warning","name":"GearmanJob::warning","description":"Send a warning (deprecated)","tag":"refentry","type":"Function","methodName":"warning"},{"id":"gearmanjob.workload","name":"GearmanJob::workload","description":"Get workload","tag":"refentry","type":"Function","methodName":"workload"},{"id":"gearmanjob.workloadsize","name":"GearmanJob::workloadSize","description":"Get size of work load","tag":"refentry","type":"Function","methodName":"workloadSize"},{"id":"class.gearmanjob","name":"GearmanJob","description":"The GearmanJob class","tag":"phpdoc:classref","type":"Class","methodName":"GearmanJob"},{"id":"gearmantask.construct","name":"GearmanTask::__construct","description":"Create a GearmanTask instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"gearmantask.create","name":"GearmanTask::create","description":"Create a task (deprecated)","tag":"refentry","type":"Function","methodName":"create"},{"id":"gearmantask.data","name":"GearmanTask::data","description":"Get data returned for a task","tag":"refentry","type":"Function","methodName":"data"},{"id":"gearmantask.datasize","name":"GearmanTask::dataSize","description":"Get the size of returned data","tag":"refentry","type":"Function","methodName":"dataSize"},{"id":"gearmantask.function","name":"GearmanTask::function","description":"Get associated function name (deprecated)","tag":"refentry","type":"Function","methodName":"function"},{"id":"gearmantask.functionname","name":"GearmanTask::functionName","description":"Get associated function name","tag":"refentry","type":"Function","methodName":"functionName"},{"id":"gearmantask.isknown","name":"GearmanTask::isKnown","description":"Determine if task is known","tag":"refentry","type":"Function","methodName":"isKnown"},{"id":"gearmantask.isrunning","name":"GearmanTask::isRunning","description":"Test whether the task is currently running","tag":"refentry","type":"Function","methodName":"isRunning"},{"id":"gearmantask.jobhandle","name":"gearman_job_handle","description":"Get the job handle","tag":"refentry","type":"Function","methodName":"gearman_job_handle"},{"id":"gearmantask.jobhandle","name":"GearmanTask::jobHandle","description":"Get the job handle","tag":"refentry","type":"Function","methodName":"jobHandle"},{"id":"gearmantask.recvdata","name":"GearmanTask::recvData","description":"Read work or result data into a buffer for a task","tag":"refentry","type":"Function","methodName":"recvData"},{"id":"gearmantask.returncode","name":"GearmanTask::returnCode","description":"Get the last return code","tag":"refentry","type":"Function","methodName":"returnCode"},{"id":"gearmantask.senddata","name":"GearmanTask::sendData","description":"Send data for a task (deprecated)","tag":"refentry","type":"Function","methodName":"sendData"},{"id":"gearmantask.sendworkload","name":"GearmanTask::sendWorkload","description":"Send data for a task","tag":"refentry","type":"Function","methodName":"sendWorkload"},{"id":"gearmantask.taskdenominator","name":"GearmanTask::taskDenominator","description":"Get completion percentage denominator","tag":"refentry","type":"Function","methodName":"taskDenominator"},{"id":"gearmantask.tasknumerator","name":"GearmanTask::taskNumerator","description":"Get completion percentage numerator","tag":"refentry","type":"Function","methodName":"taskNumerator"},{"id":"gearmantask.unique","name":"GearmanTask::unique","description":"Get the unique identifier for a task","tag":"refentry","type":"Function","methodName":"unique"},{"id":"gearmantask.uuid","name":"GearmanTask::uuid","description":"Get the unique identifier for a task (deprecated)","tag":"refentry","type":"Function","methodName":"uuid"},{"id":"class.gearmantask","name":"GearmanTask","description":"The GearmanTask class","tag":"phpdoc:classref","type":"Class","methodName":"GearmanTask"},{"id":"gearmanworker.addfunction","name":"GearmanWorker::addFunction","description":"Register and add callback function","tag":"refentry","type":"Function","methodName":"addFunction"},{"id":"gearmanworker.addoptions","name":"GearmanWorker::addOptions","description":"Add worker options","tag":"refentry","type":"Function","methodName":"addOptions"},{"id":"gearmanworker.addserver","name":"GearmanWorker::addServer","description":"Add a job server","tag":"refentry","type":"Function","methodName":"addServer"},{"id":"gearmanworker.addservers","name":"GearmanWorker::addServers","description":"Add job servers","tag":"refentry","type":"Function","methodName":"addServers"},{"id":"gearmanworker.clone","name":"GearmanWorker::clone","description":"Create a copy of the worker","tag":"refentry","type":"Function","methodName":"clone"},{"id":"gearmanworker.construct","name":"GearmanWorker::__construct","description":"Create a GearmanWorker instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"gearmanworker.echo","name":"GearmanWorker::echo","description":"Test job server response","tag":"refentry","type":"Function","methodName":"echo"},{"id":"gearmanworker.error","name":"GearmanWorker::error","description":"Get the last error encountered","tag":"refentry","type":"Function","methodName":"error"},{"id":"gearmanworker.geterrno","name":"GearmanWorker::getErrno","description":"Get errno","tag":"refentry","type":"Function","methodName":"getErrno"},{"id":"gearmanworker.options","name":"GearmanWorker::options","description":"Get worker options","tag":"refentry","type":"Function","methodName":"options"},{"id":"gearmanworker.register","name":"GearmanWorker::register","description":"Register a function with the job server","tag":"refentry","type":"Function","methodName":"register"},{"id":"gearmanworker.removeoptions","name":"GearmanWorker::removeOptions","description":"Remove worker options","tag":"refentry","type":"Function","methodName":"removeOptions"},{"id":"gearmanworker.returncode","name":"GearmanWorker::returnCode","description":"Get last Gearman return code","tag":"refentry","type":"Function","methodName":"returnCode"},{"id":"gearmanworker.setid","name":"GearmanWorker::setId","description":"Give the worker an identifier so it can be tracked when asking gearmand for the list of available workers","tag":"refentry","type":"Function","methodName":"setId"},{"id":"gearmanworker.setoptions","name":"GearmanWorker::setOptions","description":"Set worker options","tag":"refentry","type":"Function","methodName":"setOptions"},{"id":"gearmanworker.settimeout","name":"GearmanWorker::setTimeout","description":"Set socket I\/O activity timeout","tag":"refentry","type":"Function","methodName":"setTimeout"},{"id":"gearmanworker.timeout","name":"GearmanWorker::timeout","description":"Get socket I\/O activity timeout","tag":"refentry","type":"Function","methodName":"timeout"},{"id":"gearmanworker.unregister","name":"GearmanWorker::unregister","description":"Unregister a function name with the job servers","tag":"refentry","type":"Function","methodName":"unregister"},{"id":"gearmanworker.unregisterall","name":"GearmanWorker::unregisterAll","description":"Unregister all function names with the job servers","tag":"refentry","type":"Function","methodName":"unregisterAll"},{"id":"gearmanworker.wait","name":"GearmanWorker::wait","description":"Wait for activity from one of the job servers","tag":"refentry","type":"Function","methodName":"wait"},{"id":"gearmanworker.work","name":"GearmanWorker::work","description":"Wait for and perform jobs","tag":"refentry","type":"Function","methodName":"work"},{"id":"class.gearmanworker","name":"GearmanWorker","description":"The GearmanWorker class","tag":"phpdoc:classref","type":"Class","methodName":"GearmanWorker"},{"id":"class.gearmanexception","name":"GearmanException","description":"The GearmanException class","tag":"phpdoc:classref","type":"Class","methodName":"GearmanException"},{"id":"book.gearman","name":"Gearman","description":"Gearman","tag":"book","type":"Extension","methodName":"Gearman"},{"id":"intro.ldap","name":"Introduction","description":"Lightweight Directory Access Protocol","tag":"preface","type":"General","methodName":"Introduction"},{"id":"ldap.requirements","name":"Requirements","description":"Lightweight Directory Access Protocol","tag":"section","type":"General","methodName":"Requirements"},{"id":"ldap.installation","name":"Installation","description":"Lightweight Directory Access Protocol","tag":"section","type":"General","methodName":"Installation"},{"id":"ldap.configuration","name":"Runtime Configuration","description":"Lightweight Directory Access Protocol","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"ldap.resources","name":"Resource Types","description":"Lightweight Directory Access Protocol","tag":"section","type":"General","methodName":"Resource Types"},{"id":"ldap.setup","name":"Installing\/Configuring","description":"Lightweight Directory Access Protocol","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"ldap.constants","name":"Predefined Constants","description":"Lightweight Directory Access Protocol","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"ldap.using","name":"Using the PHP LDAP calls","description":"Lightweight Directory Access Protocol","tag":"chapter","type":"General","methodName":"Using the PHP LDAP calls"},{"id":"ldap.controls","name":"LDAP controls","description":"Lightweight Directory Access Protocol","tag":"chapter","type":"General","methodName":"LDAP controls"},{"id":"ldap.examples-basic","name":"Basic usage","description":"Lightweight Directory Access Protocol","tag":"section","type":"General","methodName":"Basic usage"},{"id":"ldap.examples-controls","name":"LDAP Controls","description":"Lightweight Directory Access Protocol","tag":"section","type":"General","methodName":"LDAP Controls"},{"id":"ldap.examples","name":"Examples","description":"Lightweight Directory Access Protocol","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.ldap-8859-to-t61","name":"ldap_8859_to_t61","description":"Translate 8859 characters to t61 characters","tag":"refentry","type":"Function","methodName":"ldap_8859_to_t61"},{"id":"function.ldap-add","name":"ldap_add","description":"Add entries to LDAP directory","tag":"refentry","type":"Function","methodName":"ldap_add"},{"id":"function.ldap-add-ext","name":"ldap_add_ext","description":"Add entries to LDAP directory","tag":"refentry","type":"Function","methodName":"ldap_add_ext"},{"id":"function.ldap-bind","name":"ldap_bind","description":"Bind to LDAP directory","tag":"refentry","type":"Function","methodName":"ldap_bind"},{"id":"function.ldap-bind-ext","name":"ldap_bind_ext","description":"Bind to LDAP directory","tag":"refentry","type":"Function","methodName":"ldap_bind_ext"},{"id":"function.ldap-close","name":"ldap_close","description":"Alias of ldap_unbind","tag":"refentry","type":"Function","methodName":"ldap_close"},{"id":"function.ldap-compare","name":"ldap_compare","description":"Compare value of attribute found in entry specified with DN","tag":"refentry","type":"Function","methodName":"ldap_compare"},{"id":"function.ldap-connect","name":"ldap_connect","description":"Connect to an LDAP server","tag":"refentry","type":"Function","methodName":"ldap_connect"},{"id":"function.ldap-connect-wallet","name":"ldap_connect_wallet","description":"Connect to an LDAP server","tag":"refentry","type":"Function","methodName":"ldap_connect_wallet"},{"id":"function.ldap-control-paged-result","name":"ldap_control_paged_result","description":"Send LDAP pagination control","tag":"refentry","type":"Function","methodName":"ldap_control_paged_result"},{"id":"function.ldap-control-paged-result-response","name":"ldap_control_paged_result_response","description":"Retrieve the LDAP pagination cookie","tag":"refentry","type":"Function","methodName":"ldap_control_paged_result_response"},{"id":"function.ldap-count-entries","name":"ldap_count_entries","description":"Count the number of entries in a search","tag":"refentry","type":"Function","methodName":"ldap_count_entries"},{"id":"function.ldap-count-references","name":"ldap_count_references","description":"Counts the number of references in a search result","tag":"refentry","type":"Function","methodName":"ldap_count_references"},{"id":"function.ldap-delete","name":"ldap_delete","description":"Delete an entry from a directory","tag":"refentry","type":"Function","methodName":"ldap_delete"},{"id":"function.ldap-delete-ext","name":"ldap_delete_ext","description":"Delete an entry from a directory","tag":"refentry","type":"Function","methodName":"ldap_delete_ext"},{"id":"function.ldap-dn2ufn","name":"ldap_dn2ufn","description":"Convert DN to User Friendly Naming format","tag":"refentry","type":"Function","methodName":"ldap_dn2ufn"},{"id":"function.ldap-err2str","name":"ldap_err2str","description":"Convert LDAP error number into string error message","tag":"refentry","type":"Function","methodName":"ldap_err2str"},{"id":"function.ldap-errno","name":"ldap_errno","description":"Return the LDAP error number of the last LDAP command","tag":"refentry","type":"Function","methodName":"ldap_errno"},{"id":"function.ldap-error","name":"ldap_error","description":"Return the LDAP error message of the last LDAP command","tag":"refentry","type":"Function","methodName":"ldap_error"},{"id":"function.ldap-escape","name":"ldap_escape","description":"Escape a string for use in an LDAP filter or DN","tag":"refentry","type":"Function","methodName":"ldap_escape"},{"id":"function.ldap-exop","name":"ldap_exop","description":"Performs an extended operation","tag":"refentry","type":"Function","methodName":"ldap_exop"},{"id":"function.ldap-exop-passwd","name":"ldap_exop_passwd","description":"PASSWD extended operation helper","tag":"refentry","type":"Function","methodName":"ldap_exop_passwd"},{"id":"function.ldap-exop-refresh","name":"ldap_exop_refresh","description":"Refresh extended operation helper","tag":"refentry","type":"Function","methodName":"ldap_exop_refresh"},{"id":"function.ldap-exop-sync","name":"ldap_exop_sync","description":"Performs an extended operation","tag":"refentry","type":"Function","methodName":"ldap_exop_sync"},{"id":"function.ldap-exop-whoami","name":"ldap_exop_whoami","description":"WHOAMI extended operation helper","tag":"refentry","type":"Function","methodName":"ldap_exop_whoami"},{"id":"function.ldap-explode-dn","name":"ldap_explode_dn","description":"Splits DN into its component parts","tag":"refentry","type":"Function","methodName":"ldap_explode_dn"},{"id":"function.ldap-first-attribute","name":"ldap_first_attribute","description":"Return first attribute","tag":"refentry","type":"Function","methodName":"ldap_first_attribute"},{"id":"function.ldap-first-entry","name":"ldap_first_entry","description":"Return first result id","tag":"refentry","type":"Function","methodName":"ldap_first_entry"},{"id":"function.ldap-first-reference","name":"ldap_first_reference","description":"Return first reference","tag":"refentry","type":"Function","methodName":"ldap_first_reference"},{"id":"function.ldap-free-result","name":"ldap_free_result","description":"Free result memory","tag":"refentry","type":"Function","methodName":"ldap_free_result"},{"id":"function.ldap-get-attributes","name":"ldap_get_attributes","description":"Get attributes from a search result entry","tag":"refentry","type":"Function","methodName":"ldap_get_attributes"},{"id":"function.ldap-get-dn","name":"ldap_get_dn","description":"Get the DN of a result entry","tag":"refentry","type":"Function","methodName":"ldap_get_dn"},{"id":"function.ldap-get-entries","name":"ldap_get_entries","description":"Get all result entries","tag":"refentry","type":"Function","methodName":"ldap_get_entries"},{"id":"function.ldap-get-option","name":"ldap_get_option","description":"Get the current value for given option","tag":"refentry","type":"Function","methodName":"ldap_get_option"},{"id":"function.ldap-get-values","name":"ldap_get_values","description":"Get all values from a result entry","tag":"refentry","type":"Function","methodName":"ldap_get_values"},{"id":"function.ldap-get-values-len","name":"ldap_get_values_len","description":"Get all binary values from a result entry","tag":"refentry","type":"Function","methodName":"ldap_get_values_len"},{"id":"function.ldap-list","name":"ldap_list","description":"Single-level search","tag":"refentry","type":"Function","methodName":"ldap_list"},{"id":"function.ldap-mod-add","name":"ldap_mod_add","description":"Add attribute values to current attributes","tag":"refentry","type":"Function","methodName":"ldap_mod_add"},{"id":"function.ldap-mod_add-ext","name":"ldap_mod_add_ext","description":"Add attribute values to current attributes","tag":"refentry","type":"Function","methodName":"ldap_mod_add_ext"},{"id":"function.ldap-mod-del","name":"ldap_mod_del","description":"Delete attribute values from current attributes","tag":"refentry","type":"Function","methodName":"ldap_mod_del"},{"id":"function.ldap-mod_del-ext","name":"ldap_mod_del_ext","description":"Delete attribute values from current attributes","tag":"refentry","type":"Function","methodName":"ldap_mod_del_ext"},{"id":"function.ldap-mod-replace","name":"ldap_mod_replace","description":"Replace attribute values with new ones","tag":"refentry","type":"Function","methodName":"ldap_mod_replace"},{"id":"function.ldap-mod_replace-ext","name":"ldap_mod_replace_ext","description":"Replace attribute values with new ones","tag":"refentry","type":"Function","methodName":"ldap_mod_replace_ext"},{"id":"function.ldap-modify","name":"ldap_modify","description":"Alias of ldap_mod_replace","tag":"refentry","type":"Function","methodName":"ldap_modify"},{"id":"function.ldap-modify-batch","name":"ldap_modify_batch","description":"Batch and execute modifications on an LDAP entry","tag":"refentry","type":"Function","methodName":"ldap_modify_batch"},{"id":"function.ldap-next-attribute","name":"ldap_next_attribute","description":"Get the next attribute in result","tag":"refentry","type":"Function","methodName":"ldap_next_attribute"},{"id":"function.ldap-next-entry","name":"ldap_next_entry","description":"Get next result entry","tag":"refentry","type":"Function","methodName":"ldap_next_entry"},{"id":"function.ldap-next-reference","name":"ldap_next_reference","description":"Get next reference","tag":"refentry","type":"Function","methodName":"ldap_next_reference"},{"id":"function.ldap-parse-exop","name":"ldap_parse_exop","description":"Parse result object from an LDAP extended operation","tag":"refentry","type":"Function","methodName":"ldap_parse_exop"},{"id":"function.ldap-parse-reference","name":"ldap_parse_reference","description":"Extract information from reference entry","tag":"refentry","type":"Function","methodName":"ldap_parse_reference"},{"id":"function.ldap-parse-result","name":"ldap_parse_result","description":"Extract information from result","tag":"refentry","type":"Function","methodName":"ldap_parse_result"},{"id":"function.ldap-read","name":"ldap_read","description":"Read an entry","tag":"refentry","type":"Function","methodName":"ldap_read"},{"id":"function.ldap-rename","name":"ldap_rename","description":"Modify the name of an entry","tag":"refentry","type":"Function","methodName":"ldap_rename"},{"id":"function.ldap-rename-ext","name":"ldap_rename_ext","description":"Modify the name of an entry","tag":"refentry","type":"Function","methodName":"ldap_rename_ext"},{"id":"function.ldap-sasl-bind","name":"ldap_sasl_bind","description":"Bind to LDAP directory using SASL","tag":"refentry","type":"Function","methodName":"ldap_sasl_bind"},{"id":"function.ldap-search","name":"ldap_search","description":"Search LDAP tree","tag":"refentry","type":"Function","methodName":"ldap_search"},{"id":"function.ldap-set-option","name":"ldap_set_option","description":"Set the value of the given option","tag":"refentry","type":"Function","methodName":"ldap_set_option"},{"id":"function.ldap-set-rebind-proc","name":"ldap_set_rebind_proc","description":"Set a callback function to do re-binds on referral chasing","tag":"refentry","type":"Function","methodName":"ldap_set_rebind_proc"},{"id":"function.ldap-sort","name":"ldap_sort","description":"Sort LDAP result entries on the client side","tag":"refentry","type":"Function","methodName":"ldap_sort"},{"id":"function.ldap-start-tls","name":"ldap_start_tls","description":"Start TLS","tag":"refentry","type":"Function","methodName":"ldap_start_tls"},{"id":"function.ldap-t61-to-8859","name":"ldap_t61_to_8859","description":"Translate t61 characters to 8859 characters","tag":"refentry","type":"Function","methodName":"ldap_t61_to_8859"},{"id":"function.ldap-unbind","name":"ldap_unbind","description":"Unbind from LDAP directory","tag":"refentry","type":"Function","methodName":"ldap_unbind"},{"id":"ref.ldap","name":"LDAP Functions","description":"Lightweight Directory Access Protocol","tag":"reference","type":"Extension","methodName":"LDAP Functions"},{"id":"class.ldap-connection","name":"LDAP\\Connection","description":"The LDAP\\Connection class","tag":"phpdoc:classref","type":"Class","methodName":"LDAP\\Connection"},{"id":"class.ldap-result","name":"LDAP\\Result","description":"The LDAP\\Result class","tag":"phpdoc:classref","type":"Class","methodName":"LDAP\\Result"},{"id":"class.ldap-result-entry","name":"LDAP\\ResultEntry","description":"The LDAP\\ResultEntry class","tag":"phpdoc:classref","type":"Class","methodName":"LDAP\\ResultEntry"},{"id":"book.ldap","name":"LDAP","description":"Lightweight Directory Access Protocol","tag":"book","type":"Extension","methodName":"LDAP"},{"id":"intro.memcache","name":"Introduction","description":"Memcache","tag":"preface","type":"General","methodName":"Introduction"},{"id":"memcache.requirements","name":"Requirements","description":"Memcache","tag":"section","type":"General","methodName":"Requirements"},{"id":"memcache.installation","name":"Installation","description":"Memcache","tag":"section","type":"General","methodName":"Installation"},{"id":"memcache.ini","name":"Runtime Configuration","description":"Memcache","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"memcache.resources","name":"Resource Types","description":"Memcache","tag":"section","type":"General","methodName":"Resource Types"},{"id":"memcache.setup","name":"Installing\/Configuring","description":"Memcache","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"memcache.constants","name":"Predefined Constants","description":"Memcache","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"memcache.examples-overview","name":"Basic usage","description":"Memcache","tag":"section","type":"General","methodName":"Basic usage"},{"id":"memcache.examples","name":"Examples","description":"Memcache","tag":"chapter","type":"General","methodName":"Examples"},{"id":"memcache.add","name":"memcache_add","description":"Add an item to the server","tag":"refentry","type":"Function","methodName":"memcache_add"},{"id":"memcache.add","name":"Memcache::add","description":"Add an item to the server","tag":"refentry","type":"Function","methodName":"add"},{"id":"memcache.addserver","name":"memcache_add_server","description":"Add a memcached server to connection pool","tag":"refentry","type":"Function","methodName":"memcache_add_server"},{"id":"memcache.addserver","name":"Memcache::addServer","description":"Add a memcached server to connection pool","tag":"refentry","type":"Function","methodName":"addServer"},{"id":"memcache.close","name":"memcache_close","description":"Close memcached server connection","tag":"refentry","type":"Function","methodName":"memcache_close"},{"id":"memcache.close","name":"Memcache::close","description":"Close memcached server connection","tag":"refentry","type":"Function","methodName":"close"},{"id":"memcache.connect","name":"memcache_connect","description":"Open memcached server connection","tag":"refentry","type":"Function","methodName":"memcache_connect"},{"id":"memcache.connect","name":"Memcache::connect","description":"Open memcached server connection","tag":"refentry","type":"Function","methodName":"connect"},{"id":"memcache.decrement","name":"memcache_decrement","description":"Decrement item's value","tag":"refentry","type":"Function","methodName":"memcache_decrement"},{"id":"memcache.decrement","name":"Memcache::decrement","description":"Decrement item's value","tag":"refentry","type":"Function","methodName":"decrement"},{"id":"memcache.delete","name":"memcache_delete","description":"Delete item from the server","tag":"refentry","type":"Function","methodName":"memcache_delete"},{"id":"memcache.delete","name":"Memcache::delete","description":"Delete item from the server","tag":"refentry","type":"Function","methodName":"delete"},{"id":"memcache.flush","name":"memcache_flush","description":"Flush all existing items at the server","tag":"refentry","type":"Function","methodName":"memcache_flush"},{"id":"memcache.flush","name":"Memcache::flush","description":"Flush all existing items at the server","tag":"refentry","type":"Function","methodName":"flush"},{"id":"memcache.get","name":"memcache_get","description":"Retrieve item from the server","tag":"refentry","type":"Function","methodName":"memcache_get"},{"id":"memcache.get","name":"Memcache::get","description":"Retrieve item from the server","tag":"refentry","type":"Function","methodName":"get"},{"id":"memcache.getextendedstats","name":"memcache_get_extended_stats","description":"Get statistics from all servers in pool","tag":"refentry","type":"Function","methodName":"memcache_get_extended_stats"},{"id":"memcache.getextendedstats","name":"Memcache::getExtendedStats","description":"Get statistics from all servers in pool","tag":"refentry","type":"Function","methodName":"getExtendedStats"},{"id":"memcache.getserverstatus","name":"memcache_get_server_status","description":"Returns server status","tag":"refentry","type":"Function","methodName":"memcache_get_server_status"},{"id":"memcache.getserverstatus","name":"Memcache::getServerStatus","description":"Returns server status","tag":"refentry","type":"Function","methodName":"getServerStatus"},{"id":"memcache.getstats","name":"memcache_get_stats","description":"Get statistics of the server","tag":"refentry","type":"Function","methodName":"memcache_get_stats"},{"id":"memcache.getstats","name":"Memcache::getStats","description":"Get statistics of the server","tag":"refentry","type":"Function","methodName":"getStats"},{"id":"memcache.getversion","name":"memcache_get_version","description":"Return version of the server","tag":"refentry","type":"Function","methodName":"memcache_get_version"},{"id":"memcache.getversion","name":"Memcache::getVersion","description":"Return version of the server","tag":"refentry","type":"Function","methodName":"getVersion"},{"id":"memcache.increment","name":"memcache_increment","description":"Increment item's value","tag":"refentry","type":"Function","methodName":"memcache_increment"},{"id":"memcache.increment","name":"Memcache::increment","description":"Increment item's value","tag":"refentry","type":"Function","methodName":"increment"},{"id":"memcache.pconnect","name":"memcache_pconnect","description":"Open memcached server persistent connection","tag":"refentry","type":"Function","methodName":"memcache_pconnect"},{"id":"memcache.pconnect","name":"Memcache::pconnect","description":"Open memcached server persistent connection","tag":"refentry","type":"Function","methodName":"pconnect"},{"id":"memcache.replace","name":"memcache_replace","description":"Replace value of the existing item","tag":"refentry","type":"Function","methodName":"memcache_replace"},{"id":"memcache.replace","name":"Memcache::replace","description":"Replace value of the existing item","tag":"refentry","type":"Function","methodName":"replace"},{"id":"memcache.set","name":"memcache_set","description":"Store data at the server","tag":"refentry","type":"Function","methodName":"memcache_set"},{"id":"memcache.set","name":"Memcache::set","description":"Store data at the server","tag":"refentry","type":"Function","methodName":"set"},{"id":"memcache.setcompressthreshold","name":"memcache_set_compress_threshold","description":"Enable automatic compression of large values","tag":"refentry","type":"Function","methodName":"memcache_set_compress_threshold"},{"id":"memcache.setcompressthreshold","name":"Memcache::setCompressThreshold","description":"Enable automatic compression of large values","tag":"refentry","type":"Function","methodName":"setCompressThreshold"},{"id":"memcache.setserverparams","name":"memcache_set_server_params","description":"Changes server parameters and status at runtime","tag":"refentry","type":"Function","methodName":"memcache_set_server_params"},{"id":"memcache.setserverparams","name":"Memcache::setServerParams","description":"Changes server parameters and status at runtime","tag":"refentry","type":"Function","methodName":"setServerParams"},{"id":"class.memcache","name":"Memcache","description":"The Memcache class","tag":"phpdoc:classref","type":"Class","methodName":"Memcache"},{"id":"function.memcache-debug","name":"memcache_debug","description":"Turn debug output on\/off","tag":"refentry","type":"Function","methodName":"memcache_debug"},{"id":"ref.memcache","name":"Memcache Functions","description":"Memcache","tag":"reference","type":"Extension","methodName":"Memcache Functions"},{"id":"book.memcache","name":"Memcache","description":"Other Services","tag":"book","type":"Extension","methodName":"Memcache"},{"id":"intro.memcached","name":"Introduction","description":"Memcached","tag":"preface","type":"General","methodName":"Introduction"},{"id":"memcached.requirements","name":"Requirements","description":"Memcached","tag":"section","type":"General","methodName":"Requirements"},{"id":"memcached.installation","name":"Installation","description":"Memcached","tag":"section","type":"General","methodName":"Installation"},{"id":"memcached.configuration","name":"Runtime Configuration","description":"Memcached","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"memcached.setup","name":"Installing\/Configuring","description":"Memcached","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"memcached.constants","name":"Predefined Constants","description":"Memcached","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"memcached.expiration","name":"Expiration Times","description":"Memcached","tag":"chapter","type":"General","methodName":"Expiration Times"},{"id":"memcached.callbacks.result","name":"Result callbacks","description":"Memcached","tag":"section","type":"General","methodName":"Result callbacks"},{"id":"memcached.callbacks.read-through","name":"Read-through cache callbacks","description":"Memcached","tag":"section","type":"General","methodName":"Read-through cache callbacks"},{"id":"memcached.callbacks","name":"Callbacks","description":"Memcached","tag":"chapter","type":"General","methodName":"Callbacks"},{"id":"memcached.sessions","name":"Sessions support","description":"Memcached","tag":"chapter","type":"General","methodName":"Sessions support"},{"id":"memcached.add","name":"Memcached::add","description":"Add an item under a new key","tag":"refentry","type":"Function","methodName":"add"},{"id":"memcached.addbykey","name":"Memcached::addByKey","description":"Add an item under a new key on a specific server","tag":"refentry","type":"Function","methodName":"addByKey"},{"id":"memcached.addserver","name":"Memcached::addServer","description":"Add a server to the server pool","tag":"refentry","type":"Function","methodName":"addServer"},{"id":"memcached.addservers","name":"Memcached::addServers","description":"Add multiple servers to the server pool","tag":"refentry","type":"Function","methodName":"addServers"},{"id":"memcached.append","name":"Memcached::append","description":"Append data to an existing item","tag":"refentry","type":"Function","methodName":"append"},{"id":"memcached.appendbykey","name":"Memcached::appendByKey","description":"Append data to an existing item on a specific server","tag":"refentry","type":"Function","methodName":"appendByKey"},{"id":"memcached.cas","name":"Memcached::cas","description":"Compare and swap an item","tag":"refentry","type":"Function","methodName":"cas"},{"id":"memcached.casbykey","name":"Memcached::casByKey","description":"Compare and swap an item on a specific server","tag":"refentry","type":"Function","methodName":"casByKey"},{"id":"memcached.construct","name":"Memcached::__construct","description":"Create a Memcached instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"memcached.decrement","name":"Memcached::decrement","description":"Decrement numeric item's value","tag":"refentry","type":"Function","methodName":"decrement"},{"id":"memcached.decrementbykey","name":"Memcached::decrementByKey","description":"Decrement numeric item's value, stored on a specific server","tag":"refentry","type":"Function","methodName":"decrementByKey"},{"id":"memcached.delete","name":"Memcached::delete","description":"Delete an item","tag":"refentry","type":"Function","methodName":"delete"},{"id":"memcached.deletebykey","name":"Memcached::deleteByKey","description":"Delete an item from a specific server","tag":"refentry","type":"Function","methodName":"deleteByKey"},{"id":"memcached.deletemulti","name":"Memcached::deleteMulti","description":"Delete multiple items","tag":"refentry","type":"Function","methodName":"deleteMulti"},{"id":"memcached.deletemultibykey","name":"Memcached::deleteMultiByKey","description":"Delete multiple items from a specific server","tag":"refentry","type":"Function","methodName":"deleteMultiByKey"},{"id":"memcached.fetch","name":"Memcached::fetch","description":"Fetch the next result","tag":"refentry","type":"Function","methodName":"fetch"},{"id":"memcached.fetchall","name":"Memcached::fetchAll","description":"Fetch all the remaining results","tag":"refentry","type":"Function","methodName":"fetchAll"},{"id":"memcached.flush","name":"Memcached::flush","description":"Invalidate all items in the cache","tag":"refentry","type":"Function","methodName":"flush"},{"id":"memcached.get","name":"Memcached::get","description":"Retrieve an item","tag":"refentry","type":"Function","methodName":"get"},{"id":"memcached.getallkeys","name":"Memcached::getAllKeys","description":"Gets the keys stored on all the servers","tag":"refentry","type":"Function","methodName":"getAllKeys"},{"id":"memcached.getbykey","name":"Memcached::getByKey","description":"Retrieve an item from a specific server","tag":"refentry","type":"Function","methodName":"getByKey"},{"id":"memcached.getdelayed","name":"Memcached::getDelayed","description":"Request multiple items","tag":"refentry","type":"Function","methodName":"getDelayed"},{"id":"memcached.getdelayedbykey","name":"Memcached::getDelayedByKey","description":"Request multiple items from a specific server","tag":"refentry","type":"Function","methodName":"getDelayedByKey"},{"id":"memcached.getmulti","name":"Memcached::getMulti","description":"Retrieve multiple items","tag":"refentry","type":"Function","methodName":"getMulti"},{"id":"memcached.getmultibykey","name":"Memcached::getMultiByKey","description":"Retrieve multiple items from a specific server","tag":"refentry","type":"Function","methodName":"getMultiByKey"},{"id":"memcached.getoption","name":"Memcached::getOption","description":"Retrieve a Memcached option value","tag":"refentry","type":"Function","methodName":"getOption"},{"id":"memcached.getresultcode","name":"Memcached::getResultCode","description":"Return the result code of the last operation","tag":"refentry","type":"Function","methodName":"getResultCode"},{"id":"memcached.getresultmessage","name":"Memcached::getResultMessage","description":"Return the message describing the result of the last operation","tag":"refentry","type":"Function","methodName":"getResultMessage"},{"id":"memcached.getserverbykey","name":"Memcached::getServerByKey","description":"Map a key to a server","tag":"refentry","type":"Function","methodName":"getServerByKey"},{"id":"memcached.getserverlist","name":"Memcached::getServerList","description":"Get the list of the servers in the pool","tag":"refentry","type":"Function","methodName":"getServerList"},{"id":"memcached.getstats","name":"Memcached::getStats","description":"Get server pool statistics","tag":"refentry","type":"Function","methodName":"getStats"},{"id":"memcached.getversion","name":"Memcached::getVersion","description":"Get server pool version info","tag":"refentry","type":"Function","methodName":"getVersion"},{"id":"memcached.increment","name":"Memcached::increment","description":"Increment numeric item's value","tag":"refentry","type":"Function","methodName":"increment"},{"id":"memcached.incrementbykey","name":"Memcached::incrementByKey","description":"Increment numeric item's value, stored on a specific server","tag":"refentry","type":"Function","methodName":"incrementByKey"},{"id":"memcached.ispersistent","name":"Memcached::isPersistent","description":"Check if a persitent connection to memcache is being used","tag":"refentry","type":"Function","methodName":"isPersistent"},{"id":"memcached.ispristine","name":"Memcached::isPristine","description":"Check if the instance was recently created","tag":"refentry","type":"Function","methodName":"isPristine"},{"id":"memcached.prepend","name":"Memcached::prepend","description":"Prepend data to an existing item","tag":"refentry","type":"Function","methodName":"prepend"},{"id":"memcached.prependbykey","name":"Memcached::prependByKey","description":"Prepend data to an existing item on a specific server","tag":"refentry","type":"Function","methodName":"prependByKey"},{"id":"memcached.quit","name":"Memcached::quit","description":"Close any open connections","tag":"refentry","type":"Function","methodName":"quit"},{"id":"memcached.replace","name":"Memcached::replace","description":"Replace the item under an existing key","tag":"refentry","type":"Function","methodName":"replace"},{"id":"memcached.replacebykey","name":"Memcached::replaceByKey","description":"Replace the item under an existing key on a specific server","tag":"refentry","type":"Function","methodName":"replaceByKey"},{"id":"memcached.resetserverlist","name":"Memcached::resetServerList","description":"Clears all servers from the server list","tag":"refentry","type":"Function","methodName":"resetServerList"},{"id":"memcached.set","name":"Memcached::set","description":"Store an item","tag":"refentry","type":"Function","methodName":"set"},{"id":"memcached.setbykey","name":"Memcached::setByKey","description":"Store an item on a specific server","tag":"refentry","type":"Function","methodName":"setByKey"},{"id":"memcached.setencodingkey","name":"Memcached::setEncodingKey","description":"Set AES encryption key for data in Memcached","tag":"refentry","type":"Function","methodName":"setEncodingKey"},{"id":"memcached.setmulti","name":"Memcached::setMulti","description":"Store multiple items","tag":"refentry","type":"Function","methodName":"setMulti"},{"id":"memcached.setmultibykey","name":"Memcached::setMultiByKey","description":"Store multiple items on a specific server","tag":"refentry","type":"Function","methodName":"setMultiByKey"},{"id":"memcached.setoption","name":"Memcached::setOption","description":"Set a Memcached option","tag":"refentry","type":"Function","methodName":"setOption"},{"id":"memcached.setoptions","name":"Memcached::setOptions","description":"Set Memcached options","tag":"refentry","type":"Function","methodName":"setOptions"},{"id":"memcached.setsaslauthdata","name":"Memcached::setSaslAuthData","description":"Set the credentials to use for authentication","tag":"refentry","type":"Function","methodName":"setSaslAuthData"},{"id":"memcached.touch","name":"Memcached::touch","description":"Set a new expiration on an item","tag":"refentry","type":"Function","methodName":"touch"},{"id":"memcached.touchbykey","name":"Memcached::touchByKey","description":"Set a new expiration on an item on a specific server","tag":"refentry","type":"Function","methodName":"touchByKey"},{"id":"class.memcached","name":"Memcached","description":"The Memcached class","tag":"phpdoc:classref","type":"Class","methodName":"Memcached"},{"id":"class.memcachedexception","name":"MemcachedException","description":"The MemcachedException class","tag":"phpdoc:classref","type":"Class","methodName":"MemcachedException"},{"id":"book.memcached","name":"Memcached","description":"Memcached","tag":"book","type":"Extension","methodName":"Memcached"},{"id":"intro.mqseries","name":"Introduction","description":"mqseries","tag":"preface","type":"General","methodName":"Introduction"},{"id":"mqseries.requirements","name":"Requirements","description":"mqseries","tag":"section","type":"General","methodName":"Requirements"},{"id":"mqseries.configure","name":"Installation","description":"mqseries","tag":"section","type":"General","methodName":"Installation"},{"id":"mqseries.ini","name":"Runtime Configuration","description":"mqseries","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"mqseries.resources","name":"Resource Types","description":"mqseries","tag":"section","type":"General","methodName":"Resource Types"},{"id":"mqseries.setup","name":"Installing\/Configuring","description":"mqseries","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"mqseries.constants","name":"Predefined Constants","description":"mqseries","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.mqseries-back","name":"mqseries_back","description":"MQSeries MQBACK","tag":"refentry","type":"Function","methodName":"mqseries_back"},{"id":"function.mqseries-begin","name":"mqseries_begin","description":"MQseries MQBEGIN","tag":"refentry","type":"Function","methodName":"mqseries_begin"},{"id":"function.mqseries-close","name":"mqseries_close","description":"MQSeries MQCLOSE","tag":"refentry","type":"Function","methodName":"mqseries_close"},{"id":"function.mqseries-cmit","name":"mqseries_cmit","description":"MQSeries MQCMIT","tag":"refentry","type":"Function","methodName":"mqseries_cmit"},{"id":"function.mqseries-conn","name":"mqseries_conn","description":"MQSeries MQCONN","tag":"refentry","type":"Function","methodName":"mqseries_conn"},{"id":"function.mqseries-connx","name":"mqseries_connx","description":"MQSeries MQCONNX","tag":"refentry","type":"Function","methodName":"mqseries_connx"},{"id":"function.mqseries-disc","name":"mqseries_disc","description":"MQSeries MQDISC","tag":"refentry","type":"Function","methodName":"mqseries_disc"},{"id":"function.mqseries-get","name":"mqseries_get","description":"MQSeries MQGET","tag":"refentry","type":"Function","methodName":"mqseries_get"},{"id":"function.mqseries-inq","name":"mqseries_inq","description":"MQSeries MQINQ","tag":"refentry","type":"Function","methodName":"mqseries_inq"},{"id":"function.mqseries-open","name":"mqseries_open","description":"MQSeries MQOPEN","tag":"refentry","type":"Function","methodName":"mqseries_open"},{"id":"function.mqseries-put","name":"mqseries_put","description":"MQSeries MQPUT","tag":"refentry","type":"Function","methodName":"mqseries_put"},{"id":"function.mqseries-put1","name":"mqseries_put1","description":"MQSeries MQPUT1","tag":"refentry","type":"Function","methodName":"mqseries_put1"},{"id":"function.mqseries-set","name":"mqseries_set","description":"MQSeries MQSET","tag":"refentry","type":"Function","methodName":"mqseries_set"},{"id":"function.mqseries-strerror","name":"mqseries_strerror","description":"Returns the error message corresponding to a result code (MQRC)","tag":"refentry","type":"Function","methodName":"mqseries_strerror"},{"id":"ref.mqseries","name":"mqseries Functions","description":"mqseries","tag":"reference","type":"Extension","methodName":"mqseries Functions"},{"id":"book.mqseries","name":"mqseries","description":"Other Services","tag":"book","type":"Extension","methodName":"mqseries"},{"id":"intro.network","name":"Introduction","description":"Network","tag":"preface","type":"General","methodName":"Introduction"},{"id":"network.requirements","name":"Requirements","description":"Network","tag":"section","type":"General","methodName":"Requirements"},{"id":"network.resources","name":"Resource Types","description":"Network","tag":"section","type":"General","methodName":"Resource Types"},{"id":"network.setup","name":"Installing\/Configuring","description":"Network","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"network.constants","name":"Predefined Constants","description":"Network","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.checkdnsrr","name":"checkdnsrr","description":"Check DNS records corresponding to a given Internet host name or IP address","tag":"refentry","type":"Function","methodName":"checkdnsrr"},{"id":"function.closelog","name":"closelog","description":"Close connection to system logger","tag":"refentry","type":"Function","methodName":"closelog"},{"id":"function.dns-check-record","name":"dns_check_record","description":"Alias of checkdnsrr","tag":"refentry","type":"Function","methodName":"dns_check_record"},{"id":"function.dns-get-mx","name":"dns_get_mx","description":"Alias of getmxrr","tag":"refentry","type":"Function","methodName":"dns_get_mx"},{"id":"function.dns-get-record","name":"dns_get_record","description":"Fetch DNS Resource Records associated with a hostname","tag":"refentry","type":"Function","methodName":"dns_get_record"},{"id":"function.fsockopen","name":"fsockopen","description":"Open Internet or Unix domain socket connection","tag":"refentry","type":"Function","methodName":"fsockopen"},{"id":"function.gethostbyaddr","name":"gethostbyaddr","description":"Get the Internet host name corresponding to a given IP address","tag":"refentry","type":"Function","methodName":"gethostbyaddr"},{"id":"function.gethostbyname","name":"gethostbyname","description":"Get the IPv4 address corresponding to a given Internet host name","tag":"refentry","type":"Function","methodName":"gethostbyname"},{"id":"function.gethostbynamel","name":"gethostbynamel","description":"Get a list of IPv4 addresses corresponding to a given Internet host\n name","tag":"refentry","type":"Function","methodName":"gethostbynamel"},{"id":"function.gethostname","name":"gethostname","description":"Gets the host name","tag":"refentry","type":"Function","methodName":"gethostname"},{"id":"function.getmxrr","name":"getmxrr","description":"Get MX records corresponding to a given Internet host name","tag":"refentry","type":"Function","methodName":"getmxrr"},{"id":"function.getprotobyname","name":"getprotobyname","description":"Get protocol number associated with protocol name","tag":"refentry","type":"Function","methodName":"getprotobyname"},{"id":"function.getprotobynumber","name":"getprotobynumber","description":"Get protocol name associated with protocol number","tag":"refentry","type":"Function","methodName":"getprotobynumber"},{"id":"function.getservbyname","name":"getservbyname","description":"Get port number associated with an Internet service and protocol","tag":"refentry","type":"Function","methodName":"getservbyname"},{"id":"function.getservbyport","name":"getservbyport","description":"Get Internet service which corresponds to port and protocol","tag":"refentry","type":"Function","methodName":"getservbyport"},{"id":"function.header","name":"header","description":"Send a raw HTTP header","tag":"refentry","type":"Function","methodName":"header"},{"id":"function.header-register-callback","name":"header_register_callback","description":"Call a header function","tag":"refentry","type":"Function","methodName":"header_register_callback"},{"id":"function.header-remove","name":"header_remove","description":"Remove previously set headers","tag":"refentry","type":"Function","methodName":"header_remove"},{"id":"function.headers-list","name":"headers_list","description":"Returns a list of response headers sent (or ready to send)","tag":"refentry","type":"Function","methodName":"headers_list"},{"id":"function.headers-sent","name":"headers_sent","description":"Checks if or where headers have been sent","tag":"refentry","type":"Function","methodName":"headers_sent"},{"id":"function.http-clear-last-response-headers","name":"http_clear_last_response_headers","description":"Clears the stored HTTP response headers","tag":"refentry","type":"Function","methodName":"http_clear_last_response_headers"},{"id":"function.http-get-last-response-headers","name":"http_get_last_response_headers","description":"Retrieve last HTTP response headers","tag":"refentry","type":"Function","methodName":"http_get_last_response_headers"},{"id":"function.http-response-code","name":"http_response_code","description":"Get or Set the HTTP response code","tag":"refentry","type":"Function","methodName":"http_response_code"},{"id":"function.inet-ntop","name":"inet_ntop","description":"Converts a packed internet address to a human readable representation","tag":"refentry","type":"Function","methodName":"inet_ntop"},{"id":"function.inet-pton","name":"inet_pton","description":"Converts a human readable IP address to its packed in_addr representation","tag":"refentry","type":"Function","methodName":"inet_pton"},{"id":"function.ip2long","name":"ip2long","description":"Converts a string containing an (IPv4) Internet Protocol dotted address into a long integer","tag":"refentry","type":"Function","methodName":"ip2long"},{"id":"function.long2ip","name":"long2ip","description":"Converts a long integer address into a string in (IPv4) Internet standard dotted format","tag":"refentry","type":"Function","methodName":"long2ip"},{"id":"function.net-get-interfaces","name":"net_get_interfaces","description":"Get network interfaces","tag":"refentry","type":"Function","methodName":"net_get_interfaces"},{"id":"function.openlog","name":"openlog","description":"Open connection to system logger","tag":"refentry","type":"Function","methodName":"openlog"},{"id":"function.pfsockopen","name":"pfsockopen","description":"Open persistent Internet or Unix domain socket connection","tag":"refentry","type":"Function","methodName":"pfsockopen"},{"id":"function.request-parse-body","name":"request_parse_body","description":"Read and parse the request body and return the result","tag":"refentry","type":"Function","methodName":"request_parse_body"},{"id":"function.setcookie","name":"setcookie","description":"Send a cookie","tag":"refentry","type":"Function","methodName":"setcookie"},{"id":"function.setrawcookie","name":"setrawcookie","description":"Send a cookie without urlencoding the cookie value","tag":"refentry","type":"Function","methodName":"setrawcookie"},{"id":"function.socket-get-status","name":"socket_get_status","description":"Alias of stream_get_meta_data","tag":"refentry","type":"Function","methodName":"socket_get_status"},{"id":"function.socket-set-blocking","name":"socket_set_blocking","description":"Alias of stream_set_blocking","tag":"refentry","type":"Function","methodName":"socket_set_blocking"},{"id":"function.socket-set-timeout","name":"socket_set_timeout","description":"Alias of stream_set_timeout","tag":"refentry","type":"Function","methodName":"socket_set_timeout"},{"id":"function.syslog","name":"syslog","description":"Generate a system log message","tag":"refentry","type":"Function","methodName":"syslog"},{"id":"ref.network","name":"Network Functions","description":"Network","tag":"reference","type":"Extension","methodName":"Network Functions"},{"id":"book.network","name":"Network","description":"Other Services","tag":"book","type":"Extension","methodName":"Network"},{"id":"intro.rrd","name":"Introduction","description":"RRDtool","tag":"preface","type":"General","methodName":"Introduction"},{"id":"rrd.requirements","name":"Requirements","description":"RRDtool","tag":"section","type":"General","methodName":"Requirements"},{"id":"rrd.installation","name":"Installation","description":"RRDtool","tag":"section","type":"General","methodName":"Installation"},{"id":"rrd.setup","name":"Installing\/Configuring","description":"RRDtool","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"rrd.examples-procedural","name":"Procedural PECL\/rrd example","description":"RRDtool","tag":"section","type":"General","methodName":"Procedural PECL\/rrd example"},{"id":"rrd.examples-oop","name":"OOP PECL\/rrd example","description":"RRDtool","tag":"section","type":"General","methodName":"OOP PECL\/rrd example"},{"id":"rrd.examples","name":"Examples","description":"RRDtool","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.rrd-create","name":"rrd_create","description":"Creates rrd database file","tag":"refentry","type":"Function","methodName":"rrd_create"},{"id":"function.rrd-error","name":"rrd_error","description":"Gets latest error message","tag":"refentry","type":"Function","methodName":"rrd_error"},{"id":"function.rrd-fetch","name":"rrd_fetch","description":"Fetch the data for graph as array","tag":"refentry","type":"Function","methodName":"rrd_fetch"},{"id":"function.rrd-first","name":"rrd_first","description":"Gets the timestamp of the first sample from rrd file","tag":"refentry","type":"Function","methodName":"rrd_first"},{"id":"function.rrd-graph","name":"rrd_graph","description":"Creates image from a data","tag":"refentry","type":"Function","methodName":"rrd_graph"},{"id":"function.rrd-info","name":"rrd_info","description":"Gets information about rrd file","tag":"refentry","type":"Function","methodName":"rrd_info"},{"id":"function.rrd-last","name":"rrd_last","description":"Gets unix timestamp of the last sample","tag":"refentry","type":"Function","methodName":"rrd_last"},{"id":"function.rrd-lastupdate","name":"rrd_lastupdate","description":"Gets information about last updated data","tag":"refentry","type":"Function","methodName":"rrd_lastupdate"},{"id":"function.rrd-restore","name":"rrd_restore","description":"Restores the RRD file from XML dump","tag":"refentry","type":"Function","methodName":"rrd_restore"},{"id":"function.rrd-tune","name":"rrd_tune","description":"Tunes some RRD database file header options","tag":"refentry","type":"Function","methodName":"rrd_tune"},{"id":"function.rrd-update","name":"rrd_update","description":"Updates the RRD database","tag":"refentry","type":"Function","methodName":"rrd_update"},{"id":"function.rrd-version","name":"rrd_version","description":"Gets information about underlying rrdtool library","tag":"refentry","type":"Function","methodName":"rrd_version"},{"id":"function.rrd-xport","name":"rrd_xport","description":"Exports the information about RRD database","tag":"refentry","type":"Function","methodName":"rrd_xport"},{"id":"function.rrdc-disconnect","name":"rrdc_disconnect","description":"Close any outstanding connection to rrd caching daemon","tag":"refentry","type":"Function","methodName":"rrdc_disconnect"},{"id":"ref.rrd","name":"RRD Functions","description":"RRDtool","tag":"reference","type":"Extension","methodName":"RRD Functions"},{"id":"rrdcreator.addarchive","name":"RRDCreator::addArchive","description":"Adds RRA - archive of data values for each data source","tag":"refentry","type":"Function","methodName":"addArchive"},{"id":"rrdcreator.adddatasource","name":"RRDCreator::addDataSource","description":"Adds data source definition for RRD database","tag":"refentry","type":"Function","methodName":"addDataSource"},{"id":"rrdcreator.construct","name":"RRDCreator::__construct","description":"Creates new RRDCreator instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"rrdcreator.save","name":"RRDCreator::save","description":"Saves the RRD database to a file","tag":"refentry","type":"Function","methodName":"save"},{"id":"class.rrdcreator","name":"RRDCreator","description":"The RRDCreator class","tag":"phpdoc:classref","type":"Class","methodName":"RRDCreator"},{"id":"rrdgraph.construct","name":"RRDGraph::__construct","description":"Creates new RRDGraph instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"rrdgraph.save","name":"RRDGraph::save","description":"Saves the result of query into image","tag":"refentry","type":"Function","methodName":"save"},{"id":"rrdgraph.saveverbose","name":"RRDGraph::saveVerbose","description":"Saves the RRD database query into image and returns the verbose\n information about generated graph","tag":"refentry","type":"Function","methodName":"saveVerbose"},{"id":"rrdgraph.setoptions","name":"RRDGraph::setOptions","description":"Sets the options for rrd graph export","tag":"refentry","type":"Function","methodName":"setOptions"},{"id":"class.rrdgraph","name":"RRDGraph","description":"The RRDGraph class","tag":"phpdoc:classref","type":"Class","methodName":"RRDGraph"},{"id":"rrdupdater.construct","name":"RRDUpdater::__construct","description":"Creates new RRDUpdater instance","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"rrdupdater.update","name":"RRDUpdater::update","description":"Update the RRD database file","tag":"refentry","type":"Function","methodName":"update"},{"id":"class.rrdupdater","name":"RRDUpdater","description":"The RRDUpdater class","tag":"phpdoc:classref","type":"Class","methodName":"RRDUpdater"},{"id":"book.rrd","name":"RRD","description":"RRDtool","tag":"book","type":"Extension","methodName":"RRD"},{"id":"intro.scoutapm","name":"Introduction","description":"ScoutAPM","tag":"preface","type":"General","methodName":"Introduction"},{"id":"scoutapm.requirements","name":"Requirements","description":"ScoutAPM","tag":"section","type":"General","methodName":"Requirements"},{"id":"scoutapm.installation","name":"Installation","description":"ScoutAPM","tag":"section","type":"General","methodName":"Installation"},{"id":"scoutapm.setup","name":"Installing\/Configuring","description":"ScoutAPM","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.scoutapm-get-calls","name":"scoutapm_get_calls","description":"Returns a list of instrumented calls that have occurred","tag":"refentry","type":"Function","methodName":"scoutapm_get_calls"},{"id":"function.scoutapm-list-instrumented-functions","name":"scoutapm_list_instrumented_functions","description":"List functions scoutapm will instrument.","tag":"refentry","type":"Function","methodName":"scoutapm_list_instrumented_functions"},{"id":"ref.scoutapm","name":"Scoutapm Functions","description":"ScoutAPM","tag":"reference","type":"Extension","methodName":"Scoutapm Functions"},{"id":"book.scoutapm","name":"ScoutAPM","description":"ScoutAPM","tag":"book","type":"Extension","methodName":"ScoutAPM"},{"id":"intro.snmp","name":"Introduction","description":"SNMP","tag":"preface","type":"General","methodName":"Introduction"},{"id":"snmp.requirements","name":"Requirements","description":"SNMP","tag":"section","type":"General","methodName":"Requirements"},{"id":"snmp.installation","name":"Installation","description":"SNMP","tag":"section","type":"General","methodName":"Installation"},{"id":"snmp.setup","name":"Installing\/Configuring","description":"SNMP","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"snmp.constants","name":"Predefined Constants","description":"SNMP","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.snmp-get-quick-print","name":"snmp_get_quick_print","description":"Fetches the current value of the NET-SNMP library's quick_print setting","tag":"refentry","type":"Function","methodName":"snmp_get_quick_print"},{"id":"function.snmp-get-valueretrieval","name":"snmp_get_valueretrieval","description":"Return the method how the SNMP values will be returned","tag":"refentry","type":"Function","methodName":"snmp_get_valueretrieval"},{"id":"function.snmp-read-mib","name":"snmp_read_mib","description":"Reads and parses a MIB file into the active MIB tree","tag":"refentry","type":"Function","methodName":"snmp_read_mib"},{"id":"function.snmp-set-enum-print","name":"snmp_set_enum_print","description":"Return all values that are enums with their enum value instead of the raw integer","tag":"refentry","type":"Function","methodName":"snmp_set_enum_print"},{"id":"function.snmp-set-oid-numeric-print","name":"snmp_set_oid_numeric_print","description":"Alias of snmp_set_oid_output_format","tag":"refentry","type":"Function","methodName":"snmp_set_oid_numeric_print"},{"id":"function.snmp-set-oid-output-format","name":"snmp_set_oid_output_format","description":"Set the OID output format","tag":"refentry","type":"Function","methodName":"snmp_set_oid_output_format"},{"id":"function.snmp-set-quick-print","name":"snmp_set_quick_print","description":"Set the value of enable within the NET-SNMP library","tag":"refentry","type":"Function","methodName":"snmp_set_quick_print"},{"id":"function.snmp-set-valueretrieval","name":"snmp_set_valueretrieval","description":"Specify the method how the SNMP values will be returned","tag":"refentry","type":"Function","methodName":"snmp_set_valueretrieval"},{"id":"function.snmp2-get","name":"snmp2_get","description":"Fetch an SNMP object","tag":"refentry","type":"Function","methodName":"snmp2_get"},{"id":"function.snmp2-getnext","name":"snmp2_getnext","description":"Fetch the SNMP object which follows the given object id","tag":"refentry","type":"Function","methodName":"snmp2_getnext"},{"id":"function.snmp2-real-walk","name":"snmp2_real_walk","description":"Return all objects including their respective object ID within the specified one","tag":"refentry","type":"Function","methodName":"snmp2_real_walk"},{"id":"function.snmp2-set","name":"snmp2_set","description":"Set the value of an SNMP object","tag":"refentry","type":"Function","methodName":"snmp2_set"},{"id":"function.snmp2-walk","name":"snmp2_walk","description":"Fetch all the SNMP objects from an agent","tag":"refentry","type":"Function","methodName":"snmp2_walk"},{"id":"function.snmp3-get","name":"snmp3_get","description":"Fetch an SNMP object","tag":"refentry","type":"Function","methodName":"snmp3_get"},{"id":"function.snmp3-getnext","name":"snmp3_getnext","description":"Fetch the SNMP object which follows the given object id","tag":"refentry","type":"Function","methodName":"snmp3_getnext"},{"id":"function.snmp3-real-walk","name":"snmp3_real_walk","description":"Return all objects including their respective object ID within the specified one","tag":"refentry","type":"Function","methodName":"snmp3_real_walk"},{"id":"function.snmp3-set","name":"snmp3_set","description":"Set the value of an SNMP object","tag":"refentry","type":"Function","methodName":"snmp3_set"},{"id":"function.snmp3-walk","name":"snmp3_walk","description":"Fetch all the SNMP objects from an agent","tag":"refentry","type":"Function","methodName":"snmp3_walk"},{"id":"function.snmpget","name":"snmpget","description":"Fetch an SNMP object","tag":"refentry","type":"Function","methodName":"snmpget"},{"id":"function.snmpgetnext","name":"snmpgetnext","description":"Fetch the SNMP object which follows the given object id","tag":"refentry","type":"Function","methodName":"snmpgetnext"},{"id":"function.snmprealwalk","name":"snmprealwalk","description":"Return all objects including their respective object ID within the specified one","tag":"refentry","type":"Function","methodName":"snmprealwalk"},{"id":"function.snmpset","name":"snmpset","description":"Set the value of an SNMP object","tag":"refentry","type":"Function","methodName":"snmpset"},{"id":"function.snmpwalk","name":"snmpwalk","description":"Fetch all the SNMP objects from an agent","tag":"refentry","type":"Function","methodName":"snmpwalk"},{"id":"function.snmpwalkoid","name":"snmpwalkoid","description":"Query for a tree of information about a network entity","tag":"refentry","type":"Function","methodName":"snmpwalkoid"},{"id":"ref.snmp","name":"SNMP Functions","description":"SNMP","tag":"reference","type":"Extension","methodName":"SNMP Functions"},{"id":"snmp.close","name":"SNMP::close","description":"Close SNMP session","tag":"refentry","type":"Function","methodName":"close"},{"id":"snmp.construct","name":"SNMP::__construct","description":"Creates SNMP instance representing session to remote SNMP agent","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"snmp.get","name":"SNMP::get","description":"Fetch an SNMP object","tag":"refentry","type":"Function","methodName":"get"},{"id":"snmp.geterrno","name":"SNMP::getErrno","description":"Get last error code","tag":"refentry","type":"Function","methodName":"getErrno"},{"id":"snmp.geterror","name":"SNMP::getError","description":"Get last error message","tag":"refentry","type":"Function","methodName":"getError"},{"id":"snmp.getnext","name":"SNMP::getnext","description":"Fetch an SNMP object which\n follows the given object id","tag":"refentry","type":"Function","methodName":"getnext"},{"id":"snmp.set","name":"SNMP::set","description":"Set the value of an SNMP object","tag":"refentry","type":"Function","methodName":"set"},{"id":"snmp.setsecurity","name":"SNMP::setSecurity","description":"Configures security-related SNMPv3 session parameters","tag":"refentry","type":"Function","methodName":"setSecurity"},{"id":"snmp.walk","name":"SNMP::walk","description":"Fetch SNMP object subtree","tag":"refentry","type":"Function","methodName":"walk"},{"id":"class.snmp","name":"SNMP","description":"The SNMP class","tag":"phpdoc:classref","type":"Class","methodName":"SNMP"},{"id":"class.snmpexception","name":"SNMPException","description":"The SNMPException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"SNMPException"},{"id":"book.snmp","name":"SNMP","description":"Other Services","tag":"book","type":"Extension","methodName":"SNMP"},{"id":"intro.sockets","name":"Introduction","description":"Sockets","tag":"preface","type":"General","methodName":"Introduction"},{"id":"sockets.installation","name":"Installation","description":"Sockets","tag":"section","type":"General","methodName":"Installation"},{"id":"sockets.resources","name":"Resource Types","description":"Sockets","tag":"section","type":"General","methodName":"Resource Types"},{"id":"sockets.setup","name":"Installing\/Configuring","description":"Sockets","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"sockets.constants","name":"Predefined Constants","description":"Sockets","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"sockets.examples","name":"Examples","description":"Sockets","tag":"chapter","type":"General","methodName":"Examples"},{"id":"sockets.errors","name":"Socket Errors","description":"Sockets","tag":"chapter","type":"General","methodName":"Socket Errors"},{"id":"function.socket-accept","name":"socket_accept","description":"Accepts a connection on a socket","tag":"refentry","type":"Function","methodName":"socket_accept"},{"id":"function.socket-addrinfo-bind","name":"socket_addrinfo_bind","description":"Create and bind to a socket from a given addrinfo","tag":"refentry","type":"Function","methodName":"socket_addrinfo_bind"},{"id":"function.socket-addrinfo-connect","name":"socket_addrinfo_connect","description":"Create and connect to a socket from a given addrinfo","tag":"refentry","type":"Function","methodName":"socket_addrinfo_connect"},{"id":"function.socket-addrinfo-explain","name":"socket_addrinfo_explain","description":"Get information about addrinfo","tag":"refentry","type":"Function","methodName":"socket_addrinfo_explain"},{"id":"function.socket-addrinfo-lookup","name":"socket_addrinfo_lookup","description":"Get array with contents of getaddrinfo about the given hostname","tag":"refentry","type":"Function","methodName":"socket_addrinfo_lookup"},{"id":"function.socket-atmark","name":"socket_atmark","description":"Determines whether socket is at out-of-band mark","tag":"refentry","type":"Function","methodName":"socket_atmark"},{"id":"function.socket-bind","name":"socket_bind","description":"Binds a name to a socket","tag":"refentry","type":"Function","methodName":"socket_bind"},{"id":"function.socket-clear-error","name":"socket_clear_error","description":"Clears the error on the socket or the last error code","tag":"refentry","type":"Function","methodName":"socket_clear_error"},{"id":"function.socket-close","name":"socket_close","description":"Closes a Socket instance","tag":"refentry","type":"Function","methodName":"socket_close"},{"id":"function.socket-cmsg-space","name":"socket_cmsg_space","description":"Calculate message buffer size","tag":"refentry","type":"Function","methodName":"socket_cmsg_space"},{"id":"function.socket-connect","name":"socket_connect","description":"Initiates a connection on a socket","tag":"refentry","type":"Function","methodName":"socket_connect"},{"id":"function.socket-create","name":"socket_create","description":"Create a socket (endpoint for communication)","tag":"refentry","type":"Function","methodName":"socket_create"},{"id":"function.socket-create-listen","name":"socket_create_listen","description":"Opens a socket on port to accept connections","tag":"refentry","type":"Function","methodName":"socket_create_listen"},{"id":"function.socket-create-pair","name":"socket_create_pair","description":"Creates a pair of indistinguishable sockets and stores them in an array","tag":"refentry","type":"Function","methodName":"socket_create_pair"},{"id":"function.socket-export-stream","name":"socket_export_stream","description":"Export a socket into a stream that encapsulates a socket","tag":"refentry","type":"Function","methodName":"socket_export_stream"},{"id":"function.socket-get-option","name":"socket_get_option","description":"Gets socket options for the socket","tag":"refentry","type":"Function","methodName":"socket_get_option"},{"id":"function.socket-getopt","name":"socket_getopt","description":"Alias of socket_get_option","tag":"refentry","type":"Function","methodName":"socket_getopt"},{"id":"function.socket-getpeername","name":"socket_getpeername","description":"Queries the remote side of the given socket","tag":"refentry","type":"Function","methodName":"socket_getpeername"},{"id":"function.socket-getsockname","name":"socket_getsockname","description":"Queries the local side of the given socket which may either result in host\/port or in a Unix filesystem path, dependent on its type","tag":"refentry","type":"Function","methodName":"socket_getsockname"},{"id":"function.socket-import-stream","name":"socket_import_stream","description":"Import a stream","tag":"refentry","type":"Function","methodName":"socket_import_stream"},{"id":"function.socket-last-error","name":"socket_last_error","description":"Returns the last error on the socket","tag":"refentry","type":"Function","methodName":"socket_last_error"},{"id":"function.socket-listen","name":"socket_listen","description":"Listens for a connection on a socket","tag":"refentry","type":"Function","methodName":"socket_listen"},{"id":"function.socket-read","name":"socket_read","description":"Reads a maximum of length bytes from a socket","tag":"refentry","type":"Function","methodName":"socket_read"},{"id":"function.socket-recv","name":"socket_recv","description":"Receives data from a connected socket","tag":"refentry","type":"Function","methodName":"socket_recv"},{"id":"function.socket-recvfrom","name":"socket_recvfrom","description":"Receives data from a socket whether or not it is connection-oriented","tag":"refentry","type":"Function","methodName":"socket_recvfrom"},{"id":"function.socket-recvmsg","name":"socket_recvmsg","description":"Read a message","tag":"refentry","type":"Function","methodName":"socket_recvmsg"},{"id":"function.socket-select","name":"socket_select","description":"Runs the select() system call on the given arrays of sockets with a specified timeout","tag":"refentry","type":"Function","methodName":"socket_select"},{"id":"function.socket-send","name":"socket_send","description":"Sends data to a connected socket","tag":"refentry","type":"Function","methodName":"socket_send"},{"id":"function.socket-sendmsg","name":"socket_sendmsg","description":"Send a message","tag":"refentry","type":"Function","methodName":"socket_sendmsg"},{"id":"function.socket-sendto","name":"socket_sendto","description":"Sends a message to a socket, whether it is connected or not","tag":"refentry","type":"Function","methodName":"socket_sendto"},{"id":"function.socket-set-block","name":"socket_set_block","description":"Sets blocking mode on a socket","tag":"refentry","type":"Function","methodName":"socket_set_block"},{"id":"function.socket-set-nonblock","name":"socket_set_nonblock","description":"Sets nonblocking mode for file descriptor fd","tag":"refentry","type":"Function","methodName":"socket_set_nonblock"},{"id":"function.socket-set-option","name":"socket_set_option","description":"Sets socket options for the socket","tag":"refentry","type":"Function","methodName":"socket_set_option"},{"id":"function.socket-setopt","name":"socket_setopt","description":"Alias of socket_set_option","tag":"refentry","type":"Function","methodName":"socket_setopt"},{"id":"function.socket-shutdown","name":"socket_shutdown","description":"Shuts down a socket for receiving, sending, or both","tag":"refentry","type":"Function","methodName":"socket_shutdown"},{"id":"function.socket-strerror","name":"socket_strerror","description":"Return a string describing a socket error","tag":"refentry","type":"Function","methodName":"socket_strerror"},{"id":"function.socket-write","name":"socket_write","description":"Write to a socket","tag":"refentry","type":"Function","methodName":"socket_write"},{"id":"function.socket-wsaprotocol-info-export","name":"socket_wsaprotocol_info_export","description":"Exports the WSAPROTOCOL_INFO Structure","tag":"refentry","type":"Function","methodName":"socket_wsaprotocol_info_export"},{"id":"function.socket-wsaprotocol-info-import","name":"socket_wsaprotocol_info_import","description":"Imports a Socket from another Process","tag":"refentry","type":"Function","methodName":"socket_wsaprotocol_info_import"},{"id":"function.socket-wsaprotocol-info-release","name":"socket_wsaprotocol_info_release","description":"Releases an exported WSAPROTOCOL_INFO Structure","tag":"refentry","type":"Function","methodName":"socket_wsaprotocol_info_release"},{"id":"ref.sockets","name":"Socket Functions","description":"Sockets","tag":"reference","type":"Extension","methodName":"Socket Functions"},{"id":"class.socket","name":"Socket","description":"The Socket class","tag":"phpdoc:classref","type":"Class","methodName":"Socket"},{"id":"class.addressinfo","name":"AddressInfo","description":"The AddressInfo class","tag":"phpdoc:classref","type":"Class","methodName":"AddressInfo"},{"id":"book.sockets","name":"Sockets","description":"Other Services","tag":"book","type":"Extension","methodName":"Sockets"},{"id":"intro.ssh2","name":"Introduction","description":"Secure Shell2","tag":"preface","type":"General","methodName":"Introduction"},{"id":"ssh2.requirements","name":"Requirements","description":"Secure Shell2","tag":"section","type":"General","methodName":"Requirements"},{"id":"ssh2.installation","name":"Installation","description":"Secure Shell2","tag":"section","type":"General","methodName":"Installation"},{"id":"ssh2.resources","name":"Resource Types","description":"Secure Shell2","tag":"section","type":"General","methodName":"Resource Types"},{"id":"ssh2.setup","name":"Installing\/Configuring","description":"Secure Shell2","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"ssh2.constants","name":"Predefined Constants","description":"Secure Shell2","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.ssh2-auth-agent","name":"ssh2_auth_agent","description":"Authenticate over SSH using the ssh agent","tag":"refentry","type":"Function","methodName":"ssh2_auth_agent"},{"id":"function.ssh2-auth-hostbased-file","name":"ssh2_auth_hostbased_file","description":"Authenticate using a public hostkey","tag":"refentry","type":"Function","methodName":"ssh2_auth_hostbased_file"},{"id":"function.ssh2-auth-none","name":"ssh2_auth_none","description":"Authenticate as \"none\"","tag":"refentry","type":"Function","methodName":"ssh2_auth_none"},{"id":"function.ssh2-auth-password","name":"ssh2_auth_password","description":"Authenticate over SSH using a plain password","tag":"refentry","type":"Function","methodName":"ssh2_auth_password"},{"id":"function.ssh2-auth-pubkey-file","name":"ssh2_auth_pubkey_file","description":"Authenticate using a public key","tag":"refentry","type":"Function","methodName":"ssh2_auth_pubkey_file"},{"id":"function.ssh2-connect","name":"ssh2_connect","description":"Connect to an SSH server","tag":"refentry","type":"Function","methodName":"ssh2_connect"},{"id":"function.ssh2-disconnect","name":"ssh2_disconnect","description":"Close a connection to a remote SSH server","tag":"refentry","type":"Function","methodName":"ssh2_disconnect"},{"id":"function.ssh2-exec","name":"ssh2_exec","description":"Execute a command on a remote server","tag":"refentry","type":"Function","methodName":"ssh2_exec"},{"id":"function.ssh2-fetch-stream","name":"ssh2_fetch_stream","description":"Fetch an extended data stream","tag":"refentry","type":"Function","methodName":"ssh2_fetch_stream"},{"id":"function.ssh2-fingerprint","name":"ssh2_fingerprint","description":"Retrieve fingerprint of remote server","tag":"refentry","type":"Function","methodName":"ssh2_fingerprint"},{"id":"function.ssh2-forward-accept","name":"ssh2_forward_accept","description":"Accept a connection created by a listener","tag":"refentry","type":"Function","methodName":"ssh2_forward_accept"},{"id":"function.ssh2-forward-listen","name":"ssh2_forward_listen","description":"Bind a port on the remote server and listen for connections","tag":"refentry","type":"Function","methodName":"ssh2_forward_listen"},{"id":"function.ssh2-methods-negotiated","name":"ssh2_methods_negotiated","description":"Return list of negotiated methods","tag":"refentry","type":"Function","methodName":"ssh2_methods_negotiated"},{"id":"function.ssh2-poll","name":"ssh2_poll","description":"Poll the channels\/listeners\/streams for events","tag":"refentry","type":"Function","methodName":"ssh2_poll"},{"id":"function.ssh2-publickey-add","name":"ssh2_publickey_add","description":"Add an authorized publickey","tag":"refentry","type":"Function","methodName":"ssh2_publickey_add"},{"id":"function.ssh2-publickey-init","name":"ssh2_publickey_init","description":"Initialize Publickey subsystem","tag":"refentry","type":"Function","methodName":"ssh2_publickey_init"},{"id":"function.ssh2-publickey-list","name":"ssh2_publickey_list","description":"List currently authorized publickeys","tag":"refentry","type":"Function","methodName":"ssh2_publickey_list"},{"id":"function.ssh2-publickey-remove","name":"ssh2_publickey_remove","description":"Remove an authorized publickey","tag":"refentry","type":"Function","methodName":"ssh2_publickey_remove"},{"id":"function.ssh2-scp-recv","name":"ssh2_scp_recv","description":"Request a file via SCP","tag":"refentry","type":"Function","methodName":"ssh2_scp_recv"},{"id":"function.ssh2-scp-send","name":"ssh2_scp_send","description":"Send a file via SCP","tag":"refentry","type":"Function","methodName":"ssh2_scp_send"},{"id":"function.ssh2-send-eof","name":"ssh2_send_eof","description":"Send EOF to stream","tag":"refentry","type":"Function","methodName":"ssh2_send_eof"},{"id":"function.ssh2-sftp","name":"ssh2_sftp","description":"Initialize SFTP subsystem","tag":"refentry","type":"Function","methodName":"ssh2_sftp"},{"id":"function.ssh2-sftp-chmod","name":"ssh2_sftp_chmod","description":"Changes file mode","tag":"refentry","type":"Function","methodName":"ssh2_sftp_chmod"},{"id":"function.ssh2-sftp-lstat","name":"ssh2_sftp_lstat","description":"Stat a symbolic link","tag":"refentry","type":"Function","methodName":"ssh2_sftp_lstat"},{"id":"function.ssh2-sftp-mkdir","name":"ssh2_sftp_mkdir","description":"Create a directory","tag":"refentry","type":"Function","methodName":"ssh2_sftp_mkdir"},{"id":"function.ssh2-sftp-readlink","name":"ssh2_sftp_readlink","description":"Return the target of a symbolic link","tag":"refentry","type":"Function","methodName":"ssh2_sftp_readlink"},{"id":"function.ssh2-sftp-realpath","name":"ssh2_sftp_realpath","description":"Resolve the realpath of a provided path string","tag":"refentry","type":"Function","methodName":"ssh2_sftp_realpath"},{"id":"function.ssh2-sftp-rename","name":"ssh2_sftp_rename","description":"Rename a remote file","tag":"refentry","type":"Function","methodName":"ssh2_sftp_rename"},{"id":"function.ssh2-sftp-rmdir","name":"ssh2_sftp_rmdir","description":"Remove a directory","tag":"refentry","type":"Function","methodName":"ssh2_sftp_rmdir"},{"id":"function.ssh2-sftp-stat","name":"ssh2_sftp_stat","description":"Stat a file on a remote filesystem","tag":"refentry","type":"Function","methodName":"ssh2_sftp_stat"},{"id":"function.ssh2-sftp-symlink","name":"ssh2_sftp_symlink","description":"Create a symlink","tag":"refentry","type":"Function","methodName":"ssh2_sftp_symlink"},{"id":"function.ssh2-sftp-unlink","name":"ssh2_sftp_unlink","description":"Delete a file","tag":"refentry","type":"Function","methodName":"ssh2_sftp_unlink"},{"id":"function.ssh2-shell","name":"ssh2_shell","description":"Request an interactive shell","tag":"refentry","type":"Function","methodName":"ssh2_shell"},{"id":"function.ssh2-tunnel","name":"ssh2_tunnel","description":"Open a tunnel through a remote server","tag":"refentry","type":"Function","methodName":"ssh2_tunnel"},{"id":"ref.ssh2","name":"SSH2 Functions","description":"Secure Shell2","tag":"reference","type":"Extension","methodName":"SSH2 Functions"},{"id":"book.ssh2","name":"SSH2","description":"Secure Shell2","tag":"book","type":"Extension","methodName":"SSH2"},{"id":"intro.stomp","name":"Introduction","description":"Stomp Client","tag":"preface","type":"General","methodName":"Introduction"},{"id":"stomp.requirements","name":"Requirements","description":"Stomp Client","tag":"section","type":"General","methodName":"Requirements"},{"id":"stomp.installation","name":"Installation","description":"Stomp Client","tag":"section","type":"General","methodName":"Installation"},{"id":"stomp.configuration","name":"Runtime Configuration","description":"Stomp Client","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"stomp.resources","name":"Resource Types","description":"Stomp Client","tag":"section","type":"General","methodName":"Resource Types"},{"id":"stomp.setup","name":"Installing\/Configuring","description":"Stomp Client","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"stomp.examples","name":"Examples","description":"Stomp Client","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.stomp-connect-error","name":"stomp_connect_error","description":"Returns a string description of the last connect error","tag":"refentry","type":"Function","methodName":"stomp_connect_error"},{"id":"function.stomp-version","name":"stomp_version","description":"Gets the current stomp extension version","tag":"refentry","type":"Function","methodName":"stomp_version"},{"id":"ref.stomp","name":"Stomp Functions","description":"Stomp Client","tag":"reference","type":"Extension","methodName":"Stomp Functions"},{"id":"stomp.abort","name":"stomp_abort","description":"Rolls back a transaction in progress","tag":"refentry","type":"Function","methodName":"stomp_abort"},{"id":"stomp.abort","name":"Stomp::abort","description":"Rolls back a transaction in progress","tag":"refentry","type":"Function","methodName":"abort"},{"id":"stomp.ack","name":"stomp_ack","description":"Acknowledges consumption of a message","tag":"refentry","type":"Function","methodName":"stomp_ack"},{"id":"stomp.ack","name":"Stomp::ack","description":"Acknowledges consumption of a message","tag":"refentry","type":"Function","methodName":"ack"},{"id":"stomp.begin","name":"stomp_begin","description":"Starts a transaction","tag":"refentry","type":"Function","methodName":"stomp_begin"},{"id":"stomp.begin","name":"Stomp::begin","description":"Starts a transaction","tag":"refentry","type":"Function","methodName":"begin"},{"id":"stomp.commit","name":"stomp_commit","description":"Commits a transaction in progress","tag":"refentry","type":"Function","methodName":"stomp_commit"},{"id":"stomp.commit","name":"Stomp::commit","description":"Commits a transaction in progress","tag":"refentry","type":"Function","methodName":"commit"},{"id":"stomp.construct","name":"stomp_connect","description":"Opens a connection","tag":"refentry","type":"Function","methodName":"stomp_connect"},{"id":"stomp.construct","name":"Stomp::__construct","description":"Opens a connection","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"stomp.destruct","name":"stomp_close","description":"Closes stomp connection","tag":"refentry","type":"Function","methodName":"stomp_close"},{"id":"stomp.destruct","name":"Stomp::__destruct","description":"Closes stomp connection","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"stomp.error","name":"stomp_error","description":"Gets the last stomp error","tag":"refentry","type":"Function","methodName":"stomp_error"},{"id":"stomp.error","name":"Stomp::error","description":"Gets the last stomp error","tag":"refentry","type":"Function","methodName":"error"},{"id":"stomp.getreadtimeout","name":"stomp_get_read_timeout","description":"Gets read timeout","tag":"refentry","type":"Function","methodName":"stomp_get_read_timeout"},{"id":"stomp.getreadtimeout","name":"Stomp::getReadTimeout","description":"Gets read timeout","tag":"refentry","type":"Function","methodName":"getReadTimeout"},{"id":"stomp.getsessionid","name":"stomp_get_session_id","description":"Gets the current stomp session ID","tag":"refentry","type":"Function","methodName":"stomp_get_session_id"},{"id":"stomp.getsessionid","name":"Stomp::getSessionId","description":"Gets the current stomp session ID","tag":"refentry","type":"Function","methodName":"getSessionId"},{"id":"stomp.hasframe","name":"stomp_has_frame","description":"Indicates whether or not there is a frame ready to read","tag":"refentry","type":"Function","methodName":"stomp_has_frame"},{"id":"stomp.hasframe","name":"Stomp::hasFrame","description":"Indicates whether or not there is a frame ready to read","tag":"refentry","type":"Function","methodName":"hasFrame"},{"id":"stomp.readframe","name":"stomp_read_frame","description":"Reads the next frame","tag":"refentry","type":"Function","methodName":"stomp_read_frame"},{"id":"stomp.readframe","name":"Stomp::readFrame","description":"Reads the next frame","tag":"refentry","type":"Function","methodName":"readFrame"},{"id":"stomp.send","name":"stomp_send","description":"Sends a message","tag":"refentry","type":"Function","methodName":"stomp_send"},{"id":"stomp.send","name":"Stomp::send","description":"Sends a message","tag":"refentry","type":"Function","methodName":"send"},{"id":"stomp.setreadtimeout","name":"stomp_set_read_timeout","description":"Sets read timeout","tag":"refentry","type":"Function","methodName":"stomp_set_read_timeout"},{"id":"stomp.setreadtimeout","name":"Stomp::setReadTimeout","description":"Sets read timeout","tag":"refentry","type":"Function","methodName":"setReadTimeout"},{"id":"stomp.subscribe","name":"stomp_subscribe","description":"Registers to listen to a given destination","tag":"refentry","type":"Function","methodName":"stomp_subscribe"},{"id":"stomp.subscribe","name":"Stomp::subscribe","description":"Registers to listen to a given destination","tag":"refentry","type":"Function","methodName":"subscribe"},{"id":"stomp.unsubscribe","name":"stomp_unsubscribe","description":"Removes an existing subscription","tag":"refentry","type":"Function","methodName":"stomp_unsubscribe"},{"id":"stomp.unsubscribe","name":"Stomp::unsubscribe","description":"Removes an existing subscription","tag":"refentry","type":"Function","methodName":"unsubscribe"},{"id":"class.stomp","name":"Stomp","description":"The Stomp class","tag":"phpdoc:classref","type":"Class","methodName":"Stomp"},{"id":"stompframe.construct","name":"StompFrame::__construct","description":"Constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.stompframe","name":"StompFrame","description":"The StompFrame class","tag":"phpdoc:classref","type":"Class","methodName":"StompFrame"},{"id":"stomp.getdetails","name":"StompException::getDetails","description":"Get exception details","tag":"refentry","type":"Function","methodName":"getDetails"},{"id":"class.stompexception","name":"StompException","description":"The StompException class","tag":"phpdoc:classref","type":"Class","methodName":"StompException"},{"id":"book.stomp","name":"Stomp","description":"Stomp Client","tag":"book","type":"Extension","methodName":"Stomp"},{"id":"intro.svm","name":"Introduction","description":"Support Vector Machine","tag":"preface","type":"General","methodName":"Introduction"},{"id":"svm.requirements","name":"Requirements","description":"Support Vector Machine","tag":"section","type":"General","methodName":"Requirements"},{"id":"svm.installation","name":"Installation","description":"Support Vector Machine","tag":"section","type":"General","methodName":"Installation"},{"id":"svm.setup","name":"Installing\/Configuring","description":"Support Vector Machine","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"svm.examples","name":"Examples","description":"Support Vector Machine","tag":"chapter","type":"General","methodName":"Examples"},{"id":"svm.construct","name":"SVM::__construct","description":"Construct a new SVM object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"svm.crossvalidate","name":"SVM::crossvalidate","description":"Test training params on subsets of the training data","tag":"refentry","type":"Function","methodName":"crossvalidate"},{"id":"svm.getoptions","name":"SVM::getOptions","description":"Return the current training parameters","tag":"refentry","type":"Function","methodName":"getOptions"},{"id":"svm.setoptions","name":"SVM::setOptions","description":"Set training parameters","tag":"refentry","type":"Function","methodName":"setOptions"},{"id":"svm.train","name":"SVM::train","description":"Create a SVMModel based on training data","tag":"refentry","type":"Function","methodName":"train"},{"id":"class.svm","name":"SVM","description":"The SVM class","tag":"phpdoc:classref","type":"Class","methodName":"SVM"},{"id":"svmmodel.checkprobabilitymodel","name":"SVMModel::checkProbabilityModel","description":"Returns true if the model has probability information","tag":"refentry","type":"Function","methodName":"checkProbabilityModel"},{"id":"svmmodel.construct","name":"SVMModel::__construct","description":"Construct a new SVMModel","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"svmmodel.getlabels","name":"SVMModel::getLabels","description":"Get the labels the model was trained on","tag":"refentry","type":"Function","methodName":"getLabels"},{"id":"svmmodel.getnrclass","name":"SVMModel::getNrClass","description":"Returns the number of classes the model was trained with","tag":"refentry","type":"Function","methodName":"getNrClass"},{"id":"svmmodel.getsvmtype","name":"SVMModel::getSvmType","description":"Get the SVM type the model was trained with","tag":"refentry","type":"Function","methodName":"getSvmType"},{"id":"svmmodel.getsvrprobability","name":"SVMModel::getSvrProbability","description":"Get the sigma value for regression types","tag":"refentry","type":"Function","methodName":"getSvrProbability"},{"id":"svmmodel.load","name":"SVMModel::load","description":"Load a saved SVM Model","tag":"refentry","type":"Function","methodName":"load"},{"id":"svmmodel.predict","name":"SVMModel::predict","description":"Predict a value for previously unseen data","tag":"refentry","type":"Function","methodName":"predict"},{"id":"svmmodel.predict-probability","name":"SVMModel::predict_probability","description":"Return class probabilities for previous unseen data","tag":"refentry","type":"Function","methodName":"predict_probability"},{"id":"svmmodel.save","name":"SVMModel::save","description":"Save a model to a file","tag":"refentry","type":"Function","methodName":"save"},{"id":"class.svmmodel","name":"SVMModel","description":"The SVMModel class","tag":"phpdoc:classref","type":"Class","methodName":"SVMModel"},{"id":"book.svm","name":"SVM","description":"Support Vector Machine","tag":"book","type":"Extension","methodName":"SVM"},{"id":"intro.svn","name":"Introduction","description":"Subversion","tag":"preface","type":"General","methodName":"Introduction"},{"id":"svn.requirements","name":"Requirements","description":"Subversion","tag":"section","type":"General","methodName":"Requirements"},{"id":"svn.installation","name":"Installation","description":"Subversion","tag":"section","type":"General","methodName":"Installation"},{"id":"svn.setup","name":"Installing\/Configuring","description":"Subversion","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"svn.constants","name":"Predefined Constants","description":"Subversion","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.svn-add","name":"svn_add","description":"Schedules the addition of an item in a working directory","tag":"refentry","type":"Function","methodName":"svn_add"},{"id":"function.svn-auth-get-parameter","name":"svn_auth_get_parameter","description":"Retrieves authentication parameter","tag":"refentry","type":"Function","methodName":"svn_auth_get_parameter"},{"id":"function.svn-auth-set-parameter","name":"svn_auth_set_parameter","description":"Sets an authentication parameter","tag":"refentry","type":"Function","methodName":"svn_auth_set_parameter"},{"id":"function.svn-blame","name":"svn_blame","description":"Get the SVN blame for a file","tag":"refentry","type":"Function","methodName":"svn_blame"},{"id":"function.svn-cat","name":"svn_cat","description":"Returns the contents of a file in a repository","tag":"refentry","type":"Function","methodName":"svn_cat"},{"id":"function.svn-checkout","name":"svn_checkout","description":"Checks out a working copy from the repository","tag":"refentry","type":"Function","methodName":"svn_checkout"},{"id":"function.svn-cleanup","name":"svn_cleanup","description":"Recursively cleanup a working copy directory, finishing incomplete operations and removing locks","tag":"refentry","type":"Function","methodName":"svn_cleanup"},{"id":"function.svn-client-version","name":"svn_client_version","description":"Returns the version of the SVN client libraries","tag":"refentry","type":"Function","methodName":"svn_client_version"},{"id":"function.svn-commit","name":"svn_commit","description":"Sends changes from the local working copy to the repository","tag":"refentry","type":"Function","methodName":"svn_commit"},{"id":"function.svn-delete","name":"svn_delete","description":"Delete items from a working copy or repository","tag":"refentry","type":"Function","methodName":"svn_delete"},{"id":"function.svn-diff","name":"svn_diff","description":"Recursively diffs two paths","tag":"refentry","type":"Function","methodName":"svn_diff"},{"id":"function.svn-export","name":"svn_export","description":"Export the contents of a SVN directory","tag":"refentry","type":"Function","methodName":"svn_export"},{"id":"function.svn-fs-abort-txn","name":"svn_fs_abort_txn","description":"Aborts a transaction","tag":"refentry","type":"Function","methodName":"svn_fs_abort_txn"},{"id":"function.svn-fs-apply-text","name":"svn_fs_apply_text","description":"Creates and returns a stream that will be used to replace","tag":"refentry","type":"Function","methodName":"svn_fs_apply_text"},{"id":"function.svn-fs-begin-txn2","name":"svn_fs_begin_txn2","description":"Create a new transaction","tag":"refentry","type":"Function","methodName":"svn_fs_begin_txn2"},{"id":"function.svn-fs-change-node-prop","name":"svn_fs_change_node_prop","description":"Return true if everything is ok, false otherwise","tag":"refentry","type":"Function","methodName":"svn_fs_change_node_prop"},{"id":"function.svn-fs-check-path","name":"svn_fs_check_path","description":"Determines what kind of item lives at path in a given repository fsroot","tag":"refentry","type":"Function","methodName":"svn_fs_check_path"},{"id":"function.svn-fs-contents-changed","name":"svn_fs_contents_changed","description":"Return true if content is different, false otherwise","tag":"refentry","type":"Function","methodName":"svn_fs_contents_changed"},{"id":"function.svn-fs-copy","name":"svn_fs_copy","description":"Copies a file or a directory","tag":"refentry","type":"Function","methodName":"svn_fs_copy"},{"id":"function.svn-fs-delete","name":"svn_fs_delete","description":"Deletes a file or a directory","tag":"refentry","type":"Function","methodName":"svn_fs_delete"},{"id":"function.svn-fs-dir-entries","name":"svn_fs_dir_entries","description":"Enumerates the directory entries under path; returns a hash of dir names to file type","tag":"refentry","type":"Function","methodName":"svn_fs_dir_entries"},{"id":"function.svn-fs-file-contents","name":"svn_fs_file_contents","description":"Returns a stream to access the contents of a file from a given version of the fs","tag":"refentry","type":"Function","methodName":"svn_fs_file_contents"},{"id":"function.svn-fs-file-length","name":"svn_fs_file_length","description":"Returns the length of a file from a given version of the fs","tag":"refentry","type":"Function","methodName":"svn_fs_file_length"},{"id":"function.svn-fs-is-dir","name":"svn_fs_is_dir","description":"Determines if a path points to a directory","tag":"refentry","type":"Function","methodName":"svn_fs_is_dir"},{"id":"function.svn-fs-is-file","name":"svn_fs_is_file","description":"Determines if a path points to a file","tag":"refentry","type":"Function","methodName":"svn_fs_is_file"},{"id":"function.svn-fs-make-dir","name":"svn_fs_make_dir","description":"Creates a new empty directory","tag":"refentry","type":"Function","methodName":"svn_fs_make_dir"},{"id":"function.svn-fs-make-file","name":"svn_fs_make_file","description":"Creates a new empty file","tag":"refentry","type":"Function","methodName":"svn_fs_make_file"},{"id":"function.svn-fs-node-created-rev","name":"svn_fs_node_created_rev","description":"Returns the revision in which path under fsroot was created","tag":"refentry","type":"Function","methodName":"svn_fs_node_created_rev"},{"id":"function.svn-fs-node-prop","name":"svn_fs_node_prop","description":"Returns the value of a property for a node","tag":"refentry","type":"Function","methodName":"svn_fs_node_prop"},{"id":"function.svn-fs-props-changed","name":"svn_fs_props_changed","description":"Return true if props are different, false otherwise","tag":"refentry","type":"Function","methodName":"svn_fs_props_changed"},{"id":"function.svn-fs-revision-prop","name":"svn_fs_revision_prop","description":"Fetches the value of a named property","tag":"refentry","type":"Function","methodName":"svn_fs_revision_prop"},{"id":"function.svn-fs-revision-root","name":"svn_fs_revision_root","description":"Get a handle on a specific version of the repository root","tag":"refentry","type":"Function","methodName":"svn_fs_revision_root"},{"id":"function.svn-fs-txn-root","name":"svn_fs_txn_root","description":"Creates and returns a transaction root","tag":"refentry","type":"Function","methodName":"svn_fs_txn_root"},{"id":"function.svn-fs-youngest-rev","name":"svn_fs_youngest_rev","description":"Returns the number of the youngest revision in the filesystem","tag":"refentry","type":"Function","methodName":"svn_fs_youngest_rev"},{"id":"function.svn-import","name":"svn_import","description":"Imports an unversioned path into a repository","tag":"refentry","type":"Function","methodName":"svn_import"},{"id":"function.svn-log","name":"svn_log","description":"Returns the commit log messages of a repository URL","tag":"refentry","type":"Function","methodName":"svn_log"},{"id":"function.svn-ls","name":"svn_ls","description":"Returns list of directory contents in repository URL, optionally at revision number","tag":"refentry","type":"Function","methodName":"svn_ls"},{"id":"function.svn-mkdir","name":"svn_mkdir","description":"Creates a directory in a working copy or repository","tag":"refentry","type":"Function","methodName":"svn_mkdir"},{"id":"function.svn-repos-create","name":"svn_repos_create","description":"Create a new subversion repository at path","tag":"refentry","type":"Function","methodName":"svn_repos_create"},{"id":"function.svn-repos-fs","name":"svn_repos_fs","description":"Gets a handle on the filesystem for a repository","tag":"refentry","type":"Function","methodName":"svn_repos_fs"},{"id":"function.svn-repos-fs-begin-txn-for-commit","name":"svn_repos_fs_begin_txn_for_commit","description":"Create a new transaction","tag":"refentry","type":"Function","methodName":"svn_repos_fs_begin_txn_for_commit"},{"id":"function.svn-repos-fs-commit-txn","name":"svn_repos_fs_commit_txn","description":"Commits a transaction and returns the new revision","tag":"refentry","type":"Function","methodName":"svn_repos_fs_commit_txn"},{"id":"function.svn-repos-hotcopy","name":"svn_repos_hotcopy","description":"Make a hot-copy of the repos at repospath; copy it to destpath","tag":"refentry","type":"Function","methodName":"svn_repos_hotcopy"},{"id":"function.svn-repos-open","name":"svn_repos_open","description":"Open a shared lock on a repository","tag":"refentry","type":"Function","methodName":"svn_repos_open"},{"id":"function.svn-repos-recover","name":"svn_repos_recover","description":"Run recovery procedures on the repository located at path","tag":"refentry","type":"Function","methodName":"svn_repos_recover"},{"id":"function.svn-revert","name":"svn_revert","description":"Revert changes to the working copy","tag":"refentry","type":"Function","methodName":"svn_revert"},{"id":"function.svn-status","name":"svn_status","description":"Returns the status of working copy files and directories","tag":"refentry","type":"Function","methodName":"svn_status"},{"id":"function.svn-update","name":"svn_update","description":"Update working copy","tag":"refentry","type":"Function","methodName":"svn_update"},{"id":"ref.svn","name":"SVN Functions","description":"Subversion","tag":"reference","type":"Extension","methodName":"SVN Functions"},{"id":"book.svn","name":"SVN","description":"Subversion","tag":"book","type":"Extension","methodName":"SVN"},{"id":"intro.tcpwrap","name":"Introduction","description":"TCP Wrappers","tag":"preface","type":"General","methodName":"Introduction"},{"id":"tcpwrap.installation","name":"Installation","description":"TCP Wrappers","tag":"section","type":"General","methodName":"Installation"},{"id":"tcpwrap.setup","name":"Installing\/Configuring","description":"TCP Wrappers","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.tcpwrap-check","name":"tcpwrap_check","description":"Performs a tcpwrap check","tag":"refentry","type":"Function","methodName":"tcpwrap_check"},{"id":"ref.tcpwrap","name":"TCP Functions","description":"TCP Wrappers","tag":"reference","type":"Extension","methodName":"TCP Functions"},{"id":"book.tcpwrap","name":"TCP","description":"TCP Wrappers","tag":"book","type":"Extension","methodName":"TCP"},{"id":"intro.varnish","name":"Introduction","description":"Varnish","tag":"preface","type":"General","methodName":"Introduction"},{"id":"varnish.requirements","name":"Requirements","description":"Varnish","tag":"section","type":"General","methodName":"Requirements"},{"id":"varnish.installation","name":"Installation","description":"Varnish","tag":"section","type":"General","methodName":"Installation"},{"id":"varnish.setup","name":"Installing\/Configuring","description":"Varnish","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"varnish.constants","name":"Predefined Constants","description":"Varnish","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"varnish.example.admin","name":"Basic VarnishAdmin usage","description":"Varnish","tag":"section","type":"General","methodName":"Basic VarnishAdmin usage"},{"id":"varnish.example.stat","name":"Basic VarnishStat usage","description":"Varnish","tag":"section","type":"General","methodName":"Basic VarnishStat usage"},{"id":"varnish.example.log","name":"Basic VarnishLog usage","description":"Varnish","tag":"section","type":"General","methodName":"Basic VarnishLog usage"},{"id":"varnish.examples","name":"Examples","description":"Varnish","tag":"chapter","type":"General","methodName":"Examples"},{"id":"varnishadmin.auth","name":"VarnishAdmin::auth","description":"Authenticate on a varnish instance","tag":"refentry","type":"Function","methodName":"auth"},{"id":"varnishadmin.ban","name":"VarnishAdmin::ban","description":"Ban URLs using a VCL expression","tag":"refentry","type":"Function","methodName":"ban"},{"id":"varnishadmin.banurl","name":"VarnishAdmin::banUrl","description":"Ban an URL using a VCL expression","tag":"refentry","type":"Function","methodName":"banUrl"},{"id":"varnishadmin.clearpanic","name":"VarnishAdmin::clearPanic","description":"Clear varnish instance panic messages","tag":"refentry","type":"Function","methodName":"clearPanic"},{"id":"varnishadmin.connect","name":"VarnishAdmin::connect","description":"Connect to a varnish instance administration interface","tag":"refentry","type":"Function","methodName":"connect"},{"id":"varnishadmin.construct","name":"VarnishAdmin::__construct","description":"VarnishAdmin constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"varnishadmin.disconnect","name":"VarnishAdmin::disconnect","description":"Disconnect from a varnish instance administration interface","tag":"refentry","type":"Function","methodName":"disconnect"},{"id":"varnishadmin.getpanic","name":"VarnishAdmin::getPanic","description":"Get the last panic message on a varnish instance","tag":"refentry","type":"Function","methodName":"getPanic"},{"id":"varnishadmin.getparams","name":"VarnishAdmin::getParams","description":"Fetch current varnish instance configuration parameters","tag":"refentry","type":"Function","methodName":"getParams"},{"id":"varnishadmin.isrunning","name":"VarnishAdmin::isRunning","description":"Check if the varnish slave process is currently running","tag":"refentry","type":"Function","methodName":"isRunning"},{"id":"varnishadmin.setcompat","name":"VarnishAdmin::setCompat","description":"Set the class compat configuration param","tag":"refentry","type":"Function","methodName":"setCompat"},{"id":"varnishadmin.sethost","name":"VarnishAdmin::setHost","description":"Set the class host configuration param","tag":"refentry","type":"Function","methodName":"setHost"},{"id":"varnishadmin.setident","name":"VarnishAdmin::setIdent","description":"Set the class ident configuration param","tag":"refentry","type":"Function","methodName":"setIdent"},{"id":"varnishadmin.setparam","name":"VarnishAdmin::setParam","description":"Set configuration param on the current varnish instance","tag":"refentry","type":"Function","methodName":"setParam"},{"id":"varnishadmin.setport","name":"VarnishAdmin::setPort","description":"Set the class port configuration param","tag":"refentry","type":"Function","methodName":"setPort"},{"id":"varnishadmin.setsecret","name":"VarnishAdmin::setSecret","description":"Set the class secret configuration param","tag":"refentry","type":"Function","methodName":"setSecret"},{"id":"varnishadmin.settimeout","name":"VarnishAdmin::setTimeout","description":"Set the class timeout configuration param","tag":"refentry","type":"Function","methodName":"setTimeout"},{"id":"varnishadmin.start","name":"VarnishAdmin::start","description":"Start varnish worker process","tag":"refentry","type":"Function","methodName":"start"},{"id":"varnishadmin.stop","name":"VarnishAdmin::stop","description":"Stop varnish worker process","tag":"refentry","type":"Function","methodName":"stop"},{"id":"class.varnishadmin","name":"VarnishAdmin","description":"The VarnishAdmin class","tag":"phpdoc:classref","type":"Class","methodName":"VarnishAdmin"},{"id":"varnishstat.construct","name":"VarnishStat::__construct","description":"VarnishStat constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"varnishstat.getsnapshot","name":"VarnishStat::getSnapshot","description":"Get the current varnish instance statistics snapshot","tag":"refentry","type":"Function","methodName":"getSnapshot"},{"id":"class.varnishstat","name":"VarnishStat","description":"The VarnishStat class","tag":"phpdoc:classref","type":"Class","methodName":"VarnishStat"},{"id":"varnishlog.construct","name":"VarnishLog::__construct","description":"Varnishlog constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"varnishlog.getline","name":"VarnishLog::getLine","description":"Get next log line","tag":"refentry","type":"Function","methodName":"getLine"},{"id":"varnishlog.gettagname","name":"VarnishLog::getTagName","description":"Get the log tag string representation by its index","tag":"refentry","type":"Function","methodName":"getTagName"},{"id":"class.varnishlog","name":"VarnishLog","description":"The VarnishLog class","tag":"phpdoc:classref","type":"Class","methodName":"VarnishLog"},{"id":"book.varnish","name":"Varnish","description":"Varnish","tag":"book","type":"Extension","methodName":"Varnish"},{"id":"intro.yaz","name":"Introduction","description":"YAZ","tag":"preface","type":"General","methodName":"Introduction"},{"id":"yaz.requirements","name":"Requirements","description":"YAZ","tag":"section","type":"General","methodName":"Requirements"},{"id":"yaz.installation","name":"Installation","description":"YAZ","tag":"section","type":"General","methodName":"Installation"},{"id":"yaz.setup","name":"Installing\/Configuring","description":"YAZ","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"yaz.examples","name":"Examples","description":"YAZ","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.yaz-addinfo","name":"yaz_addinfo","description":"Returns additional error information","tag":"refentry","type":"Function","methodName":"yaz_addinfo"},{"id":"function.yaz-ccl-conf","name":"yaz_ccl_conf","description":"Configure CCL parser","tag":"refentry","type":"Function","methodName":"yaz_ccl_conf"},{"id":"function.yaz-ccl-parse","name":"yaz_ccl_parse","description":"Invoke CCL Parser","tag":"refentry","type":"Function","methodName":"yaz_ccl_parse"},{"id":"function.yaz-close","name":"yaz_close","description":"Close YAZ connection","tag":"refentry","type":"Function","methodName":"yaz_close"},{"id":"function.yaz-connect","name":"yaz_connect","description":"Prepares for a connection to a Z39.50 server","tag":"refentry","type":"Function","methodName":"yaz_connect"},{"id":"function.yaz-database","name":"yaz_database","description":"Specifies the databases within a session","tag":"refentry","type":"Function","methodName":"yaz_database"},{"id":"function.yaz-element","name":"yaz_element","description":"Specifies Element-Set Name for retrieval","tag":"refentry","type":"Function","methodName":"yaz_element"},{"id":"function.yaz-errno","name":"yaz_errno","description":"Returns error number","tag":"refentry","type":"Function","methodName":"yaz_errno"},{"id":"function.yaz-error","name":"yaz_error","description":"Returns error description","tag":"refentry","type":"Function","methodName":"yaz_error"},{"id":"function.yaz-es","name":"yaz_es","description":"Prepares for an Extended Service Request","tag":"refentry","type":"Function","methodName":"yaz_es"},{"id":"function.yaz-es-result","name":"yaz_es_result","description":"Inspects Extended Services Result","tag":"refentry","type":"Function","methodName":"yaz_es_result"},{"id":"function.yaz-get-option","name":"yaz_get_option","description":"Returns value of option for connection","tag":"refentry","type":"Function","methodName":"yaz_get_option"},{"id":"function.yaz-hits","name":"yaz_hits","description":"Returns number of hits for last search","tag":"refentry","type":"Function","methodName":"yaz_hits"},{"id":"function.yaz-itemorder","name":"yaz_itemorder","description":"Prepares for Z39.50 Item Order with an ILL-Request package","tag":"refentry","type":"Function","methodName":"yaz_itemorder"},{"id":"function.yaz-present","name":"yaz_present","description":"Prepares for retrieval (Z39.50 present)","tag":"refentry","type":"Function","methodName":"yaz_present"},{"id":"function.yaz-range","name":"yaz_range","description":"Specifies a range of records to retrieve","tag":"refentry","type":"Function","methodName":"yaz_range"},{"id":"function.yaz-record","name":"yaz_record","description":"Returns a record","tag":"refentry","type":"Function","methodName":"yaz_record"},{"id":"function.yaz-scan","name":"yaz_scan","description":"Prepares for a scan","tag":"refentry","type":"Function","methodName":"yaz_scan"},{"id":"function.yaz-scan-result","name":"yaz_scan_result","description":"Returns Scan Response result","tag":"refentry","type":"Function","methodName":"yaz_scan_result"},{"id":"function.yaz-schema","name":"yaz_schema","description":"Specifies schema for retrieval","tag":"refentry","type":"Function","methodName":"yaz_schema"},{"id":"function.yaz-search","name":"yaz_search","description":"Prepares for a search","tag":"refentry","type":"Function","methodName":"yaz_search"},{"id":"function.yaz-set-option","name":"yaz_set_option","description":"Sets one or more options for connection","tag":"refentry","type":"Function","methodName":"yaz_set_option"},{"id":"function.yaz-sort","name":"yaz_sort","description":"Sets sorting criteria","tag":"refentry","type":"Function","methodName":"yaz_sort"},{"id":"function.yaz-syntax","name":"yaz_syntax","description":"Specifies the preferred record syntax for retrieval","tag":"refentry","type":"Function","methodName":"yaz_syntax"},{"id":"function.yaz-wait","name":"yaz_wait","description":"Wait for Z39.50 requests to complete","tag":"refentry","type":"Function","methodName":"yaz_wait"},{"id":"ref.yaz","name":"YAZ Functions","description":"YAZ","tag":"reference","type":"Extension","methodName":"YAZ Functions"},{"id":"book.yaz","name":"YAZ","description":"Other Services","tag":"book","type":"Extension","methodName":"YAZ"},{"id":"intro.zmq","name":"Introduction","description":"ZMQ","tag":"preface","type":"General","methodName":"Introduction"},{"id":"zmq.requirements","name":"Requirements","description":"ZMQ","tag":"section","type":"General","methodName":"Requirements"},{"id":"zmq.installation","name":"Installation","description":"ZMQ","tag":"section","type":"General","methodName":"Installation"},{"id":"zmq.setup","name":"Installing\/Configuring","description":"ZMQ","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"zmq.construct","name":"ZMQ::__construct","description":"ZMQ constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.zmq","name":"ZMQ","description":"The ZMQ class","tag":"phpdoc:classref","type":"Class","methodName":"ZMQ"},{"id":"zmqcontext.construct","name":"ZMQContext::__construct","description":"Construct a new ZMQContext object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"zmqcontext.getopt","name":"ZMQContext::getOpt","description":"Get context option","tag":"refentry","type":"Function","methodName":"getOpt"},{"id":"zmqcontext.getsocket","name":"ZMQContext::getSocket","description":"Create a new socket","tag":"refentry","type":"Function","methodName":"getSocket"},{"id":"zmqcontext.ispersistent","name":"ZMQContext::isPersistent","description":"Whether the context is persistent","tag":"refentry","type":"Function","methodName":"isPersistent"},{"id":"zmqcontext.setopt","name":"ZMQContext::setOpt","description":"Set a socket option","tag":"refentry","type":"Function","methodName":"setOpt"},{"id":"class.zmqcontext","name":"ZMQContext","description":"The ZMQContext class","tag":"phpdoc:classref","type":"Class","methodName":"ZMQContext"},{"id":"zmqsocket.bind","name":"ZMQSocket::bind","description":"Bind the socket","tag":"refentry","type":"Function","methodName":"bind"},{"id":"zmqsocket.connect","name":"ZMQSocket::connect","description":"Connect the socket","tag":"refentry","type":"Function","methodName":"connect"},{"id":"zmqsocket.construct","name":"ZMQSocket::__construct","description":"Construct a new ZMQSocket","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"zmqsocket.disconnect","name":"ZMQSocket::disconnect","description":"Disconnect a socket","tag":"refentry","type":"Function","methodName":"disconnect"},{"id":"zmqsocket.getendpoints","name":"ZMQSocket::getEndpoints","description":"Get list of endpoints","tag":"refentry","type":"Function","methodName":"getEndpoints"},{"id":"zmqsocket.getpersistentid","name":"ZMQSocket::getPersistentId","description":"Get the persistent id","tag":"refentry","type":"Function","methodName":"getPersistentId"},{"id":"zmqsocket.getsockettype","name":"ZMQSocket::getSocketType","description":"Get the socket type","tag":"refentry","type":"Function","methodName":"getSocketType"},{"id":"zmqsocket.getsockopt","name":"ZMQSocket::getSockOpt","description":"Get socket option","tag":"refentry","type":"Function","methodName":"getSockOpt"},{"id":"zmqsocket.ispersistent","name":"ZMQSocket::isPersistent","description":"Whether the socket is persistent","tag":"refentry","type":"Function","methodName":"isPersistent"},{"id":"zmqsocket.recv","name":"ZMQSocket::recv","description":"Receives a message","tag":"refentry","type":"Function","methodName":"recv"},{"id":"zmqsocket.recvmulti","name":"ZMQSocket::recvMulti","description":"Receives a multipart message","tag":"refentry","type":"Function","methodName":"recvMulti"},{"id":"zmqsocket.send","name":"ZMQSocket::send","description":"Sends a message","tag":"refentry","type":"Function","methodName":"send"},{"id":"zmqsocket.sendmulti","name":"ZMQSocket::sendmulti","description":"Sends a multipart message","tag":"refentry","type":"Function","methodName":"sendmulti"},{"id":"zmqsocket.setsockopt","name":"ZMQSocket::setSockOpt","description":"Set a socket option","tag":"refentry","type":"Function","methodName":"setSockOpt"},{"id":"zmqsocket.unbind","name":"ZMQSocket::unbind","description":"Unbind the socket","tag":"refentry","type":"Function","methodName":"unbind"},{"id":"class.zmqsocket","name":"ZMQSocket","description":"The ZMQSocket class","tag":"phpdoc:classref","type":"Class","methodName":"ZMQSocket"},{"id":"zmqpoll.add","name":"ZMQPoll::add","description":"Add item to the poll set","tag":"refentry","type":"Function","methodName":"add"},{"id":"zmqpoll.clear","name":"ZMQPoll::clear","description":"Clear the poll set","tag":"refentry","type":"Function","methodName":"clear"},{"id":"zmqpoll.count","name":"ZMQPoll::count","description":"Count items in the poll set","tag":"refentry","type":"Function","methodName":"count"},{"id":"zmqpoll.getlasterrors","name":"ZMQPoll::getLastErrors","description":"Get poll errors","tag":"refentry","type":"Function","methodName":"getLastErrors"},{"id":"zmqpoll.poll","name":"ZMQPoll::poll","description":"Poll the items","tag":"refentry","type":"Function","methodName":"poll"},{"id":"zmqpoll.remove","name":"ZMQPoll::remove","description":"Remove item from poll set","tag":"refentry","type":"Function","methodName":"remove"},{"id":"class.zmqpoll","name":"ZMQPoll","description":"The ZMQPoll class","tag":"phpdoc:classref","type":"Class","methodName":"ZMQPoll"},{"id":"zmqdevice.construct","name":"ZMQDevice::__construct","description":"Construct a new device","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"zmqdevice.getidletimeout","name":"ZMQDevice::getIdleTimeout","description":"Get the idle timeout","tag":"refentry","type":"Function","methodName":"getIdleTimeout"},{"id":"zmqdevice.gettimertimeout","name":"ZMQDevice::getTimerTimeout","description":"Get the timer timeout","tag":"refentry","type":"Function","methodName":"getTimerTimeout"},{"id":"zmqdevice.run","name":"ZMQDevice::run","description":"Run the new device","tag":"refentry","type":"Function","methodName":"run"},{"id":"zmqdevice.setidlecallback","name":"ZMQDevice::setIdleCallback","description":"Set the idle callback function","tag":"refentry","type":"Function","methodName":"setIdleCallback"},{"id":"zmqdevice.setidletimeout","name":"ZMQDevice::setIdleTimeout","description":"Set the idle timeout","tag":"refentry","type":"Function","methodName":"setIdleTimeout"},{"id":"zmqdevice.settimercallback","name":"ZMQDevice::setTimerCallback","description":"Set the timer callback function","tag":"refentry","type":"Function","methodName":"setTimerCallback"},{"id":"zmqdevice.settimertimeout","name":"ZMQDevice::setTimerTimeout","description":"Set the timer timeout","tag":"refentry","type":"Function","methodName":"setTimerTimeout"},{"id":"class.zmqdevice","name":"ZMQDevice","description":"The ZMQDevice class","tag":"phpdoc:classref","type":"Class","methodName":"ZMQDevice"},{"id":"book.zmq","name":"0MQ messaging","description":"ZMQ","tag":"book","type":"Extension","methodName":"0MQ messaging"},{"id":"intro.zookeeper","name":"Introduction","description":"ZooKeeper","tag":"preface","type":"General","methodName":"Introduction"},{"id":"zookeeper.requirements","name":"Requirements","description":"ZooKeeper","tag":"section","type":"General","methodName":"Requirements"},{"id":"zookeeper.installation","name":"Installation","description":"ZooKeeper","tag":"section","type":"General","methodName":"Installation"},{"id":"zookeeper.configuration","name":"Runtime Configuration","description":"ZooKeeper","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"zookeeper.setup","name":"Installing\/Configuring","description":"ZooKeeper","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.zookeeper-dispatch","name":"zookeeper_dispatch","description":"Calls callbacks for pending operations","tag":"refentry","type":"Function","methodName":"zookeeper_dispatch"},{"id":"ref.zookeeper","name":"ZooKeeper Functions","description":"ZooKeeper","tag":"reference","type":"Extension","methodName":"ZooKeeper Functions"},{"id":"zookeeper.addauth","name":"Zookeeper::addAuth","description":"Specify application credentials","tag":"refentry","type":"Function","methodName":"addAuth"},{"id":"zookeeper.close","name":"Zookeeper::close","description":"Close the zookeeper handle and free up any resources","tag":"refentry","type":"Function","methodName":"close"},{"id":"zookeeper.connect","name":"Zookeeper::connect","description":"Create a handle to used communicate with zookeeper","tag":"refentry","type":"Function","methodName":"connect"},{"id":"zookeeper.construct","name":"Zookeeper::__construct","description":"Create a handle to used communicate with zookeeper","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"zookeeper.create","name":"Zookeeper::create","description":"Create a node synchronously","tag":"refentry","type":"Function","methodName":"create"},{"id":"zookeeper.delete","name":"Zookeeper::delete","description":"Delete a node in zookeeper synchronously","tag":"refentry","type":"Function","methodName":"delete"},{"id":"zookeeper.exists","name":"Zookeeper::exists","description":"Checks the existence of a node in zookeeper synchronously","tag":"refentry","type":"Function","methodName":"exists"},{"id":"zookeeper.get","name":"Zookeeper::get","description":"Gets the data associated with a node synchronously","tag":"refentry","type":"Function","methodName":"get"},{"id":"zookeeper.getacl","name":"Zookeeper::getAcl","description":"Gets the acl associated with a node synchronously","tag":"refentry","type":"Function","methodName":"getAcl"},{"id":"zookeeper.getchildren","name":"Zookeeper::getChildren","description":"Lists the children of a node synchronously","tag":"refentry","type":"Function","methodName":"getChildren"},{"id":"zookeeper.getclientid","name":"Zookeeper::getClientId","description":"Return the client session id, only valid if the connections is currently connected (ie. last watcher state is ZOO_CONNECTED_STATE)","tag":"refentry","type":"Function","methodName":"getClientId"},{"id":"zookeeper.getconfig","name":"Zookeeper::getConfig","description":"Get instance of ZookeeperConfig","tag":"refentry","type":"Function","methodName":"getConfig"},{"id":"zookeeper.getrecvtimeout","name":"Zookeeper::getRecvTimeout","description":"Return the timeout for this session, only valid if the connections is currently connected (ie. last watcher state is ZOO_CONNECTED_STATE). This value may change after a server re-connect","tag":"refentry","type":"Function","methodName":"getRecvTimeout"},{"id":"zookeeper.getstate","name":"Zookeeper::getState","description":"Get the state of the zookeeper connection","tag":"refentry","type":"Function","methodName":"getState"},{"id":"zookeeper.isrecoverable","name":"Zookeeper::isRecoverable","description":"Checks if the current zookeeper connection state can be recovered","tag":"refentry","type":"Function","methodName":"isRecoverable"},{"id":"zookeeper.set","name":"Zookeeper::set","description":"Sets the data associated with a node","tag":"refentry","type":"Function","methodName":"set"},{"id":"zookeeper.setacl","name":"Zookeeper::setAcl","description":"Sets the acl associated with a node synchronously","tag":"refentry","type":"Function","methodName":"setAcl"},{"id":"zookeeper.setdebuglevel","name":"Zookeeper::setDebugLevel","description":"Sets the debugging level for the library","tag":"refentry","type":"Function","methodName":"setDebugLevel"},{"id":"zookeeper.setdeterministicconnorder","name":"Zookeeper::setDeterministicConnOrder","description":"Enable\/disable quorum endpoint order randomization","tag":"refentry","type":"Function","methodName":"setDeterministicConnOrder"},{"id":"zookeeper.setlogstream","name":"Zookeeper::setLogStream","description":"Sets the stream to be used by the library for logging","tag":"refentry","type":"Function","methodName":"setLogStream"},{"id":"zookeeper.setwatcher","name":"Zookeeper::setWatcher","description":"Set a watcher function","tag":"refentry","type":"Function","methodName":"setWatcher"},{"id":"class.zookeeper","name":"Zookeeper","description":"The Zookeeper class","tag":"phpdoc:classref","type":"Class","methodName":"Zookeeper"},{"id":"zookeeperconfig.add","name":"ZookeeperConfig::add","description":"Add servers to the ensemble","tag":"refentry","type":"Function","methodName":"add"},{"id":"zookeeperconfig.get","name":"ZookeeperConfig::get","description":"Gets the last committed configuration of the ZooKeeper cluster as it is known to the server to which the client is connected, synchronously","tag":"refentry","type":"Function","methodName":"get"},{"id":"zookeeperconfig.remove","name":"ZookeeperConfig::remove","description":"Remove servers from the ensemble","tag":"refentry","type":"Function","methodName":"remove"},{"id":"zookeeperconfig.set","name":"ZookeeperConfig::set","description":"Change ZK cluster ensemble membership and roles of ensemble peers","tag":"refentry","type":"Function","methodName":"set"},{"id":"class.zookeeperconfig","name":"ZookeeperConfig","description":"The ZookeeperConfig class","tag":"phpdoc:classref","type":"Class","methodName":"ZookeeperConfig"},{"id":"class.zookeeperexception","name":"ZookeeperException","description":"The ZookeeperException class","tag":"phpdoc:classref","type":"Class","methodName":"ZookeeperException"},{"id":"class.zookeeperauthenticationexception","name":"ZookeeperAuthenticationException","description":"The ZookeeperAuthenticationException class","tag":"phpdoc:classref","type":"Class","methodName":"ZookeeperAuthenticationException"},{"id":"class.zookeeperconnectionexception","name":"ZookeeperConnectionException","description":"The ZookeeperConnectionException class","tag":"phpdoc:classref","type":"Class","methodName":"ZookeeperConnectionException"},{"id":"class.zookeepermarshallingexception","name":"ZookeeperMarshallingException","description":"The ZookeeperMarshallingException class","tag":"phpdoc:classref","type":"Class","methodName":"ZookeeperMarshallingException"},{"id":"class.zookeepernonodeexception","name":"ZookeeperNoNodeException","description":"The ZookeeperNoNodeException class","tag":"phpdoc:classref","type":"Class","methodName":"ZookeeperNoNodeException"},{"id":"class.zookeeperoperationtimeoutexception","name":"ZookeeperOperationTimeoutException","description":"The ZookeeperOperationTimeoutException class","tag":"phpdoc:classref","type":"Class","methodName":"ZookeeperOperationTimeoutException"},{"id":"class.zookeepersessionexception","name":"ZookeeperSessionException","description":"The ZookeeperSessionException class","tag":"phpdoc:classref","type":"Class","methodName":"ZookeeperSessionException"},{"id":"book.zookeeper","name":"ZooKeeper","description":"ZooKeeper","tag":"book","type":"Extension","methodName":"ZooKeeper"},{"id":"refs.remote.other","name":"Other Services","description":"Function Reference","tag":"set","type":"Extension","methodName":"Other Services"},{"id":"intro.solr","name":"Introduction","description":"Apache Solr","tag":"preface","type":"General","methodName":"Introduction"},{"id":"solr.requirements","name":"Requirements","description":"Apache Solr","tag":"section","type":"General","methodName":"Requirements"},{"id":"solr.installation","name":"Installation","description":"Apache Solr","tag":"section","type":"General","methodName":"Installation"},{"id":"solr.setup","name":"Installing\/Configuring","description":"Apache Solr","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"solr.constants","name":"Predefined Constants","description":"Apache Solr","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.solr-get-version","name":"solr_get_version","description":"Returns the current version of the Apache Solr extension","tag":"refentry","type":"Function","methodName":"solr_get_version"},{"id":"ref.solr","name":"Solr Functions","description":"Apache Solr","tag":"reference","type":"Extension","methodName":"Solr Functions"},{"id":"solr.examples","name":"Examples","description":"Apache Solr","tag":"chapter","type":"General","methodName":"Examples"},{"id":"solrutils.digestxmlresponse","name":"SolrUtils::digestXmlResponse","description":"Parses an response XML string into a SolrObject","tag":"refentry","type":"Function","methodName":"digestXmlResponse"},{"id":"solrutils.escapequerychars","name":"SolrUtils::escapeQueryChars","description":"Escapes a lucene query string","tag":"refentry","type":"Function","methodName":"escapeQueryChars"},{"id":"solrutils.getsolrversion","name":"SolrUtils::getSolrVersion","description":"Returns the current version of the Solr extension","tag":"refentry","type":"Function","methodName":"getSolrVersion"},{"id":"solrutils.queryphrase","name":"SolrUtils::queryPhrase","description":"Prepares a phrase from an unescaped lucene string","tag":"refentry","type":"Function","methodName":"queryPhrase"},{"id":"class.solrutils","name":"SolrUtils","description":"The SolrUtils class","tag":"phpdoc:classref","type":"Class","methodName":"SolrUtils"},{"id":"solrinputdocument.addchilddocument","name":"SolrInputDocument::addChildDocument","description":"Adds a child document for block indexing","tag":"refentry","type":"Function","methodName":"addChildDocument"},{"id":"solrinputdocument.addchilddocuments","name":"SolrInputDocument::addChildDocuments","description":"Adds an array of child documents","tag":"refentry","type":"Function","methodName":"addChildDocuments"},{"id":"solrinputdocument.addfield","name":"SolrInputDocument::addField","description":"Adds a field to the document","tag":"refentry","type":"Function","methodName":"addField"},{"id":"solrinputdocument.clear","name":"SolrInputDocument::clear","description":"Resets the input document","tag":"refentry","type":"Function","methodName":"clear"},{"id":"solrinputdocument.clone","name":"SolrInputDocument::__clone","description":"Creates a copy of a SolrDocument","tag":"refentry","type":"Function","methodName":"__clone"},{"id":"solrinputdocument.construct","name":"SolrInputDocument::__construct","description":"Constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"solrinputdocument.deletefield","name":"SolrInputDocument::deleteField","description":"Removes a field from the document","tag":"refentry","type":"Function","methodName":"deleteField"},{"id":"solrinputdocument.destruct","name":"SolrInputDocument::__destruct","description":"Destructor","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"solrinputdocument.fieldexists","name":"SolrInputDocument::fieldExists","description":"Checks if a field exists","tag":"refentry","type":"Function","methodName":"fieldExists"},{"id":"solrinputdocument.getboost","name":"SolrInputDocument::getBoost","description":"Retrieves the current boost value for the document","tag":"refentry","type":"Function","methodName":"getBoost"},{"id":"solrinputdocument.getchilddocuments","name":"SolrInputDocument::getChildDocuments","description":"Returns an array of child documents (SolrInputDocument)","tag":"refentry","type":"Function","methodName":"getChildDocuments"},{"id":"solrinputdocument.getchilddocumentscount","name":"SolrInputDocument::getChildDocumentsCount","description":"Returns the number of child documents","tag":"refentry","type":"Function","methodName":"getChildDocumentsCount"},{"id":"solrinputdocument.getfield","name":"SolrInputDocument::getField","description":"Retrieves a field by name","tag":"refentry","type":"Function","methodName":"getField"},{"id":"solrinputdocument.getfieldboost","name":"SolrInputDocument::getFieldBoost","description":"Retrieves the boost value for a particular field","tag":"refentry","type":"Function","methodName":"getFieldBoost"},{"id":"solrinputdocument.getfieldcount","name":"SolrInputDocument::getFieldCount","description":"Returns the number of fields in the document","tag":"refentry","type":"Function","methodName":"getFieldCount"},{"id":"solrinputdocument.getfieldnames","name":"SolrInputDocument::getFieldNames","description":"Returns an array containing all the fields in the document","tag":"refentry","type":"Function","methodName":"getFieldNames"},{"id":"solrinputdocument.haschilddocuments","name":"SolrInputDocument::hasChildDocuments","description":"Returns true if the document has any child documents","tag":"refentry","type":"Function","methodName":"hasChildDocuments"},{"id":"solrinputdocument.merge","name":"SolrInputDocument::merge","description":"Merges one input document into another","tag":"refentry","type":"Function","methodName":"merge"},{"id":"solrinputdocument.reset","name":"SolrInputDocument::reset","description":"Alias of SolrInputDocument::clear","tag":"refentry","type":"Function","methodName":"reset"},{"id":"solrinputdocument.setboost","name":"SolrInputDocument::setBoost","description":"Sets the boost value for this document","tag":"refentry","type":"Function","methodName":"setBoost"},{"id":"solrinputdocument.setfieldboost","name":"SolrInputDocument::setFieldBoost","description":"Sets the index-time boost value for a field","tag":"refentry","type":"Function","methodName":"setFieldBoost"},{"id":"solrinputdocument.sort","name":"SolrInputDocument::sort","description":"Sorts the fields within the document","tag":"refentry","type":"Function","methodName":"sort"},{"id":"solrinputdocument.toarray","name":"SolrInputDocument::toArray","description":"Returns an array representation of the input document","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"class.solrinputdocument","name":"SolrInputDocument","description":"The SolrInputDocument class","tag":"phpdoc:classref","type":"Class","methodName":"SolrInputDocument"},{"id":"solrdocument.addfield","name":"SolrDocument::addField","description":"Adds a field to the document","tag":"refentry","type":"Function","methodName":"addField"},{"id":"solrdocument.clear","name":"SolrDocument::clear","description":"Drops all the fields in the document","tag":"refentry","type":"Function","methodName":"clear"},{"id":"solrdocument.clone","name":"SolrDocument::__clone","description":"Creates a copy of a SolrDocument object","tag":"refentry","type":"Function","methodName":"__clone"},{"id":"solrdocument.construct","name":"SolrDocument::__construct","description":"Constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"solrdocument.current","name":"SolrDocument::current","description":"Retrieves the current field","tag":"refentry","type":"Function","methodName":"current"},{"id":"solrdocument.deletefield","name":"SolrDocument::deleteField","description":"Removes a field from the document","tag":"refentry","type":"Function","methodName":"deleteField"},{"id":"solrdocument.destruct","name":"SolrDocument::__destruct","description":"Destructor","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"solrdocument.fieldexists","name":"SolrDocument::fieldExists","description":"Checks if a field exists in the document","tag":"refentry","type":"Function","methodName":"fieldExists"},{"id":"solrdocument.get","name":"SolrDocument::__get","description":"Access the field as a property","tag":"refentry","type":"Function","methodName":"__get"},{"id":"solrdocument.getchilddocuments","name":"SolrDocument::getChildDocuments","description":"Returns an array of child documents (SolrDocument)","tag":"refentry","type":"Function","methodName":"getChildDocuments"},{"id":"solrdocument.getchilddocumentscount","name":"SolrDocument::getChildDocumentsCount","description":"Returns the number of child documents","tag":"refentry","type":"Function","methodName":"getChildDocumentsCount"},{"id":"solrdocument.getfield","name":"SolrDocument::getField","description":"Retrieves a field by name","tag":"refentry","type":"Function","methodName":"getField"},{"id":"solrdocument.getfieldcount","name":"SolrDocument::getFieldCount","description":"Returns the number of fields in this document","tag":"refentry","type":"Function","methodName":"getFieldCount"},{"id":"solrdocument.getfieldnames","name":"SolrDocument::getFieldNames","description":"Returns an array of fields names in the document","tag":"refentry","type":"Function","methodName":"getFieldNames"},{"id":"solrdocument.getinputdocument","name":"SolrDocument::getInputDocument","description":"Returns a SolrInputDocument equivalent of the object","tag":"refentry","type":"Function","methodName":"getInputDocument"},{"id":"solrdocument.haschilddocuments","name":"SolrDocument::hasChildDocuments","description":"Checks whether the document has any child documents","tag":"refentry","type":"Function","methodName":"hasChildDocuments"},{"id":"solrdocument.isset","name":"SolrDocument::__isset","description":"Checks if a field exists","tag":"refentry","type":"Function","methodName":"__isset"},{"id":"solrdocument.key","name":"SolrDocument::key","description":"Retrieves the current key","tag":"refentry","type":"Function","methodName":"key"},{"id":"solrdocument.merge","name":"SolrDocument::merge","description":"Merges source to the current SolrDocument","tag":"refentry","type":"Function","methodName":"merge"},{"id":"solrdocument.next","name":"SolrDocument::next","description":"Moves the internal pointer to the next field","tag":"refentry","type":"Function","methodName":"next"},{"id":"solrdocument.offsetexists","name":"SolrDocument::offsetExists","description":"Checks if a particular field exists","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"solrdocument.offsetget","name":"SolrDocument::offsetGet","description":"Retrieves a field","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"solrdocument.offsetset","name":"SolrDocument::offsetSet","description":"Adds a field to the document","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"solrdocument.offsetunset","name":"SolrDocument::offsetUnset","description":"Removes a field","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"solrdocument.reset","name":"SolrDocument::reset","description":"Alias of SolrDocument::clear","tag":"refentry","type":"Function","methodName":"reset"},{"id":"solrdocument.rewind","name":"SolrDocument::rewind","description":"Resets the internal pointer to the beginning","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"solrdocument.serialize","name":"SolrDocument::serialize","description":"Used for custom serialization","tag":"refentry","type":"Function","methodName":"serialize"},{"id":"solrdocument.set","name":"SolrDocument::__set","description":"Adds another field to the document","tag":"refentry","type":"Function","methodName":"__set"},{"id":"solrdocument.sort","name":"SolrDocument::sort","description":"Sorts the fields in the document","tag":"refentry","type":"Function","methodName":"sort"},{"id":"solrdocument.toarray","name":"SolrDocument::toArray","description":"Returns an array representation of the document","tag":"refentry","type":"Function","methodName":"toArray"},{"id":"solrdocument.unserialize","name":"SolrDocument::unserialize","description":"Custom serialization of SolrDocument objects","tag":"refentry","type":"Function","methodName":"unserialize"},{"id":"solrdocument.unset","name":"SolrDocument::__unset","description":"Removes a field from the document","tag":"refentry","type":"Function","methodName":"__unset"},{"id":"solrdocument.valid","name":"SolrDocument::valid","description":"Checks if the current position internally is still valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"class.solrdocument","name":"SolrDocument","description":"The SolrDocument class","tag":"phpdoc:classref","type":"Class","methodName":"SolrDocument"},{"id":"solrdocumentfield.construct","name":"SolrDocumentField::__construct","description":"Constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"solrdocumentfield.destruct","name":"SolrDocumentField::__destruct","description":"Destructor","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"class.solrdocumentfield","name":"SolrDocumentField","description":"The SolrDocumentField class","tag":"phpdoc:classref","type":"Class","methodName":"SolrDocumentField"},{"id":"solrobject.construct","name":"SolrObject::__construct","description":"Creates Solr object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"solrobject.destruct","name":"SolrObject::__destruct","description":"Destructor","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"solrobject.getpropertynames","name":"SolrObject::getPropertyNames","description":"Returns an array of all the names of the properties","tag":"refentry","type":"Function","methodName":"getPropertyNames"},{"id":"solrobject.offsetexists","name":"SolrObject::offsetExists","description":"Checks if the property exists","tag":"refentry","type":"Function","methodName":"offsetExists"},{"id":"solrobject.offsetget","name":"SolrObject::offsetGet","description":"Used to retrieve a property","tag":"refentry","type":"Function","methodName":"offsetGet"},{"id":"solrobject.offsetset","name":"SolrObject::offsetSet","description":"Sets the value for a property","tag":"refentry","type":"Function","methodName":"offsetSet"},{"id":"solrobject.offsetunset","name":"SolrObject::offsetUnset","description":"Unsets the value for the property","tag":"refentry","type":"Function","methodName":"offsetUnset"},{"id":"class.solrobject","name":"SolrObject","description":"The SolrObject class","tag":"phpdoc:classref","type":"Class","methodName":"SolrObject"},{"id":"solrclient.adddocument","name":"SolrClient::addDocument","description":"Adds a document to the index","tag":"refentry","type":"Function","methodName":"addDocument"},{"id":"solrclient.adddocuments","name":"SolrClient::addDocuments","description":"Adds a collection of SolrInputDocument instances to the index","tag":"refentry","type":"Function","methodName":"addDocuments"},{"id":"solrclient.commit","name":"SolrClient::commit","description":"Finalizes all add\/deletes made to the index","tag":"refentry","type":"Function","methodName":"commit"},{"id":"solrclient.construct","name":"SolrClient::__construct","description":"Constructor for the SolrClient object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"solrclient.deletebyid","name":"SolrClient::deleteById","description":"Delete by Id","tag":"refentry","type":"Function","methodName":"deleteById"},{"id":"solrclient.deletebyids","name":"SolrClient::deleteByIds","description":"Deletes by Ids","tag":"refentry","type":"Function","methodName":"deleteByIds"},{"id":"solrclient.deletebyqueries","name":"SolrClient::deleteByQueries","description":"Removes all documents matching any of the queries","tag":"refentry","type":"Function","methodName":"deleteByQueries"},{"id":"solrclient.deletebyquery","name":"SolrClient::deleteByQuery","description":"Deletes all documents matching the given query","tag":"refentry","type":"Function","methodName":"deleteByQuery"},{"id":"solrclient.destruct","name":"SolrClient::__destruct","description":"Destructor for SolrClient","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"solrclient.getbyid","name":"SolrClient::getById","description":"Get Document By Id. Utilizes Solr Realtime Get (RTG)","tag":"refentry","type":"Function","methodName":"getById"},{"id":"solrclient.getbyids","name":"SolrClient::getByIds","description":"Get Documents by their Ids. Utilizes Solr Realtime Get (RTG)","tag":"refentry","type":"Function","methodName":"getByIds"},{"id":"solrclient.getdebug","name":"SolrClient::getDebug","description":"Returns the debug data for the last connection attempt","tag":"refentry","type":"Function","methodName":"getDebug"},{"id":"solrclient.getoptions","name":"SolrClient::getOptions","description":"Returns the client options set internally","tag":"refentry","type":"Function","methodName":"getOptions"},{"id":"solrclient.optimize","name":"SolrClient::optimize","description":"Defragments the index","tag":"refentry","type":"Function","methodName":"optimize"},{"id":"solrclient.ping","name":"SolrClient::ping","description":"Checks if Solr server is still up","tag":"refentry","type":"Function","methodName":"ping"},{"id":"solrclient.query","name":"SolrClient::query","description":"Sends a query to the server","tag":"refentry","type":"Function","methodName":"query"},{"id":"solrclient.request","name":"SolrClient::request","description":"Sends a raw update request","tag":"refentry","type":"Function","methodName":"request"},{"id":"solrclient.rollback","name":"SolrClient::rollback","description":"Rollbacks all add\/deletes made to the index since the last commit","tag":"refentry","type":"Function","methodName":"rollback"},{"id":"solrclient.setresponsewriter","name":"SolrClient::setResponseWriter","description":"Sets the response writer used to prepare the response from Solr","tag":"refentry","type":"Function","methodName":"setResponseWriter"},{"id":"solrclient.setservlet","name":"SolrClient::setServlet","description":"Changes the specified servlet type to a new value","tag":"refentry","type":"Function","methodName":"setServlet"},{"id":"solrclient.system","name":"SolrClient::system","description":"Retrieve Solr Server information","tag":"refentry","type":"Function","methodName":"system"},{"id":"solrclient.threads","name":"SolrClient::threads","description":"Checks the threads status","tag":"refentry","type":"Function","methodName":"threads"},{"id":"class.solrclient","name":"SolrClient","description":"The SolrClient class","tag":"phpdoc:classref","type":"Class","methodName":"SolrClient"},{"id":"solrresponse.getdigestedresponse","name":"SolrResponse::getDigestedResponse","description":"Returns the XML response as serialized PHP data","tag":"refentry","type":"Function","methodName":"getDigestedResponse"},{"id":"solrresponse.gethttpstatus","name":"SolrResponse::getHttpStatus","description":"Returns the HTTP status of the response","tag":"refentry","type":"Function","methodName":"getHttpStatus"},{"id":"solrresponse.gethttpstatusmessage","name":"SolrResponse::getHttpStatusMessage","description":"Returns more details on the HTTP status","tag":"refentry","type":"Function","methodName":"getHttpStatusMessage"},{"id":"solrresponse.getrawrequest","name":"SolrResponse::getRawRequest","description":"Returns the raw request sent to the Solr server","tag":"refentry","type":"Function","methodName":"getRawRequest"},{"id":"solrresponse.getrawrequestheaders","name":"SolrResponse::getRawRequestHeaders","description":"Returns the raw request headers sent to the Solr server","tag":"refentry","type":"Function","methodName":"getRawRequestHeaders"},{"id":"solrresponse.getrawresponse","name":"SolrResponse::getRawResponse","description":"Returns the raw response from the server","tag":"refentry","type":"Function","methodName":"getRawResponse"},{"id":"solrresponse.getrawresponseheaders","name":"SolrResponse::getRawResponseHeaders","description":"Returns the raw response headers from the server","tag":"refentry","type":"Function","methodName":"getRawResponseHeaders"},{"id":"solrresponse.getrequesturl","name":"SolrResponse::getRequestUrl","description":"Returns the full URL the request was sent to","tag":"refentry","type":"Function","methodName":"getRequestUrl"},{"id":"solrresponse.getresponse","name":"SolrResponse::getResponse","description":"Returns a SolrObject representing the XML response from the server","tag":"refentry","type":"Function","methodName":"getResponse"},{"id":"solrresponse.setparsemode","name":"SolrResponse::setParseMode","description":"Sets the parse mode","tag":"refentry","type":"Function","methodName":"setParseMode"},{"id":"solrresponse.success","name":"SolrResponse::success","description":"Was the request a success","tag":"refentry","type":"Function","methodName":"success"},{"id":"class.solrresponse","name":"SolrResponse","description":"The SolrResponse class","tag":"phpdoc:classref","type":"Class","methodName":"SolrResponse"},{"id":"solrqueryresponse.construct","name":"SolrQueryResponse::__construct","description":"Constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"solrqueryresponse.destruct","name":"SolrQueryResponse::__destruct","description":"Destructor","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"class.solrqueryresponse","name":"SolrQueryResponse","description":"The SolrQueryResponse class","tag":"phpdoc:classref","type":"Class","methodName":"SolrQueryResponse"},{"id":"solrupdateresponse.construct","name":"SolrUpdateResponse::__construct","description":"Constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"solrupdateresponse.destruct","name":"SolrUpdateResponse::__destruct","description":"Destructor","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"class.solrupdateresponse","name":"SolrUpdateResponse","description":"The SolrUpdateResponse class","tag":"phpdoc:classref","type":"Class","methodName":"SolrUpdateResponse"},{"id":"solrpingresponse.construct","name":"SolrPingResponse::__construct","description":"Constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"solrpingresponse.destruct","name":"SolrPingResponse::__destruct","description":"Destructor","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"solrpingresponse.getresponse","name":"SolrPingResponse::getResponse","description":"Returns the response from the server","tag":"refentry","type":"Function","methodName":"getResponse"},{"id":"class.solrpingresponse","name":"SolrPingResponse","description":"The SolrPingResponse class","tag":"phpdoc:classref","type":"Class","methodName":"SolrPingResponse"},{"id":"solrgenericresponse.construct","name":"SolrGenericResponse::__construct","description":"Constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"solrgenericresponse.destruct","name":"SolrGenericResponse::__destruct","description":"Destructor","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"class.solrgenericresponse","name":"SolrGenericResponse","description":"The SolrGenericResponse class","tag":"phpdoc:classref","type":"Class","methodName":"SolrGenericResponse"},{"id":"solrparams.add","name":"SolrParams::add","description":"Alias of SolrParams::addParam","tag":"refentry","type":"Function","methodName":"add"},{"id":"solrparams.addparam","name":"SolrParams::addParam","description":"Adds a parameter to the object","tag":"refentry","type":"Function","methodName":"addParam"},{"id":"solrparams.get","name":"SolrParams::get","description":"Alias of SolrParams::getParam","tag":"refentry","type":"Function","methodName":"get"},{"id":"solrparams.getparam","name":"SolrParams::getParam","description":"Returns a parameter value","tag":"refentry","type":"Function","methodName":"getParam"},{"id":"solrparams.getparams","name":"SolrParams::getParams","description":"Returns an array of non URL-encoded parameters","tag":"refentry","type":"Function","methodName":"getParams"},{"id":"solrparams.getpreparedparams","name":"SolrParams::getPreparedParams","description":"Returns an array of URL-encoded parameters","tag":"refentry","type":"Function","methodName":"getPreparedParams"},{"id":"solrparams.serialize","name":"SolrParams::serialize","description":"Used for custom serialization","tag":"refentry","type":"Function","methodName":"serialize"},{"id":"solrparams.set","name":"SolrParams::set","description":"Alias of SolrParams::setParam","tag":"refentry","type":"Function","methodName":"set"},{"id":"solrparams.setparam","name":"SolrParams::setParam","description":"Sets the parameter to the specified value","tag":"refentry","type":"Function","methodName":"setParam"},{"id":"solrparams.tostring","name":"SolrParams::toString","description":"Returns all the name-value pair parameters in the object","tag":"refentry","type":"Function","methodName":"toString"},{"id":"solrparams.unserialize","name":"SolrParams::unserialize","description":"Used for custom serialization","tag":"refentry","type":"Function","methodName":"unserialize"},{"id":"class.solrparams","name":"SolrParams","description":"The SolrParams class","tag":"phpdoc:classref","type":"Class","methodName":"SolrParams"},{"id":"solrmodifiableparams.construct","name":"SolrModifiableParams::__construct","description":"Constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"solrmodifiableparams.destruct","name":"SolrModifiableParams::__destruct","description":"Destructor","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"class.solrmodifiableparams","name":"SolrModifiableParams","description":"The SolrModifiableParams class","tag":"phpdoc:classref","type":"Class","methodName":"SolrModifiableParams"},{"id":"solrquery.addexpandfilterquery","name":"SolrQuery::addExpandFilterQuery","description":"Overrides main filter query, determines which documents to include in the main group","tag":"refentry","type":"Function","methodName":"addExpandFilterQuery"},{"id":"solrquery.addexpandsortfield","name":"SolrQuery::addExpandSortField","description":"Orders the documents within the expanded groups (expand.sort parameter)","tag":"refentry","type":"Function","methodName":"addExpandSortField"},{"id":"solrquery.addfacetdatefield","name":"SolrQuery::addFacetDateField","description":"Maps to facet.date","tag":"refentry","type":"Function","methodName":"addFacetDateField"},{"id":"solrquery.addfacetdateother","name":"SolrQuery::addFacetDateOther","description":"Adds another facet.date.other parameter","tag":"refentry","type":"Function","methodName":"addFacetDateOther"},{"id":"solrquery.addfacetfield","name":"SolrQuery::addFacetField","description":"Adds another field to the facet","tag":"refentry","type":"Function","methodName":"addFacetField"},{"id":"solrquery.addfacetquery","name":"SolrQuery::addFacetQuery","description":"Adds a facet query","tag":"refentry","type":"Function","methodName":"addFacetQuery"},{"id":"solrquery.addfield","name":"SolrQuery::addField","description":"Specifies which fields to return in the result","tag":"refentry","type":"Function","methodName":"addField"},{"id":"solrquery.addfilterquery","name":"SolrQuery::addFilterQuery","description":"Specifies a filter query","tag":"refentry","type":"Function","methodName":"addFilterQuery"},{"id":"solrquery.addgroupfield","name":"SolrQuery::addGroupField","description":"Add a field to be used to group results","tag":"refentry","type":"Function","methodName":"addGroupField"},{"id":"solrquery.addgroupfunction","name":"SolrQuery::addGroupFunction","description":"Allows grouping results based on the unique values of a function query (group.func parameter)","tag":"refentry","type":"Function","methodName":"addGroupFunction"},{"id":"solrquery.addgroupquery","name":"SolrQuery::addGroupQuery","description":"Allows grouping of documents that match the given query","tag":"refentry","type":"Function","methodName":"addGroupQuery"},{"id":"solrquery.addgroupsortfield","name":"SolrQuery::addGroupSortField","description":"Add a group sort field (group.sort parameter)","tag":"refentry","type":"Function","methodName":"addGroupSortField"},{"id":"solrquery.addhighlightfield","name":"SolrQuery::addHighlightField","description":"Maps to hl.fl","tag":"refentry","type":"Function","methodName":"addHighlightField"},{"id":"solrquery.addmltfield","name":"SolrQuery::addMltField","description":"Sets a field to use for similarity","tag":"refentry","type":"Function","methodName":"addMltField"},{"id":"solrquery.addmltqueryfield","name":"SolrQuery::addMltQueryField","description":"Maps to mlt.qf","tag":"refentry","type":"Function","methodName":"addMltQueryField"},{"id":"solrquery.addsortfield","name":"SolrQuery::addSortField","description":"Used to control how the results should be sorted","tag":"refentry","type":"Function","methodName":"addSortField"},{"id":"solrquery.addstatsfacet","name":"SolrQuery::addStatsFacet","description":"Requests a return of sub results for values within the given facet","tag":"refentry","type":"Function","methodName":"addStatsFacet"},{"id":"solrquery.addstatsfield","name":"SolrQuery::addStatsField","description":"Maps to stats.field parameter","tag":"refentry","type":"Function","methodName":"addStatsField"},{"id":"solrquery.collapse","name":"SolrQuery::collapse","description":"Collapses the result set to a single document per group","tag":"refentry","type":"Function","methodName":"collapse"},{"id":"solrquery.construct","name":"SolrQuery::__construct","description":"Constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"solrquery.destruct","name":"SolrQuery::__destruct","description":"Destructor","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"solrquery.getexpand","name":"SolrQuery::getExpand","description":"Returns true if group expanding is enabled","tag":"refentry","type":"Function","methodName":"getExpand"},{"id":"solrquery.getexpandfilterqueries","name":"SolrQuery::getExpandFilterQueries","description":"Returns the expand filter queries","tag":"refentry","type":"Function","methodName":"getExpandFilterQueries"},{"id":"solrquery.getexpandquery","name":"SolrQuery::getExpandQuery","description":"Returns the expand query expand.q parameter","tag":"refentry","type":"Function","methodName":"getExpandQuery"},{"id":"solrquery.getexpandrows","name":"SolrQuery::getExpandRows","description":"Returns The number of rows to display in each group (expand.rows)","tag":"refentry","type":"Function","methodName":"getExpandRows"},{"id":"solrquery.getexpandsortfields","name":"SolrQuery::getExpandSortFields","description":"Returns an array of fields","tag":"refentry","type":"Function","methodName":"getExpandSortFields"},{"id":"solrquery.getfacet","name":"SolrQuery::getFacet","description":"Returns the value of the facet parameter","tag":"refentry","type":"Function","methodName":"getFacet"},{"id":"solrquery.getfacetdateend","name":"SolrQuery::getFacetDateEnd","description":"Returns the value for the facet.date.end parameter","tag":"refentry","type":"Function","methodName":"getFacetDateEnd"},{"id":"solrquery.getfacetdatefields","name":"SolrQuery::getFacetDateFields","description":"Returns all the facet.date fields","tag":"refentry","type":"Function","methodName":"getFacetDateFields"},{"id":"solrquery.getfacetdategap","name":"SolrQuery::getFacetDateGap","description":"Returns the value of the facet.date.gap parameter","tag":"refentry","type":"Function","methodName":"getFacetDateGap"},{"id":"solrquery.getfacetdatehardend","name":"SolrQuery::getFacetDateHardEnd","description":"Returns the value of the facet.date.hardend parameter","tag":"refentry","type":"Function","methodName":"getFacetDateHardEnd"},{"id":"solrquery.getfacetdateother","name":"SolrQuery::getFacetDateOther","description":"Returns the value for the facet.date.other parameter","tag":"refentry","type":"Function","methodName":"getFacetDateOther"},{"id":"solrquery.getfacetdatestart","name":"SolrQuery::getFacetDateStart","description":"Returns the lower bound for the first date range for all date faceting on this field","tag":"refentry","type":"Function","methodName":"getFacetDateStart"},{"id":"solrquery.getfacetfields","name":"SolrQuery::getFacetFields","description":"Returns all the facet fields","tag":"refentry","type":"Function","methodName":"getFacetFields"},{"id":"solrquery.getfacetlimit","name":"SolrQuery::getFacetLimit","description":"Returns the maximum number of constraint counts that should be returned for the facet fields","tag":"refentry","type":"Function","methodName":"getFacetLimit"},{"id":"solrquery.getfacetmethod","name":"SolrQuery::getFacetMethod","description":"Returns the value of the facet.method parameter","tag":"refentry","type":"Function","methodName":"getFacetMethod"},{"id":"solrquery.getfacetmincount","name":"SolrQuery::getFacetMinCount","description":"Returns the minimum counts for facet fields should be included in the response","tag":"refentry","type":"Function","methodName":"getFacetMinCount"},{"id":"solrquery.getfacetmissing","name":"SolrQuery::getFacetMissing","description":"Returns the current state of the facet.missing parameter","tag":"refentry","type":"Function","methodName":"getFacetMissing"},{"id":"solrquery.getfacetoffset","name":"SolrQuery::getFacetOffset","description":"Returns an offset into the list of constraints to be used for pagination","tag":"refentry","type":"Function","methodName":"getFacetOffset"},{"id":"solrquery.getfacetprefix","name":"SolrQuery::getFacetPrefix","description":"Returns the facet prefix","tag":"refentry","type":"Function","methodName":"getFacetPrefix"},{"id":"solrquery.getfacetqueries","name":"SolrQuery::getFacetQueries","description":"Returns all the facet queries","tag":"refentry","type":"Function","methodName":"getFacetQueries"},{"id":"solrquery.getfacetsort","name":"SolrQuery::getFacetSort","description":"Returns the facet sort type","tag":"refentry","type":"Function","methodName":"getFacetSort"},{"id":"solrquery.getfields","name":"SolrQuery::getFields","description":"Returns the list of fields that will be returned in the response","tag":"refentry","type":"Function","methodName":"getFields"},{"id":"solrquery.getfilterqueries","name":"SolrQuery::getFilterQueries","description":"Returns an array of filter queries","tag":"refentry","type":"Function","methodName":"getFilterQueries"},{"id":"solrquery.getgroup","name":"SolrQuery::getGroup","description":"Returns true if grouping is enabled","tag":"refentry","type":"Function","methodName":"getGroup"},{"id":"solrquery.getgroupcachepercent","name":"SolrQuery::getGroupCachePercent","description":"Returns group cache percent value","tag":"refentry","type":"Function","methodName":"getGroupCachePercent"},{"id":"solrquery.getgroupfacet","name":"SolrQuery::getGroupFacet","description":"Returns the group.facet parameter value","tag":"refentry","type":"Function","methodName":"getGroupFacet"},{"id":"solrquery.getgroupfields","name":"SolrQuery::getGroupFields","description":"Returns group fields (group.field parameter values)","tag":"refentry","type":"Function","methodName":"getGroupFields"},{"id":"solrquery.getgroupformat","name":"SolrQuery::getGroupFormat","description":"Returns the group.format value","tag":"refentry","type":"Function","methodName":"getGroupFormat"},{"id":"solrquery.getgroupfunctions","name":"SolrQuery::getGroupFunctions","description":"Returns group functions (group.func parameter values)","tag":"refentry","type":"Function","methodName":"getGroupFunctions"},{"id":"solrquery.getgrouplimit","name":"SolrQuery::getGroupLimit","description":"Returns the group.limit value","tag":"refentry","type":"Function","methodName":"getGroupLimit"},{"id":"solrquery.getgroupmain","name":"SolrQuery::getGroupMain","description":"Returns the group.main value","tag":"refentry","type":"Function","methodName":"getGroupMain"},{"id":"solrquery.getgroupngroups","name":"SolrQuery::getGroupNGroups","description":"Returns the group.ngroups value","tag":"refentry","type":"Function","methodName":"getGroupNGroups"},{"id":"solrquery.getgroupoffset","name":"SolrQuery::getGroupOffset","description":"Returns the group.offset value","tag":"refentry","type":"Function","methodName":"getGroupOffset"},{"id":"solrquery.getgroupqueries","name":"SolrQuery::getGroupQueries","description":"Returns all the group.query parameter values","tag":"refentry","type":"Function","methodName":"getGroupQueries"},{"id":"solrquery.getgroupsortfields","name":"SolrQuery::getGroupSortFields","description":"Returns the group.sort value","tag":"refentry","type":"Function","methodName":"getGroupSortFields"},{"id":"solrquery.getgrouptruncate","name":"SolrQuery::getGroupTruncate","description":"Returns the group.truncate value","tag":"refentry","type":"Function","methodName":"getGroupTruncate"},{"id":"solrquery.gethighlight","name":"SolrQuery::getHighlight","description":"Returns the state of the hl parameter","tag":"refentry","type":"Function","methodName":"getHighlight"},{"id":"solrquery.gethighlightalternatefield","name":"SolrQuery::getHighlightAlternateField","description":"Returns the highlight field to use as backup or default","tag":"refentry","type":"Function","methodName":"getHighlightAlternateField"},{"id":"solrquery.gethighlightfields","name":"SolrQuery::getHighlightFields","description":"Returns all the fields that Solr should generate highlighted snippets for","tag":"refentry","type":"Function","methodName":"getHighlightFields"},{"id":"solrquery.gethighlightformatter","name":"SolrQuery::getHighlightFormatter","description":"Returns the formatter for the highlighted output","tag":"refentry","type":"Function","methodName":"getHighlightFormatter"},{"id":"solrquery.gethighlightfragmenter","name":"SolrQuery::getHighlightFragmenter","description":"Returns the text snippet generator for highlighted text","tag":"refentry","type":"Function","methodName":"getHighlightFragmenter"},{"id":"solrquery.gethighlightfragsize","name":"SolrQuery::getHighlightFragsize","description":"Returns the number of characters of fragments to consider for highlighting","tag":"refentry","type":"Function","methodName":"getHighlightFragsize"},{"id":"solrquery.gethighlighthighlightmultiterm","name":"SolrQuery::getHighlightHighlightMultiTerm","description":"Returns whether or not to enable highlighting for range\/wildcard\/fuzzy\/prefix queries","tag":"refentry","type":"Function","methodName":"getHighlightHighlightMultiTerm"},{"id":"solrquery.gethighlightmaxalternatefieldlength","name":"SolrQuery::getHighlightMaxAlternateFieldLength","description":"Returns the maximum number of characters of the field to return","tag":"refentry","type":"Function","methodName":"getHighlightMaxAlternateFieldLength"},{"id":"solrquery.gethighlightmaxanalyzedchars","name":"SolrQuery::getHighlightMaxAnalyzedChars","description":"Returns the maximum number of characters into a document to look for suitable snippets","tag":"refentry","type":"Function","methodName":"getHighlightMaxAnalyzedChars"},{"id":"solrquery.gethighlightmergecontiguous","name":"SolrQuery::getHighlightMergeContiguous","description":"Returns whether or not the collapse contiguous fragments into a single fragment","tag":"refentry","type":"Function","methodName":"getHighlightMergeContiguous"},{"id":"solrquery.gethighlightquery","name":"SolrQuery::getHighlightQuery","description":"return the highlightquery (hl.q)","tag":"refentry","type":"Function","methodName":"getHighlightQuery"},{"id":"solrquery.gethighlightregexmaxanalyzedchars","name":"SolrQuery::getHighlightRegexMaxAnalyzedChars","description":"Returns the maximum number of characters from a field when using the regex fragmenter","tag":"refentry","type":"Function","methodName":"getHighlightRegexMaxAnalyzedChars"},{"id":"solrquery.gethighlightregexpattern","name":"SolrQuery::getHighlightRegexPattern","description":"Returns the regular expression for fragmenting","tag":"refentry","type":"Function","methodName":"getHighlightRegexPattern"},{"id":"solrquery.gethighlightregexslop","name":"SolrQuery::getHighlightRegexSlop","description":"Returns the deviation factor from the ideal fragment size","tag":"refentry","type":"Function","methodName":"getHighlightRegexSlop"},{"id":"solrquery.gethighlightrequirefieldmatch","name":"SolrQuery::getHighlightRequireFieldMatch","description":"Returns if a field will only be highlighted if the query matched in this particular field","tag":"refentry","type":"Function","methodName":"getHighlightRequireFieldMatch"},{"id":"solrquery.gethighlightsimplepost","name":"SolrQuery::getHighlightSimplePost","description":"Returns the text which appears after a highlighted term","tag":"refentry","type":"Function","methodName":"getHighlightSimplePost"},{"id":"solrquery.gethighlightsimplepre","name":"SolrQuery::getHighlightSimplePre","description":"Returns the text which appears before a highlighted term","tag":"refentry","type":"Function","methodName":"getHighlightSimplePre"},{"id":"solrquery.gethighlightsnippets","name":"SolrQuery::getHighlightSnippets","description":"Returns the maximum number of highlighted snippets to generate per field","tag":"refentry","type":"Function","methodName":"getHighlightSnippets"},{"id":"solrquery.gethighlightusephrasehighlighter","name":"SolrQuery::getHighlightUsePhraseHighlighter","description":"Returns the state of the hl.usePhraseHighlighter parameter","tag":"refentry","type":"Function","methodName":"getHighlightUsePhraseHighlighter"},{"id":"solrquery.getmlt","name":"SolrQuery::getMlt","description":"Returns whether or not MoreLikeThis results should be enabled","tag":"refentry","type":"Function","methodName":"getMlt"},{"id":"solrquery.getmltboost","name":"SolrQuery::getMltBoost","description":"Returns whether or not the query will be boosted by the interesting term relevance","tag":"refentry","type":"Function","methodName":"getMltBoost"},{"id":"solrquery.getmltcount","name":"SolrQuery::getMltCount","description":"Returns the number of similar documents to return for each result","tag":"refentry","type":"Function","methodName":"getMltCount"},{"id":"solrquery.getmltfields","name":"SolrQuery::getMltFields","description":"Returns all the fields to use for similarity","tag":"refentry","type":"Function","methodName":"getMltFields"},{"id":"solrquery.getmltmaxnumqueryterms","name":"SolrQuery::getMltMaxNumQueryTerms","description":"Returns the maximum number of query terms that will be included in any generated query","tag":"refentry","type":"Function","methodName":"getMltMaxNumQueryTerms"},{"id":"solrquery.getmltmaxnumtokens","name":"SolrQuery::getMltMaxNumTokens","description":"Returns the maximum number of tokens to parse in each document field that is not stored with TermVector support","tag":"refentry","type":"Function","methodName":"getMltMaxNumTokens"},{"id":"solrquery.getmltmaxwordlength","name":"SolrQuery::getMltMaxWordLength","description":"Returns the maximum word length above which words will be ignored","tag":"refentry","type":"Function","methodName":"getMltMaxWordLength"},{"id":"solrquery.getmltmindocfrequency","name":"SolrQuery::getMltMinDocFrequency","description":"Returns the treshold frequency at which words will be ignored which do not occur in at least this many docs","tag":"refentry","type":"Function","methodName":"getMltMinDocFrequency"},{"id":"solrquery.getmltmintermfrequency","name":"SolrQuery::getMltMinTermFrequency","description":"Returns the frequency below which terms will be ignored in the source document","tag":"refentry","type":"Function","methodName":"getMltMinTermFrequency"},{"id":"solrquery.getmltminwordlength","name":"SolrQuery::getMltMinWordLength","description":"Returns the minimum word length below which words will be ignored","tag":"refentry","type":"Function","methodName":"getMltMinWordLength"},{"id":"solrquery.getmltqueryfields","name":"SolrQuery::getMltQueryFields","description":"Returns the query fields and their boosts","tag":"refentry","type":"Function","methodName":"getMltQueryFields"},{"id":"solrquery.getquery","name":"SolrQuery::getQuery","description":"Returns the main query","tag":"refentry","type":"Function","methodName":"getQuery"},{"id":"solrquery.getrows","name":"SolrQuery::getRows","description":"Returns the maximum number of documents","tag":"refentry","type":"Function","methodName":"getRows"},{"id":"solrquery.getsortfields","name":"SolrQuery::getSortFields","description":"Returns all the sort fields","tag":"refentry","type":"Function","methodName":"getSortFields"},{"id":"solrquery.getstart","name":"SolrQuery::getStart","description":"Returns the offset in the complete result set","tag":"refentry","type":"Function","methodName":"getStart"},{"id":"solrquery.getstats","name":"SolrQuery::getStats","description":"Returns whether or not stats is enabled","tag":"refentry","type":"Function","methodName":"getStats"},{"id":"solrquery.getstatsfacets","name":"SolrQuery::getStatsFacets","description":"Returns all the stats facets that were set","tag":"refentry","type":"Function","methodName":"getStatsFacets"},{"id":"solrquery.getstatsfields","name":"SolrQuery::getStatsFields","description":"Returns all the statistics fields","tag":"refentry","type":"Function","methodName":"getStatsFields"},{"id":"solrquery.getterms","name":"SolrQuery::getTerms","description":"Returns whether or not the TermsComponent is enabled","tag":"refentry","type":"Function","methodName":"getTerms"},{"id":"solrquery.gettermsfield","name":"SolrQuery::getTermsField","description":"Returns the field from which the terms are retrieved","tag":"refentry","type":"Function","methodName":"getTermsField"},{"id":"solrquery.gettermsincludelowerbound","name":"SolrQuery::getTermsIncludeLowerBound","description":"Returns whether or not to include the lower bound in the result set","tag":"refentry","type":"Function","methodName":"getTermsIncludeLowerBound"},{"id":"solrquery.gettermsincludeupperbound","name":"SolrQuery::getTermsIncludeUpperBound","description":"Returns whether or not to include the upper bound term in the result set","tag":"refentry","type":"Function","methodName":"getTermsIncludeUpperBound"},{"id":"solrquery.gettermslimit","name":"SolrQuery::getTermsLimit","description":"Returns the maximum number of terms Solr should return","tag":"refentry","type":"Function","methodName":"getTermsLimit"},{"id":"solrquery.gettermslowerbound","name":"SolrQuery::getTermsLowerBound","description":"Returns the term to start at","tag":"refentry","type":"Function","methodName":"getTermsLowerBound"},{"id":"solrquery.gettermsmaxcount","name":"SolrQuery::getTermsMaxCount","description":"Returns the maximum document frequency","tag":"refentry","type":"Function","methodName":"getTermsMaxCount"},{"id":"solrquery.gettermsmincount","name":"SolrQuery::getTermsMinCount","description":"Returns the minimum document frequency to return in order to be included","tag":"refentry","type":"Function","methodName":"getTermsMinCount"},{"id":"solrquery.gettermsprefix","name":"SolrQuery::getTermsPrefix","description":"Returns the term prefix","tag":"refentry","type":"Function","methodName":"getTermsPrefix"},{"id":"solrquery.gettermsreturnraw","name":"SolrQuery::getTermsReturnRaw","description":"Whether or not to return raw characters","tag":"refentry","type":"Function","methodName":"getTermsReturnRaw"},{"id":"solrquery.gettermssort","name":"SolrQuery::getTermsSort","description":"Returns an integer indicating how terms are sorted","tag":"refentry","type":"Function","methodName":"getTermsSort"},{"id":"solrquery.gettermsupperbound","name":"SolrQuery::getTermsUpperBound","description":"Returns the term to stop at","tag":"refentry","type":"Function","methodName":"getTermsUpperBound"},{"id":"solrquery.gettimeallowed","name":"SolrQuery::getTimeAllowed","description":"Returns the time in milliseconds allowed for the query to finish","tag":"refentry","type":"Function","methodName":"getTimeAllowed"},{"id":"solrquery.removeexpandfilterquery","name":"SolrQuery::removeExpandFilterQuery","description":"Removes an expand filter query","tag":"refentry","type":"Function","methodName":"removeExpandFilterQuery"},{"id":"solrquery.removeexpandsortfield","name":"SolrQuery::removeExpandSortField","description":"Removes an expand sort field from the expand.sort parameter","tag":"refentry","type":"Function","methodName":"removeExpandSortField"},{"id":"solrquery.removefacetdatefield","name":"SolrQuery::removeFacetDateField","description":"Removes one of the facet date fields","tag":"refentry","type":"Function","methodName":"removeFacetDateField"},{"id":"solrquery.removefacetdateother","name":"SolrQuery::removeFacetDateOther","description":"Removes one of the facet.date.other parameters","tag":"refentry","type":"Function","methodName":"removeFacetDateOther"},{"id":"solrquery.removefacetfield","name":"SolrQuery::removeFacetField","description":"Removes one of the facet.date parameters","tag":"refentry","type":"Function","methodName":"removeFacetField"},{"id":"solrquery.removefacetquery","name":"SolrQuery::removeFacetQuery","description":"Removes one of the facet.query parameters","tag":"refentry","type":"Function","methodName":"removeFacetQuery"},{"id":"solrquery.removefield","name":"SolrQuery::removeField","description":"Removes a field from the list of fields","tag":"refentry","type":"Function","methodName":"removeField"},{"id":"solrquery.removefilterquery","name":"SolrQuery::removeFilterQuery","description":"Removes a filter query","tag":"refentry","type":"Function","methodName":"removeFilterQuery"},{"id":"solrquery.removehighlightfield","name":"SolrQuery::removeHighlightField","description":"Removes one of the fields used for highlighting","tag":"refentry","type":"Function","methodName":"removeHighlightField"},{"id":"solrquery.removemltfield","name":"SolrQuery::removeMltField","description":"Removes one of the moreLikeThis fields","tag":"refentry","type":"Function","methodName":"removeMltField"},{"id":"solrquery.removemltqueryfield","name":"SolrQuery::removeMltQueryField","description":"Removes one of the moreLikeThis query fields","tag":"refentry","type":"Function","methodName":"removeMltQueryField"},{"id":"solrquery.removesortfield","name":"SolrQuery::removeSortField","description":"Removes one of the sort fields","tag":"refentry","type":"Function","methodName":"removeSortField"},{"id":"solrquery.removestatsfacet","name":"SolrQuery::removeStatsFacet","description":"Removes one of the stats.facet parameters","tag":"refentry","type":"Function","methodName":"removeStatsFacet"},{"id":"solrquery.removestatsfield","name":"SolrQuery::removeStatsField","description":"Removes one of the stats.field parameters","tag":"refentry","type":"Function","methodName":"removeStatsField"},{"id":"solrquery.setechohandler","name":"SolrQuery::setEchoHandler","description":"Toggles the echoHandler parameter","tag":"refentry","type":"Function","methodName":"setEchoHandler"},{"id":"solrquery.setechoparams","name":"SolrQuery::setEchoParams","description":"Determines what kind of parameters to include in the response","tag":"refentry","type":"Function","methodName":"setEchoParams"},{"id":"solrquery.setexpand","name":"SolrQuery::setExpand","description":"Enables\/Disables the Expand Component","tag":"refentry","type":"Function","methodName":"setExpand"},{"id":"solrquery.setexpandquery","name":"SolrQuery::setExpandQuery","description":"Sets the expand.q parameter","tag":"refentry","type":"Function","methodName":"setExpandQuery"},{"id":"solrquery.setexpandrows","name":"SolrQuery::setExpandRows","description":"Sets the number of rows to display in each group (expand.rows). Server Default 5","tag":"refentry","type":"Function","methodName":"setExpandRows"},{"id":"solrquery.setexplainother","name":"SolrQuery::setExplainOther","description":"Sets the explainOther common query parameter","tag":"refentry","type":"Function","methodName":"setExplainOther"},{"id":"solrquery.setfacet","name":"SolrQuery::setFacet","description":"Maps to the facet parameter. Enables or disables facetting","tag":"refentry","type":"Function","methodName":"setFacet"},{"id":"solrquery.setfacetdateend","name":"SolrQuery::setFacetDateEnd","description":"Maps to facet.date.end","tag":"refentry","type":"Function","methodName":"setFacetDateEnd"},{"id":"solrquery.setfacetdategap","name":"SolrQuery::setFacetDateGap","description":"Maps to facet.date.gap","tag":"refentry","type":"Function","methodName":"setFacetDateGap"},{"id":"solrquery.setfacetdatehardend","name":"SolrQuery::setFacetDateHardEnd","description":"Maps to facet.date.hardend","tag":"refentry","type":"Function","methodName":"setFacetDateHardEnd"},{"id":"solrquery.setfacetdatestart","name":"SolrQuery::setFacetDateStart","description":"Maps to facet.date.start","tag":"refentry","type":"Function","methodName":"setFacetDateStart"},{"id":"solrquery.setfacetenumcachemindefaultfrequency","name":"SolrQuery::setFacetEnumCacheMinDefaultFrequency","description":"Sets the minimum document frequency used for determining term count","tag":"refentry","type":"Function","methodName":"setFacetEnumCacheMinDefaultFrequency"},{"id":"solrquery.setfacetlimit","name":"SolrQuery::setFacetLimit","description":"Maps to facet.limit","tag":"refentry","type":"Function","methodName":"setFacetLimit"},{"id":"solrquery.setfacetmethod","name":"SolrQuery::setFacetMethod","description":"Specifies the type of algorithm to use when faceting a field","tag":"refentry","type":"Function","methodName":"setFacetMethod"},{"id":"solrquery.setfacetmincount","name":"SolrQuery::setFacetMinCount","description":"Maps to facet.mincount","tag":"refentry","type":"Function","methodName":"setFacetMinCount"},{"id":"solrquery.setfacetmissing","name":"SolrQuery::setFacetMissing","description":"Maps to facet.missing","tag":"refentry","type":"Function","methodName":"setFacetMissing"},{"id":"solrquery.setfacetoffset","name":"SolrQuery::setFacetOffset","description":"Sets the offset into the list of constraints to allow for pagination","tag":"refentry","type":"Function","methodName":"setFacetOffset"},{"id":"solrquery.setfacetprefix","name":"SolrQuery::setFacetPrefix","description":"Specifies a string prefix with which to limits the terms on which to facet","tag":"refentry","type":"Function","methodName":"setFacetPrefix"},{"id":"solrquery.setfacetsort","name":"SolrQuery::setFacetSort","description":"Determines the ordering of the facet field constraints","tag":"refentry","type":"Function","methodName":"setFacetSort"},{"id":"solrquery.setgroup","name":"SolrQuery::setGroup","description":"Enable\/Disable result grouping (group parameter)","tag":"refentry","type":"Function","methodName":"setGroup"},{"id":"solrquery.setgroupcachepercent","name":"SolrQuery::setGroupCachePercent","description":"Enables caching for result grouping","tag":"refentry","type":"Function","methodName":"setGroupCachePercent"},{"id":"solrquery.setgroupfacet","name":"SolrQuery::setGroupFacet","description":"Sets group.facet parameter","tag":"refentry","type":"Function","methodName":"setGroupFacet"},{"id":"solrquery.setgroupformat","name":"SolrQuery::setGroupFormat","description":"Sets the group format, result structure (group.format parameter)","tag":"refentry","type":"Function","methodName":"setGroupFormat"},{"id":"solrquery.setgrouplimit","name":"SolrQuery::setGroupLimit","description":"Specifies the number of results to return for each group. The server default value is 1","tag":"refentry","type":"Function","methodName":"setGroupLimit"},{"id":"solrquery.setgroupmain","name":"SolrQuery::setGroupMain","description":"If true, the result of the first field grouping command is used as the main result list in the response, using group.format=simple","tag":"refentry","type":"Function","methodName":"setGroupMain"},{"id":"solrquery.setgroupngroups","name":"SolrQuery::setGroupNGroups","description":"If true, Solr includes the number of groups that have matched the query in the results","tag":"refentry","type":"Function","methodName":"setGroupNGroups"},{"id":"solrquery.setgroupoffset","name":"SolrQuery::setGroupOffset","description":"Sets the group.offset parameter","tag":"refentry","type":"Function","methodName":"setGroupOffset"},{"id":"solrquery.setgrouptruncate","name":"SolrQuery::setGroupTruncate","description":"If true, facet counts are based on the most relevant document of each group matching the query","tag":"refentry","type":"Function","methodName":"setGroupTruncate"},{"id":"solrquery.sethighlight","name":"SolrQuery::setHighlight","description":"Enables or disables highlighting","tag":"refentry","type":"Function","methodName":"setHighlight"},{"id":"solrquery.sethighlightalternatefield","name":"SolrQuery::setHighlightAlternateField","description":"Specifies the backup field to use","tag":"refentry","type":"Function","methodName":"setHighlightAlternateField"},{"id":"solrquery.sethighlightformatter","name":"SolrQuery::setHighlightFormatter","description":"Specify a formatter for the highlight output","tag":"refentry","type":"Function","methodName":"setHighlightFormatter"},{"id":"solrquery.sethighlightfragmenter","name":"SolrQuery::setHighlightFragmenter","description":"Sets a text snippet generator for highlighted text","tag":"refentry","type":"Function","methodName":"setHighlightFragmenter"},{"id":"solrquery.sethighlightfragsize","name":"SolrQuery::setHighlightFragsize","description":"The size of fragments to consider for highlighting","tag":"refentry","type":"Function","methodName":"setHighlightFragsize"},{"id":"solrquery.sethighlighthighlightmultiterm","name":"SolrQuery::setHighlightHighlightMultiTerm","description":"Use SpanScorer to highlight phrase terms","tag":"refentry","type":"Function","methodName":"setHighlightHighlightMultiTerm"},{"id":"solrquery.sethighlightmaxalternatefieldlength","name":"SolrQuery::setHighlightMaxAlternateFieldLength","description":"Sets the maximum number of characters of the field to return","tag":"refentry","type":"Function","methodName":"setHighlightMaxAlternateFieldLength"},{"id":"solrquery.sethighlightmaxanalyzedchars","name":"SolrQuery::setHighlightMaxAnalyzedChars","description":"Specifies the number of characters into a document to look for suitable snippets","tag":"refentry","type":"Function","methodName":"setHighlightMaxAnalyzedChars"},{"id":"solrquery.sethighlightmergecontiguous","name":"SolrQuery::setHighlightMergeContiguous","description":"Whether or not to collapse contiguous fragments into a single fragment","tag":"refentry","type":"Function","methodName":"setHighlightMergeContiguous"},{"id":"solrquery.sethighlightquery","name":"SolrQuery::setHighlightQuery","description":"A query designated for highlighting (hl.q)","tag":"refentry","type":"Function","methodName":"setHighlightQuery"},{"id":"solrquery.sethighlightregexmaxanalyzedchars","name":"SolrQuery::setHighlightRegexMaxAnalyzedChars","description":"Specify the maximum number of characters to analyze","tag":"refentry","type":"Function","methodName":"setHighlightRegexMaxAnalyzedChars"},{"id":"solrquery.sethighlightregexpattern","name":"SolrQuery::setHighlightRegexPattern","description":"Specify the regular expression for fragmenting","tag":"refentry","type":"Function","methodName":"setHighlightRegexPattern"},{"id":"solrquery.sethighlightregexslop","name":"SolrQuery::setHighlightRegexSlop","description":"Sets the factor by which the regex fragmenter can stray from the ideal fragment size","tag":"refentry","type":"Function","methodName":"setHighlightRegexSlop"},{"id":"solrquery.sethighlightrequirefieldmatch","name":"SolrQuery::setHighlightRequireFieldMatch","description":"Require field matching during highlighting","tag":"refentry","type":"Function","methodName":"setHighlightRequireFieldMatch"},{"id":"solrquery.sethighlightsimplepost","name":"SolrQuery::setHighlightSimplePost","description":"Sets the text which appears after a highlighted term","tag":"refentry","type":"Function","methodName":"setHighlightSimplePost"},{"id":"solrquery.sethighlightsimplepre","name":"SolrQuery::setHighlightSimplePre","description":"Sets the text which appears before a highlighted term","tag":"refentry","type":"Function","methodName":"setHighlightSimplePre"},{"id":"solrquery.sethighlightsnippets","name":"SolrQuery::setHighlightSnippets","description":"Sets the maximum number of highlighted snippets to generate per field","tag":"refentry","type":"Function","methodName":"setHighlightSnippets"},{"id":"solrquery.sethighlightusephrasehighlighter","name":"SolrQuery::setHighlightUsePhraseHighlighter","description":"Whether to highlight phrase terms only when they appear within the query phrase","tag":"refentry","type":"Function","methodName":"setHighlightUsePhraseHighlighter"},{"id":"solrquery.setmlt","name":"SolrQuery::setMlt","description":"Enables or disables moreLikeThis","tag":"refentry","type":"Function","methodName":"setMlt"},{"id":"solrquery.setmltboost","name":"SolrQuery::setMltBoost","description":"Set if the query will be boosted by the interesting term relevance","tag":"refentry","type":"Function","methodName":"setMltBoost"},{"id":"solrquery.setmltcount","name":"SolrQuery::setMltCount","description":"Set the number of similar documents to return for each result","tag":"refentry","type":"Function","methodName":"setMltCount"},{"id":"solrquery.setmltmaxnumqueryterms","name":"SolrQuery::setMltMaxNumQueryTerms","description":"Sets the maximum number of query terms included","tag":"refentry","type":"Function","methodName":"setMltMaxNumQueryTerms"},{"id":"solrquery.setmltmaxnumtokens","name":"SolrQuery::setMltMaxNumTokens","description":"Specifies the maximum number of tokens to parse","tag":"refentry","type":"Function","methodName":"setMltMaxNumTokens"},{"id":"solrquery.setmltmaxwordlength","name":"SolrQuery::setMltMaxWordLength","description":"Sets the maximum word length","tag":"refentry","type":"Function","methodName":"setMltMaxWordLength"},{"id":"solrquery.setmltmindocfrequency","name":"SolrQuery::setMltMinDocFrequency","description":"Sets the mltMinDoc frequency","tag":"refentry","type":"Function","methodName":"setMltMinDocFrequency"},{"id":"solrquery.setmltmintermfrequency","name":"SolrQuery::setMltMinTermFrequency","description":"Sets the frequency below which terms will be ignored in the source docs","tag":"refentry","type":"Function","methodName":"setMltMinTermFrequency"},{"id":"solrquery.setmltminwordlength","name":"SolrQuery::setMltMinWordLength","description":"Sets the minimum word length","tag":"refentry","type":"Function","methodName":"setMltMinWordLength"},{"id":"solrquery.setomitheader","name":"SolrQuery::setOmitHeader","description":"Exclude the header from the returned results","tag":"refentry","type":"Function","methodName":"setOmitHeader"},{"id":"solrquery.setquery","name":"SolrQuery::setQuery","description":"Sets the search query","tag":"refentry","type":"Function","methodName":"setQuery"},{"id":"solrquery.setrows","name":"SolrQuery::setRows","description":"Specifies the maximum number of rows to return in the result","tag":"refentry","type":"Function","methodName":"setRows"},{"id":"solrquery.setshowdebuginfo","name":"SolrQuery::setShowDebugInfo","description":"Flag to show debug information","tag":"refentry","type":"Function","methodName":"setShowDebugInfo"},{"id":"solrquery.setstart","name":"SolrQuery::setStart","description":"Specifies the number of rows to skip","tag":"refentry","type":"Function","methodName":"setStart"},{"id":"solrquery.setstats","name":"SolrQuery::setStats","description":"Enables or disables the Stats component","tag":"refentry","type":"Function","methodName":"setStats"},{"id":"solrquery.setterms","name":"SolrQuery::setTerms","description":"Enables or disables the TermsComponent","tag":"refentry","type":"Function","methodName":"setTerms"},{"id":"solrquery.settermsfield","name":"SolrQuery::setTermsField","description":"Sets the name of the field to get the Terms from","tag":"refentry","type":"Function","methodName":"setTermsField"},{"id":"solrquery.settermsincludelowerbound","name":"SolrQuery::setTermsIncludeLowerBound","description":"Include the lower bound term in the result set","tag":"refentry","type":"Function","methodName":"setTermsIncludeLowerBound"},{"id":"solrquery.settermsincludeupperbound","name":"SolrQuery::setTermsIncludeUpperBound","description":"Include the upper bound term in the result set","tag":"refentry","type":"Function","methodName":"setTermsIncludeUpperBound"},{"id":"solrquery.settermslimit","name":"SolrQuery::setTermsLimit","description":"Sets the maximum number of terms to return","tag":"refentry","type":"Function","methodName":"setTermsLimit"},{"id":"solrquery.settermslowerbound","name":"SolrQuery::setTermsLowerBound","description":"Specifies the Term to start from","tag":"refentry","type":"Function","methodName":"setTermsLowerBound"},{"id":"solrquery.settermsmaxcount","name":"SolrQuery::setTermsMaxCount","description":"Sets the maximum document frequency","tag":"refentry","type":"Function","methodName":"setTermsMaxCount"},{"id":"solrquery.settermsmincount","name":"SolrQuery::setTermsMinCount","description":"Sets the minimum document frequency","tag":"refentry","type":"Function","methodName":"setTermsMinCount"},{"id":"solrquery.settermsprefix","name":"SolrQuery::setTermsPrefix","description":"Restrict matches to terms that start with the prefix","tag":"refentry","type":"Function","methodName":"setTermsPrefix"},{"id":"solrquery.settermsreturnraw","name":"SolrQuery::setTermsReturnRaw","description":"Return the raw characters of the indexed term","tag":"refentry","type":"Function","methodName":"setTermsReturnRaw"},{"id":"solrquery.settermssort","name":"SolrQuery::setTermsSort","description":"Specifies how to sort the returned terms","tag":"refentry","type":"Function","methodName":"setTermsSort"},{"id":"solrquery.settermsupperbound","name":"SolrQuery::setTermsUpperBound","description":"Sets the term to stop at","tag":"refentry","type":"Function","methodName":"setTermsUpperBound"},{"id":"solrquery.settimeallowed","name":"SolrQuery::setTimeAllowed","description":"The time allowed for search to finish","tag":"refentry","type":"Function","methodName":"setTimeAllowed"},{"id":"class.solrquery","name":"SolrQuery","description":"The SolrQuery class","tag":"phpdoc:classref","type":"Class","methodName":"SolrQuery"},{"id":"solrdismaxquery.addbigramphrasefield","name":"SolrDisMaxQuery::addBigramPhraseField","description":"Adds a Phrase Bigram Field (pf2 parameter)","tag":"refentry","type":"Function","methodName":"addBigramPhraseField"},{"id":"solrdismaxquery.addboostquery","name":"SolrDisMaxQuery::addBoostQuery","description":"Adds a boost query field with value and optional boost (bq parameter)","tag":"refentry","type":"Function","methodName":"addBoostQuery"},{"id":"solrdismaxquery.addphrasefield","name":"SolrDisMaxQuery::addPhraseField","description":"Adds a Phrase Field (pf parameter)","tag":"refentry","type":"Function","methodName":"addPhraseField"},{"id":"solrdismaxquery.addqueryfield","name":"SolrDisMaxQuery::addQueryField","description":"Add a query field with optional boost (qf parameter)","tag":"refentry","type":"Function","methodName":"addQueryField"},{"id":"solrdismaxquery.addtrigramphrasefield","name":"SolrDisMaxQuery::addTrigramPhraseField","description":"Adds a Trigram Phrase Field (pf3 parameter)","tag":"refentry","type":"Function","methodName":"addTrigramPhraseField"},{"id":"solrdismaxquery.adduserfield","name":"SolrDisMaxQuery::addUserField","description":"Adds a field to User Fields Parameter (uf)","tag":"refentry","type":"Function","methodName":"addUserField"},{"id":"solrdismaxquery.construct","name":"SolrDisMaxQuery::__construct","description":"Class Constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"solrdismaxquery.removebigramphrasefield","name":"SolrDisMaxQuery::removeBigramPhraseField","description":"Removes phrase bigram field (pf2 parameter)","tag":"refentry","type":"Function","methodName":"removeBigramPhraseField"},{"id":"solrdismaxquery.removeboostquery","name":"SolrDisMaxQuery::removeBoostQuery","description":"Removes a boost query partial by field name (bq)","tag":"refentry","type":"Function","methodName":"removeBoostQuery"},{"id":"solrdismaxquery.removephrasefield","name":"SolrDisMaxQuery::removePhraseField","description":"Removes a Phrase Field (pf parameter)","tag":"refentry","type":"Function","methodName":"removePhraseField"},{"id":"solrdismaxquery.removequeryfield","name":"SolrDisMaxQuery::removeQueryField","description":"Removes a Query Field (qf parameter)","tag":"refentry","type":"Function","methodName":"removeQueryField"},{"id":"solrdismaxquery.removetrigramphrasefield","name":"SolrDisMaxQuery::removeTrigramPhraseField","description":"Removes a Trigram Phrase Field (pf3 parameter)","tag":"refentry","type":"Function","methodName":"removeTrigramPhraseField"},{"id":"solrdismaxquery.removeuserfield","name":"SolrDisMaxQuery::removeUserField","description":"Removes a field from The User Fields Parameter (uf)","tag":"refentry","type":"Function","methodName":"removeUserField"},{"id":"solrdismaxquery.setbigramphrasefields","name":"SolrDisMaxQuery::setBigramPhraseFields","description":"Sets Bigram Phrase Fields and their boosts (and slops) using pf2 parameter","tag":"refentry","type":"Function","methodName":"setBigramPhraseFields"},{"id":"solrdismaxquery.setbigramphraseslop","name":"SolrDisMaxQuery::setBigramPhraseSlop","description":"Sets Bigram Phrase Slop (ps2 parameter)","tag":"refentry","type":"Function","methodName":"setBigramPhraseSlop"},{"id":"solrdismaxquery.setboostfunction","name":"SolrDisMaxQuery::setBoostFunction","description":"Sets a Boost Function (bf parameter)","tag":"refentry","type":"Function","methodName":"setBoostFunction"},{"id":"solrdismaxquery.setboostquery","name":"SolrDisMaxQuery::setBoostQuery","description":"Directly Sets Boost Query Parameter (bq)","tag":"refentry","type":"Function","methodName":"setBoostQuery"},{"id":"solrdismaxquery.setminimummatch","name":"SolrDisMaxQuery::setMinimumMatch","description":"Set Minimum \"Should\" Match (mm)","tag":"refentry","type":"Function","methodName":"setMinimumMatch"},{"id":"solrdismaxquery.setphrasefields","name":"SolrDisMaxQuery::setPhraseFields","description":"Sets Phrase Fields and their boosts (and slops) using pf2 parameter","tag":"refentry","type":"Function","methodName":"setPhraseFields"},{"id":"solrdismaxquery.setphraseslop","name":"SolrDisMaxQuery::setPhraseSlop","description":"Sets the default slop on phrase queries (ps parameter)","tag":"refentry","type":"Function","methodName":"setPhraseSlop"},{"id":"solrdismaxquery.setqueryalt","name":"SolrDisMaxQuery::setQueryAlt","description":"Set Query Alternate (q.alt parameter)","tag":"refentry","type":"Function","methodName":"setQueryAlt"},{"id":"solrdismaxquery.setqueryphraseslop","name":"SolrDisMaxQuery::setQueryPhraseSlop","description":"Specifies the amount of slop permitted on phrase queries explicitly included in the user's query string (qf parameter)","tag":"refentry","type":"Function","methodName":"setQueryPhraseSlop"},{"id":"solrdismaxquery.settiebreaker","name":"SolrDisMaxQuery::setTieBreaker","description":"Sets Tie Breaker parameter (tie parameter)","tag":"refentry","type":"Function","methodName":"setTieBreaker"},{"id":"solrdismaxquery.settrigramphrasefields","name":"SolrDisMaxQuery::setTrigramPhraseFields","description":"Directly Sets Trigram Phrase Fields (pf3 parameter)","tag":"refentry","type":"Function","methodName":"setTrigramPhraseFields"},{"id":"solrdismaxquery.settrigramphraseslop","name":"SolrDisMaxQuery::setTrigramPhraseSlop","description":"Sets Trigram Phrase Slop (ps3 parameter)","tag":"refentry","type":"Function","methodName":"setTrigramPhraseSlop"},{"id":"solrdismaxquery.setuserfields","name":"SolrDisMaxQuery::setUserFields","description":"Sets User Fields parameter (uf)","tag":"refentry","type":"Function","methodName":"setUserFields"},{"id":"solrdismaxquery.usedismaxqueryparser","name":"SolrDisMaxQuery::useDisMaxQueryParser","description":"Switch QueryParser to be DisMax Query Parser","tag":"refentry","type":"Function","methodName":"useDisMaxQueryParser"},{"id":"solrdismaxquery.useedismaxqueryparser","name":"SolrDisMaxQuery::useEDisMaxQueryParser","description":"Switch QueryParser to be EDisMax","tag":"refentry","type":"Function","methodName":"useEDisMaxQueryParser"},{"id":"class.solrdismaxquery","name":"SolrDisMaxQuery","description":"The SolrDisMaxQuery class","tag":"phpdoc:classref","type":"Class","methodName":"SolrDisMaxQuery"},{"id":"solrcollapsefunction.construct","name":"SolrCollapseFunction::__construct","description":"Constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"solrcollapsefunction.getfield","name":"SolrCollapseFunction::getField","description":"Returns the field that is being collapsed on","tag":"refentry","type":"Function","methodName":"getField"},{"id":"solrcollapsefunction.gethint","name":"SolrCollapseFunction::getHint","description":"Returns collapse hint","tag":"refentry","type":"Function","methodName":"getHint"},{"id":"solrcollapsefunction.getmax","name":"SolrCollapseFunction::getMax","description":"Returns max parameter","tag":"refentry","type":"Function","methodName":"getMax"},{"id":"solrcollapsefunction.getmin","name":"SolrCollapseFunction::getMin","description":"Returns min parameter","tag":"refentry","type":"Function","methodName":"getMin"},{"id":"solrcollapsefunction.getnullpolicy","name":"SolrCollapseFunction::getNullPolicy","description":"Returns null policy","tag":"refentry","type":"Function","methodName":"getNullPolicy"},{"id":"solrcollapsefunction.getsize","name":"SolrCollapseFunction::getSize","description":"Returns size parameter","tag":"refentry","type":"Function","methodName":"getSize"},{"id":"solrcollapsefunction.setfield","name":"SolrCollapseFunction::setField","description":"Sets the field to collapse on","tag":"refentry","type":"Function","methodName":"setField"},{"id":"solrcollapsefunction.sethint","name":"SolrCollapseFunction::setHint","description":"Sets collapse hint","tag":"refentry","type":"Function","methodName":"setHint"},{"id":"solrcollapsefunction.setmax","name":"SolrCollapseFunction::setMax","description":"Selects the group heads by the max value of a numeric field or function query","tag":"refentry","type":"Function","methodName":"setMax"},{"id":"solrcollapsefunction.setmin","name":"SolrCollapseFunction::setMin","description":"Sets the initial size of the collapse data structures when collapsing on a numeric field only","tag":"refentry","type":"Function","methodName":"setMin"},{"id":"solrcollapsefunction.setnullpolicy","name":"SolrCollapseFunction::setNullPolicy","description":"Sets the NULL Policy","tag":"refentry","type":"Function","methodName":"setNullPolicy"},{"id":"solrcollapsefunction.setsize","name":"SolrCollapseFunction::setSize","description":"Sets the initial size of the collapse data structures when collapsing on a numeric field only","tag":"refentry","type":"Function","methodName":"setSize"},{"id":"solrcollapsefunction.tostring","name":"SolrCollapseFunction::__toString","description":"Returns a string representing the constructed collapse function","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.solrcollapsefunction","name":"SolrCollapseFunction","description":"The SolrCollapseFunction class","tag":"phpdoc:classref","type":"Class","methodName":"SolrCollapseFunction"},{"id":"solrexception.getinternalinfo","name":"SolrException::getInternalInfo","description":"Returns internal information where the Exception was thrown","tag":"refentry","type":"Function","methodName":"getInternalInfo"},{"id":"class.solrexception","name":"SolrException","description":"The SolrException class","tag":"phpdoc:classref","type":"Class","methodName":"SolrException"},{"id":"solrclientexception.getinternalinfo","name":"SolrClientException::getInternalInfo","description":"Returns internal information where the Exception was thrown","tag":"refentry","type":"Function","methodName":"getInternalInfo"},{"id":"class.solrclientexception","name":"SolrClientException","description":"The SolrClientException class","tag":"phpdoc:classref","type":"Class","methodName":"SolrClientException"},{"id":"solrserverexception.getinternalinfo","name":"SolrServerException::getInternalInfo","description":"Returns internal information where the Exception was thrown","tag":"refentry","type":"Function","methodName":"getInternalInfo"},{"id":"class.solrserverexception","name":"SolrServerException","description":"The SolrServerException class","tag":"phpdoc:classref","type":"Class","methodName":"SolrServerException"},{"id":"solrillegalargumentexception.getinternalinfo","name":"SolrIllegalArgumentException::getInternalInfo","description":"Returns internal information where the Exception was thrown","tag":"refentry","type":"Function","methodName":"getInternalInfo"},{"id":"class.solrillegalargumentexception","name":"SolrIllegalArgumentException","description":"The SolrIllegalArgumentException class","tag":"phpdoc:classref","type":"Class","methodName":"SolrIllegalArgumentException"},{"id":"solrillegaloperationexception.getinternalinfo","name":"SolrIllegalOperationException::getInternalInfo","description":"Returns internal information where the Exception was thrown","tag":"refentry","type":"Function","methodName":"getInternalInfo"},{"id":"class.solrillegaloperationexception","name":"SolrIllegalOperationException","description":"The SolrIllegalOperationException class","tag":"phpdoc:classref","type":"Class","methodName":"SolrIllegalOperationException"},{"id":"class.solrmissingmandatoryparameterexception","name":"SolrMissingMandatoryParameterException","description":"The SolrMissingMandatoryParameterException class","tag":"phpdoc:classref","type":"Class","methodName":"SolrMissingMandatoryParameterException"},{"id":"book.solr","name":"Solr","description":"Apache Solr","tag":"book","type":"Extension","methodName":"Solr"},{"id":"refs.search","name":"Search Engine Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"Search Engine Extensions"},{"id":"intro.apache","name":"Introduction","description":"Apache","tag":"preface","type":"General","methodName":"Introduction"},{"id":"apache.installation","name":"Installation","description":"Apache","tag":"section","type":"General","methodName":"Installation"},{"id":"apache.configuration","name":"Runtime Configuration","description":"Apache","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"apache.setup","name":"Installing\/Configuring","description":"Apache","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.apache-child-terminate","name":"apache_child_terminate","description":"Terminate apache process after this request","tag":"refentry","type":"Function","methodName":"apache_child_terminate"},{"id":"function.apache-get-modules","name":"apache_get_modules","description":"Get a list of loaded Apache modules","tag":"refentry","type":"Function","methodName":"apache_get_modules"},{"id":"function.apache-get-version","name":"apache_get_version","description":"Fetch Apache version","tag":"refentry","type":"Function","methodName":"apache_get_version"},{"id":"function.apache-getenv","name":"apache_getenv","description":"Get an Apache subprocess_env variable","tag":"refentry","type":"Function","methodName":"apache_getenv"},{"id":"function.apache-lookup-uri","name":"apache_lookup_uri","description":"Perform a partial request for the specified URI and return all info about it","tag":"refentry","type":"Function","methodName":"apache_lookup_uri"},{"id":"function.apache-note","name":"apache_note","description":"Get and set apache request notes","tag":"refentry","type":"Function","methodName":"apache_note"},{"id":"function.apache-request-headers","name":"apache_request_headers","description":"Fetch all HTTP request headers","tag":"refentry","type":"Function","methodName":"apache_request_headers"},{"id":"function.apache-response-headers","name":"apache_response_headers","description":"Fetch all HTTP response headers","tag":"refentry","type":"Function","methodName":"apache_response_headers"},{"id":"function.apache-setenv","name":"apache_setenv","description":"Set an Apache subprocess_env variable","tag":"refentry","type":"Function","methodName":"apache_setenv"},{"id":"function.getallheaders","name":"getallheaders","description":"Fetch all HTTP request headers","tag":"refentry","type":"Function","methodName":"getallheaders"},{"id":"function.virtual","name":"virtual","description":"Perform an Apache sub-request","tag":"refentry","type":"Function","methodName":"virtual"},{"id":"ref.apache","name":"Apache Functions","description":"Apache","tag":"reference","type":"Extension","methodName":"Apache Functions"},{"id":"book.apache","name":"Apache","description":"Server Specific Extensions","tag":"book","type":"Extension","methodName":"Apache"},{"id":"intro.fpm","name":"Introduction","description":"FastCGI Process Manager","tag":"preface","type":"General","methodName":"Introduction"},{"id":"fpm.setup","name":"Installing\/Configuring","description":"FastCGI Process Manager","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"fpm.status","name":"Status Page","description":"FastCGI Process Manager","tag":"sect1","type":"General","methodName":"Status Page"},{"id":"fpm.observability","name":"Observability","description":"FastCGI Process Manager","tag":"chapter","type":"General","methodName":"Observability"},{"id":"function.fastcgi-finish-request","name":"fastcgi_finish_request","description":"Flushes all response data to the client","tag":"refentry","type":"Function","methodName":"fastcgi_finish_request"},{"id":"function.fpm-get-status","name":"fpm_get_status","description":"Returns the current FPM pool status","tag":"refentry","type":"Function","methodName":"fpm_get_status"},{"id":"ref.fpm","name":"FPM Functions","description":"FastCGI Process Manager","tag":"reference","type":"Extension","methodName":"FPM Functions"},{"id":"book.fpm","name":"FastCGI Process Manager","description":"Server Specific Extensions","tag":"book","type":"Extension","methodName":"FastCGI Process Manager"},{"id":"refs.utilspec.server","name":"Server Specific Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"Server Specific Extensions"},{"id":"intro.session","name":"Introduction","description":"Session Handling","tag":"preface","type":"General","methodName":"Introduction"},{"id":"session.requirements","name":"Requirements","description":"Session Handling","tag":"section","type":"General","methodName":"Requirements"},{"id":"session.installation","name":"Installation","description":"Session Handling","tag":"section","type":"General","methodName":"Installation"},{"id":"session.configuration","name":"Runtime Configuration","description":"Session Handling","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"session.setup","name":"Installing\/Configuring","description":"Session Handling","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"session.constants","name":"Predefined Constants","description":"Session Handling","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"session.examples.basic","name":"Basic usage","description":"Session Handling","tag":"section","type":"General","methodName":"Basic usage"},{"id":"session.idpassing","name":"Passing the Session ID","description":"Session Handling","tag":"section","type":"General","methodName":"Passing the Session ID"},{"id":"session.customhandler","name":"Custom Session Handlers","description":"Session Handling","tag":"section","type":"General","methodName":"Custom Session Handlers"},{"id":"session.examples","name":"Examples","description":"Session Handling","tag":"appendix","type":"General","methodName":"Examples"},{"id":"session.upload-progress","name":"Session Upload Progress","description":"Session Handling","tag":"chapter","type":"General","methodName":"Session Upload Progress"},{"id":"features.session.security.management","name":"Session Management Basics","description":"Session Handling","tag":"sect1","type":"General","methodName":"Session Management Basics"},{"id":"session.security.ini","name":"Securing Session INI Settings","description":"Session Handling","tag":"sect1","type":"General","methodName":"Securing Session INI Settings"},{"id":"session.security","name":"Sessions and Security","description":"Session Handling","tag":"chapter","type":"General","methodName":"Sessions and Security"},{"id":"function.session-abort","name":"session_abort","description":"Discard session array changes and finish session","tag":"refentry","type":"Function","methodName":"session_abort"},{"id":"function.session-cache-expire","name":"session_cache_expire","description":"Get and\/or set current cache expire","tag":"refentry","type":"Function","methodName":"session_cache_expire"},{"id":"function.session-cache-limiter","name":"session_cache_limiter","description":"Get and\/or set the current cache limiter","tag":"refentry","type":"Function","methodName":"session_cache_limiter"},{"id":"function.session-commit","name":"session_commit","description":"Alias of session_write_close","tag":"refentry","type":"Function","methodName":"session_commit"},{"id":"function.session-create-id","name":"session_create_id","description":"Create new session id","tag":"refentry","type":"Function","methodName":"session_create_id"},{"id":"function.session-decode","name":"session_decode","description":"Decodes session data from a session encoded string","tag":"refentry","type":"Function","methodName":"session_decode"},{"id":"function.session-destroy","name":"session_destroy","description":"Destroys all data registered to a session","tag":"refentry","type":"Function","methodName":"session_destroy"},{"id":"function.session-encode","name":"session_encode","description":"Encodes the current session data as a session encoded string","tag":"refentry","type":"Function","methodName":"session_encode"},{"id":"function.session-gc","name":"session_gc","description":"Perform session data garbage collection","tag":"refentry","type":"Function","methodName":"session_gc"},{"id":"function.session-get-cookie-params","name":"session_get_cookie_params","description":"Get the session cookie parameters","tag":"refentry","type":"Function","methodName":"session_get_cookie_params"},{"id":"function.session-id","name":"session_id","description":"Get and\/or set the current session id","tag":"refentry","type":"Function","methodName":"session_id"},{"id":"function.session-module-name","name":"session_module_name","description":"Get and\/or set the current session module","tag":"refentry","type":"Function","methodName":"session_module_name"},{"id":"function.session-name","name":"session_name","description":"Get and\/or set the current session name","tag":"refentry","type":"Function","methodName":"session_name"},{"id":"function.session-regenerate-id","name":"session_regenerate_id","description":"Update the current session id with a newly generated one","tag":"refentry","type":"Function","methodName":"session_regenerate_id"},{"id":"function.session-register-shutdown","name":"session_register_shutdown","description":"Session shutdown function","tag":"refentry","type":"Function","methodName":"session_register_shutdown"},{"id":"function.session-reset","name":"session_reset","description":"Re-initialize session array with original values","tag":"refentry","type":"Function","methodName":"session_reset"},{"id":"function.session-save-path","name":"session_save_path","description":"Get and\/or set the current session save path","tag":"refentry","type":"Function","methodName":"session_save_path"},{"id":"function.session-set-cookie-params","name":"session_set_cookie_params","description":"Set the session cookie parameters","tag":"refentry","type":"Function","methodName":"session_set_cookie_params"},{"id":"function.session-set-save-handler","name":"session_set_save_handler","description":"Sets user-level session storage functions","tag":"refentry","type":"Function","methodName":"session_set_save_handler"},{"id":"function.session-start","name":"session_start","description":"Start new or resume existing session","tag":"refentry","type":"Function","methodName":"session_start"},{"id":"function.session-status","name":"session_status","description":"Returns the current session status","tag":"refentry","type":"Function","methodName":"session_status"},{"id":"function.session-unset","name":"session_unset","description":"Free all session variables","tag":"refentry","type":"Function","methodName":"session_unset"},{"id":"function.session-write-close","name":"session_write_close","description":"Write session data and end session","tag":"refentry","type":"Function","methodName":"session_write_close"},{"id":"ref.session","name":"Session Functions","description":"Session Handling","tag":"reference","type":"Extension","methodName":"Session Functions"},{"id":"sessionhandler.close","name":"SessionHandler::close","description":"Close the session","tag":"refentry","type":"Function","methodName":"close"},{"id":"sessionhandler.create-sid","name":"SessionHandler::create_sid","description":"Return a new session ID","tag":"refentry","type":"Function","methodName":"create_sid"},{"id":"sessionhandler.destroy","name":"SessionHandler::destroy","description":"Destroy a session","tag":"refentry","type":"Function","methodName":"destroy"},{"id":"sessionhandler.gc","name":"SessionHandler::gc","description":"Cleanup old sessions","tag":"refentry","type":"Function","methodName":"gc"},{"id":"sessionhandler.open","name":"SessionHandler::open","description":"Initialize session","tag":"refentry","type":"Function","methodName":"open"},{"id":"sessionhandler.read","name":"SessionHandler::read","description":"Read session data","tag":"refentry","type":"Function","methodName":"read"},{"id":"sessionhandler.write","name":"SessionHandler::write","description":"Write session data","tag":"refentry","type":"Function","methodName":"write"},{"id":"class.sessionhandler","name":"SessionHandler","description":"The SessionHandler class","tag":"phpdoc:classref","type":"Class","methodName":"SessionHandler"},{"id":"sessionhandlerinterface.close","name":"SessionHandlerInterface::close","description":"Close the session","tag":"refentry","type":"Function","methodName":"close"},{"id":"sessionhandlerinterface.destroy","name":"SessionHandlerInterface::destroy","description":"Destroy a session","tag":"refentry","type":"Function","methodName":"destroy"},{"id":"sessionhandlerinterface.gc","name":"SessionHandlerInterface::gc","description":"Cleanup old sessions","tag":"refentry","type":"Function","methodName":"gc"},{"id":"sessionhandlerinterface.open","name":"SessionHandlerInterface::open","description":"Initialize session","tag":"refentry","type":"Function","methodName":"open"},{"id":"sessionhandlerinterface.read","name":"SessionHandlerInterface::read","description":"Read session data","tag":"refentry","type":"Function","methodName":"read"},{"id":"sessionhandlerinterface.write","name":"SessionHandlerInterface::write","description":"Write session data","tag":"refentry","type":"Function","methodName":"write"},{"id":"class.sessionhandlerinterface","name":"SessionHandlerInterface","description":"The SessionHandlerInterface class","tag":"phpdoc:classref","type":"Class","methodName":"SessionHandlerInterface"},{"id":"sessionidinterface.create-sid","name":"SessionIdInterface::create_sid","description":"Create session ID","tag":"refentry","type":"Function","methodName":"create_sid"},{"id":"class.sessionidinterface","name":"SessionIdInterface","description":"The SessionIdInterface interface","tag":"phpdoc:classref","type":"Class","methodName":"SessionIdInterface"},{"id":"sessionupdatetimestamphandlerinterface.updatetimestamp","name":"SessionUpdateTimestampHandlerInterface::updateTimestamp","description":"Update timestamp","tag":"refentry","type":"Function","methodName":"updateTimestamp"},{"id":"sessionupdatetimestamphandlerinterface.validateid","name":"SessionUpdateTimestampHandlerInterface::validateId","description":"Validate ID","tag":"refentry","type":"Function","methodName":"validateId"},{"id":"class.sessionupdatetimestamphandlerinterface","name":"SessionUpdateTimestampHandlerInterface","description":"The SessionUpdateTimestampHandlerInterface interface","tag":"phpdoc:classref","type":"Class","methodName":"SessionUpdateTimestampHandlerInterface"},{"id":"book.session","name":"Sessions","description":"Session Handling","tag":"book","type":"Extension","methodName":"Sessions"},{"id":"refs.basic.session","name":"Session Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"Session Extensions"},{"id":"intro.cmark","name":"Introduction","description":"CommonMark","tag":"preface","type":"General","methodName":"Introduction"},{"id":"cmark.requirements","name":"Requirements","description":"CommonMark","tag":"section","type":"General","methodName":"Requirements"},{"id":"cmark.installation","name":"Installation","description":"CommonMark","tag":"section","type":"General","methodName":"Installation"},{"id":"cmark.setup","name":"Installing\/Configuring","description":"CommonMark","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"cmark.constants","name":"Predefined Constants","description":"CommonMark","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"class.commonmark-node-document","name":"CommonMark\\Node\\Document","description":"Document concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\Document"},{"id":"commonmark-node-heading.construct","name":"CommonMark\\Node\\Heading::__construct","description":"Heading Construction","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.commonmark-node-heading","name":"CommonMark\\Node\\Heading","description":"Heading concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\Heading"},{"id":"class.commonmark-node-paragraph","name":"CommonMark\\Node\\Paragraph","description":"Paragraph concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\Paragraph"},{"id":"class.commonmark-node-blockquote","name":"CommonMark\\Node\\BlockQuote","description":"BlockQuote concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\BlockQuote"},{"id":"commonmark-node-bulletlist.construct","name":"CommonMark\\Node\\BulletList::__construct","description":"BulletList Construction","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.commonmark-node-bulletlist","name":"CommonMark\\Node\\BulletList","description":"BulletList concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\BulletList"},{"id":"commonmark-node-orderedlist.construct","name":"CommonMark\\Node\\OrderedList::__construct","description":"OrderedList Construction","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.commonmark-node-orderedlist","name":"CommonMark\\Node\\OrderedList","description":"OrderedList concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\OrderedList"},{"id":"class.commonmark-node-item","name":"CommonMark\\Node\\Item","description":"Item concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\Item"},{"id":"commonmark-node-text.construct","name":"CommonMark\\Node\\Text::__construct","description":"Text Construction","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.commonmark-node-text","name":"CommonMark\\Node\\Text","description":"Text concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\Text"},{"id":"class.commonmark-node-text-strong","name":"CommonMark\\Node\\Text\\Strong","description":"Strong concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\Text\\Strong"},{"id":"class.commonmark-node-text-emphasis","name":"CommonMark\\Node\\Text\\Emphasis","description":"Emphasis concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\Text\\Emphasis"},{"id":"class.commonmark-node-thematicbreak","name":"CommonMark\\Node\\ThematicBreak","description":"ThematicBreak concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\ThematicBreak"},{"id":"class.commonmark-node-softbreak","name":"CommonMark\\Node\\SoftBreak","description":"SoftBreak concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\SoftBreak"},{"id":"class.commonmark-node-linebreak","name":"CommonMark\\Node\\LineBreak","description":"LineBreak concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\LineBreak"},{"id":"class.commonmark-node-code","name":"CommonMark\\Node\\Code","description":"Code concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\Code"},{"id":"commonmark-node-codeblock.construct","name":"CommonMark\\Node\\CodeBlock::__construct","description":"CodeBlock Construction","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.commonmark-node-codeblock","name":"CommonMark\\Node\\CodeBlock","description":"CodeBlock concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\CodeBlock"},{"id":"class.commonmark-node-htmlblock","name":"CommonMark\\Node\\HTMLBlock","description":"HTMLBlock concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\HTMLBlock"},{"id":"class.commonmark-node-htmlinline","name":"CommonMark\\Node\\HTMLInline","description":"HTMLInline concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\HTMLInline"},{"id":"commonmark-node-image.construct","name":"CommonMark\\Node\\Image::__construct","description":"Image Construction","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.commonmark-node-image","name":"CommonMark\\Node\\Image","description":"Image concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\Image"},{"id":"commonmark-node-link.construct","name":"CommonMark\\Node\\Link::__construct","description":"Link Construction","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.commonmark-node-link","name":"CommonMark\\Node\\Link","description":"Link concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\Link"},{"id":"class.commonmark-node-customblock","name":"CommonMark\\Node\\CustomBlock","description":"CustomBlock concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\CustomBlock"},{"id":"class.commonmark-node-custominline","name":"CommonMark\\Node\\CustomInline","description":"CustomInline concrete CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node\\CustomInline"},{"id":"commonmark-node.appendchild","name":"CommonMark\\Node::appendChild","description":"AST Manipulation","tag":"refentry","type":"Function","methodName":"appendChild"},{"id":"commonmark-node.prependchild","name":"CommonMark\\Node::prependChild","description":"AST Manipulation","tag":"refentry","type":"Function","methodName":"prependChild"},{"id":"commonmark-node.insertafter","name":"CommonMark\\Node::insertAfter","description":"AST Manipulation","tag":"refentry","type":"Function","methodName":"insertAfter"},{"id":"commonmark-node.insertbefore","name":"CommonMark\\Node::insertBefore","description":"AST Manipulation","tag":"refentry","type":"Function","methodName":"insertBefore"},{"id":"commonmark-node.replace","name":"CommonMark\\Node::replace","description":"AST Manipulation","tag":"refentry","type":"Function","methodName":"replace"},{"id":"commonmark-node.unlink","name":"CommonMark\\Node::unlink","description":"AST Manipulation","tag":"refentry","type":"Function","methodName":"unlink"},{"id":"commonmark-node.accept","name":"CommonMark\\Node::accept","description":"Visitation","tag":"refentry","type":"Function","methodName":"accept"},{"id":"class.commonmark-node","name":"CommonMark\\Node","description":"Abstract CommonMark\\Node","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Node"},{"id":"commonmark-interfaces-ivisitor.enter","name":"CommonMark\\Interfaces\\IVisitor::enter","description":"Visitation","tag":"refentry","type":"Function","methodName":"enter"},{"id":"commonmark-interfaces-ivisitor.leave","name":"CommonMark\\Interfaces\\IVisitor::leave","description":"Visitation","tag":"refentry","type":"Function","methodName":"leave"},{"id":"class.commonmark-interfaces-ivisitor","name":"CommonMark\\Interfaces\\IVisitor","description":"The CommonMark\\Interfaces\\IVisitor interface","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Interfaces\\IVisitor"},{"id":"commonmark-interfaces-ivisitable.accept","name":"CommonMark\\Interfaces\\IVisitable::accept","description":"Visitation","tag":"refentry","type":"Function","methodName":"accept"},{"id":"class.commonmark-interfaces-ivisitable","name":"CommonMark\\Interfaces\\IVisitable","description":"The CommonMark\\Interfaces\\IVisitable interface","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Interfaces\\IVisitable"},{"id":"commonmark-parser.construct","name":"CommonMark\\Parser::__construct","description":"Parsing","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"commonmark-parser.parse","name":"CommonMark\\Parser::parse","description":"Parsing","tag":"refentry","type":"Function","methodName":"parse"},{"id":"commonmark-parser.finish","name":"CommonMark\\Parser::finish","description":"Parsing","tag":"refentry","type":"Function","methodName":"finish"},{"id":"class.commonmark-parser","name":"CommonMark\\Parser","description":"The CommonMark\\Parser class","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\Parser"},{"id":"commonmark-cql.construct","name":"CommonMark\\CQL::__construct","description":"CQL Construction","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"commonmark-cql.invoke","name":"CommonMark\\CQL::__invoke","description":"CQL Execution","tag":"refentry","type":"Function","methodName":"__invoke"},{"id":"class.commonmark-cql","name":"CommonMark\\CQL","description":"The CommonMark\\CQL class","tag":"phpdoc:classref","type":"Class","methodName":"CommonMark\\CQL"},{"id":"function.commonmark-parse","name":"CommonMark\\Parse","description":"Parsing","tag":"refentry","type":"Function","methodName":"CommonMark\\Parse"},{"id":"function.commonmark-render","name":"CommonMark\\Render","description":"Rendering","tag":"refentry","type":"Function","methodName":"CommonMark\\Render"},{"id":"function.commonmark-render-html","name":"CommonMark\\Render\\HTML","description":"Rendering","tag":"refentry","type":"Function","methodName":"CommonMark\\Render\\HTML"},{"id":"function.commonmark-render-latex","name":"CommonMark\\Render\\Latex","description":"Rendering","tag":"refentry","type":"Function","methodName":"CommonMark\\Render\\Latex"},{"id":"function.commonmark-render-man","name":"CommonMark\\Render\\Man","description":"Rendering","tag":"refentry","type":"Function","methodName":"CommonMark\\Render\\Man"},{"id":"function.commonmark-render-xml","name":"CommonMark\\Render\\XML","description":"Rendering","tag":"refentry","type":"Function","methodName":"CommonMark\\Render\\XML"},{"id":"ref.cmark","name":"CommonMark Functions","description":"CommonMark","tag":"reference","type":"Extension","methodName":"CommonMark Functions"},{"id":"book.cmark","name":"CommonMark","description":"CommonMark","tag":"book","type":"Extension","methodName":"CommonMark"},{"id":"intro.parle","name":"Introduction","description":"Parsing and lexing","tag":"preface","type":"General","methodName":"Introduction"},{"id":"parle.requirements","name":"Requirements","description":"Parsing and lexing","tag":"section","type":"General","methodName":"Requirements"},{"id":"parle.installation","name":"Installation","description":"Parsing and lexing","tag":"section","type":"General","methodName":"Installation"},{"id":"parle.setup","name":"Installing\/Configuring","description":"Parsing and lexing","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"parle.constants","name":"Predefined Constants","description":"Parsing and lexing","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"parle.pattern.matching","name":"Pattern matching","description":"Parle pattern matching","tag":"chapter","type":"General","methodName":"Pattern matching"},{"id":"parle.examples.lexer","name":"Lexer examples","description":"Parsing and lexing","tag":"section","type":"General","methodName":"Lexer examples"},{"id":"parle.examples.parser","name":"Parser examples","description":"Parsing and lexing","tag":"section","type":"General","methodName":"Parser examples"},{"id":"parle.examples","name":"Examples","description":"Parsing and lexing","tag":"chapter","type":"General","methodName":"Examples"},{"id":"parle-lexer.advance","name":"Parle\\Lexer::advance","description":"Process next lexer rule","tag":"refentry","type":"Function","methodName":"advance"},{"id":"parle-lexer.build","name":"Parle\\Lexer::build","description":"Finalize the lexer rule set","tag":"refentry","type":"Function","methodName":"build"},{"id":"parle-lexer.callout","name":"Parle\\Lexer::callout","description":"Define token callback","tag":"refentry","type":"Function","methodName":"callout"},{"id":"parle-lexer.consume","name":"Parle\\Lexer::consume","description":"Pass the data for processing","tag":"refentry","type":"Function","methodName":"consume"},{"id":"parle-lexer.dump","name":"Parle\\Lexer::dump","description":"Dump the state machine","tag":"refentry","type":"Function","methodName":"dump"},{"id":"parle-lexer.gettoken","name":"Parle\\Lexer::getToken","description":"Retrieve the current token","tag":"refentry","type":"Function","methodName":"getToken"},{"id":"parle-lexer.insertmacro","name":"Parle\\Lexer::insertMacro","description":"Insert regex macro","tag":"refentry","type":"Function","methodName":"insertMacro"},{"id":"parle-lexer.push","name":"Parle\\Lexer::push","description":"Add a lexer rule","tag":"refentry","type":"Function","methodName":"push"},{"id":"parle-lexer.reset","name":"Parle\\Lexer::reset","description":"Reset lexer","tag":"refentry","type":"Function","methodName":"reset"},{"id":"class.parle-lexer","name":"Parle\\Lexer","description":"The Parle\\Lexer class","tag":"phpdoc:classref","type":"Class","methodName":"Parle\\Lexer"},{"id":"parle-rlexer.advance","name":"Parle\\RLexer::advance","description":"Process next lexer rule","tag":"refentry","type":"Function","methodName":"advance"},{"id":"parle-rlexer.build","name":"Parle\\RLexer::build","description":"Finalize the lexer rule set","tag":"refentry","type":"Function","methodName":"build"},{"id":"parle-rlexer.callout","name":"Parle\\RLexer::callout","description":"Define token callback","tag":"refentry","type":"Function","methodName":"callout"},{"id":"parle-rlexer.consume","name":"Parle\\RLexer::consume","description":"Pass the data for processing","tag":"refentry","type":"Function","methodName":"consume"},{"id":"parle-rlexer.dump","name":"Parle\\RLexer::dump","description":"Dump the state machine","tag":"refentry","type":"Function","methodName":"dump"},{"id":"parle-rlexer.gettoken","name":"Parle\\RLexer::getToken","description":"Retrieve the current token","tag":"refentry","type":"Function","methodName":"getToken"},{"id":"parle-rlexer.insertmacro","name":"Parle\\RLexer::insertMacro","description":"Insert regex macro","tag":"refentry","type":"Function","methodName":"insertMacro"},{"id":"parle-rlexer.push","name":"Parle\\RLexer::push","description":"Add a lexer rule","tag":"refentry","type":"Function","methodName":"push"},{"id":"parle-rlexer.pushstate","name":"Parle\\RLexer::pushState","description":"Push a new start state","tag":"refentry","type":"Function","methodName":"pushState"},{"id":"parle-rlexer.reset","name":"Parle\\RLexer::reset","description":"Reset lexer","tag":"refentry","type":"Function","methodName":"reset"},{"id":"class.parle-rlexer","name":"Parle\\RLexer","description":"The Parle\\RLexer class","tag":"phpdoc:classref","type":"Class","methodName":"Parle\\RLexer"},{"id":"parle-parser.advance","name":"Parle\\Parser::advance","description":"Process next parser rule","tag":"refentry","type":"Function","methodName":"advance"},{"id":"parle-parser.build","name":"Parle\\Parser::build","description":"Finalize the grammar rules","tag":"refentry","type":"Function","methodName":"build"},{"id":"parle-parser.consume","name":"Parle\\Parser::consume","description":"Consume the data for processing","tag":"refentry","type":"Function","methodName":"consume"},{"id":"parle-parser.dump","name":"Parle\\Parser::dump","description":"Dump the grammar","tag":"refentry","type":"Function","methodName":"dump"},{"id":"parle-parser.errorinfo","name":"Parle\\Parser::errorInfo","description":"Retrieve the error information","tag":"refentry","type":"Function","methodName":"errorInfo"},{"id":"parle-parser.left","name":"Parle\\Parser::left","description":"Declare a token with left-associativity","tag":"refentry","type":"Function","methodName":"left"},{"id":"parle-parser.nonassoc","name":"Parle\\Parser::nonassoc","description":"Declare a token with no associativity","tag":"refentry","type":"Function","methodName":"nonassoc"},{"id":"parle-parser.precedence","name":"Parle\\Parser::precedence","description":"Declare a precedence rule","tag":"refentry","type":"Function","methodName":"precedence"},{"id":"parle-parser.push","name":"Parle\\Parser::push","description":"Add a grammar rule","tag":"refentry","type":"Function","methodName":"push"},{"id":"parle-parser.reset","name":"Parle\\Parser::reset","description":"Reset parser state","tag":"refentry","type":"Function","methodName":"reset"},{"id":"parle-parser.right","name":"Parle\\Parser::right","description":"Declare a token with right-associativity","tag":"refentry","type":"Function","methodName":"right"},{"id":"parle-parser.sigil","name":"Parle\\Parser::sigil","description":"Retrieve a matching part of a rule","tag":"refentry","type":"Function","methodName":"sigil"},{"id":"parle-parser.sigilcount","name":"Parle\\Parser::sigilCount","description":"Number of elements in matched rule","tag":"refentry","type":"Function","methodName":"sigilCount"},{"id":"parle-parser.sigilname","name":"Parle\\Parser::sigilName","description":"Retrieve a rule or token name","tag":"refentry","type":"Function","methodName":"sigilName"},{"id":"parle-parser.token","name":"Parle\\Parser::token","description":"Declare a token","tag":"refentry","type":"Function","methodName":"token"},{"id":"parle-parser.tokenid","name":"Parle\\Parser::tokenId","description":"Get token id","tag":"refentry","type":"Function","methodName":"tokenId"},{"id":"parle-parser.trace","name":"Parle\\Parser::trace","description":"Trace the parser operation","tag":"refentry","type":"Function","methodName":"trace"},{"id":"parle-parser.validate","name":"Parle\\Parser::validate","description":"Validate input","tag":"refentry","type":"Function","methodName":"validate"},{"id":"class.parle-parser","name":"Parle\\Parser","description":"The Parle\\Parser class","tag":"phpdoc:classref","type":"Class","methodName":"Parle\\Parser"},{"id":"parle-rparser.advance","name":"Parle\\RParser::advance","description":"Process next parser rule","tag":"refentry","type":"Function","methodName":"advance"},{"id":"parle-rparser.build","name":"Parle\\RParser::build","description":"Finalize the grammar rules","tag":"refentry","type":"Function","methodName":"build"},{"id":"parle-rparser.consume","name":"Parle\\RParser::consume","description":"Consume the data for processing","tag":"refentry","type":"Function","methodName":"consume"},{"id":"parle-rparser.dump","name":"Parle\\RParser::dump","description":"Dump the grammar","tag":"refentry","type":"Function","methodName":"dump"},{"id":"parle-rparser.errorinfo","name":"Parle\\RParser::errorInfo","description":"Retrieve the error information","tag":"refentry","type":"Function","methodName":"errorInfo"},{"id":"parle-rparser.left","name":"Parle\\RParser::left","description":"Declare a token with left-associativity","tag":"refentry","type":"Function","methodName":"left"},{"id":"parle-rparser.nonassoc","name":"Parle\\RParser::nonassoc","description":"Declare a token with no associativity","tag":"refentry","type":"Function","methodName":"nonassoc"},{"id":"parle-rparser.precedence","name":"Parle\\RParser::precedence","description":"Declare a precedence rule","tag":"refentry","type":"Function","methodName":"precedence"},{"id":"parle-rparser.push","name":"Parle\\RParser::push","description":"Add a grammar rule","tag":"refentry","type":"Function","methodName":"push"},{"id":"parle-rparser.reset","name":"Parle\\RParser::reset","description":"Reset parser state","tag":"refentry","type":"Function","methodName":"reset"},{"id":"parle-rparser.right","name":"Parle\\RParser::right","description":"Declare a token with right-associativity","tag":"refentry","type":"Function","methodName":"right"},{"id":"parle-rparser.sigil","name":"Parle\\RParser::sigil","description":"Retrieve a matching part of a rule","tag":"refentry","type":"Function","methodName":"sigil"},{"id":"parle-rparser.sigilcount","name":"Parle\\RParser::sigilCount","description":"Number of elements in matched rule","tag":"refentry","type":"Function","methodName":"sigilCount"},{"id":"parle-rparser.sigilname","name":"Parle\\RParser::sigilName","description":"Retrieve a rule or token name","tag":"refentry","type":"Function","methodName":"sigilName"},{"id":"parle-rparser.token","name":"Parle\\RParser::token","description":"Declare a token","tag":"refentry","type":"Function","methodName":"token"},{"id":"parle-rparser.tokenid","name":"Parle\\RParser::tokenId","description":"Get token id","tag":"refentry","type":"Function","methodName":"tokenId"},{"id":"parle-rparser.trace","name":"Parle\\RParser::trace","description":"Trace the parser operation","tag":"refentry","type":"Function","methodName":"trace"},{"id":"parle-rparser.validate","name":"Parle\\RParser::validate","description":"Validate input","tag":"refentry","type":"Function","methodName":"validate"},{"id":"class.parle-rparser","name":"Parle\\RParser","description":"The Parle\\RParser class","tag":"phpdoc:classref","type":"Class","methodName":"Parle\\RParser"},{"id":"parle-stack.pop","name":"Parle\\Stack::pop","description":"Pop an item from the stack","tag":"refentry","type":"Function","methodName":"pop"},{"id":"parle-stack.push","name":"Parle\\Stack::push","description":"Push an item into the stack","tag":"refentry","type":"Function","methodName":"push"},{"id":"class.parle-stack","name":"Parle\\Stack","description":"The Parle\\Stack class","tag":"phpdoc:classref","type":"Class","methodName":"Parle\\Stack"},{"id":"class.parle-token","name":"Parle\\Token","description":"The Parle\\Token class","tag":"phpdoc:classref","type":"Class","methodName":"Parle\\Token"},{"id":"class.parle-errorinfo","name":"Parle\\ErrorInfo","description":"The Parle\\ErrorInfo class","tag":"phpdoc:classref","type":"Class","methodName":"Parle\\ErrorInfo"},{"id":"class.parle-lexerexception","name":"Parle\\LexerException","description":"The Parle\\LexerException class","tag":"phpdoc:classref","type":"Class","methodName":"Parle\\LexerException"},{"id":"class.parle-parserexception","name":"Parle\\ParserException","description":"The Parle\\ParserException class","tag":"phpdoc:classref","type":"Class","methodName":"Parle\\ParserException"},{"id":"book.parle","name":"Parle","description":"Parsing and lexing","tag":"book","type":"Extension","methodName":"Parle"},{"id":"intro.pcre","name":"Introduction","description":"Regular Expressions (Perl-Compatible)","tag":"preface","type":"General","methodName":"Introduction"},{"id":"pcre.installation","name":"Installation","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Installation"},{"id":"pcre.configuration","name":"Runtime Configuration","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"pcre.setup","name":"Installing\/Configuring","description":"Regular Expressions (Perl-Compatible)","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"pcre.constants","name":"Predefined Constants","description":"Regular Expressions (Perl-Compatible)","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"pcre.examples","name":"Examples","description":"Regular Expressions (Perl-Compatible)","tag":"appendix","type":"General","methodName":"Examples"},{"id":"regexp.introduction","name":"Introduction","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Introduction"},{"id":"regexp.reference.delimiters","name":"Delimiters","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Delimiters"},{"id":"regexp.reference.meta","name":"Meta-characters","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Meta-characters"},{"id":"regexp.reference.escape","name":"Escape sequences","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Escape sequences"},{"id":"regexp.reference.unicode","name":"Unicode character properties","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Unicode character properties"},{"id":"regexp.reference.anchors","name":"Anchors","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Anchors"},{"id":"regexp.reference.dot","name":"Dot","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Dot"},{"id":"regexp.reference.character-classes","name":"Character classes","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Character classes"},{"id":"regexp.reference.alternation","name":"Alternation","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Alternation"},{"id":"regexp.reference.internal-options","name":"Internal option setting","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Internal option setting"},{"id":"regexp.reference.subpatterns","name":"Subpatterns","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Subpatterns"},{"id":"regexp.reference.repetition","name":"Repetition","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Repetition"},{"id":"regexp.reference.back-references","name":"Back references","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Back references"},{"id":"regexp.reference.assertions","name":"Assertions","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Assertions"},{"id":"regexp.reference.onlyonce","name":"Once-only subpatterns","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Once-only subpatterns"},{"id":"regexp.reference.conditional","name":"Conditional subpatterns","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Conditional subpatterns"},{"id":"regexp.reference.comments","name":"Comments","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Comments"},{"id":"regexp.reference.recursive","name":"Recursive patterns","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Recursive patterns"},{"id":"regexp.reference.performance","name":"Performance","description":"Regular Expressions (Perl-Compatible)","tag":"section","type":"General","methodName":"Performance"},{"id":"reference.pcre.pattern.syntax","name":"PCRE regex syntax","description":"Pattern Syntax","tag":"chapter","type":"General","methodName":"PCRE regex syntax"},{"id":"reference.pcre.pattern.modifiers","name":"Possible modifiers in regex patterns","description":"Pattern Modifiers","tag":"article","type":"General","methodName":"Possible modifiers in regex patterns"},{"id":"reference.pcre.pattern.differences","name":"Differences From Perl","description":"Perl Differences","tag":"article","type":"General","methodName":"Differences From Perl"},{"id":"pcre.pattern","name":"PCRE Patterns","description":"Regular Expressions (Perl-Compatible)","tag":"part","type":"General","methodName":"PCRE Patterns"},{"id":"function.preg-filter","name":"preg_filter","description":"Perform a regular expression search and replace","tag":"refentry","type":"Function","methodName":"preg_filter"},{"id":"function.preg-grep","name":"preg_grep","description":"Return array entries that match the pattern","tag":"refentry","type":"Function","methodName":"preg_grep"},{"id":"function.preg-last-error","name":"preg_last_error","description":"Returns the error code of the last PCRE regex execution","tag":"refentry","type":"Function","methodName":"preg_last_error"},{"id":"function.preg-last-error-msg","name":"preg_last_error_msg","description":"Returns the error message of the last PCRE regex execution","tag":"refentry","type":"Function","methodName":"preg_last_error_msg"},{"id":"function.preg-match","name":"preg_match","description":"Perform a regular expression match","tag":"refentry","type":"Function","methodName":"preg_match"},{"id":"function.preg-match-all","name":"preg_match_all","description":"Perform a global regular expression match","tag":"refentry","type":"Function","methodName":"preg_match_all"},{"id":"function.preg-quote","name":"preg_quote","description":"Quote regular expression characters","tag":"refentry","type":"Function","methodName":"preg_quote"},{"id":"function.preg-replace","name":"preg_replace","description":"Perform a regular expression search and replace","tag":"refentry","type":"Function","methodName":"preg_replace"},{"id":"function.preg-replace-callback","name":"preg_replace_callback","description":"Perform a regular expression search and replace using a callback","tag":"refentry","type":"Function","methodName":"preg_replace_callback"},{"id":"function.preg-replace-callback-array","name":"preg_replace_callback_array","description":"Perform a regular expression search and replace using callbacks","tag":"refentry","type":"Function","methodName":"preg_replace_callback_array"},{"id":"function.preg-split","name":"preg_split","description":"Split string by a regular expression","tag":"refentry","type":"Function","methodName":"preg_split"},{"id":"ref.pcre","name":"PCRE Functions","description":"Regular Expressions (Perl-Compatible)","tag":"reference","type":"Extension","methodName":"PCRE Functions"},{"id":"book.pcre","name":"PCRE","description":"Regular Expressions (Perl-Compatible)","tag":"book","type":"Extension","methodName":"PCRE"},{"id":"intro.ssdeep","name":"Introduction","description":"ssdeep Fuzzy Hashing","tag":"preface","type":"General","methodName":"Introduction"},{"id":"ssdeep.requirements","name":"Requirements","description":"ssdeep Fuzzy Hashing","tag":"section","type":"General","methodName":"Requirements"},{"id":"ssdeep.installation","name":"Installation","description":"ssdeep Fuzzy Hashing","tag":"section","type":"General","methodName":"Installation"},{"id":"ssdeep.setup","name":"Installing\/Configuring","description":"ssdeep Fuzzy Hashing","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.ssdeep-fuzzy-compare","name":"ssdeep_fuzzy_compare","description":"Calculates the match score between two fuzzy hash signatures","tag":"refentry","type":"Function","methodName":"ssdeep_fuzzy_compare"},{"id":"function.ssdeep-fuzzy-hash","name":"ssdeep_fuzzy_hash","description":"Create a fuzzy hash from a string","tag":"refentry","type":"Function","methodName":"ssdeep_fuzzy_hash"},{"id":"function.ssdeep-fuzzy-hash-filename","name":"ssdeep_fuzzy_hash_filename","description":"Create a fuzzy hash from a file","tag":"refentry","type":"Function","methodName":"ssdeep_fuzzy_hash_filename"},{"id":"ref.ssdeep","name":"ssdeep Functions","description":"ssdeep Fuzzy Hashing","tag":"reference","type":"Extension","methodName":"ssdeep Functions"},{"id":"book.ssdeep","name":"ssdeep","description":"ssdeep Fuzzy Hashing","tag":"book","type":"Extension","methodName":"ssdeep"},{"id":"intro.strings","name":"Introduction","description":"Strings","tag":"preface","type":"General","methodName":"Introduction"},{"id":"strings.installation","name":"Installation","description":"Strings","tag":"section","type":"General","methodName":"Installation"},{"id":"strings.setup","name":"Installing\/Configuring","description":"Strings","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"string.constants","name":"Predefined Constants","description":"Strings","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.addcslashes","name":"addcslashes","description":"Quote string with slashes in a C style","tag":"refentry","type":"Function","methodName":"addcslashes"},{"id":"function.addslashes","name":"addslashes","description":"Quote string with slashes","tag":"refentry","type":"Function","methodName":"addslashes"},{"id":"function.bin2hex","name":"bin2hex","description":"Convert binary data into hexadecimal representation","tag":"refentry","type":"Function","methodName":"bin2hex"},{"id":"function.chop","name":"chop","description":"Alias of rtrim","tag":"refentry","type":"Function","methodName":"chop"},{"id":"function.chr","name":"chr","description":"Generate a single-byte string from a number","tag":"refentry","type":"Function","methodName":"chr"},{"id":"function.chunk-split","name":"chunk_split","description":"Split a string into smaller chunks","tag":"refentry","type":"Function","methodName":"chunk_split"},{"id":"function.convert-cyr-string","name":"convert_cyr_string","description":"Convert from one Cyrillic character set to another","tag":"refentry","type":"Function","methodName":"convert_cyr_string"},{"id":"function.convert-uudecode","name":"convert_uudecode","description":"Decode a uuencoded string","tag":"refentry","type":"Function","methodName":"convert_uudecode"},{"id":"function.convert-uuencode","name":"convert_uuencode","description":"Uuencode a string","tag":"refentry","type":"Function","methodName":"convert_uuencode"},{"id":"function.count-chars","name":"count_chars","description":"Return information about characters used in a string","tag":"refentry","type":"Function","methodName":"count_chars"},{"id":"function.crc32","name":"crc32","description":"Calculates the crc32 polynomial of a string","tag":"refentry","type":"Function","methodName":"crc32"},{"id":"function.crypt","name":"crypt","description":"One-way string hashing","tag":"refentry","type":"Function","methodName":"crypt"},{"id":"function.echo","name":"echo","description":"Output one or more strings","tag":"refentry","type":"Function","methodName":"echo"},{"id":"function.explode","name":"explode","description":"Split a string by a string","tag":"refentry","type":"Function","methodName":"explode"},{"id":"function.fprintf","name":"fprintf","description":"Write a formatted string to a stream","tag":"refentry","type":"Function","methodName":"fprintf"},{"id":"function.get-html-translation-table","name":"get_html_translation_table","description":"Returns the translation table used by htmlspecialchars and htmlentities","tag":"refentry","type":"Function","methodName":"get_html_translation_table"},{"id":"function.hebrev","name":"hebrev","description":"Convert logical Hebrew text to visual text","tag":"refentry","type":"Function","methodName":"hebrev"},{"id":"function.hebrevc","name":"hebrevc","description":"Convert logical Hebrew text to visual text with newline conversion","tag":"refentry","type":"Function","methodName":"hebrevc"},{"id":"function.hex2bin","name":"hex2bin","description":"Decodes a hexadecimally encoded binary string","tag":"refentry","type":"Function","methodName":"hex2bin"},{"id":"function.html-entity-decode","name":"html_entity_decode","description":"Convert HTML entities to their corresponding characters","tag":"refentry","type":"Function","methodName":"html_entity_decode"},{"id":"function.htmlentities","name":"htmlentities","description":"Convert all applicable characters to HTML entities","tag":"refentry","type":"Function","methodName":"htmlentities"},{"id":"function.htmlspecialchars","name":"htmlspecialchars","description":"Convert special characters to HTML entities","tag":"refentry","type":"Function","methodName":"htmlspecialchars"},{"id":"function.htmlspecialchars-decode","name":"htmlspecialchars_decode","description":"Convert special HTML entities back to characters","tag":"refentry","type":"Function","methodName":"htmlspecialchars_decode"},{"id":"function.implode","name":"implode","description":"Join array elements with a string","tag":"refentry","type":"Function","methodName":"implode"},{"id":"function.join","name":"join","description":"Alias of implode","tag":"refentry","type":"Function","methodName":"join"},{"id":"function.lcfirst","name":"lcfirst","description":"Make a string's first character lowercase","tag":"refentry","type":"Function","methodName":"lcfirst"},{"id":"function.levenshtein","name":"levenshtein","description":"Calculate Levenshtein distance between two strings","tag":"refentry","type":"Function","methodName":"levenshtein"},{"id":"function.localeconv","name":"localeconv","description":"Get numeric formatting information","tag":"refentry","type":"Function","methodName":"localeconv"},{"id":"function.ltrim","name":"ltrim","description":"Strip whitespace (or other characters) from the beginning of a string","tag":"refentry","type":"Function","methodName":"ltrim"},{"id":"function.md5","name":"md5","description":"Calculate the md5 hash of a string","tag":"refentry","type":"Function","methodName":"md5"},{"id":"function.md5-file","name":"md5_file","description":"Calculates the md5 hash of a given file","tag":"refentry","type":"Function","methodName":"md5_file"},{"id":"function.metaphone","name":"metaphone","description":"Calculate the metaphone key of a string","tag":"refentry","type":"Function","methodName":"metaphone"},{"id":"function.money-format","name":"money_format","description":"Formats a number as a currency string","tag":"refentry","type":"Function","methodName":"money_format"},{"id":"function.nl-langinfo","name":"nl_langinfo","description":"Query language and locale information","tag":"refentry","type":"Function","methodName":"nl_langinfo"},{"id":"function.nl2br","name":"nl2br","description":"Inserts HTML line breaks before all newlines in a string","tag":"refentry","type":"Function","methodName":"nl2br"},{"id":"function.number-format","name":"number_format","description":"Format a number with grouped thousands","tag":"refentry","type":"Function","methodName":"number_format"},{"id":"function.ord","name":"ord","description":"Convert the first byte of a string to a value between 0 and 255","tag":"refentry","type":"Function","methodName":"ord"},{"id":"function.parse-str","name":"parse_str","description":"Parse a string as a URL query string","tag":"refentry","type":"Function","methodName":"parse_str"},{"id":"function.print","name":"print","description":"Output a string","tag":"refentry","type":"Function","methodName":"print"},{"id":"function.printf","name":"printf","description":"Output a formatted string","tag":"refentry","type":"Function","methodName":"printf"},{"id":"function.quoted-printable-decode","name":"quoted_printable_decode","description":"Convert a quoted-printable string to an 8 bit string","tag":"refentry","type":"Function","methodName":"quoted_printable_decode"},{"id":"function.quoted-printable-encode","name":"quoted_printable_encode","description":"Convert a 8 bit string to a quoted-printable string","tag":"refentry","type":"Function","methodName":"quoted_printable_encode"},{"id":"function.quotemeta","name":"quotemeta","description":"Quote meta characters","tag":"refentry","type":"Function","methodName":"quotemeta"},{"id":"function.rtrim","name":"rtrim","description":"Strip whitespace (or other characters) from the end of a string","tag":"refentry","type":"Function","methodName":"rtrim"},{"id":"function.setlocale","name":"setlocale","description":"Set locale information","tag":"refentry","type":"Function","methodName":"setlocale"},{"id":"function.sha1","name":"sha1","description":"Calculate the sha1 hash of a string","tag":"refentry","type":"Function","methodName":"sha1"},{"id":"function.sha1-file","name":"sha1_file","description":"Calculate the sha1 hash of a file","tag":"refentry","type":"Function","methodName":"sha1_file"},{"id":"function.similar-text","name":"similar_text","description":"Calculate the similarity between two strings","tag":"refentry","type":"Function","methodName":"similar_text"},{"id":"function.soundex","name":"soundex","description":"Calculate the soundex key of a string","tag":"refentry","type":"Function","methodName":"soundex"},{"id":"function.sprintf","name":"sprintf","description":"Return a formatted string","tag":"refentry","type":"Function","methodName":"sprintf"},{"id":"function.sscanf","name":"sscanf","description":"Parses input from a string according to a format","tag":"refentry","type":"Function","methodName":"sscanf"},{"id":"function.str-contains","name":"str_contains","description":"Determine if a string contains a given substring","tag":"refentry","type":"Function","methodName":"str_contains"},{"id":"function.str-decrement","name":"str_decrement","description":"Decrement an alphanumeric string","tag":"refentry","type":"Function","methodName":"str_decrement"},{"id":"function.str-ends-with","name":"str_ends_with","description":"Checks if a string ends with a given substring","tag":"refentry","type":"Function","methodName":"str_ends_with"},{"id":"function.str-getcsv","name":"str_getcsv","description":"Parse a CSV string into an array","tag":"refentry","type":"Function","methodName":"str_getcsv"},{"id":"function.str-increment","name":"str_increment","description":"Increment an alphanumeric string","tag":"refentry","type":"Function","methodName":"str_increment"},{"id":"function.str-ireplace","name":"str_ireplace","description":"Case-insensitive version of str_replace","tag":"refentry","type":"Function","methodName":"str_ireplace"},{"id":"function.str-pad","name":"str_pad","description":"Pad a string to a certain length with another string","tag":"refentry","type":"Function","methodName":"str_pad"},{"id":"function.str-repeat","name":"str_repeat","description":"Repeat a string","tag":"refentry","type":"Function","methodName":"str_repeat"},{"id":"function.str-replace","name":"str_replace","description":"Replace all occurrences of the search string with the replacement string","tag":"refentry","type":"Function","methodName":"str_replace"},{"id":"function.str-rot13","name":"str_rot13","description":"Perform the rot13 transform on a string","tag":"refentry","type":"Function","methodName":"str_rot13"},{"id":"function.str-shuffle","name":"str_shuffle","description":"Randomly shuffles a string","tag":"refentry","type":"Function","methodName":"str_shuffle"},{"id":"function.str-split","name":"str_split","description":"Convert a string to an array","tag":"refentry","type":"Function","methodName":"str_split"},{"id":"function.str-starts-with","name":"str_starts_with","description":"Checks if a string starts with a given substring","tag":"refentry","type":"Function","methodName":"str_starts_with"},{"id":"function.str-word-count","name":"str_word_count","description":"Return information about words used in a string","tag":"refentry","type":"Function","methodName":"str_word_count"},{"id":"function.strcasecmp","name":"strcasecmp","description":"Binary safe case-insensitive string comparison","tag":"refentry","type":"Function","methodName":"strcasecmp"},{"id":"function.strchr","name":"strchr","description":"Alias of strstr","tag":"refentry","type":"Function","methodName":"strchr"},{"id":"function.strcmp","name":"strcmp","description":"Binary safe string comparison","tag":"refentry","type":"Function","methodName":"strcmp"},{"id":"function.strcoll","name":"strcoll","description":"Locale based string comparison","tag":"refentry","type":"Function","methodName":"strcoll"},{"id":"function.strcspn","name":"strcspn","description":"Find length of initial segment not matching mask","tag":"refentry","type":"Function","methodName":"strcspn"},{"id":"function.strip-tags","name":"strip_tags","description":"Strip HTML and PHP tags from a string","tag":"refentry","type":"Function","methodName":"strip_tags"},{"id":"function.stripcslashes","name":"stripcslashes","description":"Un-quote string quoted with addcslashes","tag":"refentry","type":"Function","methodName":"stripcslashes"},{"id":"function.stripos","name":"stripos","description":"Find the position of the first occurrence of a case-insensitive substring in a string","tag":"refentry","type":"Function","methodName":"stripos"},{"id":"function.stripslashes","name":"stripslashes","description":"Un-quotes a quoted string","tag":"refentry","type":"Function","methodName":"stripslashes"},{"id":"function.stristr","name":"stristr","description":"Case-insensitive strstr","tag":"refentry","type":"Function","methodName":"stristr"},{"id":"function.strlen","name":"strlen","description":"Get string length","tag":"refentry","type":"Function","methodName":"strlen"},{"id":"function.strnatcasecmp","name":"strnatcasecmp","description":"Case insensitive string comparisons using a \"natural order\" algorithm","tag":"refentry","type":"Function","methodName":"strnatcasecmp"},{"id":"function.strnatcmp","name":"strnatcmp","description":"String comparisons using a \"natural order\" algorithm","tag":"refentry","type":"Function","methodName":"strnatcmp"},{"id":"function.strncasecmp","name":"strncasecmp","description":"Binary safe case-insensitive string comparison of the first n characters","tag":"refentry","type":"Function","methodName":"strncasecmp"},{"id":"function.strncmp","name":"strncmp","description":"Binary safe string comparison of the first n characters","tag":"refentry","type":"Function","methodName":"strncmp"},{"id":"function.strpbrk","name":"strpbrk","description":"Search a string for any of a set of characters","tag":"refentry","type":"Function","methodName":"strpbrk"},{"id":"function.strpos","name":"strpos","description":"Find the position of the first occurrence of a substring in a string","tag":"refentry","type":"Function","methodName":"strpos"},{"id":"function.strrchr","name":"strrchr","description":"Find the last occurrence of a character in a string","tag":"refentry","type":"Function","methodName":"strrchr"},{"id":"function.strrev","name":"strrev","description":"Reverse a string","tag":"refentry","type":"Function","methodName":"strrev"},{"id":"function.strripos","name":"strripos","description":"Find the position of the last occurrence of a case-insensitive substring in a string","tag":"refentry","type":"Function","methodName":"strripos"},{"id":"function.strrpos","name":"strrpos","description":"Find the position of the last occurrence of a substring in a string","tag":"refentry","type":"Function","methodName":"strrpos"},{"id":"function.strspn","name":"strspn","description":"Finds the length of the initial segment of a string consisting\n entirely of characters contained within a given mask","tag":"refentry","type":"Function","methodName":"strspn"},{"id":"function.strstr","name":"strstr","description":"Find the first occurrence of a string","tag":"refentry","type":"Function","methodName":"strstr"},{"id":"function.strtok","name":"strtok","description":"Tokenize string","tag":"refentry","type":"Function","methodName":"strtok"},{"id":"function.strtolower","name":"strtolower","description":"Make a string lowercase","tag":"refentry","type":"Function","methodName":"strtolower"},{"id":"function.strtoupper","name":"strtoupper","description":"Make a string uppercase","tag":"refentry","type":"Function","methodName":"strtoupper"},{"id":"function.strtr","name":"strtr","description":"Translate characters or replace substrings","tag":"refentry","type":"Function","methodName":"strtr"},{"id":"function.substr","name":"substr","description":"Return part of a string","tag":"refentry","type":"Function","methodName":"substr"},{"id":"function.substr-compare","name":"substr_compare","description":"Binary safe comparison of two strings from an offset, up to length characters","tag":"refentry","type":"Function","methodName":"substr_compare"},{"id":"function.substr-count","name":"substr_count","description":"Count the number of substring occurrences","tag":"refentry","type":"Function","methodName":"substr_count"},{"id":"function.substr-replace","name":"substr_replace","description":"Replace text within a portion of a string","tag":"refentry","type":"Function","methodName":"substr_replace"},{"id":"function.trim","name":"trim","description":"Strip whitespace (or other characters) from the beginning and end of a string","tag":"refentry","type":"Function","methodName":"trim"},{"id":"function.ucfirst","name":"ucfirst","description":"Make a string's first character uppercase","tag":"refentry","type":"Function","methodName":"ucfirst"},{"id":"function.ucwords","name":"ucwords","description":"Uppercase the first character of each word in a string","tag":"refentry","type":"Function","methodName":"ucwords"},{"id":"function.utf8-decode","name":"utf8_decode","description":"Converts a string from UTF-8 to ISO-8859-1, replacing invalid or unrepresentable\n characters","tag":"refentry","type":"Function","methodName":"utf8_decode"},{"id":"function.utf8-encode","name":"utf8_encode","description":"Converts a string from ISO-8859-1 to UTF-8","tag":"refentry","type":"Function","methodName":"utf8_encode"},{"id":"function.vfprintf","name":"vfprintf","description":"Write a formatted string to a stream","tag":"refentry","type":"Function","methodName":"vfprintf"},{"id":"function.vprintf","name":"vprintf","description":"Output a formatted string","tag":"refentry","type":"Function","methodName":"vprintf"},{"id":"function.vsprintf","name":"vsprintf","description":"Return a formatted string","tag":"refentry","type":"Function","methodName":"vsprintf"},{"id":"function.wordwrap","name":"wordwrap","description":"Wraps a string to a given number of characters","tag":"refentry","type":"Function","methodName":"wordwrap"},{"id":"ref.strings","name":"String Functions","description":"Strings","tag":"reference","type":"Extension","methodName":"String Functions"},{"id":"changelog.strings","name":"Changelog","description":"Strings","tag":"appendix","type":"General","methodName":"Changelog"},{"id":"book.strings","name":"Strings","description":"Text Processing","tag":"book","type":"Extension","methodName":"Strings"},{"id":"refs.basic.text","name":"Text Processing","description":"Function Reference","tag":"set","type":"Extension","methodName":"Text Processing"},{"id":"intro.array","name":"Introduction","description":"Arrays","tag":"preface","type":"General","methodName":"Introduction"},{"id":"array.constants","name":"Predefined Constants","description":"Arrays","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"array.sorting","name":"Sorting Arrays","description":"Arrays","tag":"chapter","type":"General","methodName":"Sorting Arrays"},{"id":"function.array","name":"array","description":"Create an array","tag":"refentry","type":"Function","methodName":"array"},{"id":"function.array-all","name":"array_all","description":"Checks if all array elements satisfy a callback function","tag":"refentry","type":"Function","methodName":"array_all"},{"id":"function.array-any","name":"array_any","description":"Checks if at least one array element satisfies a callback function","tag":"refentry","type":"Function","methodName":"array_any"},{"id":"function.array-change-key-case","name":"array_change_key_case","description":"Changes the case of all keys in an array","tag":"refentry","type":"Function","methodName":"array_change_key_case"},{"id":"function.array-chunk","name":"array_chunk","description":"Split an array into chunks","tag":"refentry","type":"Function","methodName":"array_chunk"},{"id":"function.array-column","name":"array_column","description":"Return the values from a single column in the input array","tag":"refentry","type":"Function","methodName":"array_column"},{"id":"function.array-combine","name":"array_combine","description":"Creates an array by using one array for keys and another for its values","tag":"refentry","type":"Function","methodName":"array_combine"},{"id":"function.array-count-values","name":"array_count_values","description":"Counts the occurrences of each distinct value in an array","tag":"refentry","type":"Function","methodName":"array_count_values"},{"id":"function.array-diff","name":"array_diff","description":"Computes the difference of arrays","tag":"refentry","type":"Function","methodName":"array_diff"},{"id":"function.array-diff-assoc","name":"array_diff_assoc","description":"Computes the difference of arrays with additional index check","tag":"refentry","type":"Function","methodName":"array_diff_assoc"},{"id":"function.array-diff-key","name":"array_diff_key","description":"Computes the difference of arrays using keys for comparison","tag":"refentry","type":"Function","methodName":"array_diff_key"},{"id":"function.array-diff-uassoc","name":"array_diff_uassoc","description":"Computes the difference of arrays with additional index check which is performed by a user supplied callback function","tag":"refentry","type":"Function","methodName":"array_diff_uassoc"},{"id":"function.array-diff-ukey","name":"array_diff_ukey","description":"Computes the difference of arrays using a callback function on the keys for comparison","tag":"refentry","type":"Function","methodName":"array_diff_ukey"},{"id":"function.array-fill","name":"array_fill","description":"Fill an array with values","tag":"refentry","type":"Function","methodName":"array_fill"},{"id":"function.array-fill-keys","name":"array_fill_keys","description":"Fill an array with values, specifying keys","tag":"refentry","type":"Function","methodName":"array_fill_keys"},{"id":"function.array-filter","name":"array_filter","description":"Filters elements of an array using a callback function","tag":"refentry","type":"Function","methodName":"array_filter"},{"id":"function.array-find","name":"array_find","description":"Returns the first element satisfying a callback function","tag":"refentry","type":"Function","methodName":"array_find"},{"id":"function.array-find-key","name":"array_find_key","description":"Returns the key of the first element satisfying a callback function","tag":"refentry","type":"Function","methodName":"array_find_key"},{"id":"function.array-first","name":"array_first","description":"Gets the first value of an array","tag":"refentry","type":"Function","methodName":"array_first"},{"id":"function.array-flip","name":"array_flip","description":"Exchanges all keys with their associated values in an array","tag":"refentry","type":"Function","methodName":"array_flip"},{"id":"function.array-intersect","name":"array_intersect","description":"Computes the intersection of arrays","tag":"refentry","type":"Function","methodName":"array_intersect"},{"id":"function.array-intersect-assoc","name":"array_intersect_assoc","description":"Computes the intersection of arrays with additional index check","tag":"refentry","type":"Function","methodName":"array_intersect_assoc"},{"id":"function.array-intersect-key","name":"array_intersect_key","description":"Computes the intersection of arrays using keys for comparison","tag":"refentry","type":"Function","methodName":"array_intersect_key"},{"id":"function.array-intersect-uassoc","name":"array_intersect_uassoc","description":"Computes the intersection of arrays with additional index check, compares indexes by a callback function","tag":"refentry","type":"Function","methodName":"array_intersect_uassoc"},{"id":"function.array-intersect-ukey","name":"array_intersect_ukey","description":"Computes the intersection of arrays using a callback function on the keys for comparison","tag":"refentry","type":"Function","methodName":"array_intersect_ukey"},{"id":"function.array-is-list","name":"array_is_list","description":"Checks whether a given array is a list","tag":"refentry","type":"Function","methodName":"array_is_list"},{"id":"function.array-key-exists","name":"array_key_exists","description":"Checks if the given key or index exists in the array","tag":"refentry","type":"Function","methodName":"array_key_exists"},{"id":"function.array-key-first","name":"array_key_first","description":"Gets the first key of an array","tag":"refentry","type":"Function","methodName":"array_key_first"},{"id":"function.array-key-last","name":"array_key_last","description":"Gets the last key of an array","tag":"refentry","type":"Function","methodName":"array_key_last"},{"id":"function.array-keys","name":"array_keys","description":"Return all the keys or a subset of the keys of an array","tag":"refentry","type":"Function","methodName":"array_keys"},{"id":"function.array-last","name":"array_last","description":"Gets the last value of an array","tag":"refentry","type":"Function","methodName":"array_last"},{"id":"function.array-map","name":"array_map","description":"Applies the callback to the elements of the given arrays","tag":"refentry","type":"Function","methodName":"array_map"},{"id":"function.array-merge","name":"array_merge","description":"Merge one or more arrays","tag":"refentry","type":"Function","methodName":"array_merge"},{"id":"function.array-merge-recursive","name":"array_merge_recursive","description":"Merge one or more arrays recursively","tag":"refentry","type":"Function","methodName":"array_merge_recursive"},{"id":"function.array-multisort","name":"array_multisort","description":"Sort multiple or multi-dimensional arrays","tag":"refentry","type":"Function","methodName":"array_multisort"},{"id":"function.array-pad","name":"array_pad","description":"Pad array to the specified length with a value","tag":"refentry","type":"Function","methodName":"array_pad"},{"id":"function.array-pop","name":"array_pop","description":"Pop the element off the end of array","tag":"refentry","type":"Function","methodName":"array_pop"},{"id":"function.array-product","name":"array_product","description":"Calculate the product of values in an array","tag":"refentry","type":"Function","methodName":"array_product"},{"id":"function.array-push","name":"array_push","description":"Push one or more elements onto the end of array","tag":"refentry","type":"Function","methodName":"array_push"},{"id":"function.array-rand","name":"array_rand","description":"Pick one or more random keys out of an array","tag":"refentry","type":"Function","methodName":"array_rand"},{"id":"function.array-reduce","name":"array_reduce","description":"Iteratively reduce the array to a single value using a callback function","tag":"refentry","type":"Function","methodName":"array_reduce"},{"id":"function.array-replace","name":"array_replace","description":"Replaces elements from passed arrays into the first array","tag":"refentry","type":"Function","methodName":"array_replace"},{"id":"function.array-replace-recursive","name":"array_replace_recursive","description":"Replaces elements from passed arrays into the first array recursively","tag":"refentry","type":"Function","methodName":"array_replace_recursive"},{"id":"function.array-reverse","name":"array_reverse","description":"Return an array with elements in reverse order","tag":"refentry","type":"Function","methodName":"array_reverse"},{"id":"function.array-search","name":"array_search","description":"Searches the array for a given value and returns the first corresponding key if successful","tag":"refentry","type":"Function","methodName":"array_search"},{"id":"function.array-shift","name":"array_shift","description":"Shift an element off the beginning of array","tag":"refentry","type":"Function","methodName":"array_shift"},{"id":"function.array-slice","name":"array_slice","description":"Extract a slice of the array","tag":"refentry","type":"Function","methodName":"array_slice"},{"id":"function.array-splice","name":"array_splice","description":"Remove a portion of the array and replace it with something else","tag":"refentry","type":"Function","methodName":"array_splice"},{"id":"function.array-sum","name":"array_sum","description":"Calculate the sum of values in an array","tag":"refentry","type":"Function","methodName":"array_sum"},{"id":"function.array-udiff","name":"array_udiff","description":"Computes the difference of arrays by using a callback function for data comparison","tag":"refentry","type":"Function","methodName":"array_udiff"},{"id":"function.array-udiff-assoc","name":"array_udiff_assoc","description":"Computes the difference of arrays with additional index check, compares data by a callback function","tag":"refentry","type":"Function","methodName":"array_udiff_assoc"},{"id":"function.array-udiff-uassoc","name":"array_udiff_uassoc","description":"Computes the difference of arrays with additional index check, compares data and indexes by a callback function","tag":"refentry","type":"Function","methodName":"array_udiff_uassoc"},{"id":"function.array-uintersect","name":"array_uintersect","description":"Computes the intersection of arrays, compares data by a callback function","tag":"refentry","type":"Function","methodName":"array_uintersect"},{"id":"function.array-uintersect-assoc","name":"array_uintersect_assoc","description":"Computes the intersection of arrays with additional index check, compares data by a callback function","tag":"refentry","type":"Function","methodName":"array_uintersect_assoc"},{"id":"function.array-uintersect-uassoc","name":"array_uintersect_uassoc","description":"Computes the intersection of arrays with additional index check, compares data and indexes by separate callback functions","tag":"refentry","type":"Function","methodName":"array_uintersect_uassoc"},{"id":"function.array-unique","name":"array_unique","description":"Removes duplicate values from an array","tag":"refentry","type":"Function","methodName":"array_unique"},{"id":"function.array-unshift","name":"array_unshift","description":"Prepend one or more elements to the beginning of an array","tag":"refentry","type":"Function","methodName":"array_unshift"},{"id":"function.array-values","name":"array_values","description":"Return all the values of an array","tag":"refentry","type":"Function","methodName":"array_values"},{"id":"function.array-walk","name":"array_walk","description":"Apply a user supplied function to every member of an array","tag":"refentry","type":"Function","methodName":"array_walk"},{"id":"function.array-walk-recursive","name":"array_walk_recursive","description":"Apply a user function recursively to every member of an array","tag":"refentry","type":"Function","methodName":"array_walk_recursive"},{"id":"function.arsort","name":"arsort","description":"Sort an array in descending order and maintain index association","tag":"refentry","type":"Function","methodName":"arsort"},{"id":"function.asort","name":"asort","description":"Sort an array in ascending order and maintain index association","tag":"refentry","type":"Function","methodName":"asort"},{"id":"function.compact","name":"compact","description":"Create array containing variables and their values","tag":"refentry","type":"Function","methodName":"compact"},{"id":"function.count","name":"count","description":"Counts all elements in an array or in a Countable object","tag":"refentry","type":"Function","methodName":"count"},{"id":"function.current","name":"current","description":"Return the current element in an array","tag":"refentry","type":"Function","methodName":"current"},{"id":"function.each","name":"each","description":"Return the current key and value pair from an array and advance the array cursor","tag":"refentry","type":"Function","methodName":"each"},{"id":"function.end","name":"end","description":"Set the internal pointer of an array to its last element","tag":"refentry","type":"Function","methodName":"end"},{"id":"function.extract","name":"extract","description":"Import variables into the current symbol table from an array","tag":"refentry","type":"Function","methodName":"extract"},{"id":"function.in-array","name":"in_array","description":"Checks if a value exists in an array","tag":"refentry","type":"Function","methodName":"in_array"},{"id":"function.key","name":"key","description":"Fetch a key from an array","tag":"refentry","type":"Function","methodName":"key"},{"id":"function.key-exists","name":"key_exists","description":"Alias of array_key_exists","tag":"refentry","type":"Function","methodName":"key_exists"},{"id":"function.krsort","name":"krsort","description":"Sort an array by key in descending order","tag":"refentry","type":"Function","methodName":"krsort"},{"id":"function.ksort","name":"ksort","description":"Sort an array by key in ascending order","tag":"refentry","type":"Function","methodName":"ksort"},{"id":"function.list","name":"list","description":"Assign variables as if they were an array","tag":"refentry","type":"Function","methodName":"list"},{"id":"function.natcasesort","name":"natcasesort","description":"Sort an array using a case insensitive \"natural order\" algorithm","tag":"refentry","type":"Function","methodName":"natcasesort"},{"id":"function.natsort","name":"natsort","description":"Sort an array using a \"natural order\" algorithm","tag":"refentry","type":"Function","methodName":"natsort"},{"id":"function.next","name":"next","description":"Advance the internal pointer of an array","tag":"refentry","type":"Function","methodName":"next"},{"id":"function.pos","name":"pos","description":"Alias of current","tag":"refentry","type":"Function","methodName":"pos"},{"id":"function.prev","name":"prev","description":"Rewind the internal array pointer","tag":"refentry","type":"Function","methodName":"prev"},{"id":"function.range","name":"range","description":"Create an array containing a range of elements","tag":"refentry","type":"Function","methodName":"range"},{"id":"function.reset","name":"reset","description":"Set the internal pointer of an array to its first element","tag":"refentry","type":"Function","methodName":"reset"},{"id":"function.rsort","name":"rsort","description":"Sort an array in descending order","tag":"refentry","type":"Function","methodName":"rsort"},{"id":"function.shuffle","name":"shuffle","description":"Shuffle an array","tag":"refentry","type":"Function","methodName":"shuffle"},{"id":"function.sizeof","name":"sizeof","description":"Alias of count","tag":"refentry","type":"Function","methodName":"sizeof"},{"id":"function.sort","name":"sort","description":"Sort an array in ascending order","tag":"refentry","type":"Function","methodName":"sort"},{"id":"function.uasort","name":"uasort","description":"Sort an array with a user-defined comparison function and maintain index association","tag":"refentry","type":"Function","methodName":"uasort"},{"id":"function.uksort","name":"uksort","description":"Sort an array by keys using a user-defined comparison function","tag":"refentry","type":"Function","methodName":"uksort"},{"id":"function.usort","name":"usort","description":"Sort an array by values using a user-defined comparison function","tag":"refentry","type":"Function","methodName":"usort"},{"id":"ref.array","name":"Array Functions","description":"Arrays","tag":"reference","type":"Extension","methodName":"Array Functions"},{"id":"book.array","name":"Arrays","description":"Variable and Type Related Extensions","tag":"book","type":"Extension","methodName":"Arrays"},{"id":"intro.classobj","name":"Introduction","description":"Class\/Object Information","tag":"preface","type":"General","methodName":"Introduction"},{"id":"classobj.examples","name":"Examples","description":"Class\/Object Information","tag":"appendix","type":"General","methodName":"Examples"},{"id":"function.autoload","name":"__autoload","description":"Attempt to load undefined class","tag":"refentry","type":"Function","methodName":"__autoload"},{"id":"function.class-alias","name":"class_alias","description":"Creates an alias for a class","tag":"refentry","type":"Function","methodName":"class_alias"},{"id":"function.class-exists","name":"class_exists","description":"Checks if the class has been defined","tag":"refentry","type":"Function","methodName":"class_exists"},{"id":"function.enum-exists","name":"enum_exists","description":"Checks if the enum has been defined","tag":"refentry","type":"Function","methodName":"enum_exists"},{"id":"function.get-called-class","name":"get_called_class","description":"The \"Late Static Binding\" class name","tag":"refentry","type":"Function","methodName":"get_called_class"},{"id":"function.get-class","name":"get_class","description":"Returns the name of the class of an object","tag":"refentry","type":"Function","methodName":"get_class"},{"id":"function.get-class-methods","name":"get_class_methods","description":"Gets the class methods' names","tag":"refentry","type":"Function","methodName":"get_class_methods"},{"id":"function.get-class-vars","name":"get_class_vars","description":"Get the default properties of the class","tag":"refentry","type":"Function","methodName":"get_class_vars"},{"id":"function.get-declared-classes","name":"get_declared_classes","description":"Returns an array with the name of the defined classes","tag":"refentry","type":"Function","methodName":"get_declared_classes"},{"id":"function.get-declared-interfaces","name":"get_declared_interfaces","description":"Returns an array of all declared interfaces","tag":"refentry","type":"Function","methodName":"get_declared_interfaces"},{"id":"function.get-declared-traits","name":"get_declared_traits","description":"Returns an array of all declared traits","tag":"refentry","type":"Function","methodName":"get_declared_traits"},{"id":"function.get-mangled-object-vars","name":"get_mangled_object_vars","description":"Returns an array of mangled object properties","tag":"refentry","type":"Function","methodName":"get_mangled_object_vars"},{"id":"function.get-object-vars","name":"get_object_vars","description":"Gets the properties of the given object","tag":"refentry","type":"Function","methodName":"get_object_vars"},{"id":"function.get-parent-class","name":"get_parent_class","description":"Retrieves the parent class name for object or class","tag":"refentry","type":"Function","methodName":"get_parent_class"},{"id":"function.interface-exists","name":"interface_exists","description":"Checks if the interface has been defined","tag":"refentry","type":"Function","methodName":"interface_exists"},{"id":"function.is-a","name":"is_a","description":"Checks whether the object is of a given type or subtype","tag":"refentry","type":"Function","methodName":"is_a"},{"id":"function.is-subclass-of","name":"is_subclass_of","description":"Checks if the object has this class as one of its parents or implements it","tag":"refentry","type":"Function","methodName":"is_subclass_of"},{"id":"function.method-exists","name":"method_exists","description":"Checks if the class method exists","tag":"refentry","type":"Function","methodName":"method_exists"},{"id":"function.property-exists","name":"property_exists","description":"Checks if the object or class has a property","tag":"refentry","type":"Function","methodName":"property_exists"},{"id":"function.trait-exists","name":"trait_exists","description":"Checks if the trait exists","tag":"refentry","type":"Function","methodName":"trait_exists"},{"id":"ref.classobj","name":"Classes\/Object Functions","description":"Class\/Object Information","tag":"reference","type":"Extension","methodName":"Classes\/Object Functions"},{"id":"book.classobj","name":"Classes\/Objects","description":"Class\/Object Information","tag":"book","type":"Extension","methodName":"Classes\/Objects"},{"id":"intro.ctype","name":"Introduction","description":"Character type checking","tag":"preface","type":"General","methodName":"Introduction"},{"id":"ctype.requirements","name":"Requirements","description":"Character type checking","tag":"section","type":"General","methodName":"Requirements"},{"id":"ctype.installation","name":"Installation","description":"Character type checking","tag":"section","type":"General","methodName":"Installation"},{"id":"ctype.setup","name":"Installing\/Configuring","description":"Character type checking","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.ctype-alnum","name":"ctype_alnum","description":"Check for alphanumeric character(s)","tag":"refentry","type":"Function","methodName":"ctype_alnum"},{"id":"function.ctype-alpha","name":"ctype_alpha","description":"Check for alphabetic character(s)","tag":"refentry","type":"Function","methodName":"ctype_alpha"},{"id":"function.ctype-cntrl","name":"ctype_cntrl","description":"Check for control character(s)","tag":"refentry","type":"Function","methodName":"ctype_cntrl"},{"id":"function.ctype-digit","name":"ctype_digit","description":"Check for numeric character(s)","tag":"refentry","type":"Function","methodName":"ctype_digit"},{"id":"function.ctype-graph","name":"ctype_graph","description":"Check for any printable character(s) except space","tag":"refentry","type":"Function","methodName":"ctype_graph"},{"id":"function.ctype-lower","name":"ctype_lower","description":"Check for lowercase character(s)","tag":"refentry","type":"Function","methodName":"ctype_lower"},{"id":"function.ctype-print","name":"ctype_print","description":"Check for printable character(s)","tag":"refentry","type":"Function","methodName":"ctype_print"},{"id":"function.ctype-punct","name":"ctype_punct","description":"Check for any printable character which is not whitespace or an\n alphanumeric character","tag":"refentry","type":"Function","methodName":"ctype_punct"},{"id":"function.ctype-space","name":"ctype_space","description":"Check for whitespace character(s)","tag":"refentry","type":"Function","methodName":"ctype_space"},{"id":"function.ctype-upper","name":"ctype_upper","description":"Check for uppercase character(s)","tag":"refentry","type":"Function","methodName":"ctype_upper"},{"id":"function.ctype-xdigit","name":"ctype_xdigit","description":"Check for character(s) representing a hexadecimal digit","tag":"refentry","type":"Function","methodName":"ctype_xdigit"},{"id":"ref.ctype","name":"Ctype Functions","description":"Character type checking","tag":"reference","type":"Extension","methodName":"Ctype Functions"},{"id":"book.ctype","name":"Ctype","description":"Character type checking","tag":"book","type":"Extension","methodName":"Ctype"},{"id":"intro.filter","name":"Introduction","description":"Data Filtering","tag":"preface","type":"General","methodName":"Introduction"},{"id":"filter.installation","name":"Installation","description":"Data Filtering","tag":"section","type":"General","methodName":"Installation"},{"id":"filter.configuration","name":"Runtime Configuration","description":"Data Filtering","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"filter.setup","name":"Installing\/Configuring","description":"Data Filtering","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"filter.constants","name":"Predefined Constants","description":"Data Filtering","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"filter.examples.validation","name":"Validation","description":"Data Filtering","tag":"section","type":"General","methodName":"Validation"},{"id":"filter.examples.sanitization","name":"Sanitization","description":"Data Filtering","tag":"section","type":"General","methodName":"Sanitization"},{"id":"filter.examples","name":"Examples","description":"Data Filtering","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.filter-has-var","name":"filter_has_var","description":"Checks if a variable of the specified type exists","tag":"refentry","type":"Function","methodName":"filter_has_var"},{"id":"function.filter-id","name":"filter_id","description":"Returns the filter ID belonging to a named filter","tag":"refentry","type":"Function","methodName":"filter_id"},{"id":"function.filter-input","name":"filter_input","description":"Gets a specific external variable by name and optionally filters it","tag":"refentry","type":"Function","methodName":"filter_input"},{"id":"function.filter-input-array","name":"filter_input_array","description":"Gets external variables and optionally filters them","tag":"refentry","type":"Function","methodName":"filter_input_array"},{"id":"function.filter-list","name":"filter_list","description":"Returns a list of all supported filters","tag":"refentry","type":"Function","methodName":"filter_list"},{"id":"function.filter-var","name":"filter_var","description":"Filters a variable with a specified filter","tag":"refentry","type":"Function","methodName":"filter_var"},{"id":"function.filter-var-array","name":"filter_var_array","description":"Gets multiple variables and optionally filters them","tag":"refentry","type":"Function","methodName":"filter_var_array"},{"id":"ref.filter","name":"Filter Functions","description":"Data Filtering","tag":"reference","type":"Extension","methodName":"Filter Functions"},{"id":"book.filter","name":"Filter","description":"Data Filtering","tag":"book","type":"Extension","methodName":"Filter"},{"id":"intro.funchand","name":"Introduction","description":"Function Handling","tag":"preface","type":"General","methodName":"Introduction"},{"id":"function.call-user-func","name":"call_user_func","description":"Call the callback given by the first parameter","tag":"refentry","type":"Function","methodName":"call_user_func"},{"id":"function.call-user-func-array","name":"call_user_func_array","description":"Call a callback with an array of parameters","tag":"refentry","type":"Function","methodName":"call_user_func_array"},{"id":"function.create-function","name":"create_function","description":"Create a function dynamically by evaluating a string of code","tag":"refentry","type":"Function","methodName":"create_function"},{"id":"function.forward-static-call","name":"forward_static_call","description":"Call a static method","tag":"refentry","type":"Function","methodName":"forward_static_call"},{"id":"function.forward-static-call-array","name":"forward_static_call_array","description":"Call a static method and pass the arguments as array","tag":"refentry","type":"Function","methodName":"forward_static_call_array"},{"id":"function.func-get-arg","name":"func_get_arg","description":"Return an item from the argument list","tag":"refentry","type":"Function","methodName":"func_get_arg"},{"id":"function.func-get-args","name":"func_get_args","description":"Returns an array comprising a function's argument list","tag":"refentry","type":"Function","methodName":"func_get_args"},{"id":"function.func-num-args","name":"func_num_args","description":"Returns the number of arguments passed to the function","tag":"refentry","type":"Function","methodName":"func_num_args"},{"id":"function.function-exists","name":"function_exists","description":"Return true if the given function has been defined","tag":"refentry","type":"Function","methodName":"function_exists"},{"id":"function.get-defined-functions","name":"get_defined_functions","description":"Returns an array of all defined functions","tag":"refentry","type":"Function","methodName":"get_defined_functions"},{"id":"function.register-shutdown-function","name":"register_shutdown_function","description":"Register a function for execution on shutdown","tag":"refentry","type":"Function","methodName":"register_shutdown_function"},{"id":"function.register-tick-function","name":"register_tick_function","description":"Register a function for execution on each tick","tag":"refentry","type":"Function","methodName":"register_tick_function"},{"id":"function.unregister-tick-function","name":"unregister_tick_function","description":"De-register a function for execution on each tick","tag":"refentry","type":"Function","methodName":"unregister_tick_function"},{"id":"ref.funchand","name":"Function handling Functions","description":"Function Handling","tag":"reference","type":"Extension","methodName":"Function handling Functions"},{"id":"book.funchand","name":"Function Handling","description":"Variable and Type Related Extensions","tag":"book","type":"Extension","methodName":"Function Handling"},{"id":"intro.quickhash","name":"Introduction","description":"Quickhash","tag":"preface","type":"General","methodName":"Introduction"},{"id":"quickhash.requirements","name":"Requirements","description":"Quickhash","tag":"section","type":"General","methodName":"Requirements"},{"id":"quickhash.installation","name":"Installation","description":"Quickhash","tag":"section","type":"General","methodName":"Installation"},{"id":"quickhash.setup","name":"Installing\/Configuring","description":"Quickhash","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"quickhash.examples","name":"Examples","description":"Quickhash","tag":"chapter","type":"General","methodName":"Examples"},{"id":"quickhashintset.add","name":"QuickHashIntSet::add","description":"This method adds a new entry to the set","tag":"refentry","type":"Function","methodName":"add"},{"id":"quickhashintset.construct","name":"QuickHashIntSet::__construct","description":"Creates a new QuickHashIntSet object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"quickhashintset.delete","name":"QuickHashIntSet::delete","description":"This method deletes an entry from the set","tag":"refentry","type":"Function","methodName":"delete"},{"id":"quickhashintset.exists","name":"QuickHashIntSet::exists","description":"This method checks whether a key is part of the set","tag":"refentry","type":"Function","methodName":"exists"},{"id":"quickhashintset.getsize","name":"QuickHashIntSet::getSize","description":"Returns the number of elements in the set","tag":"refentry","type":"Function","methodName":"getSize"},{"id":"quickhashintset.loadfromfile","name":"QuickHashIntSet::loadFromFile","description":"This factory method creates a set from a file","tag":"refentry","type":"Function","methodName":"loadFromFile"},{"id":"quickhashintset.loadfromstring","name":"QuickHashIntSet::loadFromString","description":"This factory method creates a set from a string","tag":"refentry","type":"Function","methodName":"loadFromString"},{"id":"quickhashintset.savetofile","name":"QuickHashIntSet::saveToFile","description":"This method stores an in-memory set to disk","tag":"refentry","type":"Function","methodName":"saveToFile"},{"id":"quickhashintset.savetostring","name":"QuickHashIntSet::saveToString","description":"This method returns a serialized version of the set","tag":"refentry","type":"Function","methodName":"saveToString"},{"id":"class.quickhashintset","name":"QuickHashIntSet","description":"The QuickHashIntSet class","tag":"phpdoc:classref","type":"Class","methodName":"QuickHashIntSet"},{"id":"quickhashinthash.add","name":"QuickHashIntHash::add","description":"This method adds a new entry to the hash","tag":"refentry","type":"Function","methodName":"add"},{"id":"quickhashinthash.construct","name":"QuickHashIntHash::__construct","description":"Creates a new QuickHashIntHash object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"quickhashinthash.delete","name":"QuickHashIntHash::delete","description":"This method deletes an entry from the hash","tag":"refentry","type":"Function","methodName":"delete"},{"id":"quickhashinthash.exists","name":"QuickHashIntHash::exists","description":"This method checks whether a key is part of the hash","tag":"refentry","type":"Function","methodName":"exists"},{"id":"quickhashinthash.get","name":"QuickHashIntHash::get","description":"This method retrieves a value from the hash by its key","tag":"refentry","type":"Function","methodName":"get"},{"id":"quickhashinthash.getsize","name":"QuickHashIntHash::getSize","description":"Returns the number of elements in the hash","tag":"refentry","type":"Function","methodName":"getSize"},{"id":"quickhashinthash.loadfromfile","name":"QuickHashIntHash::loadFromFile","description":"This factory method creates a hash from a file","tag":"refentry","type":"Function","methodName":"loadFromFile"},{"id":"quickhashinthash.loadfromstring","name":"QuickHashIntHash::loadFromString","description":"This factory method creates a hash from a string","tag":"refentry","type":"Function","methodName":"loadFromString"},{"id":"quickhashinthash.savetofile","name":"QuickHashIntHash::saveToFile","description":"This method stores an in-memory hash to disk","tag":"refentry","type":"Function","methodName":"saveToFile"},{"id":"quickhashinthash.savetostring","name":"QuickHashIntHash::saveToString","description":"This method returns a serialized version of the hash","tag":"refentry","type":"Function","methodName":"saveToString"},{"id":"quickhashinthash.set","name":"QuickHashIntHash::set","description":"This method updates an entry in the hash with a new value, or\n adds a new one if the entry doesn't exist","tag":"refentry","type":"Function","methodName":"set"},{"id":"quickhashinthash.update","name":"QuickHashIntHash::update","description":"This method updates an entry in the hash with a new value","tag":"refentry","type":"Function","methodName":"update"},{"id":"class.quickhashinthash","name":"QuickHashIntHash","description":"The QuickHashIntHash class","tag":"phpdoc:classref","type":"Class","methodName":"QuickHashIntHash"},{"id":"quickhashstringinthash.add","name":"QuickHashStringIntHash::add","description":"This method adds a new entry to the hash","tag":"refentry","type":"Function","methodName":"add"},{"id":"quickhashstringinthash.construct","name":"QuickHashStringIntHash::__construct","description":"Creates a new QuickHashStringIntHash object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"quickhashstringinthash.delete","name":"QuickHashStringIntHash::delete","description":"This method deletes an entry from the hash","tag":"refentry","type":"Function","methodName":"delete"},{"id":"quickhashstringinthash.exists","name":"QuickHashStringIntHash::exists","description":"This method checks whether a key is part of the hash","tag":"refentry","type":"Function","methodName":"exists"},{"id":"quickhashstringinthash.get","name":"QuickHashStringIntHash::get","description":"This method retrieves a value from the hash by its key","tag":"refentry","type":"Function","methodName":"get"},{"id":"quickhashstringinthash.getsize","name":"QuickHashStringIntHash::getSize","description":"Returns the number of elements in the hash","tag":"refentry","type":"Function","methodName":"getSize"},{"id":"quickhashstringinthash.loadfromfile","name":"QuickHashStringIntHash::loadFromFile","description":"This factory method creates a hash from a file","tag":"refentry","type":"Function","methodName":"loadFromFile"},{"id":"quickhashstringinthash.loadfromstring","name":"QuickHashStringIntHash::loadFromString","description":"This factory method creates a hash from a string","tag":"refentry","type":"Function","methodName":"loadFromString"},{"id":"quickhashstringinthash.savetofile","name":"QuickHashStringIntHash::saveToFile","description":"This method stores an in-memory hash to disk","tag":"refentry","type":"Function","methodName":"saveToFile"},{"id":"quickhashstringinthash.savetostring","name":"QuickHashStringIntHash::saveToString","description":"This method returns a serialized version of the hash","tag":"refentry","type":"Function","methodName":"saveToString"},{"id":"quickhashstringinthash.set","name":"QuickHashStringIntHash::set","description":"This method updates an entry in the hash with a new value, or\n adds a new one if the entry doesn't exist","tag":"refentry","type":"Function","methodName":"set"},{"id":"quickhashstringinthash.update","name":"QuickHashStringIntHash::update","description":"This method updates an entry in the hash with a new value","tag":"refentry","type":"Function","methodName":"update"},{"id":"class.quickhashstringinthash","name":"QuickHashStringIntHash","description":"The QuickHashStringIntHash class","tag":"phpdoc:classref","type":"Class","methodName":"QuickHashStringIntHash"},{"id":"quickhashintstringhash.add","name":"QuickHashIntStringHash::add","description":"This method adds a new entry to the hash","tag":"refentry","type":"Function","methodName":"add"},{"id":"quickhashintstringhash.construct","name":"QuickHashIntStringHash::__construct","description":"Creates a new QuickHashIntStringHash object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"quickhashintstringhash.delete","name":"QuickHashIntStringHash::delete","description":"This method deletes an entry from the hash","tag":"refentry","type":"Function","methodName":"delete"},{"id":"quickhashintstringhash.exists","name":"QuickHashIntStringHash::exists","description":"This method checks whether a key is part of the hash","tag":"refentry","type":"Function","methodName":"exists"},{"id":"quickhashintstringhash.get","name":"QuickHashIntStringHash::get","description":"This method retrieves a value from the hash by its key","tag":"refentry","type":"Function","methodName":"get"},{"id":"quickhashintstringhash.getsize","name":"QuickHashIntStringHash::getSize","description":"Returns the number of elements in the hash","tag":"refentry","type":"Function","methodName":"getSize"},{"id":"quickhashintstringhash.loadfromfile","name":"QuickHashIntStringHash::loadFromFile","description":"This factory method creates a hash from a file","tag":"refentry","type":"Function","methodName":"loadFromFile"},{"id":"quickhashintstringhash.loadfromstring","name":"QuickHashIntStringHash::loadFromString","description":"This factory method creates a hash from a string","tag":"refentry","type":"Function","methodName":"loadFromString"},{"id":"quickhashintstringhash.savetofile","name":"QuickHashIntStringHash::saveToFile","description":"This method stores an in-memory hash to disk","tag":"refentry","type":"Function","methodName":"saveToFile"},{"id":"quickhashintstringhash.savetostring","name":"QuickHashIntStringHash::saveToString","description":"This method returns a serialized version of the hash","tag":"refentry","type":"Function","methodName":"saveToString"},{"id":"quickhashintstringhash.set","name":"QuickHashIntStringHash::set","description":"This method updates an entry in the hash with a new value, or\n adds a new one if the entry doesn't exist","tag":"refentry","type":"Function","methodName":"set"},{"id":"quickhashintstringhash.update","name":"QuickHashIntStringHash::update","description":"This method updates an entry in the hash with a new value","tag":"refentry","type":"Function","methodName":"update"},{"id":"class.quickhashintstringhash","name":"QuickHashIntStringHash","description":"The QuickHashIntStringHash class","tag":"phpdoc:classref","type":"Class","methodName":"QuickHashIntStringHash"},{"id":"book.quickhash","name":"Quickhash","description":"Quickhash","tag":"book","type":"Extension","methodName":"Quickhash"},{"id":"intro.reflection","name":"Introduction","description":"Reflection","tag":"preface","type":"General","methodName":"Introduction"},{"id":"reflection.examples","name":"Examples","description":"Reflection","tag":"chapter","type":"General","methodName":"Examples"},{"id":"reflection.extending","name":"Extending","description":"Reflection","tag":"chapter","type":"General","methodName":"Extending"},{"id":"reflection.export","name":"Reflection::export","description":"Exports","tag":"refentry","type":"Function","methodName":"export"},{"id":"reflection.getmodifiernames","name":"Reflection::getModifierNames","description":"Gets modifier names","tag":"refentry","type":"Function","methodName":"getModifierNames"},{"id":"class.reflection","name":"Reflection","description":"The Reflection class","tag":"phpdoc:classref","type":"Class","methodName":"Reflection"},{"id":"reflectionclass.construct","name":"ReflectionClass::__construct","description":"Constructs a ReflectionClass","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionclass.export","name":"ReflectionClass::export","description":"Exports a class","tag":"refentry","type":"Function","methodName":"export"},{"id":"reflectionclass.getattributes","name":"ReflectionClass::getAttributes","description":"Gets Attributes","tag":"refentry","type":"Function","methodName":"getAttributes"},{"id":"reflectionclass.getconstant","name":"ReflectionClass::getConstant","description":"Gets defined constant","tag":"refentry","type":"Function","methodName":"getConstant"},{"id":"reflectionclass.getconstants","name":"ReflectionClass::getConstants","description":"Gets constants","tag":"refentry","type":"Function","methodName":"getConstants"},{"id":"reflectionclass.getconstructor","name":"ReflectionClass::getConstructor","description":"Gets the constructor of the class","tag":"refentry","type":"Function","methodName":"getConstructor"},{"id":"reflectionclass.getdefaultproperties","name":"ReflectionClass::getDefaultProperties","description":"Gets default properties","tag":"refentry","type":"Function","methodName":"getDefaultProperties"},{"id":"reflectionclass.getdoccomment","name":"ReflectionClass::getDocComment","description":"Gets doc comments","tag":"refentry","type":"Function","methodName":"getDocComment"},{"id":"reflectionclass.getendline","name":"ReflectionClass::getEndLine","description":"Gets end line","tag":"refentry","type":"Function","methodName":"getEndLine"},{"id":"reflectionclass.getextension","name":"ReflectionClass::getExtension","description":"Gets a ReflectionExtension object for the extension which defined the class","tag":"refentry","type":"Function","methodName":"getExtension"},{"id":"reflectionclass.getextensionname","name":"ReflectionClass::getExtensionName","description":"Gets the name of the extension which defined the class","tag":"refentry","type":"Function","methodName":"getExtensionName"},{"id":"reflectionclass.getfilename","name":"ReflectionClass::getFileName","description":"Gets the filename of the file in which the class has been defined","tag":"refentry","type":"Function","methodName":"getFileName"},{"id":"reflectionclass.getinterfacenames","name":"ReflectionClass::getInterfaceNames","description":"Gets the interface names","tag":"refentry","type":"Function","methodName":"getInterfaceNames"},{"id":"reflectionclass.getinterfaces","name":"ReflectionClass::getInterfaces","description":"Gets the interfaces","tag":"refentry","type":"Function","methodName":"getInterfaces"},{"id":"reflectionclass.getlazyinitializer","name":"ReflectionClass::getLazyInitializer","description":"Gets lazy initializer","tag":"refentry","type":"Function","methodName":"getLazyInitializer"},{"id":"reflectionclass.getmethod","name":"ReflectionClass::getMethod","description":"Gets a ReflectionMethod for a class method","tag":"refentry","type":"Function","methodName":"getMethod"},{"id":"reflectionclass.getmethods","name":"ReflectionClass::getMethods","description":"Gets an array of methods","tag":"refentry","type":"Function","methodName":"getMethods"},{"id":"reflectionclass.getmodifiers","name":"ReflectionClass::getModifiers","description":"Gets the class modifiers","tag":"refentry","type":"Function","methodName":"getModifiers"},{"id":"reflectionclass.getname","name":"ReflectionClass::getName","description":"Gets class name","tag":"refentry","type":"Function","methodName":"getName"},{"id":"reflectionclass.getnamespacename","name":"ReflectionClass::getNamespaceName","description":"Gets namespace name","tag":"refentry","type":"Function","methodName":"getNamespaceName"},{"id":"reflectionclass.getparentclass","name":"ReflectionClass::getParentClass","description":"Gets parent class","tag":"refentry","type":"Function","methodName":"getParentClass"},{"id":"reflectionclass.getproperties","name":"ReflectionClass::getProperties","description":"Gets properties","tag":"refentry","type":"Function","methodName":"getProperties"},{"id":"reflectionclass.getproperty","name":"ReflectionClass::getProperty","description":"Gets a ReflectionProperty for a class's property","tag":"refentry","type":"Function","methodName":"getProperty"},{"id":"reflectionclass.getreflectionconstant","name":"ReflectionClass::getReflectionConstant","description":"Gets a ReflectionClassConstant for a class's constant","tag":"refentry","type":"Function","methodName":"getReflectionConstant"},{"id":"reflectionclass.getreflectionconstants","name":"ReflectionClass::getReflectionConstants","description":"Gets class constants","tag":"refentry","type":"Function","methodName":"getReflectionConstants"},{"id":"reflectionclass.getshortname","name":"ReflectionClass::getShortName","description":"Gets short name","tag":"refentry","type":"Function","methodName":"getShortName"},{"id":"reflectionclass.getstartline","name":"ReflectionClass::getStartLine","description":"Gets starting line number","tag":"refentry","type":"Function","methodName":"getStartLine"},{"id":"reflectionclass.getstaticproperties","name":"ReflectionClass::getStaticProperties","description":"Gets static properties","tag":"refentry","type":"Function","methodName":"getStaticProperties"},{"id":"reflectionclass.getstaticpropertyvalue","name":"ReflectionClass::getStaticPropertyValue","description":"Gets static property value","tag":"refentry","type":"Function","methodName":"getStaticPropertyValue"},{"id":"reflectionclass.gettraitaliases","name":"ReflectionClass::getTraitAliases","description":"Returns an array of trait aliases","tag":"refentry","type":"Function","methodName":"getTraitAliases"},{"id":"reflectionclass.gettraitnames","name":"ReflectionClass::getTraitNames","description":"Returns an array of names of traits used by this class","tag":"refentry","type":"Function","methodName":"getTraitNames"},{"id":"reflectionclass.gettraits","name":"ReflectionClass::getTraits","description":"Returns an array of traits used by this class","tag":"refentry","type":"Function","methodName":"getTraits"},{"id":"reflectionclass.hasconstant","name":"ReflectionClass::hasConstant","description":"Checks if constant is defined","tag":"refentry","type":"Function","methodName":"hasConstant"},{"id":"reflectionclass.hasmethod","name":"ReflectionClass::hasMethod","description":"Checks if method is defined","tag":"refentry","type":"Function","methodName":"hasMethod"},{"id":"reflectionclass.hasproperty","name":"ReflectionClass::hasProperty","description":"Checks if property is defined","tag":"refentry","type":"Function","methodName":"hasProperty"},{"id":"reflectionclass.implementsinterface","name":"ReflectionClass::implementsInterface","description":"Implements interface","tag":"refentry","type":"Function","methodName":"implementsInterface"},{"id":"reflectionclass.initializelazyobject","name":"ReflectionClass::initializeLazyObject","description":"Forces initialization of a lazy object","tag":"refentry","type":"Function","methodName":"initializeLazyObject"},{"id":"reflectionclass.innamespace","name":"ReflectionClass::inNamespace","description":"Checks if in namespace","tag":"refentry","type":"Function","methodName":"inNamespace"},{"id":"reflectionclass.isabstract","name":"ReflectionClass::isAbstract","description":"Checks if class is abstract","tag":"refentry","type":"Function","methodName":"isAbstract"},{"id":"reflectionclass.isanonymous","name":"ReflectionClass::isAnonymous","description":"Checks if class is anonymous","tag":"refentry","type":"Function","methodName":"isAnonymous"},{"id":"reflectionclass.iscloneable","name":"ReflectionClass::isCloneable","description":"Returns whether this class is cloneable","tag":"refentry","type":"Function","methodName":"isCloneable"},{"id":"reflectionclass.isenum","name":"ReflectionClass::isEnum","description":"Returns whether this is an enum","tag":"refentry","type":"Function","methodName":"isEnum"},{"id":"reflectionclass.isfinal","name":"ReflectionClass::isFinal","description":"Checks if class is final","tag":"refentry","type":"Function","methodName":"isFinal"},{"id":"reflectionclass.isinstance","name":"ReflectionClass::isInstance","description":"Checks class for instance","tag":"refentry","type":"Function","methodName":"isInstance"},{"id":"reflectionclass.isinstantiable","name":"ReflectionClass::isInstantiable","description":"Checks if the class is instantiable","tag":"refentry","type":"Function","methodName":"isInstantiable"},{"id":"reflectionclass.isinterface","name":"ReflectionClass::isInterface","description":"Checks if the class is an interface","tag":"refentry","type":"Function","methodName":"isInterface"},{"id":"reflectionclass.isinternal","name":"ReflectionClass::isInternal","description":"Checks if class is defined internally by an extension, or the core","tag":"refentry","type":"Function","methodName":"isInternal"},{"id":"reflectionclass.isiterable","name":"ReflectionClass::isIterable","description":"Check whether this class is iterable","tag":"refentry","type":"Function","methodName":"isIterable"},{"id":"reflectionclass.isiterateable","name":"ReflectionClass::isIterateable","description":"Alias of ReflectionClass::isIterable","tag":"refentry","type":"Function","methodName":"isIterateable"},{"id":"reflectionclass.isreadonly","name":"ReflectionClass::isReadOnly","description":"Checks if class is readonly","tag":"refentry","type":"Function","methodName":"isReadOnly"},{"id":"reflectionclass.issubclassof","name":"ReflectionClass::isSubclassOf","description":"Checks if a subclass","tag":"refentry","type":"Function","methodName":"isSubclassOf"},{"id":"reflectionclass.istrait","name":"ReflectionClass::isTrait","description":"Returns whether this is a trait","tag":"refentry","type":"Function","methodName":"isTrait"},{"id":"reflectionclass.isuninitializedlazyobject","name":"ReflectionClass::isUninitializedLazyObject","description":"Checks if an object is lazy and uninitialized","tag":"refentry","type":"Function","methodName":"isUninitializedLazyObject"},{"id":"reflectionclass.isuserdefined","name":"ReflectionClass::isUserDefined","description":"Checks if user defined","tag":"refentry","type":"Function","methodName":"isUserDefined"},{"id":"reflectionclass.marklazyobjectasinitialized","name":"ReflectionClass::markLazyObjectAsInitialized","description":"Marks a lazy object as initialized without calling the initializer or factory","tag":"refentry","type":"Function","methodName":"markLazyObjectAsInitialized"},{"id":"reflectionclass.newinstance","name":"ReflectionClass::newInstance","description":"Creates a new class instance from given arguments","tag":"refentry","type":"Function","methodName":"newInstance"},{"id":"reflectionclass.newinstanceargs","name":"ReflectionClass::newInstanceArgs","description":"Creates a new class instance from given arguments","tag":"refentry","type":"Function","methodName":"newInstanceArgs"},{"id":"reflectionclass.newinstancewithoutconstructor","name":"ReflectionClass::newInstanceWithoutConstructor","description":"Creates a new class instance without invoking the constructor","tag":"refentry","type":"Function","methodName":"newInstanceWithoutConstructor"},{"id":"reflectionclass.newlazyghost","name":"ReflectionClass::newLazyGhost","description":"Creates a new lazy ghost instance","tag":"refentry","type":"Function","methodName":"newLazyGhost"},{"id":"reflectionclass.newlazyproxy","name":"ReflectionClass::newLazyProxy","description":"Creates a new lazy proxy instance","tag":"refentry","type":"Function","methodName":"newLazyProxy"},{"id":"reflectionclass.resetaslazyghost","name":"ReflectionClass::resetAsLazyGhost","description":"Resets an object and marks it as lazy","tag":"refentry","type":"Function","methodName":"resetAsLazyGhost"},{"id":"reflectionclass.resetaslazyproxy","name":"ReflectionClass::resetAsLazyProxy","description":"Resets an object and marks it as lazy","tag":"refentry","type":"Function","methodName":"resetAsLazyProxy"},{"id":"reflectionclass.setstaticpropertyvalue","name":"ReflectionClass::setStaticPropertyValue","description":"Sets public static property value","tag":"refentry","type":"Function","methodName":"setStaticPropertyValue"},{"id":"reflectionclass.tostring","name":"ReflectionClass::__toString","description":"Returns the string representation of the ReflectionClass object","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.reflectionclass","name":"ReflectionClass","description":"The ReflectionClass class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionClass"},{"id":"reflectionclassconstant.construct","name":"ReflectionClassConstant::__construct","description":"Constructs a ReflectionClassConstant","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionclassconstant.export","name":"ReflectionClassConstant::export","description":"Export","tag":"refentry","type":"Function","methodName":"export"},{"id":"reflectionclassconstant.getattributes","name":"ReflectionClassConstant::getAttributes","description":"Gets Attributes","tag":"refentry","type":"Function","methodName":"getAttributes"},{"id":"reflectionclassconstant.getdeclaringclass","name":"ReflectionClassConstant::getDeclaringClass","description":"Gets declaring class","tag":"refentry","type":"Function","methodName":"getDeclaringClass"},{"id":"reflectionclassconstant.getdoccomment","name":"ReflectionClassConstant::getDocComment","description":"Gets doc comments","tag":"refentry","type":"Function","methodName":"getDocComment"},{"id":"reflectionclassconstant.getmodifiers","name":"ReflectionClassConstant::getModifiers","description":"Gets the class constant modifiers","tag":"refentry","type":"Function","methodName":"getModifiers"},{"id":"reflectionclassconstant.getname","name":"ReflectionClassConstant::getName","description":"Get name of the constant","tag":"refentry","type":"Function","methodName":"getName"},{"id":"reflectionclassconstant.gettype","name":"ReflectionClassConstant::getType","description":"Gets a class constant's type","tag":"refentry","type":"Function","methodName":"getType"},{"id":"reflectionclassconstant.getvalue","name":"ReflectionClassConstant::getValue","description":"Gets value","tag":"refentry","type":"Function","methodName":"getValue"},{"id":"reflectionclassconstant.hastype","name":"ReflectionClassConstant::hasType","description":"Checks if class constant has a type","tag":"refentry","type":"Function","methodName":"hasType"},{"id":"reflectionclassconstant.isdeprecated","name":"ReflectionClassConstant::isDeprecated","description":"Checks if deprecated","tag":"refentry","type":"Function","methodName":"isDeprecated"},{"id":"reflectionclassconstant.isenumcase","name":"ReflectionClassConstant::isEnumCase","description":"Checks if class constant is an Enum case","tag":"refentry","type":"Function","methodName":"isEnumCase"},{"id":"reflectionclassconstant.isfinal","name":"ReflectionClassConstant::isFinal","description":"Checks if class constant is final","tag":"refentry","type":"Function","methodName":"isFinal"},{"id":"reflectionclassconstant.isprivate","name":"ReflectionClassConstant::isPrivate","description":"Checks if class constant is private","tag":"refentry","type":"Function","methodName":"isPrivate"},{"id":"reflectionclassconstant.isprotected","name":"ReflectionClassConstant::isProtected","description":"Checks if class constant is protected","tag":"refentry","type":"Function","methodName":"isProtected"},{"id":"reflectionclassconstant.ispublic","name":"ReflectionClassConstant::isPublic","description":"Checks if class constant is public","tag":"refentry","type":"Function","methodName":"isPublic"},{"id":"reflectionclassconstant.tostring","name":"ReflectionClassConstant::__toString","description":"Returns the string representation of the ReflectionClassConstant object","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.reflectionclassconstant","name":"ReflectionClassConstant","description":"The ReflectionClassConstant class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionClassConstant"},{"id":"reflectionconstant.construct","name":"ReflectionConstant::__construct","description":"Constructs a ReflectionConstant","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionconstant.getextension","name":"ReflectionConstant::getExtension","description":"Gets ReflectionExtension of the defining extension","tag":"refentry","type":"Function","methodName":"getExtension"},{"id":"reflectionconstant.getextensionname","name":"ReflectionConstant::getExtensionName","description":"Gets name of the defining extension","tag":"refentry","type":"Function","methodName":"getExtensionName"},{"id":"reflectionconstant.getfilename","name":"ReflectionConstant::getFileName","description":"Gets name of the defining file","tag":"refentry","type":"Function","methodName":"getFileName"},{"id":"reflectionconstant.getname","name":"ReflectionConstant::getName","description":"Gets name","tag":"refentry","type":"Function","methodName":"getName"},{"id":"reflectionconstant.getnamespacename","name":"ReflectionConstant::getNamespaceName","description":"Gets namespace name","tag":"refentry","type":"Function","methodName":"getNamespaceName"},{"id":"reflectionconstant.getshortname","name":"ReflectionConstant::getShortName","description":"Gets short name","tag":"refentry","type":"Function","methodName":"getShortName"},{"id":"reflectionconstant.getvalue","name":"ReflectionConstant::getValue","description":"Gets value","tag":"refentry","type":"Function","methodName":"getValue"},{"id":"reflectionconstant.isdeprecated","name":"ReflectionConstant::isDeprecated","description":"Checks if deprecated","tag":"refentry","type":"Function","methodName":"isDeprecated"},{"id":"reflectionconstant.tostring","name":"ReflectionConstant::__toString","description":"Returns string representation","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.reflectionconstant","name":"ReflectionConstant","description":"The ReflectionConstant class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionConstant"},{"id":"reflectionenum.construct","name":"ReflectionEnum::__construct","description":"Instantiates a ReflectionEnum object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionenum.getbackingtype","name":"ReflectionEnum::getBackingType","description":"Gets the backing type of an Enum, if any","tag":"refentry","type":"Function","methodName":"getBackingType"},{"id":"reflectionenum.getcase","name":"ReflectionEnum::getCase","description":"Returns a specific case of an Enum","tag":"refentry","type":"Function","methodName":"getCase"},{"id":"reflectionenum.getcases","name":"ReflectionEnum::getCases","description":"Returns a list of all cases on an Enum","tag":"refentry","type":"Function","methodName":"getCases"},{"id":"reflectionenum.hascase","name":"ReflectionEnum::hasCase","description":"Checks for a case on an Enum","tag":"refentry","type":"Function","methodName":"hasCase"},{"id":"reflectionenum.isbacked","name":"ReflectionEnum::isBacked","description":"Determines if an Enum is a Backed Enum","tag":"refentry","type":"Function","methodName":"isBacked"},{"id":"class.reflectionenum","name":"ReflectionEnum","description":"The ReflectionEnum class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionEnum"},{"id":"reflectionenumunitcase.construct","name":"ReflectionEnumUnitCase::__construct","description":"Instantiates a ReflectionEnumUnitCase object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionenumunitcase.getenum","name":"ReflectionEnumUnitCase::getEnum","description":"Gets the reflection of the enum of this case","tag":"refentry","type":"Function","methodName":"getEnum"},{"id":"reflectionenumunitcase.getvalue","name":"ReflectionEnumUnitCase::getValue","description":"Gets the enum case object described by this reflection object","tag":"refentry","type":"Function","methodName":"getValue"},{"id":"class.reflectionenumunitcase","name":"ReflectionEnumUnitCase","description":"The ReflectionEnumUnitCase class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionEnumUnitCase"},{"id":"reflectionenumbackedcase.construct","name":"ReflectionEnumBackedCase::__construct","description":"Instantiates a ReflectionEnumBackedCase object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionenumbackedcase.getbackingvalue","name":"ReflectionEnumBackedCase::getBackingValue","description":"Gets the scalar value backing this Enum case","tag":"refentry","type":"Function","methodName":"getBackingValue"},{"id":"class.reflectionenumbackedcase","name":"ReflectionEnumBackedCase","description":"The ReflectionEnumBackedCase class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionEnumBackedCase"},{"id":"reflectionzendextension.clone","name":"ReflectionZendExtension::__clone","description":"Clone handler","tag":"refentry","type":"Function","methodName":"__clone"},{"id":"reflectionzendextension.construct","name":"ReflectionZendExtension::__construct","description":"Constructs a ReflectionZendExtension object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionzendextension.export","name":"ReflectionZendExtension::export","description":"Export","tag":"refentry","type":"Function","methodName":"export"},{"id":"reflectionzendextension.getauthor","name":"ReflectionZendExtension::getAuthor","description":"Gets author","tag":"refentry","type":"Function","methodName":"getAuthor"},{"id":"reflectionzendextension.getcopyright","name":"ReflectionZendExtension::getCopyright","description":"Gets copyright","tag":"refentry","type":"Function","methodName":"getCopyright"},{"id":"reflectionzendextension.getname","name":"ReflectionZendExtension::getName","description":"Gets name","tag":"refentry","type":"Function","methodName":"getName"},{"id":"reflectionzendextension.geturl","name":"ReflectionZendExtension::getURL","description":"Gets URL","tag":"refentry","type":"Function","methodName":"getURL"},{"id":"reflectionzendextension.getversion","name":"ReflectionZendExtension::getVersion","description":"Gets version","tag":"refentry","type":"Function","methodName":"getVersion"},{"id":"reflectionzendextension.tostring","name":"ReflectionZendExtension::__toString","description":"To string handler","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.reflectionzendextension","name":"ReflectionZendExtension","description":"The ReflectionZendExtension class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionZendExtension"},{"id":"reflectionextension.clone","name":"ReflectionExtension::__clone","description":"Clones","tag":"refentry","type":"Function","methodName":"__clone"},{"id":"reflectionextension.construct","name":"ReflectionExtension::__construct","description":"Constructs a ReflectionExtension","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionextension.export","name":"ReflectionExtension::export","description":"Export","tag":"refentry","type":"Function","methodName":"export"},{"id":"reflectionextension.getclasses","name":"ReflectionExtension::getClasses","description":"Gets classes","tag":"refentry","type":"Function","methodName":"getClasses"},{"id":"reflectionextension.getclassnames","name":"ReflectionExtension::getClassNames","description":"Gets class names","tag":"refentry","type":"Function","methodName":"getClassNames"},{"id":"reflectionextension.getconstants","name":"ReflectionExtension::getConstants","description":"Gets constants","tag":"refentry","type":"Function","methodName":"getConstants"},{"id":"reflectionextension.getdependencies","name":"ReflectionExtension::getDependencies","description":"Gets dependencies","tag":"refentry","type":"Function","methodName":"getDependencies"},{"id":"reflectionextension.getfunctions","name":"ReflectionExtension::getFunctions","description":"Gets extension functions","tag":"refentry","type":"Function","methodName":"getFunctions"},{"id":"reflectionextension.getinientries","name":"ReflectionExtension::getINIEntries","description":"Gets extension ini entries","tag":"refentry","type":"Function","methodName":"getINIEntries"},{"id":"reflectionextension.getname","name":"ReflectionExtension::getName","description":"Gets extension name","tag":"refentry","type":"Function","methodName":"getName"},{"id":"reflectionextension.getversion","name":"ReflectionExtension::getVersion","description":"Gets extension version","tag":"refentry","type":"Function","methodName":"getVersion"},{"id":"reflectionextension.info","name":"ReflectionExtension::info","description":"Print extension info","tag":"refentry","type":"Function","methodName":"info"},{"id":"reflectionextension.ispersistent","name":"ReflectionExtension::isPersistent","description":"Returns whether this extension is persistent","tag":"refentry","type":"Function","methodName":"isPersistent"},{"id":"reflectionextension.istemporary","name":"ReflectionExtension::isTemporary","description":"Returns whether this extension is temporary","tag":"refentry","type":"Function","methodName":"isTemporary"},{"id":"reflectionextension.tostring","name":"ReflectionExtension::__toString","description":"To string","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.reflectionextension","name":"ReflectionExtension","description":"The ReflectionExtension class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionExtension"},{"id":"reflectionfunction.construct","name":"ReflectionFunction::__construct","description":"Constructs a ReflectionFunction object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionfunction.export","name":"ReflectionFunction::export","description":"Exports function","tag":"refentry","type":"Function","methodName":"export"},{"id":"reflectionfunction.getclosure","name":"ReflectionFunction::getClosure","description":"Returns a dynamically created closure for the function","tag":"refentry","type":"Function","methodName":"getClosure"},{"id":"reflectionfunction.invoke","name":"ReflectionFunction::invoke","description":"Invokes function","tag":"refentry","type":"Function","methodName":"invoke"},{"id":"reflectionfunction.invokeargs","name":"ReflectionFunction::invokeArgs","description":"Invokes function args","tag":"refentry","type":"Function","methodName":"invokeArgs"},{"id":"reflectionfunction.isanonymous","name":"ReflectionFunction::isAnonymous","description":"Checks if a function is anonymous","tag":"refentry","type":"Function","methodName":"isAnonymous"},{"id":"reflectionfunction.isdisabled","name":"ReflectionFunction::isDisabled","description":"Checks if function is disabled","tag":"refentry","type":"Function","methodName":"isDisabled"},{"id":"reflectionfunction.tostring","name":"ReflectionFunction::__toString","description":"Returns the string representation of the ReflectionFunction object","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.reflectionfunction","name":"ReflectionFunction","description":"The ReflectionFunction class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionFunction"},{"id":"reflectionfunctionabstract.clone","name":"ReflectionFunctionAbstract::__clone","description":"Clones function","tag":"refentry","type":"Function","methodName":"__clone"},{"id":"reflectionfunctionabstract.getattributes","name":"ReflectionFunctionAbstract::getAttributes","description":"Gets Attributes","tag":"refentry","type":"Function","methodName":"getAttributes"},{"id":"reflectionfunctionabstract.getclosurecalledclass","name":"ReflectionFunctionAbstract::getClosureCalledClass","description":"Returns the class corresponding to static:: inside a closure","tag":"refentry","type":"Function","methodName":"getClosureCalledClass"},{"id":"reflectionfunctionabstract.getclosurescopeclass","name":"ReflectionFunctionAbstract::getClosureScopeClass","description":"Returns the class corresponding to the scope inside a closure","tag":"refentry","type":"Function","methodName":"getClosureScopeClass"},{"id":"reflectionfunctionabstract.getclosurethis","name":"ReflectionFunctionAbstract::getClosureThis","description":"Returns the object which corresponds to $this inside a closure","tag":"refentry","type":"Function","methodName":"getClosureThis"},{"id":"reflectionfunctionabstract.getclosureusedvariables","name":"ReflectionFunctionAbstract::getClosureUsedVariables","description":"Returns an array of the used variables in the Closure","tag":"refentry","type":"Function","methodName":"getClosureUsedVariables"},{"id":"reflectionfunctionabstract.getdoccomment","name":"ReflectionFunctionAbstract::getDocComment","description":"Gets doc comment","tag":"refentry","type":"Function","methodName":"getDocComment"},{"id":"reflectionfunctionabstract.getendline","name":"ReflectionFunctionAbstract::getEndLine","description":"Gets end line number","tag":"refentry","type":"Function","methodName":"getEndLine"},{"id":"reflectionfunctionabstract.getextension","name":"ReflectionFunctionAbstract::getExtension","description":"Gets extension info","tag":"refentry","type":"Function","methodName":"getExtension"},{"id":"reflectionfunctionabstract.getextensionname","name":"ReflectionFunctionAbstract::getExtensionName","description":"Gets extension name","tag":"refentry","type":"Function","methodName":"getExtensionName"},{"id":"reflectionfunctionabstract.getfilename","name":"ReflectionFunctionAbstract::getFileName","description":"Gets file name","tag":"refentry","type":"Function","methodName":"getFileName"},{"id":"reflectionfunctionabstract.getname","name":"ReflectionFunctionAbstract::getName","description":"Gets function name","tag":"refentry","type":"Function","methodName":"getName"},{"id":"reflectionfunctionabstract.getnamespacename","name":"ReflectionFunctionAbstract::getNamespaceName","description":"Gets namespace name","tag":"refentry","type":"Function","methodName":"getNamespaceName"},{"id":"reflectionfunctionabstract.getnumberofparameters","name":"ReflectionFunctionAbstract::getNumberOfParameters","description":"Gets number of parameters","tag":"refentry","type":"Function","methodName":"getNumberOfParameters"},{"id":"reflectionfunctionabstract.getnumberofrequiredparameters","name":"ReflectionFunctionAbstract::getNumberOfRequiredParameters","description":"Gets number of required parameters","tag":"refentry","type":"Function","methodName":"getNumberOfRequiredParameters"},{"id":"reflectionfunctionabstract.getparameters","name":"ReflectionFunctionAbstract::getParameters","description":"Gets parameters","tag":"refentry","type":"Function","methodName":"getParameters"},{"id":"reflectionfunctionabstract.getreturntype","name":"ReflectionFunctionAbstract::getReturnType","description":"Gets the specified return type of a function","tag":"refentry","type":"Function","methodName":"getReturnType"},{"id":"reflectionfunctionabstract.getshortname","name":"ReflectionFunctionAbstract::getShortName","description":"Gets function short name","tag":"refentry","type":"Function","methodName":"getShortName"},{"id":"reflectionfunctionabstract.getstartline","name":"ReflectionFunctionAbstract::getStartLine","description":"Gets starting line number","tag":"refentry","type":"Function","methodName":"getStartLine"},{"id":"reflectionfunctionabstract.getstaticvariables","name":"ReflectionFunctionAbstract::getStaticVariables","description":"Gets static variables","tag":"refentry","type":"Function","methodName":"getStaticVariables"},{"id":"reflectionfunctionabstract.gettentativereturntype","name":"ReflectionFunctionAbstract::getTentativeReturnType","description":"Returns the tentative return type associated with the function","tag":"refentry","type":"Function","methodName":"getTentativeReturnType"},{"id":"reflectionfunctionabstract.hasreturntype","name":"ReflectionFunctionAbstract::hasReturnType","description":"Checks if the function has a specified return type","tag":"refentry","type":"Function","methodName":"hasReturnType"},{"id":"reflectionfunctionabstract.hastentativereturntype","name":"ReflectionFunctionAbstract::hasTentativeReturnType","description":"Returns whether the function has a tentative return type","tag":"refentry","type":"Function","methodName":"hasTentativeReturnType"},{"id":"reflectionfunctionabstract.innamespace","name":"ReflectionFunctionAbstract::inNamespace","description":"Checks if function in namespace","tag":"refentry","type":"Function","methodName":"inNamespace"},{"id":"reflectionfunctionabstract.isclosure","name":"ReflectionFunctionAbstract::isClosure","description":"Checks if closure","tag":"refentry","type":"Function","methodName":"isClosure"},{"id":"reflectionfunctionabstract.isdeprecated","name":"ReflectionFunctionAbstract::isDeprecated","description":"Checks if deprecated","tag":"refentry","type":"Function","methodName":"isDeprecated"},{"id":"reflectionfunctionabstract.isgenerator","name":"ReflectionFunctionAbstract::isGenerator","description":"Returns whether this function is a generator","tag":"refentry","type":"Function","methodName":"isGenerator"},{"id":"reflectionfunctionabstract.isinternal","name":"ReflectionFunctionAbstract::isInternal","description":"Checks if is internal","tag":"refentry","type":"Function","methodName":"isInternal"},{"id":"reflectiofunctionabstract.isstatic","name":"ReflectionFunctionAbstract::isStatic","description":"Checks if the function is static","tag":"refentry","type":"Function","methodName":"isStatic"},{"id":"reflectionfunctionabstract.isuserdefined","name":"ReflectionFunctionAbstract::isUserDefined","description":"Checks if user defined","tag":"refentry","type":"Function","methodName":"isUserDefined"},{"id":"reflectionfunctionabstract.isvariadic","name":"ReflectionFunctionAbstract::isVariadic","description":"Checks if the function is variadic","tag":"refentry","type":"Function","methodName":"isVariadic"},{"id":"reflectionfunctionabstract.returnsreference","name":"ReflectionFunctionAbstract::returnsReference","description":"Checks if returns reference","tag":"refentry","type":"Function","methodName":"returnsReference"},{"id":"reflectionfunctionabstract.tostring","name":"ReflectionFunctionAbstract::__toString","description":"Returns the string representation of the ReflectionFunctionAbstract object","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.reflectionfunctionabstract","name":"ReflectionFunctionAbstract","description":"The ReflectionFunctionAbstract class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionFunctionAbstract"},{"id":"reflectionmethod.construct","name":"ReflectionMethod::__construct","description":"Constructs a ReflectionMethod","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionmethod.createfrommethodname","name":"ReflectionMethod::createFromMethodName","description":"Creates a new ReflectionMethod","tag":"refentry","type":"Function","methodName":"createFromMethodName"},{"id":"reflectionmethod.export","name":"ReflectionMethod::export","description":"Export a reflection method","tag":"refentry","type":"Function","methodName":"export"},{"id":"reflectionmethod.getclosure","name":"ReflectionMethod::getClosure","description":"Returns a dynamically created closure for the method","tag":"refentry","type":"Function","methodName":"getClosure"},{"id":"reflectionmethod.getdeclaringclass","name":"ReflectionMethod::getDeclaringClass","description":"Gets declaring class for the reflected method","tag":"refentry","type":"Function","methodName":"getDeclaringClass"},{"id":"reflectionmethod.getmodifiers","name":"ReflectionMethod::getModifiers","description":"Gets the method modifiers","tag":"refentry","type":"Function","methodName":"getModifiers"},{"id":"reflectionmethod.getprototype","name":"ReflectionMethod::getPrototype","description":"Gets the method prototype (if there is one)","tag":"refentry","type":"Function","methodName":"getPrototype"},{"id":"reflectionmethod.hasprototype","name":"ReflectionMethod::hasPrototype","description":"Returns whether a method has a prototype","tag":"refentry","type":"Function","methodName":"hasPrototype"},{"id":"reflectionmethod.invoke","name":"ReflectionMethod::invoke","description":"Invoke","tag":"refentry","type":"Function","methodName":"invoke"},{"id":"reflectionmethod.invokeargs","name":"ReflectionMethod::invokeArgs","description":"Invoke args","tag":"refentry","type":"Function","methodName":"invokeArgs"},{"id":"reflectionmethod.isabstract","name":"ReflectionMethod::isAbstract","description":"Checks if method is abstract","tag":"refentry","type":"Function","methodName":"isAbstract"},{"id":"reflectionmethod.isconstructor","name":"ReflectionMethod::isConstructor","description":"Checks if method is a constructor","tag":"refentry","type":"Function","methodName":"isConstructor"},{"id":"reflectionmethod.isdestructor","name":"ReflectionMethod::isDestructor","description":"Checks if method is a destructor","tag":"refentry","type":"Function","methodName":"isDestructor"},{"id":"reflectionmethod.isfinal","name":"ReflectionMethod::isFinal","description":"Checks if method is final","tag":"refentry","type":"Function","methodName":"isFinal"},{"id":"reflectionmethod.isprivate","name":"ReflectionMethod::isPrivate","description":"Checks if method is private","tag":"refentry","type":"Function","methodName":"isPrivate"},{"id":"reflectionmethod.isprotected","name":"ReflectionMethod::isProtected","description":"Checks if method is protected","tag":"refentry","type":"Function","methodName":"isProtected"},{"id":"reflectionmethod.ispublic","name":"ReflectionMethod::isPublic","description":"Checks if method is public","tag":"refentry","type":"Function","methodName":"isPublic"},{"id":"reflectionmethod.setaccessible","name":"ReflectionMethod::setAccessible","description":"Set method accessibility","tag":"refentry","type":"Function","methodName":"setAccessible"},{"id":"reflectionmethod.tostring","name":"ReflectionMethod::__toString","description":"Returns the string representation of the Reflection method object","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.reflectionmethod","name":"ReflectionMethod","description":"The ReflectionMethod class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionMethod"},{"id":"reflectionnamedtype.getname","name":"ReflectionNamedType::getName","description":"Get the name of the type as a string","tag":"refentry","type":"Function","methodName":"getName"},{"id":"reflectionnamedtype.isbuiltin","name":"ReflectionNamedType::isBuiltin","description":"Checks if it is a built-in type","tag":"refentry","type":"Function","methodName":"isBuiltin"},{"id":"class.reflectionnamedtype","name":"ReflectionNamedType","description":"The ReflectionNamedType class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionNamedType"},{"id":"reflectionobject.construct","name":"ReflectionObject::__construct","description":"Constructs a ReflectionObject","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionobject.export","name":"ReflectionObject::export","description":"Export","tag":"refentry","type":"Function","methodName":"export"},{"id":"class.reflectionobject","name":"ReflectionObject","description":"The ReflectionObject class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionObject"},{"id":"reflectionparameter.allowsnull","name":"ReflectionParameter::allowsNull","description":"Checks if null is allowed","tag":"refentry","type":"Function","methodName":"allowsNull"},{"id":"reflectionparameter.canbepassedbyvalue","name":"ReflectionParameter::canBePassedByValue","description":"Returns whether this parameter can be passed by value","tag":"refentry","type":"Function","methodName":"canBePassedByValue"},{"id":"reflectionparameter.clone","name":"ReflectionParameter::__clone","description":"Clone","tag":"refentry","type":"Function","methodName":"__clone"},{"id":"reflectionparameter.construct","name":"ReflectionParameter::__construct","description":"Construct","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionparameter.export","name":"ReflectionParameter::export","description":"Exports","tag":"refentry","type":"Function","methodName":"export"},{"id":"reflectionparameter.getattributes","name":"ReflectionParameter::getAttributes","description":"Gets Attributes","tag":"refentry","type":"Function","methodName":"getAttributes"},{"id":"reflectionparameter.getclass","name":"ReflectionParameter::getClass","description":"Get a ReflectionClass object for the parameter being reflected or null","tag":"refentry","type":"Function","methodName":"getClass"},{"id":"reflectionparameter.getdeclaringclass","name":"ReflectionParameter::getDeclaringClass","description":"Gets declaring class","tag":"refentry","type":"Function","methodName":"getDeclaringClass"},{"id":"reflectionparameter.getdeclaringfunction","name":"ReflectionParameter::getDeclaringFunction","description":"Gets declaring function","tag":"refentry","type":"Function","methodName":"getDeclaringFunction"},{"id":"reflectionparameter.getdefaultvalue","name":"ReflectionParameter::getDefaultValue","description":"Gets default parameter value","tag":"refentry","type":"Function","methodName":"getDefaultValue"},{"id":"reflectionparameter.getdefaultvalueconstantname","name":"ReflectionParameter::getDefaultValueConstantName","description":"Returns the default value's constant name if default value is constant or null","tag":"refentry","type":"Function","methodName":"getDefaultValueConstantName"},{"id":"reflectionparameter.getname","name":"ReflectionParameter::getName","description":"Gets parameter name","tag":"refentry","type":"Function","methodName":"getName"},{"id":"reflectionparameter.getposition","name":"ReflectionParameter::getPosition","description":"Gets parameter position","tag":"refentry","type":"Function","methodName":"getPosition"},{"id":"reflectionparameter.gettype","name":"ReflectionParameter::getType","description":"Gets a parameter's type","tag":"refentry","type":"Function","methodName":"getType"},{"id":"reflectionparameter.hastype","name":"ReflectionParameter::hasType","description":"Checks if parameter has a type","tag":"refentry","type":"Function","methodName":"hasType"},{"id":"reflectionparameter.isarray","name":"ReflectionParameter::isArray","description":"Checks if parameter expects an array","tag":"refentry","type":"Function","methodName":"isArray"},{"id":"reflectionparameter.iscallable","name":"ReflectionParameter::isCallable","description":"Returns whether parameter MUST be callable","tag":"refentry","type":"Function","methodName":"isCallable"},{"id":"reflectionparameter.isdefaultvalueavailable","name":"ReflectionParameter::isDefaultValueAvailable","description":"Checks if a default value is available","tag":"refentry","type":"Function","methodName":"isDefaultValueAvailable"},{"id":"reflectionparameter.isdefaultvalueconstant","name":"ReflectionParameter::isDefaultValueConstant","description":"Returns whether the default value of this parameter is a constant","tag":"refentry","type":"Function","methodName":"isDefaultValueConstant"},{"id":"reflectionparameter.isoptional","name":"ReflectionParameter::isOptional","description":"Checks if optional","tag":"refentry","type":"Function","methodName":"isOptional"},{"id":"reflectionparameter.ispassedbyreference","name":"ReflectionParameter::isPassedByReference","description":"Checks if passed by reference","tag":"refentry","type":"Function","methodName":"isPassedByReference"},{"id":"reflectionparameter.ispromoted","name":"ReflectionParameter::isPromoted","description":"Checks if a parameter is promoted to a property","tag":"refentry","type":"Function","methodName":"isPromoted"},{"id":"reflectionparameter.isvariadic","name":"ReflectionParameter::isVariadic","description":"Checks if the parameter is variadic","tag":"refentry","type":"Function","methodName":"isVariadic"},{"id":"reflectionparameter.tostring","name":"ReflectionParameter::__toString","description":"To string","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.reflectionparameter","name":"ReflectionParameter","description":"The ReflectionParameter class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionParameter"},{"id":"reflectionproperty.clone","name":"ReflectionProperty::__clone","description":"Clone","tag":"refentry","type":"Function","methodName":"__clone"},{"id":"reflectionproperty.construct","name":"ReflectionProperty::__construct","description":"Construct a ReflectionProperty object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionproperty.export","name":"ReflectionProperty::export","description":"Export","tag":"refentry","type":"Function","methodName":"export"},{"id":"reflectionproperty.getattributes","name":"ReflectionProperty::getAttributes","description":"Gets Attributes","tag":"refentry","type":"Function","methodName":"getAttributes"},{"id":"reflectionproperty.getdeclaringclass","name":"ReflectionProperty::getDeclaringClass","description":"Gets declaring class","tag":"refentry","type":"Function","methodName":"getDeclaringClass"},{"id":"reflectionproperty.getdefaultvalue","name":"ReflectionProperty::getDefaultValue","description":"Returns the default value declared for a property","tag":"refentry","type":"Function","methodName":"getDefaultValue"},{"id":"reflectionproperty.getdoccomment","name":"ReflectionProperty::getDocComment","description":"Gets the property doc comment","tag":"refentry","type":"Function","methodName":"getDocComment"},{"id":"reflectionproperty.gethook","name":"ReflectionProperty::getHook","description":"Returns a reflection object for a specified hook","tag":"refentry","type":"Function","methodName":"getHook"},{"id":"reflectionproperty.gethooks","name":"ReflectionProperty::getHooks","description":"Returns an array of all hooks on this property","tag":"refentry","type":"Function","methodName":"getHooks"},{"id":"reflectionproperty.getmodifiers","name":"ReflectionProperty::getModifiers","description":"Gets the property modifiers","tag":"refentry","type":"Function","methodName":"getModifiers"},{"id":"reflectionproperty.getname","name":"ReflectionProperty::getName","description":"Gets property name","tag":"refentry","type":"Function","methodName":"getName"},{"id":"reflectionproperty.getrawvalue","name":"ReflectionProperty::getRawValue","description":"Returns the value of a property, bypassing a get hook if defined","tag":"refentry","type":"Function","methodName":"getRawValue"},{"id":"reflectionproperty.getsettabletype","name":"ReflectionProperty::getSettableType","description":"Returns the parameter type of a setter hook","tag":"refentry","type":"Function","methodName":"getSettableType"},{"id":"reflectionproperty.gettype","name":"ReflectionProperty::getType","description":"Gets a property's type","tag":"refentry","type":"Function","methodName":"getType"},{"id":"reflectionproperty.getvalue","name":"ReflectionProperty::getValue","description":"Gets value","tag":"refentry","type":"Function","methodName":"getValue"},{"id":"reflectionproperty.hasdefaultvalue","name":"ReflectionProperty::hasDefaultValue","description":"Checks if property has a default value declared","tag":"refentry","type":"Function","methodName":"hasDefaultValue"},{"id":"reflectionproperty.hashook","name":"ReflectionProperty::hasHook","description":"Returns whether the property has a given hook defined","tag":"refentry","type":"Function","methodName":"hasHook"},{"id":"reflectionproperty.hashooks","name":"ReflectionProperty::hasHooks","description":"Returns whether the property has any hooks defined","tag":"refentry","type":"Function","methodName":"hasHooks"},{"id":"reflectionproperty.hastype","name":"ReflectionProperty::hasType","description":"Checks if property has a type","tag":"refentry","type":"Function","methodName":"hasType"},{"id":"reflectionproperty.isabstract","name":"ReflectionProperty::isAbstract","description":"Determines if a property is abstract","tag":"refentry","type":"Function","methodName":"isAbstract"},{"id":"reflectionproperty.isdefault","name":"ReflectionProperty::isDefault","description":"Checks if property is a default property","tag":"refentry","type":"Function","methodName":"isDefault"},{"id":"reflectionproperty.isdynamic","name":"ReflectionProperty::isDynamic","description":"Checks if property is a dynamic property","tag":"refentry","type":"Function","methodName":"isDynamic"},{"id":"reflectionproperty.isfinal","name":"ReflectionProperty::isFinal","description":"Determines if this property is final or not","tag":"refentry","type":"Function","methodName":"isFinal"},{"id":"reflectionproperty.isinitialized","name":"ReflectionProperty::isInitialized","description":"Checks whether a property is initialized","tag":"refentry","type":"Function","methodName":"isInitialized"},{"id":"reflectionproperty.islazy","name":"ReflectionProperty::isLazy","description":"Checks whether a property is lazy","tag":"refentry","type":"Function","methodName":"isLazy"},{"id":"reflectionproperty.isprivate","name":"ReflectionProperty::isPrivate","description":"Checks if property is private","tag":"refentry","type":"Function","methodName":"isPrivate"},{"id":"reflectionproperty.isprivateset","name":"ReflectionProperty::isPrivateSet","description":"Checks if property is private for writing","tag":"refentry","type":"Function","methodName":"isPrivateSet"},{"id":"reflectionproperty.ispromoted","name":"ReflectionProperty::isPromoted","description":"Checks if property is promoted","tag":"refentry","type":"Function","methodName":"isPromoted"},{"id":"reflectionproperty.isprotected","name":"ReflectionProperty::isProtected","description":"Checks if property is protected","tag":"refentry","type":"Function","methodName":"isProtected"},{"id":"reflectionproperty.isprotectedset","name":"ReflectionProperty::isProtectedSet","description":"Checks whether the property is protected for writing","tag":"refentry","type":"Function","methodName":"isProtectedSet"},{"id":"reflectionproperty.ispublic","name":"ReflectionProperty::isPublic","description":"Checks if property is public","tag":"refentry","type":"Function","methodName":"isPublic"},{"id":"reflectionproperty.isreadonly","name":"ReflectionProperty::isReadOnly","description":"Checks if property is readonly","tag":"refentry","type":"Function","methodName":"isReadOnly"},{"id":"reflectionproperty.isstatic","name":"ReflectionProperty::isStatic","description":"Checks if property is static","tag":"refentry","type":"Function","methodName":"isStatic"},{"id":"reflectionproperty.isvirtual","name":"ReflectionProperty::isVirtual","description":"Determines if a property is virtual","tag":"refentry","type":"Function","methodName":"isVirtual"},{"id":"reflectionproperty.setaccessible","name":"ReflectionProperty::setAccessible","description":"Set property accessibility","tag":"refentry","type":"Function","methodName":"setAccessible"},{"id":"reflectionproperty.setrawvalue","name":"ReflectionProperty::setRawValue","description":"Sets the value of a property, bypassing a set hook if defined","tag":"refentry","type":"Function","methodName":"setRawValue"},{"id":"reflectionproperty.setrawvaluewithoutlazyinitialization","name":"ReflectionProperty::setRawValueWithoutLazyInitialization","description":"Set raw property value without triggering lazy initialization","tag":"refentry","type":"Function","methodName":"setRawValueWithoutLazyInitialization"},{"id":"reflectionproperty.setvalue","name":"ReflectionProperty::setValue","description":"Set property value","tag":"refentry","type":"Function","methodName":"setValue"},{"id":"reflectionproperty.skiplazyinitialization","name":"ReflectionProperty::skipLazyInitialization","description":"Marks property as non-lazy","tag":"refentry","type":"Function","methodName":"skipLazyInitialization"},{"id":"reflectionproperty.tostring","name":"ReflectionProperty::__toString","description":"To string","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.reflectionproperty","name":"ReflectionProperty","description":"The ReflectionProperty class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionProperty"},{"id":"reflectiontype.allowsnull","name":"ReflectionType::allowsNull","description":"Checks if null is allowed","tag":"refentry","type":"Function","methodName":"allowsNull"},{"id":"reflectiontype.tostring","name":"ReflectionType::__toString","description":"To string","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.reflectiontype","name":"ReflectionType","description":"The ReflectionType class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionType"},{"id":"reflectionuniontype.gettypes","name":"ReflectionUnionType::getTypes","description":"Returns the types included in the union type","tag":"refentry","type":"Function","methodName":"getTypes"},{"id":"class.reflectionuniontype","name":"ReflectionUnionType","description":"The ReflectionUnionType class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionUnionType"},{"id":"reflectiongenerator.construct","name":"ReflectionGenerator::__construct","description":"Constructs a ReflectionGenerator object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectiongenerator.getexecutingfile","name":"ReflectionGenerator::getExecutingFile","description":"Gets the file name of the currently executing generator","tag":"refentry","type":"Function","methodName":"getExecutingFile"},{"id":"reflectiongenerator.getexecutinggenerator","name":"ReflectionGenerator::getExecutingGenerator","description":"Gets the executing Generator object","tag":"refentry","type":"Function","methodName":"getExecutingGenerator"},{"id":"reflectiongenerator.getexecutingline","name":"ReflectionGenerator::getExecutingLine","description":"Gets the currently executing line of the generator","tag":"refentry","type":"Function","methodName":"getExecutingLine"},{"id":"reflectiongenerator.getfunction","name":"ReflectionGenerator::getFunction","description":"Gets the function name of the generator","tag":"refentry","type":"Function","methodName":"getFunction"},{"id":"reflectiongenerator.getthis","name":"ReflectionGenerator::getThis","description":"Gets the $this value of the generator","tag":"refentry","type":"Function","methodName":"getThis"},{"id":"reflectiongenerator.gettrace","name":"ReflectionGenerator::getTrace","description":"Gets the trace of the executing generator","tag":"refentry","type":"Function","methodName":"getTrace"},{"id":"reflectiongenerator.isclosed","name":"ReflectionGenerator::isClosed","description":"Checks if execution finished","tag":"refentry","type":"Function","methodName":"isClosed"},{"id":"class.reflectiongenerator","name":"ReflectionGenerator","description":"The ReflectionGenerator class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionGenerator"},{"id":"reflectionfiber.construct","name":"ReflectionFiber::__construct","description":"Constructs a ReflectionFiber object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionfiber.getcallable","name":"ReflectionFiber::getCallable","description":"Gets the callable used to create the Fiber","tag":"refentry","type":"Function","methodName":"getCallable"},{"id":"reflectionfiber.getexecutingfile","name":"ReflectionFiber::getExecutingFile","description":"Get the file name of the current execution point","tag":"refentry","type":"Function","methodName":"getExecutingFile"},{"id":"reflectionfiber.getexecutingline","name":"ReflectionFiber::getExecutingLine","description":"Get the line number of the current execution point","tag":"refentry","type":"Function","methodName":"getExecutingLine"},{"id":"reflectionfiber.getfiber","name":"ReflectionFiber::getFiber","description":"Get the reflected Fiber instance","tag":"refentry","type":"Function","methodName":"getFiber"},{"id":"reflectionfiber.gettrace","name":"ReflectionFiber::getTrace","description":"Get the backtrace of the current execution point","tag":"refentry","type":"Function","methodName":"getTrace"},{"id":"class.reflectionfiber","name":"ReflectionFiber","description":"The ReflectionFiber class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionFiber"},{"id":"reflectionintersectiontype.gettypes","name":"ReflectionIntersectionType::getTypes","description":"Returns the types included in the intersection type","tag":"refentry","type":"Function","methodName":"getTypes"},{"id":"class.reflectionintersectiontype","name":"ReflectionIntersectionType","description":"The ReflectionIntersectionType class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionIntersectionType"},{"id":"reflectionreference.construct","name":"ReflectionReference::__construct","description":"Private constructor to disallow direct instantiation","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionreference.fromarrayelement","name":"ReflectionReference::fromArrayElement","description":"Create a ReflectionReference from an array element","tag":"refentry","type":"Function","methodName":"fromArrayElement"},{"id":"reflectionreference.getid","name":"ReflectionReference::getId","description":"Get unique ID of a reference","tag":"refentry","type":"Function","methodName":"getId"},{"id":"class.reflectionreference","name":"ReflectionReference","description":"The ReflectionReference class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionReference"},{"id":"reflectionattribute.construct","name":"ReflectionAttribute::__construct","description":"Private constructor to disallow direct instantiation","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"reflectionattribute.getarguments","name":"ReflectionAttribute::getArguments","description":"Gets arguments passed to attribute","tag":"refentry","type":"Function","methodName":"getArguments"},{"id":"reflectionattribute.getname","name":"ReflectionAttribute::getName","description":"Gets attribute name","tag":"refentry","type":"Function","methodName":"getName"},{"id":"reflectionattribute.gettarget","name":"ReflectionAttribute::getTarget","description":"Returns the target of the attribute as bitmask","tag":"refentry","type":"Function","methodName":"getTarget"},{"id":"reflectionattribute.isrepeated","name":"ReflectionAttribute::isRepeated","description":"Returns whether the attribute of this name has been repeated on a code element","tag":"refentry","type":"Function","methodName":"isRepeated"},{"id":"reflectionattribute.newinstance","name":"ReflectionAttribute::newInstance","description":"Instantiates the attribute class represented by this ReflectionAttribute class and arguments","tag":"refentry","type":"Function","methodName":"newInstance"},{"id":"class.reflectionattribute","name":"ReflectionAttribute","description":"The ReflectionAttribute class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionAttribute"},{"id":"reflector.export","name":"Reflector::export","description":"Exports","tag":"refentry","type":"Function","methodName":"export"},{"id":"class.reflector","name":"Reflector","description":"The Reflector interface","tag":"phpdoc:classref","type":"Class","methodName":"Reflector"},{"id":"class.reflectionexception","name":"ReflectionException","description":"The ReflectionException class","tag":"phpdoc:classref","type":"Class","methodName":"ReflectionException"},{"id":"enum.propertyhooktype","name":"PropertyHookType","description":"The PropertyHookType Enum","tag":"phpdoc:classref","type":"Class","methodName":"PropertyHookType"},{"id":"book.reflection","name":"Reflection","description":"Reflection","tag":"book","type":"Extension","methodName":"Reflection"},{"id":"intro.var","name":"Introduction","description":"Variable handling","tag":"preface","type":"General","methodName":"Introduction"},{"id":"var.configuration","name":"Runtime Configuration","description":"Variable handling","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"var.setup","name":"Installing\/Configuring","description":"Variable handling","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.boolval","name":"boolval","description":"Get the boolean value of a variable","tag":"refentry","type":"Function","methodName":"boolval"},{"id":"function.debug-zval-dump","name":"debug_zval_dump","description":"Dumps a string representation of an internal zval structure to output","tag":"refentry","type":"Function","methodName":"debug_zval_dump"},{"id":"function.doubleval","name":"doubleval","description":"Alias of floatval","tag":"refentry","type":"Function","methodName":"doubleval"},{"id":"function.empty","name":"empty","description":"Determine whether a variable is empty","tag":"refentry","type":"Function","methodName":"empty"},{"id":"function.floatval","name":"floatval","description":"Get float value of a variable","tag":"refentry","type":"Function","methodName":"floatval"},{"id":"function.get-debug-type","name":"get_debug_type","description":"Gets the type name of a variable in a way that is suitable for debugging","tag":"refentry","type":"Function","methodName":"get_debug_type"},{"id":"function.get-defined-vars","name":"get_defined_vars","description":"Returns an array of all defined variables","tag":"refentry","type":"Function","methodName":"get_defined_vars"},{"id":"function.get-resource-id","name":"get_resource_id","description":"Returns an integer identifier for the given resource","tag":"refentry","type":"Function","methodName":"get_resource_id"},{"id":"function.get-resource-type","name":"get_resource_type","description":"Returns the resource type","tag":"refentry","type":"Function","methodName":"get_resource_type"},{"id":"function.gettype","name":"gettype","description":"Get the type of a variable","tag":"refentry","type":"Function","methodName":"gettype"},{"id":"function.intval","name":"intval","description":"Get the integer value of a variable","tag":"refentry","type":"Function","methodName":"intval"},{"id":"function.is-array","name":"is_array","description":"Finds whether a variable is an array","tag":"refentry","type":"Function","methodName":"is_array"},{"id":"function.is-bool","name":"is_bool","description":"Finds out whether a variable is a boolean","tag":"refentry","type":"Function","methodName":"is_bool"},{"id":"function.is-callable","name":"is_callable","description":"Verify that a value can be called as a function from the current scope","tag":"refentry","type":"Function","methodName":"is_callable"},{"id":"function.is-countable","name":"is_countable","description":"Verify that the contents of a variable is a countable value","tag":"refentry","type":"Function","methodName":"is_countable"},{"id":"function.is-double","name":"is_double","description":"Alias of is_float","tag":"refentry","type":"Function","methodName":"is_double"},{"id":"function.is-float","name":"is_float","description":"Finds whether the type of a variable is float","tag":"refentry","type":"Function","methodName":"is_float"},{"id":"function.is-int","name":"is_int","description":"Find whether the type of a variable is integer","tag":"refentry","type":"Function","methodName":"is_int"},{"id":"function.is-integer","name":"is_integer","description":"Alias of is_int","tag":"refentry","type":"Function","methodName":"is_integer"},{"id":"function.is-iterable","name":"is_iterable","description":"Verify that the contents of a variable is an iterable value","tag":"refentry","type":"Function","methodName":"is_iterable"},{"id":"function.is-long","name":"is_long","description":"Alias of is_int","tag":"refentry","type":"Function","methodName":"is_long"},{"id":"function.is-null","name":"is_null","description":"Finds whether a variable is null","tag":"refentry","type":"Function","methodName":"is_null"},{"id":"function.is-numeric","name":"is_numeric","description":"Finds whether a variable is a number or a numeric string","tag":"refentry","type":"Function","methodName":"is_numeric"},{"id":"function.is-object","name":"is_object","description":"Finds whether a variable is an object","tag":"refentry","type":"Function","methodName":"is_object"},{"id":"function.is-real","name":"is_real","description":"Alias of is_float","tag":"refentry","type":"Function","methodName":"is_real"},{"id":"function.is-resource","name":"is_resource","description":"Finds whether a variable is a resource","tag":"refentry","type":"Function","methodName":"is_resource"},{"id":"function.is-scalar","name":"is_scalar","description":"Finds whether a variable is a scalar","tag":"refentry","type":"Function","methodName":"is_scalar"},{"id":"function.is-string","name":"is_string","description":"Find whether the type of a variable is string","tag":"refentry","type":"Function","methodName":"is_string"},{"id":"function.isset","name":"isset","description":"Determine if a variable is declared and is different than null","tag":"refentry","type":"Function","methodName":"isset"},{"id":"function.print-r","name":"print_r","description":"Prints human-readable information about a variable","tag":"refentry","type":"Function","methodName":"print_r"},{"id":"function.serialize","name":"serialize","description":"Generates a storable representation of a value","tag":"refentry","type":"Function","methodName":"serialize"},{"id":"function.settype","name":"settype","description":"Set the type of a variable","tag":"refentry","type":"Function","methodName":"settype"},{"id":"function.strval","name":"strval","description":"Get string value of a variable","tag":"refentry","type":"Function","methodName":"strval"},{"id":"function.unserialize","name":"unserialize","description":"Creates a PHP value from a stored representation","tag":"refentry","type":"Function","methodName":"unserialize"},{"id":"function.unset","name":"unset","description":"unset a given variable","tag":"refentry","type":"Function","methodName":"unset"},{"id":"function.var-dump","name":"var_dump","description":"Dumps information about a variable","tag":"refentry","type":"Function","methodName":"var_dump"},{"id":"function.var-export","name":"var_export","description":"Outputs or returns a parsable string representation of a variable","tag":"refentry","type":"Function","methodName":"var_export"},{"id":"ref.var","name":"Variable handling Functions","description":"Variable handling","tag":"reference","type":"Extension","methodName":"Variable handling Functions"},{"id":"book.var","name":"Variable handling","description":"Variable and Type Related Extensions","tag":"book","type":"Extension","methodName":"Variable handling"},{"id":"refs.basic.vartype","name":"Variable and Type Related Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"Variable and Type Related Extensions"},{"id":"intro.oauth","name":"Introduction","description":"OAuth","tag":"preface","type":"General","methodName":"Introduction"},{"id":"oauth.requirements","name":"Requirements","description":"OAuth","tag":"section","type":"General","methodName":"Requirements"},{"id":"oauth.installation","name":"Installation","description":"OAuth","tag":"section","type":"General","methodName":"Installation"},{"id":"oauth.setup","name":"Installing\/Configuring","description":"OAuth","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"oauth.constants","name":"Predefined Constants","description":"OAuth","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"oauth.examples.fireeagle","name":"FireEagle","description":"OAuth","tag":"section","type":"General","methodName":"FireEagle"},{"id":"oauth.examples","name":"Examples","description":"OAuth","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.oauth-get-sbs","name":"oauth_get_sbs","description":"Generate a Signature Base String","tag":"refentry","type":"Function","methodName":"oauth_get_sbs"},{"id":"function.oauth-urlencode","name":"oauth_urlencode","description":"Encode a URI to RFC 3986","tag":"refentry","type":"Function","methodName":"oauth_urlencode"},{"id":"ref.oauth","name":"OAuth Functions","description":"OAuth","tag":"reference","type":"Extension","methodName":"OAuth Functions"},{"id":"oauth.construct","name":"OAuth::__construct","description":"Create a new OAuth object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"oauth.destruct","name":"OAuth::__destruct","description":"The destructor","tag":"refentry","type":"Function","methodName":"__destruct"},{"id":"oauth.disabledebug","name":"OAuth::disableDebug","description":"Turn off verbose debugging","tag":"refentry","type":"Function","methodName":"disableDebug"},{"id":"oauth.disableredirects","name":"OAuth::disableRedirects","description":"Turn off redirects","tag":"refentry","type":"Function","methodName":"disableRedirects"},{"id":"oauth.disablesslchecks","name":"OAuth::disableSSLChecks","description":"Turn off SSL checks","tag":"refentry","type":"Function","methodName":"disableSSLChecks"},{"id":"oauth.enabledebug","name":"OAuth::enableDebug","description":"Turn on verbose debugging","tag":"refentry","type":"Function","methodName":"enableDebug"},{"id":"oauth.enableredirects","name":"OAuth::enableRedirects","description":"Turn on redirects","tag":"refentry","type":"Function","methodName":"enableRedirects"},{"id":"oauth.enablesslchecks","name":"OAuth::enableSSLChecks","description":"Turn on SSL checks","tag":"refentry","type":"Function","methodName":"enableSSLChecks"},{"id":"oauth.fetch","name":"OAuth::fetch","description":"Fetch an OAuth protected resource","tag":"refentry","type":"Function","methodName":"fetch"},{"id":"oauth.generatesignature","name":"OAuth::generateSignature","description":"Generate a signature","tag":"refentry","type":"Function","methodName":"generateSignature"},{"id":"oauth.getaccesstoken","name":"OAuth::getAccessToken","description":"Fetch an access token","tag":"refentry","type":"Function","methodName":"getAccessToken"},{"id":"oauth.getcapath","name":"OAuth::getCAPath","description":"Gets CA information","tag":"refentry","type":"Function","methodName":"getCAPath"},{"id":"oauth.getlastresponse","name":"OAuth::getLastResponse","description":"Get the last response","tag":"refentry","type":"Function","methodName":"getLastResponse"},{"id":"oauth.getlastresponseheaders","name":"OAuth::getLastResponseHeaders","description":"Get headers for last response","tag":"refentry","type":"Function","methodName":"getLastResponseHeaders"},{"id":"oauth.getlastresponseinfo","name":"OAuth::getLastResponseInfo","description":"Get HTTP information about the last response","tag":"refentry","type":"Function","methodName":"getLastResponseInfo"},{"id":"oauth.getrequestheader","name":"OAuth::getRequestHeader","description":"Generate OAuth header string signature","tag":"refentry","type":"Function","methodName":"getRequestHeader"},{"id":"oauth.getrequesttoken","name":"OAuth::getRequestToken","description":"Fetch a request token","tag":"refentry","type":"Function","methodName":"getRequestToken"},{"id":"oauth.setauthtype","name":"OAuth::setAuthType","description":"Set authorization type","tag":"refentry","type":"Function","methodName":"setAuthType"},{"id":"oauth.setcapath","name":"OAuth::setCAPath","description":"Set CA path and info","tag":"refentry","type":"Function","methodName":"setCAPath"},{"id":"oauth.setnonce","name":"OAuth::setNonce","description":"Set the nonce for subsequent requests","tag":"refentry","type":"Function","methodName":"setNonce"},{"id":"oauth.setrequestengine","name":"OAuth::setRequestEngine","description":"The setRequestEngine purpose","tag":"refentry","type":"Function","methodName":"setRequestEngine"},{"id":"oauth.setrsacertificate","name":"OAuth::setRSACertificate","description":"Set the RSA certificate","tag":"refentry","type":"Function","methodName":"setRSACertificate"},{"id":"oauth.setsslchecks","name":"OAuth::setSSLChecks","description":"Tweak specific SSL checks for requests","tag":"refentry","type":"Function","methodName":"setSSLChecks"},{"id":"oauth.settimestamp","name":"OAuth::setTimestamp","description":"Set the timestamp","tag":"refentry","type":"Function","methodName":"setTimestamp"},{"id":"oauth.settoken","name":"OAuth::setToken","description":"Sets the token and secret","tag":"refentry","type":"Function","methodName":"setToken"},{"id":"oauth.setversion","name":"OAuth::setVersion","description":"Set the OAuth version","tag":"refentry","type":"Function","methodName":"setVersion"},{"id":"class.oauth","name":"OAuth","description":"The OAuth class","tag":"phpdoc:classref","type":"Class","methodName":"OAuth"},{"id":"oauthprovider.addrequiredparameter","name":"OAuthProvider::addRequiredParameter","description":"Add required parameters","tag":"refentry","type":"Function","methodName":"addRequiredParameter"},{"id":"oauthprovider.callconsumerhandler","name":"OAuthProvider::callconsumerHandler","description":"Calls the consumerNonceHandler callback","tag":"refentry","type":"Function","methodName":"callconsumerHandler"},{"id":"oauthprovider.calltimestampnoncehandler","name":"OAuthProvider::callTimestampNonceHandler","description":"Calls the timestampNonceHandler callback","tag":"refentry","type":"Function","methodName":"callTimestampNonceHandler"},{"id":"oauthprovider.calltokenhandler","name":"OAuthProvider::calltokenHandler","description":"Calls the tokenNonceHandler callback","tag":"refentry","type":"Function","methodName":"calltokenHandler"},{"id":"oauthprovider.checkoauthrequest","name":"OAuthProvider::checkOAuthRequest","description":"Check an oauth request","tag":"refentry","type":"Function","methodName":"checkOAuthRequest"},{"id":"oauthprovider.construct","name":"OAuthProvider::__construct","description":"Constructs a new OAuthProvider object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"oauthprovider.consumerhandler","name":"OAuthProvider::consumerHandler","description":"Set the consumerHandler handler callback","tag":"refentry","type":"Function","methodName":"consumerHandler"},{"id":"oauthprovider.generatetoken","name":"OAuthProvider::generateToken","description":"Generate a random token","tag":"refentry","type":"Function","methodName":"generateToken"},{"id":"oauthprovider.is2leggedendpoint","name":"OAuthProvider::is2LeggedEndpoint","description":"is2LeggedEndpoint","tag":"refentry","type":"Function","methodName":"is2LeggedEndpoint"},{"id":"oauthprovider.isrequesttokenendpoint","name":"OAuthProvider::isRequestTokenEndpoint","description":"Sets isRequestTokenEndpoint","tag":"refentry","type":"Function","methodName":"isRequestTokenEndpoint"},{"id":"oauthprovider.removerequiredparameter","name":"OAuthProvider::removeRequiredParameter","description":"Remove a required parameter","tag":"refentry","type":"Function","methodName":"removeRequiredParameter"},{"id":"oauthprovider.reportproblem","name":"OAuthProvider::reportProblem","description":"Report a problem","tag":"refentry","type":"Function","methodName":"reportProblem"},{"id":"oauthprovider.setparam","name":"OAuthProvider::setParam","description":"Set a parameter","tag":"refentry","type":"Function","methodName":"setParam"},{"id":"oauthprovider.setrequesttokenpath","name":"OAuthProvider::setRequestTokenPath","description":"Set request token path","tag":"refentry","type":"Function","methodName":"setRequestTokenPath"},{"id":"oauthprovider.timestampnoncehandler","name":"OAuthProvider::timestampNonceHandler","description":"Set the timestampNonceHandler handler callback","tag":"refentry","type":"Function","methodName":"timestampNonceHandler"},{"id":"oauthprovider.tokenhandler","name":"OAuthProvider::tokenHandler","description":"Set the tokenHandler handler callback","tag":"refentry","type":"Function","methodName":"tokenHandler"},{"id":"class.oauthprovider","name":"OAuthProvider","description":"The OAuthProvider class","tag":"phpdoc:classref","type":"Class","methodName":"OAuthProvider"},{"id":"class.oauthexception","name":"OAuthException","description":"OAuthException class","tag":"phpdoc:classref","type":"Class","methodName":"OAuthException"},{"id":"book.oauth","name":"OAuth","description":"Web Services","tag":"book","type":"Extension","methodName":"OAuth"},{"id":"intro.soap","name":"Introduction","description":"SOAP","tag":"preface","type":"General","methodName":"Introduction"},{"id":"soap.requirements","name":"Requirements","description":"SOAP","tag":"section","type":"General","methodName":"Requirements"},{"id":"soap.installation","name":"Installation","description":"SOAP","tag":"section","type":"General","methodName":"Installation"},{"id":"soap.configuration","name":"Runtime Configuration","description":"SOAP","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"soap.setup","name":"Installing\/Configuring","description":"SOAP","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"soap.constants","name":"Predefined Constants","description":"SOAP","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"function.is-soap-fault","name":"is_soap_fault","description":"Checks if a SOAP call has failed","tag":"refentry","type":"Function","methodName":"is_soap_fault"},{"id":"function.use-soap-error-handler","name":"use_soap_error_handler","description":"Set whether to use the SOAP error handler","tag":"refentry","type":"Function","methodName":"use_soap_error_handler"},{"id":"ref.soap","name":"SOAP Functions","description":"SOAP","tag":"reference","type":"Extension","methodName":"SOAP Functions"},{"id":"soapclient.call","name":"SoapClient::__call","description":"Calls a SOAP function (deprecated)","tag":"refentry","type":"Function","methodName":"__call"},{"id":"soapclient.construct","name":"SoapClient::__construct","description":"SoapClient constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"soapclient.dorequest","name":"SoapClient::__doRequest","description":"Performs a SOAP request","tag":"refentry","type":"Function","methodName":"__doRequest"},{"id":"soapclient.getcookies","name":"SoapClient::__getCookies","description":"Get list of cookies","tag":"refentry","type":"Function","methodName":"__getCookies"},{"id":"soapclient.getfunctions","name":"SoapClient::__getFunctions","description":"Returns list of available SOAP functions","tag":"refentry","type":"Function","methodName":"__getFunctions"},{"id":"soapclient.getlastrequest","name":"SoapClient::__getLastRequest","description":"Returns last SOAP request","tag":"refentry","type":"Function","methodName":"__getLastRequest"},{"id":"soapclient.getlastrequestheaders","name":"SoapClient::__getLastRequestHeaders","description":"Returns the SOAP headers from the last request","tag":"refentry","type":"Function","methodName":"__getLastRequestHeaders"},{"id":"soapclient.getlastresponse","name":"SoapClient::__getLastResponse","description":"Returns last SOAP response","tag":"refentry","type":"Function","methodName":"__getLastResponse"},{"id":"soapclient.getlastresponseheaders","name":"SoapClient::__getLastResponseHeaders","description":"Returns the SOAP headers from the last response","tag":"refentry","type":"Function","methodName":"__getLastResponseHeaders"},{"id":"soapclient.gettypes","name":"SoapClient::__getTypes","description":"Returns a list of SOAP types","tag":"refentry","type":"Function","methodName":"__getTypes"},{"id":"soapclient.setcookie","name":"SoapClient::__setCookie","description":"Defines a cookie for SOAP requests","tag":"refentry","type":"Function","methodName":"__setCookie"},{"id":"soapclient.setlocation","name":"SoapClient::__setLocation","description":"Sets the location of the Web service to use","tag":"refentry","type":"Function","methodName":"__setLocation"},{"id":"soapclient.setsoapheaders","name":"SoapClient::__setSoapHeaders","description":"Sets SOAP headers for subsequent calls","tag":"refentry","type":"Function","methodName":"__setSoapHeaders"},{"id":"soapclient.soapcall","name":"SoapClient::__soapCall","description":"Calls a SOAP function","tag":"refentry","type":"Function","methodName":"__soapCall"},{"id":"class.soapclient","name":"SoapClient","description":"The SoapClient class","tag":"phpdoc:classref","type":"Class","methodName":"SoapClient"},{"id":"soapserver.addfunction","name":"SoapServer::addFunction","description":"Adds one or more functions to handle SOAP requests","tag":"refentry","type":"Function","methodName":"addFunction"},{"id":"soapserver.addsoapheader","name":"SoapServer::addSoapHeader","description":"Add a SOAP header to the response","tag":"refentry","type":"Function","methodName":"addSoapHeader"},{"id":"soapserver.construct","name":"SoapServer::__construct","description":"SoapServer constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"soapserver.fault","name":"SoapServer::fault","description":"Issue SoapServer fault indicating an error","tag":"refentry","type":"Function","methodName":"fault"},{"id":"soapserver.getfunctions","name":"SoapServer::getFunctions","description":"Returns list of defined functions","tag":"refentry","type":"Function","methodName":"getFunctions"},{"id":"soapserver.getlastresponse","name":"SoapServer::__getLastResponse","description":"Returns last SOAP response","tag":"refentry","type":"Function","methodName":"__getLastResponse"},{"id":"soapserver.handle","name":"SoapServer::handle","description":"Handles a SOAP request","tag":"refentry","type":"Function","methodName":"handle"},{"id":"soapserver.setclass","name":"SoapServer::setClass","description":"Sets the class which handles SOAP requests","tag":"refentry","type":"Function","methodName":"setClass"},{"id":"soapserver.setobject","name":"SoapServer::setObject","description":"Sets the object which will be used to handle SOAP requests","tag":"refentry","type":"Function","methodName":"setObject"},{"id":"soapserver.setpersistence","name":"SoapServer::setPersistence","description":"Sets SoapServer persistence mode","tag":"refentry","type":"Function","methodName":"setPersistence"},{"id":"class.soapserver","name":"SoapServer","description":"The SoapServer class","tag":"phpdoc:classref","type":"Class","methodName":"SoapServer"},{"id":"soapfault.construct","name":"SoapFault::__construct","description":"SoapFault constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"soapfault.tostring","name":"SoapFault::__toString","description":"Obtain a string representation of a SoapFault","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"class.soapfault","name":"SoapFault","description":"The SoapFault class","tag":"phpdoc:classref","type":"Class","methodName":"SoapFault"},{"id":"soapheader.construct","name":"SoapHeader::__construct","description":"SoapHeader constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.soapheader","name":"SoapHeader","description":"The SoapHeader class","tag":"phpdoc:classref","type":"Class","methodName":"SoapHeader"},{"id":"soapparam.construct","name":"SoapParam::__construct","description":"SoapParam constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.soapparam","name":"SoapParam","description":"The SoapParam class","tag":"phpdoc:classref","type":"Class","methodName":"SoapParam"},{"id":"soapvar.construct","name":"SoapVar::__construct","description":"SoapVar constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.soapvar","name":"SoapVar","description":"The SoapVar class","tag":"phpdoc:classref","type":"Class","methodName":"SoapVar"},{"id":"book.soap","name":"SOAP","description":"SOAP","tag":"book","type":"Extension","methodName":"SOAP"},{"id":"intro.yar","name":"Introduction","description":"Yet Another RPC Framework","tag":"preface","type":"General","methodName":"Introduction"},{"id":"yar.requirements","name":"Requirements","description":"Yet Another RPC Framework","tag":"section","type":"General","methodName":"Requirements"},{"id":"yar.installation","name":"Installation","description":"Yet Another RPC Framework","tag":"section","type":"General","methodName":"Installation"},{"id":"yar.configuration","name":"Runtime Configuration","description":"Yet Another RPC Framework","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"yar.resources","name":"Resource Types","description":"Yet Another RPC Framework","tag":"section","type":"General","methodName":"Resource Types"},{"id":"yar.setup","name":"Installing\/Configuring","description":"Yet Another RPC Framework","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"yar.constants","name":"Predefined Constants","description":"Yet Another RPC Framework","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"yar.examples","name":"Examples","description":"Yet Another RPC Framework","tag":"chapter","type":"General","methodName":"Examples"},{"id":"yar-server.construct","name":"Yar_Server::__construct","description":"Register a server","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yar-server.handle","name":"Yar_Server::handle","description":"Start RPC Server","tag":"refentry","type":"Function","methodName":"handle"},{"id":"class.yar-server","name":"Yar_Server","description":"The Yar_Server class","tag":"phpdoc:classref","type":"Class","methodName":"Yar_Server"},{"id":"yar-client.call","name":"Yar_Client::__call","description":"Call service","tag":"refentry","type":"Function","methodName":"__call"},{"id":"yar-client.construct","name":"Yar_Client::__construct","description":"Create a client","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"yar-client.setopt","name":"Yar_Client::setOpt","description":"Set calling contexts","tag":"refentry","type":"Function","methodName":"setOpt"},{"id":"class.yar-client","name":"Yar_Client","description":"The Yar_Client class","tag":"phpdoc:classref","type":"Class","methodName":"Yar_Client"},{"id":"yar-concurrent-client.call","name":"Yar_Concurrent_Client::call","description":"Register a concurrent call","tag":"refentry","type":"Function","methodName":"call"},{"id":"yar-concurrent-client.loop","name":"Yar_Concurrent_Client::loop","description":"Send all calls","tag":"refentry","type":"Function","methodName":"loop"},{"id":"yar-concurrent-client.reset","name":"Yar_Concurrent_Client::reset","description":"Clean all registered calls","tag":"refentry","type":"Function","methodName":"reset"},{"id":"class.yar-concurrent-client","name":"Yar_Concurrent_Client","description":"The Yar_Concurrent_Client class","tag":"phpdoc:classref","type":"Class","methodName":"Yar_Concurrent_Client"},{"id":"yar-server-exception.gettype","name":"Yar_Server_Exception::getType","description":"Retrieve exception's type","tag":"refentry","type":"Function","methodName":"getType"},{"id":"class.yar-server-exception","name":"Yar_Server_Exception","description":"The Yar_Server_Exception class","tag":"phpdoc:classref","type":"Class","methodName":"Yar_Server_Exception"},{"id":"yar-client-exception.gettype","name":"Yar_Client_Exception::getType","description":"Retrieve exception's type","tag":"refentry","type":"Function","methodName":"getType"},{"id":"class.yar-client-exception","name":"Yar_Client_Exception","description":"The Yar_Client_Exception class","tag":"phpdoc:classref","type":"Class","methodName":"Yar_Client_Exception"},{"id":"book.yar","name":"Yar","description":"Yet Another RPC Framework","tag":"book","type":"Extension","methodName":"Yar"},{"id":"intro.xmlrpc","name":"Introduction","description":"XML-RPC","tag":"preface","type":"General","methodName":"Introduction"},{"id":"xmlrpc.requirements","name":"Requirements","description":"XML-RPC","tag":"section","type":"General","methodName":"Requirements"},{"id":"xmlrpc.installation","name":"Installation","description":"XML-RPC","tag":"section","type":"General","methodName":"Installation"},{"id":"xmlrpc.resources","name":"Resource Types","description":"XML-RPC","tag":"section","type":"General","methodName":"Resource Types"},{"id":"xmlrpc.setup","name":"Installing\/Configuring","description":"XML-RPC","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"function.xmlrpc-decode","name":"xmlrpc_decode","description":"Decodes XML into native PHP types","tag":"refentry","type":"Function","methodName":"xmlrpc_decode"},{"id":"function.xmlrpc-decode-request","name":"xmlrpc_decode_request","description":"Decodes XML into native PHP types","tag":"refentry","type":"Function","methodName":"xmlrpc_decode_request"},{"id":"function.xmlrpc-encode","name":"xmlrpc_encode","description":"Generates XML for a PHP value","tag":"refentry","type":"Function","methodName":"xmlrpc_encode"},{"id":"function.xmlrpc-encode-request","name":"xmlrpc_encode_request","description":"Generates XML for a method request","tag":"refentry","type":"Function","methodName":"xmlrpc_encode_request"},{"id":"function.xmlrpc-get-type","name":"xmlrpc_get_type","description":"Gets xmlrpc type for a PHP value","tag":"refentry","type":"Function","methodName":"xmlrpc_get_type"},{"id":"function.xmlrpc-is-fault","name":"xmlrpc_is_fault","description":"Determines if an array value represents an XMLRPC fault","tag":"refentry","type":"Function","methodName":"xmlrpc_is_fault"},{"id":"function.xmlrpc-parse-method-descriptions","name":"xmlrpc_parse_method_descriptions","description":"Decodes XML into a list of method descriptions","tag":"refentry","type":"Function","methodName":"xmlrpc_parse_method_descriptions"},{"id":"function.xmlrpc-server-add-introspection-data","name":"xmlrpc_server_add_introspection_data","description":"Adds introspection documentation","tag":"refentry","type":"Function","methodName":"xmlrpc_server_add_introspection_data"},{"id":"function.xmlrpc-server-call-method","name":"xmlrpc_server_call_method","description":"Parses XML requests and call methods","tag":"refentry","type":"Function","methodName":"xmlrpc_server_call_method"},{"id":"function.xmlrpc-server-create","name":"xmlrpc_server_create","description":"Creates an xmlrpc server","tag":"refentry","type":"Function","methodName":"xmlrpc_server_create"},{"id":"function.xmlrpc-server-destroy","name":"xmlrpc_server_destroy","description":"Destroys server resources","tag":"refentry","type":"Function","methodName":"xmlrpc_server_destroy"},{"id":"function.xmlrpc-server-register-introspection-callback","name":"xmlrpc_server_register_introspection_callback","description":"Register a PHP function to generate documentation","tag":"refentry","type":"Function","methodName":"xmlrpc_server_register_introspection_callback"},{"id":"function.xmlrpc-server-register-method","name":"xmlrpc_server_register_method","description":"Register a PHP function to resource method matching method_name","tag":"refentry","type":"Function","methodName":"xmlrpc_server_register_method"},{"id":"function.xmlrpc-set-type","name":"xmlrpc_set_type","description":"Sets xmlrpc type, base64 or datetime, for a PHP string value","tag":"refentry","type":"Function","methodName":"xmlrpc_set_type"},{"id":"ref.xmlrpc","name":"XML-RPC Functions","description":"XML-RPC","tag":"reference","type":"Extension","methodName":"XML-RPC Functions"},{"id":"book.xmlrpc","name":"XML-RPC","description":"Web Services","tag":"book","type":"Extension","methodName":"XML-RPC"},{"id":"refs.webservice","name":"Web Services","description":"Function Reference","tag":"set","type":"Extension","methodName":"Web Services"},{"id":"intro.com","name":"Introduction","description":"COM and .Net (Windows)","tag":"preface","type":"General","methodName":"Introduction"},{"id":"com.requirements","name":"Requirements","description":"COM and .Net (Windows)","tag":"section","type":"General","methodName":"Requirements"},{"id":"com.installation","name":"Installation","description":"COM and .Net (Windows)","tag":"section","type":"General","methodName":"Installation"},{"id":"com.configuration","name":"Runtime Configuration","description":"COM and .Net (Windows)","tag":"section","type":"General","methodName":"Runtime Configuration"},{"id":"com.setup","name":"Installing\/Configuring","description":"COM and .Net (Windows)","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"com.constants","name":"Predefined Constants","description":"COM and .Net (Windows)","tag":"chapter","type":"General","methodName":"Predefined Constants"},{"id":"com.error-handling","name":"Errors and error handling","description":"COM and .Net (Windows)","tag":"chapter","type":"General","methodName":"Errors and error handling"},{"id":"com.examples.foreach","name":"For Each","description":"COM and .Net (Windows)","tag":"section","type":"General","methodName":"For Each"},{"id":"com.examples.arrays","name":"Arrays and Array-style COM properties","description":"COM and .Net (Windows)","tag":"section","type":"General","methodName":"Arrays and Array-style COM properties"},{"id":"com.examples","name":"Examples","description":"COM and .Net (Windows)","tag":"chapter","type":"General","methodName":"Examples"},{"id":"com.construct","name":"com::__construct","description":"com class constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.com","name":"com","description":"The com class","tag":"phpdoc:classref","type":"Class","methodName":"com"},{"id":"dotnet.construct","name":"dotnet::__construct","description":"dotnet class constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.dotnet","name":"dotnet","description":"The dotnet class","tag":"phpdoc:classref","type":"Class","methodName":"dotnet"},{"id":"variant.construct","name":"variant::__construct","description":"variant class constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.variant","name":"variant","description":"variant class","tag":"phpdoc:classref","type":"Class","methodName":"variant"},{"id":"compersisthelper.construct","name":"COMPersistHelper::__construct","description":"Construct a COMPersistHelper object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"compersisthelper.getcurfilename","name":"COMPersistHelper::GetCurFileName","description":"Get current filename","tag":"refentry","type":"Function","methodName":"GetCurFileName"},{"id":"compersisthelper.getmaxstreamsize","name":"COMPersistHelper::GetMaxStreamSize","description":"Get maximum stream size","tag":"refentry","type":"Function","methodName":"GetMaxStreamSize"},{"id":"compersisthelper.initnew","name":"COMPersistHelper::InitNew","description":"Initialize object to default state","tag":"refentry","type":"Function","methodName":"InitNew"},{"id":"compersisthelper.loadfromfile","name":"COMPersistHelper::LoadFromFile","description":"Load object from file","tag":"refentry","type":"Function","methodName":"LoadFromFile"},{"id":"compersisthelper.loadfromstream","name":"COMPersistHelper::LoadFromStream","description":"Load object from stream","tag":"refentry","type":"Function","methodName":"LoadFromStream"},{"id":"compersisthelper.savetofile","name":"COMPersistHelper::SaveToFile","description":"Save object to file","tag":"refentry","type":"Function","methodName":"SaveToFile"},{"id":"compersisthelper.savetostream","name":"COMPersistHelper::SaveToStream","description":"Save object to stream","tag":"refentry","type":"Function","methodName":"SaveToStream"},{"id":"class.compersisthelper","name":"COMPersistHelper","description":"The COMPersistHelper class","tag":"phpdoc:classref","type":"Class","methodName":"COMPersistHelper"},{"id":"class.com-exception","name":"com_exception","description":"The com_exception class","tag":"phpdoc:classref","type":"Class","methodName":"com_exception"},{"id":"class.com-safearray-proxy","name":"com_safearray_proxy","description":"The com_safearray_proxy class","tag":"phpdoc:classref","type":"Class","methodName":"com_safearray_proxy"},{"id":"function.com-create-guid","name":"com_create_guid","description":"Generate a globally unique identifier (GUID)","tag":"refentry","type":"Function","methodName":"com_create_guid"},{"id":"function.com-event-sink","name":"com_event_sink","description":"Connect events from a COM object to a PHP object","tag":"refentry","type":"Function","methodName":"com_event_sink"},{"id":"function.com-get-active-object","name":"com_get_active_object","description":"Returns a handle to an already running instance of a COM object","tag":"refentry","type":"Function","methodName":"com_get_active_object"},{"id":"function.com-load-typelib","name":"com_load_typelib","description":"Loads a Typelib","tag":"refentry","type":"Function","methodName":"com_load_typelib"},{"id":"function.com-message-pump","name":"com_message_pump","description":"Process COM messages, sleeping for up to timeoutms milliseconds","tag":"refentry","type":"Function","methodName":"com_message_pump"},{"id":"function.com-print-typeinfo","name":"com_print_typeinfo","description":"Print out a PHP class definition for a dispatchable interface","tag":"refentry","type":"Function","methodName":"com_print_typeinfo"},{"id":"function.variant-abs","name":"variant_abs","description":"Returns the absolute value of a variant","tag":"refentry","type":"Function","methodName":"variant_abs"},{"id":"function.variant-add","name":"variant_add","description":"\"Adds\" two variant values together and returns the result","tag":"refentry","type":"Function","methodName":"variant_add"},{"id":"function.variant-and","name":"variant_and","description":"Performs a bitwise AND operation between two variants","tag":"refentry","type":"Function","methodName":"variant_and"},{"id":"function.variant-cast","name":"variant_cast","description":"Convert a variant into a new variant object of another type","tag":"refentry","type":"Function","methodName":"variant_cast"},{"id":"function.variant-cat","name":"variant_cat","description":"Concatenates two variant values together and returns the result","tag":"refentry","type":"Function","methodName":"variant_cat"},{"id":"function.variant-cmp","name":"variant_cmp","description":"Compares two variants","tag":"refentry","type":"Function","methodName":"variant_cmp"},{"id":"function.variant-date-from-timestamp","name":"variant_date_from_timestamp","description":"Returns a variant date representation of a Unix timestamp","tag":"refentry","type":"Function","methodName":"variant_date_from_timestamp"},{"id":"function.variant-date-to-timestamp","name":"variant_date_to_timestamp","description":"Converts a variant date\/time value to Unix timestamp","tag":"refentry","type":"Function","methodName":"variant_date_to_timestamp"},{"id":"function.variant-div","name":"variant_div","description":"Returns the result from dividing two variants","tag":"refentry","type":"Function","methodName":"variant_div"},{"id":"function.variant-eqv","name":"variant_eqv","description":"Performs a bitwise equivalence on two variants","tag":"refentry","type":"Function","methodName":"variant_eqv"},{"id":"function.variant-fix","name":"variant_fix","description":"Returns the integer portion of a variant","tag":"refentry","type":"Function","methodName":"variant_fix"},{"id":"function.variant-get-type","name":"variant_get_type","description":"Returns the type of a variant object","tag":"refentry","type":"Function","methodName":"variant_get_type"},{"id":"function.variant-idiv","name":"variant_idiv","description":"Converts variants to integers and then returns the result from dividing them","tag":"refentry","type":"Function","methodName":"variant_idiv"},{"id":"function.variant-imp","name":"variant_imp","description":"Performs a bitwise implication on two variants","tag":"refentry","type":"Function","methodName":"variant_imp"},{"id":"function.variant-int","name":"variant_int","description":"Returns the integer portion of a variant","tag":"refentry","type":"Function","methodName":"variant_int"},{"id":"function.variant-mod","name":"variant_mod","description":"Divides two variants and returns only the remainder","tag":"refentry","type":"Function","methodName":"variant_mod"},{"id":"function.variant-mul","name":"variant_mul","description":"Multiplies the values of the two variants","tag":"refentry","type":"Function","methodName":"variant_mul"},{"id":"function.variant-neg","name":"variant_neg","description":"Performs logical negation on a variant","tag":"refentry","type":"Function","methodName":"variant_neg"},{"id":"function.variant-not","name":"variant_not","description":"Performs bitwise not negation on a variant","tag":"refentry","type":"Function","methodName":"variant_not"},{"id":"function.variant-or","name":"variant_or","description":"Performs a logical disjunction on two variants","tag":"refentry","type":"Function","methodName":"variant_or"},{"id":"function.variant-pow","name":"variant_pow","description":"Returns the result of performing the power function with two variants","tag":"refentry","type":"Function","methodName":"variant_pow"},{"id":"function.variant-round","name":"variant_round","description":"Rounds a variant to the specified number of decimal places","tag":"refentry","type":"Function","methodName":"variant_round"},{"id":"function.variant-set","name":"variant_set","description":"Assigns a new value for a variant object","tag":"refentry","type":"Function","methodName":"variant_set"},{"id":"function.variant-set-type","name":"variant_set_type","description":"Convert a variant into another type \"in-place\"","tag":"refentry","type":"Function","methodName":"variant_set_type"},{"id":"function.variant-sub","name":"variant_sub","description":"Subtracts the value of the right variant from the left variant value","tag":"refentry","type":"Function","methodName":"variant_sub"},{"id":"function.variant-xor","name":"variant_xor","description":"Performs a logical exclusion on two variants","tag":"refentry","type":"Function","methodName":"variant_xor"},{"id":"ref.com","name":"COM Functions","description":"COM and .Net (Windows)","tag":"reference","type":"Extension","methodName":"COM Functions"},{"id":"book.com","name":"COM","description":"COM and .Net (Windows)","tag":"book","type":"Extension","methodName":"COM"},{"id":"intro.win32service","name":"Introduction","description":"win32service","tag":"preface","type":"General","methodName":"Introduction"},{"id":"win32service.requirements","name":"Requirements","description":"win32service","tag":"section","type":"General","methodName":"Requirements"},{"id":"win32service.installation","name":"Installation","description":"win32service","tag":"section","type":"General","methodName":"Installation"},{"id":"win32service.security","name":"Security consideration","description":"win32service","tag":"section","type":"General","methodName":"Security consideration"},{"id":"win32service.setup","name":"Installing\/Configuring","description":"win32service","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"win32service.constants","name":"Predefined Constants","description":"win32service","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"class.win32serviceexception","name":"Win32ServiceException","description":"The Win32ServiceException class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"Win32ServiceException"},{"id":"win32service-rightinfo.construct","name":"Win32Service\\RightInfo::__construct","description":"Create a new RightInfo (not used)","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"win32service-rightinfo.get-domain","name":"Win32Service\\RightInfo::getDomain","description":"Return the user's domain","tag":"refentry","type":"Function","methodName":"getDomain"},{"id":"win32service-rightinfo.get-full-username","name":"Win32Service\\RightInfo::getFullUsername","description":"Return the domain and username","tag":"refentry","type":"Function","methodName":"getFullUsername"},{"id":"win32service-rightinfo.get-rights","name":"Win32Service\\RightInfo::getRights","description":"Return the rights list","tag":"refentry","type":"Function","methodName":"getRights"},{"id":"win32service-rightinfo.get-username","name":"Win32Service\\RightInfo::getUsername","description":"Return the username","tag":"refentry","type":"Function","methodName":"getUsername"},{"id":"win32service-rightinfo.is-deny-access","name":"Win32Service\\RightInfo::isDenyAccess","description":"Return true if the RightInfo concerns deny access to the resource","tag":"refentry","type":"Function","methodName":"isDenyAccess"},{"id":"win32service-rightinfo.is-grant-access","name":"Win32Service\\RightInfo::isGrantAccess","description":"Return true if the RightInfo concern grants access to the resource","tag":"refentry","type":"Function","methodName":"isGrantAccess"},{"id":"class.win32service-rightinfo","name":"Win32Service\\RightInfo","description":"The Win32Service\\RightInfo class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"Win32Service\\RightInfo"},{"id":"win32service.examples","name":"Examples","description":"win32service","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.win32-add-right-access-service","name":"win32_add_right_access_service","description":"Add rights access for an username to the service","tag":"refentry","type":"Function","methodName":"win32_add_right_access_service"},{"id":"function.win32-add-service-env-var","name":"win32_add_service_env_var","description":"Add a custom environment variables on service","tag":"refentry","type":"Function","methodName":"win32_add_service_env_var"},{"id":"function.win32-continue-service","name":"win32_continue_service","description":"Resumes a paused service","tag":"refentry","type":"Function","methodName":"win32_continue_service"},{"id":"function.win32-create-service","name":"win32_create_service","description":"Creates a new service entry in the SCM database","tag":"refentry","type":"Function","methodName":"win32_create_service"},{"id":"function.win32-delete-service","name":"win32_delete_service","description":"Deletes a service entry from the SCM database","tag":"refentry","type":"Function","methodName":"win32_delete_service"},{"id":"function.win32-get-last-control-message","name":"win32_get_last_control_message","description":"Returns the last control message that was sent to this service","tag":"refentry","type":"Function","methodName":"win32_get_last_control_message"},{"id":"function.win32-get-service-env-vars","name":"win32_get_service_env_vars","description":"Read all custom environment variables on service","tag":"refentry","type":"Function","methodName":"win32_get_service_env_vars"},{"id":"function.win32-pause-service","name":"win32_pause_service","description":"Pauses a service","tag":"refentry","type":"Function","methodName":"win32_pause_service"},{"id":"function.win32-query-service-status","name":"win32_query_service_status","description":"Queries the status of a service","tag":"refentry","type":"Function","methodName":"win32_query_service_status"},{"id":"function.win32-read-all-rights-access-service","name":"win32_read_all_rights_access_service","description":"Read all service rights access","tag":"refentry","type":"Function","methodName":"win32_read_all_rights_access_service"},{"id":"function.win32-read-right-access-service","name":"win32_read_right_access_service","description":"Read the service rights access for an username","tag":"refentry","type":"Function","methodName":"win32_read_right_access_service"},{"id":"function.win32-remove-right-access-service","name":"win32_remove_right_access_service","description":"Remove the service rights access for an username","tag":"refentry","type":"Function","methodName":"win32_remove_right_access_service"},{"id":"function.win32-remove-service-env-var","name":"win32_remove_service_env_var","description":"Remove a custom environment variables on service","tag":"refentry","type":"Function","methodName":"win32_remove_service_env_var"},{"id":"function.win32-send-custom-control","name":"win32_send_custom_control","description":"Send a custom control to the service","tag":"refentry","type":"Function","methodName":"win32_send_custom_control"},{"id":"function.win32-set-service-exit-code","name":"win32_set_service_exit_code","description":"Define or return the exit code for the current running service","tag":"refentry","type":"Function","methodName":"win32_set_service_exit_code"},{"id":"function.win32-set-service-exit-mode","name":"win32_set_service_exit_mode","description":"Define or return the exit mode for the current running service","tag":"refentry","type":"Function","methodName":"win32_set_service_exit_mode"},{"id":"function.win32-set-service-pause-resume-state","name":"win32_set_service_pause_resume_state","description":"Define or return the pause\/resume capability for the current running service","tag":"refentry","type":"Function","methodName":"win32_set_service_pause_resume_state"},{"id":"function.win32-set-service-status","name":"win32_set_service_status","description":"Update the service status","tag":"refentry","type":"Function","methodName":"win32_set_service_status"},{"id":"function.win32-start-service","name":"win32_start_service","description":"Starts a service","tag":"refentry","type":"Function","methodName":"win32_start_service"},{"id":"function.win32-start-service-ctrl-dispatcher","name":"win32_start_service_ctrl_dispatcher","description":"Registers the script with the SCM, so that it can act as the service with the given name","tag":"refentry","type":"Function","methodName":"win32_start_service_ctrl_dispatcher"},{"id":"function.win32-stop-service","name":"win32_stop_service","description":"Stops a service","tag":"refentry","type":"Function","methodName":"win32_stop_service"},{"id":"ref.win32service","name":"win32service Functions","description":"win32service","tag":"reference","type":"Extension","methodName":"win32service Functions"},{"id":"book.win32service","name":"win32service","description":"Windows Only Extensions","tag":"book","type":"Extension","methodName":"win32service"},{"id":"refs.utilspec.windows","name":"Windows Only Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"Windows Only Extensions"},{"id":"intro.dom","name":"Introduction","description":"Document Object Model","tag":"preface","type":"General","methodName":"Introduction"},{"id":"dom.requirements","name":"Requirements","description":"Document Object Model","tag":"section","type":"General","methodName":"Requirements"},{"id":"dom.installation","name":"Installation","description":"Document Object Model","tag":"section","type":"General","methodName":"Installation"},{"id":"dom.setup","name":"Installing\/Configuring","description":"Document Object Model","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"dom.constants","name":"Predefined Constants","description":"Document Object Model","tag":"chapter","type":"General","methodName":"Predefined Constants"},{"id":"dom.examples","name":"Examples","description":"Document Object Model","tag":"chapter","type":"General","methodName":"Examples"},{"id":"domattr.construct","name":"DOMAttr::__construct","description":"Creates a new DOMAttr object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"domattr.isid","name":"DOMAttr::isId","description":"Checks if attribute is a defined ID","tag":"refentry","type":"Function","methodName":"isId"},{"id":"class.domattr","name":"DOMAttr","description":"The DOMAttr class","tag":"phpdoc:classref","type":"Class","methodName":"DOMAttr"},{"id":"domcdatasection.construct","name":"DOMCdataSection::__construct","description":"Constructs a new DOMCdataSection object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.domcdatasection","name":"DOMCdataSection","description":"The DOMCdataSection class","tag":"phpdoc:classref","type":"Class","methodName":"DOMCdataSection"},{"id":"domcharacterdata.after","name":"DOMCharacterData::after","description":"Adds nodes after the character data","tag":"refentry","type":"Function","methodName":"after"},{"id":"domcharacterdata.appenddata","name":"DOMCharacterData::appendData","description":"Append the string to the end of the character data of the node","tag":"refentry","type":"Function","methodName":"appendData"},{"id":"domcharacterdata.before","name":"DOMCharacterData::before","description":"Adds nodes before the character data","tag":"refentry","type":"Function","methodName":"before"},{"id":"domcharacterdata.deletedata","name":"DOMCharacterData::deleteData","description":"Remove a range of characters from the character data","tag":"refentry","type":"Function","methodName":"deleteData"},{"id":"domcharacterdata.insertdata","name":"DOMCharacterData::insertData","description":"Insert a string at the specified UTF-8 codepoint offset","tag":"refentry","type":"Function","methodName":"insertData"},{"id":"domcharacterdata.remove","name":"DOMCharacterData::remove","description":"Removes the character data node","tag":"refentry","type":"Function","methodName":"remove"},{"id":"domcharacterdata.replacedata","name":"DOMCharacterData::replaceData","description":"Replace a substring within the character data","tag":"refentry","type":"Function","methodName":"replaceData"},{"id":"domcharacterdata.replacewith","name":"DOMCharacterData::replaceWith","description":"Replaces the character data with new nodes","tag":"refentry","type":"Function","methodName":"replaceWith"},{"id":"domcharacterdata.substringdata","name":"DOMCharacterData::substringData","description":"Extracts a range of data from the character data","tag":"refentry","type":"Function","methodName":"substringData"},{"id":"class.domcharacterdata","name":"DOMCharacterData","description":"The DOMCharacterData class","tag":"phpdoc:classref","type":"Class","methodName":"DOMCharacterData"},{"id":"domchildnode.after","name":"DOMChildNode::after","description":"Adds nodes after the node","tag":"refentry","type":"Function","methodName":"after"},{"id":"domchildnode.before","name":"DOMChildNode::before","description":"Adds nodes before the node","tag":"refentry","type":"Function","methodName":"before"},{"id":"domchildnode.remove","name":"DOMChildNode::remove","description":"Removes the node","tag":"refentry","type":"Function","methodName":"remove"},{"id":"domchildnode.replacewith","name":"DOMChildNode::replaceWith","description":"Replaces the node with new nodes","tag":"refentry","type":"Function","methodName":"replaceWith"},{"id":"class.domchildnode","name":"DOMChildNode","description":"The DOMChildNode interface","tag":"phpdoc:classref","type":"Class","methodName":"DOMChildNode"},{"id":"domcomment.construct","name":"DOMComment::__construct","description":"Creates a new DOMComment object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.domcomment","name":"DOMComment","description":"The DOMComment class","tag":"phpdoc:classref","type":"Class","methodName":"DOMComment"},{"id":"domdocument.adoptnode","name":"DOMDocument::adoptNode","description":"Transfer a node from another document","tag":"refentry","type":"Function","methodName":"adoptNode"},{"id":"domdocument.append","name":"DOMDocument::append","description":"Appends nodes after the last child node","tag":"refentry","type":"Function","methodName":"append"},{"id":"domdocument.construct","name":"DOMDocument::__construct","description":"Creates a new DOMDocument object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"domdocument.createattribute","name":"DOMDocument::createAttribute","description":"Create new attribute","tag":"refentry","type":"Function","methodName":"createAttribute"},{"id":"domdocument.createattributens","name":"DOMDocument::createAttributeNS","description":"Create new attribute node with an associated namespace","tag":"refentry","type":"Function","methodName":"createAttributeNS"},{"id":"domdocument.createcdatasection","name":"DOMDocument::createCDATASection","description":"Create new cdata node","tag":"refentry","type":"Function","methodName":"createCDATASection"},{"id":"domdocument.createcomment","name":"DOMDocument::createComment","description":"Create new comment node","tag":"refentry","type":"Function","methodName":"createComment"},{"id":"domdocument.createdocumentfragment","name":"DOMDocument::createDocumentFragment","description":"Create new document fragment","tag":"refentry","type":"Function","methodName":"createDocumentFragment"},{"id":"domdocument.createelement","name":"DOMDocument::createElement","description":"Create new element node","tag":"refentry","type":"Function","methodName":"createElement"},{"id":"domdocument.createelementns","name":"DOMDocument::createElementNS","description":"Create new element node with an associated namespace","tag":"refentry","type":"Function","methodName":"createElementNS"},{"id":"domdocument.createentityreference","name":"DOMDocument::createEntityReference","description":"Create new entity reference node","tag":"refentry","type":"Function","methodName":"createEntityReference"},{"id":"domdocument.createprocessinginstruction","name":"DOMDocument::createProcessingInstruction","description":"Creates new PI node","tag":"refentry","type":"Function","methodName":"createProcessingInstruction"},{"id":"domdocument.createtextnode","name":"DOMDocument::createTextNode","description":"Create new text node","tag":"refentry","type":"Function","methodName":"createTextNode"},{"id":"domdocument.getelementbyid","name":"DOMDocument::getElementById","description":"Searches for an element with a certain id","tag":"refentry","type":"Function","methodName":"getElementById"},{"id":"domdocument.getelementsbytagname","name":"DOMDocument::getElementsByTagName","description":"Searches for all elements with given local tag name","tag":"refentry","type":"Function","methodName":"getElementsByTagName"},{"id":"domdocument.getelementsbytagnamens","name":"DOMDocument::getElementsByTagNameNS","description":"Searches for all elements with given tag name in specified namespace","tag":"refentry","type":"Function","methodName":"getElementsByTagNameNS"},{"id":"domdocument.importnode","name":"DOMDocument::importNode","description":"Import node into current document","tag":"refentry","type":"Function","methodName":"importNode"},{"id":"domdocument.load","name":"DOMDocument::load","description":"Load XML from a file","tag":"refentry","type":"Function","methodName":"load"},{"id":"domdocument.loadhtml","name":"DOMDocument::loadHTML","description":"Load HTML from a string","tag":"refentry","type":"Function","methodName":"loadHTML"},{"id":"domdocument.loadhtmlfile","name":"DOMDocument::loadHTMLFile","description":"Load HTML from a file","tag":"refentry","type":"Function","methodName":"loadHTMLFile"},{"id":"domdocument.loadxml","name":"DOMDocument::loadXML","description":"Load XML from a string","tag":"refentry","type":"Function","methodName":"loadXML"},{"id":"domdocument.normalizedocument","name":"DOMDocument::normalizeDocument","description":"Normalizes the document","tag":"refentry","type":"Function","methodName":"normalizeDocument"},{"id":"domdocument.prepend","name":"DOMDocument::prepend","description":"Prepends nodes before the first child node","tag":"refentry","type":"Function","methodName":"prepend"},{"id":"domdocument.registernodeclass","name":"DOMDocument::registerNodeClass","description":"Register extended class used to create base node type","tag":"refentry","type":"Function","methodName":"registerNodeClass"},{"id":"domdocument.relaxngvalidate","name":"DOMDocument::relaxNGValidate","description":"Performs relaxNG validation on the document","tag":"refentry","type":"Function","methodName":"relaxNGValidate"},{"id":"domdocument.relaxngvalidatesource","name":"DOMDocument::relaxNGValidateSource","description":"Performs relaxNG validation on the document","tag":"refentry","type":"Function","methodName":"relaxNGValidateSource"},{"id":"domdocument.replacechildren","name":"DOMDocument::replaceChildren","description":"Replace children in document","tag":"refentry","type":"Function","methodName":"replaceChildren"},{"id":"domdocument.save","name":"DOMDocument::save","description":"Dumps the internal XML tree back into a file","tag":"refentry","type":"Function","methodName":"save"},{"id":"domdocument.savehtml","name":"DOMDocument::saveHTML","description":"Dumps the internal document into a string using HTML formatting","tag":"refentry","type":"Function","methodName":"saveHTML"},{"id":"domdocument.savehtmlfile","name":"DOMDocument::saveHTMLFile","description":"Dumps the internal document into a file using HTML formatting","tag":"refentry","type":"Function","methodName":"saveHTMLFile"},{"id":"domdocument.savexml","name":"DOMDocument::saveXML","description":"Dumps the internal XML tree back into a string","tag":"refentry","type":"Function","methodName":"saveXML"},{"id":"domdocument.schemavalidate","name":"DOMDocument::schemaValidate","description":"Validates a document based on a schema. Only XML Schema 1.0 is supported.","tag":"refentry","type":"Function","methodName":"schemaValidate"},{"id":"domdocument.schemavalidatesource","name":"DOMDocument::schemaValidateSource","description":"Validates a document based on a schema","tag":"refentry","type":"Function","methodName":"schemaValidateSource"},{"id":"domdocument.validate","name":"DOMDocument::validate","description":"Validates the document based on its DTD","tag":"refentry","type":"Function","methodName":"validate"},{"id":"domdocument.xinclude","name":"DOMDocument::xinclude","description":"Substitutes XIncludes in a DOMDocument Object","tag":"refentry","type":"Function","methodName":"xinclude"},{"id":"class.domdocument","name":"DOMDocument","description":"The DOMDocument class","tag":"phpdoc:classref","type":"Class","methodName":"DOMDocument"},{"id":"domdocumentfragment.append","name":"DOMDocumentFragment::append","description":"Appends nodes after the last child node","tag":"refentry","type":"Function","methodName":"append"},{"id":"domdocumentfragment.appendxml","name":"DOMDocumentFragment::appendXML","description":"Append raw XML data","tag":"refentry","type":"Function","methodName":"appendXML"},{"id":"domdocumentfragment.construct","name":"DOMDocumentFragment::__construct","description":"Constructs a DOMDocumentFragment object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"domdocumentfragment.prepend","name":"DOMDocumentFragment::prepend","description":"Prepends nodes before the first child node","tag":"refentry","type":"Function","methodName":"prepend"},{"id":"domdocumentfragment.replacechildren","name":"DOMDocumentFragment::replaceChildren","description":"Replace children in fragment","tag":"refentry","type":"Function","methodName":"replaceChildren"},{"id":"class.domdocumentfragment","name":"DOMDocumentFragment","description":"The DOMDocumentFragment class","tag":"phpdoc:classref","type":"Class","methodName":"DOMDocumentFragment"},{"id":"class.domdocumenttype","name":"DOMDocumentType","description":"The DOMDocumentType class","tag":"phpdoc:classref","type":"Class","methodName":"DOMDocumentType"},{"id":"domelement.after","name":"DOMElement::after","description":"Adds nodes after the element","tag":"refentry","type":"Function","methodName":"after"},{"id":"domelement.append","name":"DOMElement::append","description":"Appends nodes after the last child node","tag":"refentry","type":"Function","methodName":"append"},{"id":"domelement.before","name":"DOMElement::before","description":"Adds nodes before the element","tag":"refentry","type":"Function","methodName":"before"},{"id":"domelement.construct","name":"DOMElement::__construct","description":"Creates a new DOMElement object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"domelement.getattribute","name":"DOMElement::getAttribute","description":"Returns value of attribute","tag":"refentry","type":"Function","methodName":"getAttribute"},{"id":"domelement.getattributenames","name":"DOMElement::getAttributeNames","description":"Get attribute names","tag":"refentry","type":"Function","methodName":"getAttributeNames"},{"id":"domelement.getattributenode","name":"DOMElement::getAttributeNode","description":"Returns attribute node","tag":"refentry","type":"Function","methodName":"getAttributeNode"},{"id":"domelement.getattributenodens","name":"DOMElement::getAttributeNodeNS","description":"Returns attribute node","tag":"refentry","type":"Function","methodName":"getAttributeNodeNS"},{"id":"domelement.getattributens","name":"DOMElement::getAttributeNS","description":"Returns value of attribute","tag":"refentry","type":"Function","methodName":"getAttributeNS"},{"id":"domelement.getelementsbytagname","name":"DOMElement::getElementsByTagName","description":"Gets elements by tagname","tag":"refentry","type":"Function","methodName":"getElementsByTagName"},{"id":"domelement.getelementsbytagnamens","name":"DOMElement::getElementsByTagNameNS","description":"Get elements by namespaceURI and localName","tag":"refentry","type":"Function","methodName":"getElementsByTagNameNS"},{"id":"domelement.hasattribute","name":"DOMElement::hasAttribute","description":"Checks to see if attribute exists","tag":"refentry","type":"Function","methodName":"hasAttribute"},{"id":"domelement.hasattributens","name":"DOMElement::hasAttributeNS","description":"Checks to see if attribute exists","tag":"refentry","type":"Function","methodName":"hasAttributeNS"},{"id":"domelement.insertadjacentelement","name":"DOMElement::insertAdjacentElement","description":"Insert adjacent element","tag":"refentry","type":"Function","methodName":"insertAdjacentElement"},{"id":"domelement.insertadjacenttext","name":"DOMElement::insertAdjacentText","description":"Insert adjacent text","tag":"refentry","type":"Function","methodName":"insertAdjacentText"},{"id":"domelement.prepend","name":"DOMElement::prepend","description":"Prepends nodes before the first child node","tag":"refentry","type":"Function","methodName":"prepend"},{"id":"domelement.remove","name":"DOMElement::remove","description":"Removes the element","tag":"refentry","type":"Function","methodName":"remove"},{"id":"domelement.removeattribute","name":"DOMElement::removeAttribute","description":"Removes attribute","tag":"refentry","type":"Function","methodName":"removeAttribute"},{"id":"domelement.removeattributenode","name":"DOMElement::removeAttributeNode","description":"Removes attribute","tag":"refentry","type":"Function","methodName":"removeAttributeNode"},{"id":"domelement.removeattributens","name":"DOMElement::removeAttributeNS","description":"Removes attribute","tag":"refentry","type":"Function","methodName":"removeAttributeNS"},{"id":"domelement.replacechildren","name":"DOMElement::replaceChildren","description":"Replace children in element","tag":"refentry","type":"Function","methodName":"replaceChildren"},{"id":"domelement.replacewith","name":"DOMElement::replaceWith","description":"Replaces the element with new nodes","tag":"refentry","type":"Function","methodName":"replaceWith"},{"id":"domelement.setattribute","name":"DOMElement::setAttribute","description":"Adds new or modifies existing attribute","tag":"refentry","type":"Function","methodName":"setAttribute"},{"id":"domelement.setattributenode","name":"DOMElement::setAttributeNode","description":"Adds new attribute node to element","tag":"refentry","type":"Function","methodName":"setAttributeNode"},{"id":"domelement.setattributenodens","name":"DOMElement::setAttributeNodeNS","description":"Adds new attribute node to element","tag":"refentry","type":"Function","methodName":"setAttributeNodeNS"},{"id":"domelement.setattributens","name":"DOMElement::setAttributeNS","description":"Adds new attribute","tag":"refentry","type":"Function","methodName":"setAttributeNS"},{"id":"domelement.setidattribute","name":"DOMElement::setIdAttribute","description":"Declares the attribute specified by name to be of type ID","tag":"refentry","type":"Function","methodName":"setIdAttribute"},{"id":"domelement.setidattributenode","name":"DOMElement::setIdAttributeNode","description":"Declares the attribute specified by node to be of type ID","tag":"refentry","type":"Function","methodName":"setIdAttributeNode"},{"id":"domelement.setidattributens","name":"DOMElement::setIdAttributeNS","description":"Declares the attribute specified by local name and namespace URI to be of type ID","tag":"refentry","type":"Function","methodName":"setIdAttributeNS"},{"id":"domelement.toggleattribute","name":"DOMElement::toggleAttribute","description":"Toggle attribute","tag":"refentry","type":"Function","methodName":"toggleAttribute"},{"id":"class.domelement","name":"DOMElement","description":"The DOMElement class","tag":"phpdoc:classref","type":"Class","methodName":"DOMElement"},{"id":"class.domentity","name":"DOMEntity","description":"The DOMEntity class","tag":"phpdoc:classref","type":"Class","methodName":"DOMEntity"},{"id":"domentityreference.construct","name":"DOMEntityReference::__construct","description":"Creates a new DOMEntityReference object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.domentityreference","name":"DOMEntityReference","description":"The DOMEntityReference class","tag":"phpdoc:classref","type":"Class","methodName":"DOMEntityReference"},{"id":"class.domexception","name":"DOMException","description":"The DOMException \/ Dom\\Exception class","tag":"phpdoc:exceptionref","type":"Exception","methodName":"DOMException"},{"id":"domimplementation.construct","name":"DOMImplementation::__construct","description":"Creates a new DOMImplementation object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"domimplementation.createdocument","name":"DOMImplementation::createDocument","description":"Creates a DOMDocument object of the specified type with its document element","tag":"refentry","type":"Function","methodName":"createDocument"},{"id":"domimplementation.createdocumenttype","name":"DOMImplementation::createDocumentType","description":"Creates an empty DOMDocumentType object","tag":"refentry","type":"Function","methodName":"createDocumentType"},{"id":"domimplementation.hasfeature","name":"DOMImplementation::hasFeature","description":"Test if the DOM implementation implements a specific feature","tag":"refentry","type":"Function","methodName":"hasFeature"},{"id":"class.domimplementation","name":"DOMImplementation","description":"The DOMImplementation class","tag":"phpdoc:classref","type":"Class","methodName":"DOMImplementation"},{"id":"domnamednodemap.count","name":"DOMNamedNodeMap::count","description":"Get number of nodes in the map","tag":"refentry","type":"Function","methodName":"count"},{"id":"domnamednodemap.getiterator","name":"DOMNamedNodeMap::getIterator","description":"Retrieve an external iterator","tag":"refentry","type":"Function","methodName":"getIterator"},{"id":"domnamednodemap.getnameditem","name":"DOMNamedNodeMap::getNamedItem","description":"Retrieves a node specified by name","tag":"refentry","type":"Function","methodName":"getNamedItem"},{"id":"domnamednodemap.getnameditemns","name":"DOMNamedNodeMap::getNamedItemNS","description":"Retrieves a node specified by local name and namespace URI","tag":"refentry","type":"Function","methodName":"getNamedItemNS"},{"id":"domnamednodemap.item","name":"DOMNamedNodeMap::item","description":"Retrieves a node specified by index","tag":"refentry","type":"Function","methodName":"item"},{"id":"class.domnamednodemap","name":"DOMNamedNodeMap","description":"The DOMNamedNodeMap class","tag":"phpdoc:classref","type":"Class","methodName":"DOMNamedNodeMap"},{"id":"domnamespacenode.sleep","name":"DOMNameSpaceNode::__sleep","description":"Forbids serialization unless serialization methods are implemented in a subclass","tag":"refentry","type":"Function","methodName":"__sleep"},{"id":"domnamespacenode.wakeup","name":"DOMNameSpaceNode::__wakeup","description":"Forbids unserialization unless unserialization methods are implemented in a subclass","tag":"refentry","type":"Function","methodName":"__wakeup"},{"id":"class.domnamespacenode","name":"DOMNameSpaceNode","description":"The DOMNameSpaceNode class","tag":"phpdoc:classref","type":"Class","methodName":"DOMNameSpaceNode"},{"id":"domnode.appendchild","name":"DOMNode::appendChild","description":"Adds new child at the end of the children","tag":"refentry","type":"Function","methodName":"appendChild"},{"id":"domnode.c14n","name":"DOMNode::C14N","description":"Canonicalize nodes to a string","tag":"refentry","type":"Function","methodName":"C14N"},{"id":"domnode.c14nfile","name":"DOMNode::C14NFile","description":"Canonicalize nodes to a file","tag":"refentry","type":"Function","methodName":"C14NFile"},{"id":"domnode.clonenode","name":"DOMNode::cloneNode","description":"Clones a node","tag":"refentry","type":"Function","methodName":"cloneNode"},{"id":"domnode.comparedocumentposition","name":"DOMNode::compareDocumentPosition","description":"Compares the position of two nodes","tag":"refentry","type":"Function","methodName":"compareDocumentPosition"},{"id":"domnode.contains","name":"DOMNode::contains","description":"Checks if node contains other node","tag":"refentry","type":"Function","methodName":"contains"},{"id":"domnode.getlineno","name":"DOMNode::getLineNo","description":"Get line number for a node","tag":"refentry","type":"Function","methodName":"getLineNo"},{"id":"domnode.getnodepath","name":"DOMNode::getNodePath","description":"Get an XPath for a node","tag":"refentry","type":"Function","methodName":"getNodePath"},{"id":"domnode.getrootnode","name":"DOMNode::getRootNode","description":"Get root node","tag":"refentry","type":"Function","methodName":"getRootNode"},{"id":"domnode.hasattributes","name":"DOMNode::hasAttributes","description":"Checks if node has attributes","tag":"refentry","type":"Function","methodName":"hasAttributes"},{"id":"domnode.haschildnodes","name":"DOMNode::hasChildNodes","description":"Checks if node has children","tag":"refentry","type":"Function","methodName":"hasChildNodes"},{"id":"domnode.insertbefore","name":"DOMNode::insertBefore","description":"Adds a new child before a reference node","tag":"refentry","type":"Function","methodName":"insertBefore"},{"id":"domnode.isdefaultnamespace","name":"DOMNode::isDefaultNamespace","description":"Checks if the specified namespaceURI is the default namespace or not","tag":"refentry","type":"Function","methodName":"isDefaultNamespace"},{"id":"domnode.isequalnode","name":"DOMNode::isEqualNode","description":"Checks that both nodes are equal","tag":"refentry","type":"Function","methodName":"isEqualNode"},{"id":"domnode.issamenode","name":"DOMNode::isSameNode","description":"Indicates if two nodes are the same node","tag":"refentry","type":"Function","methodName":"isSameNode"},{"id":"domnode.issupported","name":"DOMNode::isSupported","description":"Checks if feature is supported for specified version","tag":"refentry","type":"Function","methodName":"isSupported"},{"id":"domnode.lookupnamespaceuri","name":"DOMNode::lookupNamespaceURI","description":"Gets the namespace URI of the node based on the prefix","tag":"refentry","type":"Function","methodName":"lookupNamespaceURI"},{"id":"domnode.lookupprefix","name":"DOMNode::lookupPrefix","description":"Gets the namespace prefix of the node based on the namespace URI","tag":"refentry","type":"Function","methodName":"lookupPrefix"},{"id":"domnode.normalize","name":"DOMNode::normalize","description":"Normalizes the node","tag":"refentry","type":"Function","methodName":"normalize"},{"id":"domnode.removechild","name":"DOMNode::removeChild","description":"Removes child from list of children","tag":"refentry","type":"Function","methodName":"removeChild"},{"id":"domnode.replacechild","name":"DOMNode::replaceChild","description":"Replaces a child","tag":"refentry","type":"Function","methodName":"replaceChild"},{"id":"domnode.sleep","name":"DOMNode::__sleep","description":"Forbids serialization unless serialization methods are implemented in a subclass","tag":"refentry","type":"Function","methodName":"__sleep"},{"id":"domnode.wakeup","name":"DOMNode::__wakeup","description":"Forbids unserialization unless unserialization methods are implemented in a subclass","tag":"refentry","type":"Function","methodName":"__wakeup"},{"id":"class.domnode","name":"DOMNode","description":"The DOMNode class","tag":"phpdoc:classref","type":"Class","methodName":"DOMNode"},{"id":"domnodelist.count","name":"DOMNodeList::count","description":"Get number of nodes in the list","tag":"refentry","type":"Function","methodName":"count"},{"id":"domnodelist.getiterator","name":"DOMNodeList::getIterator","description":"Retrieve an external iterator","tag":"refentry","type":"Function","methodName":"getIterator"},{"id":"domnodelist.item","name":"DOMNodeList::item","description":"Retrieves a node specified by index","tag":"refentry","type":"Function","methodName":"item"},{"id":"class.domnodelist","name":"DOMNodeList","description":"The DOMNodeList class","tag":"phpdoc:classref","type":"Class","methodName":"DOMNodeList"},{"id":"class.domnotation","name":"DOMNotation","description":"The DOMNotation class","tag":"phpdoc:classref","type":"Class","methodName":"DOMNotation"},{"id":"domparentnode.append","name":"DOMParentNode::append","description":"Appends nodes after the last child node","tag":"refentry","type":"Function","methodName":"append"},{"id":"domparentnode.prepend","name":"DOMParentNode::prepend","description":"Prepends nodes before the first child node","tag":"refentry","type":"Function","methodName":"prepend"},{"id":"domparentnode.replacechildren","name":"DOMParentNode::replaceChildren","description":"Replace children in node","tag":"refentry","type":"Function","methodName":"replaceChildren"},{"id":"class.domparentnode","name":"DOMParentNode","description":"The DOMParentNode interface","tag":"phpdoc:classref","type":"Class","methodName":"DOMParentNode"},{"id":"domprocessinginstruction.construct","name":"DOMProcessingInstruction::__construct","description":"Creates a new DOMProcessingInstruction object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.domprocessinginstruction","name":"DOMProcessingInstruction","description":"The DOMProcessingInstruction class","tag":"phpdoc:classref","type":"Class","methodName":"DOMProcessingInstruction"},{"id":"domtext.construct","name":"DOMText::__construct","description":"Creates a new DOMText object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"domtext.iselementcontentwhitespace","name":"DOMText::isElementContentWhitespace","description":"Returns whether this text node contains whitespace in element content","tag":"refentry","type":"Function","methodName":"isElementContentWhitespace"},{"id":"domtext.iswhitespaceinelementcontent","name":"DOMText::isWhitespaceInElementContent","description":"Indicates whether this text node contains whitespace","tag":"refentry","type":"Function","methodName":"isWhitespaceInElementContent"},{"id":"domtext.splittext","name":"DOMText::splitText","description":"Breaks this node into two nodes at the specified offset","tag":"refentry","type":"Function","methodName":"splitText"},{"id":"class.domtext","name":"DOMText","description":"The DOMText class","tag":"phpdoc:classref","type":"Class","methodName":"DOMText"},{"id":"domxpath.construct","name":"DOMXPath::__construct","description":"Creates a new DOMXPath object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"domxpath.evaluate","name":"DOMXPath::evaluate","description":"Evaluates the given XPath expression and returns a typed result if possible","tag":"refentry","type":"Function","methodName":"evaluate"},{"id":"domxpath.query","name":"DOMXPath::query","description":"Evaluates the given XPath expression","tag":"refentry","type":"Function","methodName":"query"},{"id":"domxpath.quote","name":"DOMXPath::quote","description":"Quotes a string for use in an XPath expression","tag":"refentry","type":"Function","methodName":"quote"},{"id":"domxpath.registernamespace","name":"DOMXPath::registerNamespace","description":"Registers the namespace with the DOMXPath object","tag":"refentry","type":"Function","methodName":"registerNamespace"},{"id":"domxpath.registerphpfunctionns","name":"DOMXPath::registerPhpFunctionNS","description":"Register a PHP functions as namespaced XPath function","tag":"refentry","type":"Function","methodName":"registerPhpFunctionNS"},{"id":"domxpath.registerphpfunctions","name":"DOMXPath::registerPhpFunctions","description":"Register PHP functions as XPath functions","tag":"refentry","type":"Function","methodName":"registerPhpFunctions"},{"id":"class.domxpath","name":"DOMXPath","description":"The DOMXPath class","tag":"phpdoc:classref","type":"Class","methodName":"DOMXPath"},{"id":"enum.dom-adjacentposition","name":"Dom\\AdjacentPosition","description":"The Dom\\AdjacentPosition Enum","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\AdjacentPosition"},{"id":"dom-attr.isid","name":"Dom\\Attr::isId","description":"Checks if attribute is a defined ID","tag":"refentry","type":"Function","methodName":"isId"},{"id":"dom-attr.rename","name":"Dom\\Attr::rename","description":"Changes the qualified name or namespace of an attribute","tag":"refentry","type":"Function","methodName":"rename"},{"id":"class.dom-attr","name":"Dom\\Attr","description":"The Dom\\Attr class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\Attr"},{"id":"class.dom-cdatasection","name":"Dom\\CDATASection","description":"The Dom\\CDATASection class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\CDATASection"},{"id":"dom-characterdata.after","name":"Dom\\CharacterData::after","description":"Adds nodes after the character data","tag":"refentry","type":"Function","methodName":"after"},{"id":"dom-characterdata.appenddata","name":"Dom\\CharacterData::appendData","description":"Append the string to the end of the character data of the node","tag":"refentry","type":"Function","methodName":"appendData"},{"id":"dom-characterdata.before","name":"Dom\\CharacterData::before","description":"Adds nodes before the character data","tag":"refentry","type":"Function","methodName":"before"},{"id":"dom-characterdata.deletedata","name":"Dom\\CharacterData::deleteData","description":"Remove a range of characters from the character data","tag":"refentry","type":"Function","methodName":"deleteData"},{"id":"dom-characterdata.insertdata","name":"Dom\\CharacterData::insertData","description":"Insert a string at the specified UTF-8 codepoint offset","tag":"refentry","type":"Function","methodName":"insertData"},{"id":"dom-characterdata.remove","name":"Dom\\CharacterData::remove","description":"Removes the character data node","tag":"refentry","type":"Function","methodName":"remove"},{"id":"dom-characterdata.replacedata","name":"Dom\\CharacterData::replaceData","description":"Replace a substring within the character data","tag":"refentry","type":"Function","methodName":"replaceData"},{"id":"dom-characterdata.replacewith","name":"Dom\\CharacterData::replaceWith","description":"Replaces the character data with new nodes","tag":"refentry","type":"Function","methodName":"replaceWith"},{"id":"dom-characterdata.substringdata","name":"Dom\\CharacterData::substringData","description":"Extracts a range of data from the character data","tag":"refentry","type":"Function","methodName":"substringData"},{"id":"class.dom-characterdata","name":"Dom\\CharacterData","description":"The Dom\\CharacterData class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\CharacterData"},{"id":"dom-childnode.after","name":"Dom\\ChildNode::after","description":"Adds nodes after the node","tag":"refentry","type":"Function","methodName":"after"},{"id":"dom-childnode.before","name":"Dom\\ChildNode::before","description":"Adds nodes before the node","tag":"refentry","type":"Function","methodName":"before"},{"id":"dom-childnode.remove","name":"Dom\\ChildNode::remove","description":"Removes the node","tag":"refentry","type":"Function","methodName":"remove"},{"id":"dom-childnode.replacewith","name":"Dom\\ChildNode::replaceWith","description":"Replaces the node with new nodes","tag":"refentry","type":"Function","methodName":"replaceWith"},{"id":"class.dom-childnode","name":"Dom\\ChildNode","description":"The Dom\\ChildNode interface","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\ChildNode"},{"id":"class.dom-comment","name":"Dom\\Comment","description":"The Dom\\Comment class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\Comment"},{"id":"class.dom-document","name":"Dom\\Document","description":"The Dom\\Document class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\Document"},{"id":"class.dom-documentfragment","name":"Dom\\DocumentFragment","description":"The Dom\\DocumentFragment class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\DocumentFragment"},{"id":"class.dom-documenttype","name":"Dom\\DocumentType","description":"The Dom\\DocumentType class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\DocumentType"},{"id":"class.dom-dtdnamednodemap","name":"Dom\\DtdNamedNodeMap","description":"The Dom\\DtdNamedNodeMap class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\DtdNamedNodeMap"},{"id":"class.dom-element","name":"Dom\\Element","description":"The Dom\\Element class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\Element"},{"id":"class.dom-entity","name":"Dom\\Entity","description":"The Dom\\Entity class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\Entity"},{"id":"class.dom-entityreference","name":"Dom\\EntityReference","description":"The Dom\\EntityReference class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\EntityReference"},{"id":"class.dom-htmlcollection","name":"Dom\\HTMLCollection","description":"The Dom\\HTMLCollection class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\HTMLCollection"},{"id":"dom-htmldocument.createempty","name":"Dom\\HTMLDocument::createEmpty","description":"Creates an empty HTML document","tag":"refentry","type":"Function","methodName":"createEmpty"},{"id":"dom-htmldocument.createfromfile","name":"Dom\\HTMLDocument::createFromFile","description":"Parses an HTML document from a file","tag":"refentry","type":"Function","methodName":"createFromFile"},{"id":"dom-htmldocument.createfromstring","name":"Dom\\HTMLDocument::createFromString","description":"Parses an HTML document from a string","tag":"refentry","type":"Function","methodName":"createFromString"},{"id":"dom-htmldocument.savehtml","name":"Dom\\HTMLDocument::saveHtml","description":"Serializes the document as an HTML string","tag":"refentry","type":"Function","methodName":"saveHtml"},{"id":"dom-htmldocument.savehtmlfile","name":"Dom\\HTMLDocument::saveHtmlFile","description":"Serializes the document as an HTML file","tag":"refentry","type":"Function","methodName":"saveHtmlFile"},{"id":"dom-htmldocument.savexml","name":"Dom\\HTMLDocument::saveXml","description":"Serializes the document as an XML string","tag":"refentry","type":"Function","methodName":"saveXml"},{"id":"dom-htmldocument.savexmlfile","name":"Dom\\HTMLDocument::saveXmlFile","description":"Serializes the document as an XML file","tag":"refentry","type":"Function","methodName":"saveXmlFile"},{"id":"class.dom-htmldocument","name":"Dom\\HTMLDocument","description":"The Dom\\HTMLDocument class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\HTMLDocument"},{"id":"class.dom-htmlelement","name":"Dom\\HTMLElement","description":"The Dom\\HTMLElement class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\HTMLElement"},{"id":"class.dom-implementation","name":"Dom\\Implementation","description":"The Dom\\Implementation class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\Implementation"},{"id":"class.dom-namednodemap","name":"Dom\\NamedNodeMap","description":"The Dom\\NamedNodeMap class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\NamedNodeMap"},{"id":"class.dom-namespaceinfo","name":"Dom\\NamespaceInfo","description":"The Dom\\NamespaceInfo class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\NamespaceInfo"},{"id":"class.dom-node","name":"Dom\\Node","description":"The Dom\\Node class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\Node"},{"id":"class.dom-nodelist","name":"Dom\\NodeList","description":"The Dom\\NodeList class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\NodeList"},{"id":"class.dom-notation","name":"Dom\\Notation","description":"The Dom\\Notation class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\Notation"},{"id":"dom-parentnode.append","name":"Dom\\ParentNode::append","description":"Appends nodes after the last child node","tag":"refentry","type":"Function","methodName":"append"},{"id":"dom-parentnode.prepend","name":"Dom\\ParentNode::prepend","description":"Prepends nodes before the first child node","tag":"refentry","type":"Function","methodName":"prepend"},{"id":"dom-parentnode.queryselector","name":"Dom\\ParentNode::querySelector","description":"Returns the first element that matches the CSS selectors","tag":"refentry","type":"Function","methodName":"querySelector"},{"id":"dom-parentnode.queryselectorall","name":"Dom\\ParentNode::querySelectorAll","description":"Returns a collection of elements that match the CSS selectors","tag":"refentry","type":"Function","methodName":"querySelectorAll"},{"id":"dom-parentnode.replacechildren","name":"Dom\\ParentNode::replaceChildren","description":"Replace children in node","tag":"refentry","type":"Function","methodName":"replaceChildren"},{"id":"class.dom-parentnode","name":"Dom\\ParentNode","description":"The Dom\\ParentNode interface","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\ParentNode"},{"id":"class.dom-processinginstruction","name":"Dom\\ProcessingInstruction","description":"The Dom\\ProcessingInstruction class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\ProcessingInstruction"},{"id":"dom-text.splittext","name":"Dom\\Text::splitText","description":"Breaks this node into two nodes at the specified offset","tag":"refentry","type":"Function","methodName":"splitText"},{"id":"class.dom-text","name":"Dom\\Text","description":"The Dom\\Text class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\Text"},{"id":"dom-tokenlist.add","name":"Dom\\TokenList::add","description":"Adds the given tokens to the list","tag":"refentry","type":"Function","methodName":"add"},{"id":"dom-tokenlist.contains","name":"Dom\\TokenList::contains","description":"Returns whether the list contains a given token","tag":"refentry","type":"Function","methodName":"contains"},{"id":"dom-tokenlist.count","name":"Dom\\TokenList::count","description":"Returns the number of tokens in the list","tag":"refentry","type":"Function","methodName":"count"},{"id":"dom-tokenlist.getiterator","name":"Dom\\TokenList::getIterator","description":"Returns an iterator over the token list","tag":"refentry","type":"Function","methodName":"getIterator"},{"id":"dom-tokenlist.item","name":"Dom\\TokenList::item","description":"Returns a token from the list","tag":"refentry","type":"Function","methodName":"item"},{"id":"dom-tokenlist.remove","name":"Dom\\TokenList::remove","description":"Removes the given tokens from the list","tag":"refentry","type":"Function","methodName":"remove"},{"id":"dom-tokenlist.replace","name":"Dom\\TokenList::replace","description":"Replaces a token in the list with another one","tag":"refentry","type":"Function","methodName":"replace"},{"id":"dom-tokenlist.supports","name":"Dom\\TokenList::supports","description":"Returns whether the given token is supported","tag":"refentry","type":"Function","methodName":"supports"},{"id":"dom-tokenlist.toggle","name":"Dom\\TokenList::toggle","description":"Toggles the presence of a token in the list","tag":"refentry","type":"Function","methodName":"toggle"},{"id":"class.dom-tokenlist","name":"Dom\\TokenList","description":"The Dom\\TokenList class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\TokenList"},{"id":"class.dom-xmldocument","name":"Dom\\XMLDocument","description":"The Dom\\XMLDocument class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\XMLDocument"},{"id":"class.dom-xpath","name":"Dom\\XPath","description":"The Dom\\XPath class","tag":"phpdoc:classref","type":"Class","methodName":"Dom\\XPath"},{"id":"function.dom-import-simplexml","name":"dom_import_simplexml","description":"Gets a DOMAttr or DOMElement object from a\n SimpleXMLElement object","tag":"refentry","type":"Function","methodName":"dom_import_simplexml"},{"id":"function.dom-ns-import-simplexml","name":"Dom\\import_simplexml","description":"Gets a Dom\\Attr or Dom\\Element object from a\n SimpleXMLElement object","tag":"refentry","type":"Function","methodName":"Dom\\import_simplexml"},{"id":"ref.dom","name":"DOM Functions","description":"Document Object Model","tag":"reference","type":"Extension","methodName":"DOM Functions"},{"id":"book.dom","name":"DOM","description":"Document Object Model","tag":"book","type":"Extension","methodName":"DOM"},{"id":"intro.libxml","name":"Introduction","description":"libxml","tag":"preface","type":"General","methodName":"Introduction"},{"id":"libxml.requirements","name":"Requirements","description":"libxml","tag":"section","type":"General","methodName":"Requirements"},{"id":"libxml.installation","name":"Installation for PHP versions >= 7.4","description":"libxml","tag":"section","type":"General","methodName":"Installation for PHP versions >= 7.4"},{"id":"libxml.installation_old","name":"Installation for PHP versions < 7.4","description":"libxml","tag":"section","type":"General","methodName":"Installation for PHP versions < 7.4"},{"id":"libxml.setup","name":"Installing\/Configuring","description":"libxml","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"libxml.constants","name":"Predefined Constants","description":"libxml","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"class.libxmlerror","name":"LibXMLError","description":"The LibXMLError class","tag":"phpdoc:classref","type":"Class","methodName":"LibXMLError"},{"id":"function.libxml-clear-errors","name":"libxml_clear_errors","description":"Clear libxml error buffer","tag":"refentry","type":"Function","methodName":"libxml_clear_errors"},{"id":"function.libxml-disable-entity-loader","name":"libxml_disable_entity_loader","description":"Disable the ability to load external entities","tag":"refentry","type":"Function","methodName":"libxml_disable_entity_loader"},{"id":"function.libxml-get-errors","name":"libxml_get_errors","description":"Retrieve array of errors","tag":"refentry","type":"Function","methodName":"libxml_get_errors"},{"id":"function.libxml-get-external-entity-loader","name":"libxml_get_external_entity_loader","description":"Get the current external entity loader","tag":"refentry","type":"Function","methodName":"libxml_get_external_entity_loader"},{"id":"function.libxml-get-last-error","name":"libxml_get_last_error","description":"Retrieve last error from libxml","tag":"refentry","type":"Function","methodName":"libxml_get_last_error"},{"id":"function.libxml-set-external-entity-loader","name":"libxml_set_external_entity_loader","description":"Changes the default external entity loader","tag":"refentry","type":"Function","methodName":"libxml_set_external_entity_loader"},{"id":"function.libxml-set-streams-context","name":"libxml_set_streams_context","description":"Set the streams context for the next libxml document load or write","tag":"refentry","type":"Function","methodName":"libxml_set_streams_context"},{"id":"function.libxml-use-internal-errors","name":"libxml_use_internal_errors","description":"Disable libxml errors and allow user to fetch error information as needed","tag":"refentry","type":"Function","methodName":"libxml_use_internal_errors"},{"id":"ref.libxml","name":"libxml Functions","description":"libxml","tag":"reference","type":"Extension","methodName":"libxml Functions"},{"id":"book.libxml","name":"libxml","description":"XML Manipulation","tag":"book","type":"Extension","methodName":"libxml"},{"id":"intro.simplexml","name":"Introduction","description":"SimpleXML","tag":"preface","type":"General","methodName":"Introduction"},{"id":"simplexml.requirements","name":"Requirements","description":"SimpleXML","tag":"section","type":"General","methodName":"Requirements"},{"id":"simplexml.installation","name":"Installation","description":"SimpleXML","tag":"section","type":"General","methodName":"Installation"},{"id":"simplexml.setup","name":"Installing\/Configuring","description":"SimpleXML","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"simplexml.examples-basic","name":"Basic SimpleXML usage","description":"SimpleXML","tag":"section","type":"General","methodName":"Basic SimpleXML usage"},{"id":"simplexml.examples-errors","name":"Dealing with XML errors","description":"SimpleXML","tag":"section","type":"General","methodName":"Dealing with XML errors"},{"id":"simplexml.examples","name":"Examples","description":"SimpleXML","tag":"chapter","type":"General","methodName":"Examples"},{"id":"simplexmlelement.addattribute","name":"SimpleXMLElement::addAttribute","description":"Adds an attribute to the SimpleXML element","tag":"refentry","type":"Function","methodName":"addAttribute"},{"id":"simplexmlelement.addchild","name":"SimpleXMLElement::addChild","description":"Adds a child element to the XML node","tag":"refentry","type":"Function","methodName":"addChild"},{"id":"simplexmlelement.asxml","name":"SimpleXMLElement::asXML","description":"Return a well-formed XML string based on SimpleXML element","tag":"refentry","type":"Function","methodName":"asXML"},{"id":"simplexmlelement.attributes","name":"SimpleXMLElement::attributes","description":"Identifies an element's attributes","tag":"refentry","type":"Function","methodName":"attributes"},{"id":"simplexmlelement.children","name":"SimpleXMLElement::children","description":"Finds children of given node","tag":"refentry","type":"Function","methodName":"children"},{"id":"simplexmlelement.construct","name":"SimpleXMLElement::__construct","description":"Creates a new SimpleXMLElement object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"simplexmlelement.count","name":"SimpleXMLElement::count","description":"Counts the children of an element","tag":"refentry","type":"Function","methodName":"count"},{"id":"simplexmlelement.current","name":"SimpleXMLElement::current","description":"Returns the current element","tag":"refentry","type":"Function","methodName":"current"},{"id":"simplexmlelement.getdocnamespaces","name":"SimpleXMLElement::getDocNamespaces","description":"Returns namespaces declared in document","tag":"refentry","type":"Function","methodName":"getDocNamespaces"},{"id":"simplexmlelement.getname","name":"SimpleXMLElement::getName","description":"Gets the name of the XML element","tag":"refentry","type":"Function","methodName":"getName"},{"id":"simplexmlelement.getnamespaces","name":"SimpleXMLElement::getNamespaces","description":"Returns namespaces used in document","tag":"refentry","type":"Function","methodName":"getNamespaces"},{"id":"simplexmlelement.getchildren","name":"SimpleXMLElement::getChildren","description":"Returns the sub-elements of the current element","tag":"refentry","type":"Function","methodName":"getChildren"},{"id":"simplexmlelement.haschildren","name":"SimpleXMLElement::hasChildren","description":"Checks whether the current element has sub elements","tag":"refentry","type":"Function","methodName":"hasChildren"},{"id":"simplexmlelement.key","name":"SimpleXMLElement::key","description":"Return current key","tag":"refentry","type":"Function","methodName":"key"},{"id":"simplexmlelement.next","name":"SimpleXMLElement::next","description":"Move to next element","tag":"refentry","type":"Function","methodName":"next"},{"id":"simplexmlelement.registerxpathnamespace","name":"SimpleXMLElement::registerXPathNamespace","description":"Creates a prefix\/ns context for the next XPath query","tag":"refentry","type":"Function","methodName":"registerXPathNamespace"},{"id":"simplexmlelement.rewind","name":"SimpleXMLElement::rewind","description":"Rewind to the first element","tag":"refentry","type":"Function","methodName":"rewind"},{"id":"simplexmlelement.savexml","name":"SimpleXMLElement::saveXML","description":"Alias of SimpleXMLElement::asXML","tag":"refentry","type":"Function","methodName":"saveXML"},{"id":"simplexmlelement.tostring","name":"SimpleXMLElement::__toString","description":"Returns the string content","tag":"refentry","type":"Function","methodName":"__toString"},{"id":"simplexmlelement.valid","name":"SimpleXMLElement::valid","description":"Check whether the current element is valid","tag":"refentry","type":"Function","methodName":"valid"},{"id":"simplexmlelement.xpath","name":"SimpleXMLElement::xpath","description":"Runs XPath query on XML data","tag":"refentry","type":"Function","methodName":"xpath"},{"id":"class.simplexmlelement","name":"SimpleXMLElement","description":"The SimpleXMLElement class","tag":"phpdoc:classref","type":"Class","methodName":"SimpleXMLElement"},{"id":"class.simplexmliterator","name":"SimpleXMLIterator","description":"The SimpleXMLIterator class","tag":"phpdoc:classref","type":"Class","methodName":"SimpleXMLIterator"},{"id":"function.simplexml-import-dom","name":"simplexml_import_dom","description":"Get a SimpleXMLElement object from an XML or HTML node","tag":"refentry","type":"Function","methodName":"simplexml_import_dom"},{"id":"function.simplexml-load-file","name":"simplexml_load_file","description":"Interprets an XML file into an object","tag":"refentry","type":"Function","methodName":"simplexml_load_file"},{"id":"function.simplexml-load-string","name":"simplexml_load_string","description":"Interprets a string of XML into an object","tag":"refentry","type":"Function","methodName":"simplexml_load_string"},{"id":"ref.simplexml","name":"SimpleXML Functions","description":"SimpleXML","tag":"reference","type":"Extension","methodName":"SimpleXML Functions"},{"id":"book.simplexml","name":"SimpleXML","description":"XML Manipulation","tag":"book","type":"Extension","methodName":"SimpleXML"},{"id":"intro.wddx","name":"Introduction","description":"WDDX","tag":"preface","type":"General","methodName":"Introduction"},{"id":"wddx.requirements","name":"Requirements","description":"WDDX","tag":"section","type":"General","methodName":"Requirements"},{"id":"wddx.installation","name":"Installation","description":"WDDX","tag":"section","type":"General","methodName":"Installation"},{"id":"wddx.resources","name":"Resource Types","description":"WDDX","tag":"section","type":"General","methodName":"Resource Types"},{"id":"wddx.setup","name":"Installing\/Configuring","description":"WDDX","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"wddx.examples-serialize","name":"wddx examples","description":"WDDX","tag":"section","type":"General","methodName":"wddx examples"},{"id":"wddx.examples","name":"Examples","description":"WDDX","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.wddx-add-vars","name":"wddx_add_vars","description":"Add variables to a WDDX packet with the specified ID","tag":"refentry","type":"Function","methodName":"wddx_add_vars"},{"id":"function.wddx-deserialize","name":"wddx_deserialize","description":"Unserializes a WDDX packet","tag":"refentry","type":"Function","methodName":"wddx_deserialize"},{"id":"function.wddx-packet-end","name":"wddx_packet_end","description":"Ends a WDDX packet with the specified ID","tag":"refentry","type":"Function","methodName":"wddx_packet_end"},{"id":"function.wddx-packet-start","name":"wddx_packet_start","description":"Starts a new WDDX packet with structure inside it","tag":"refentry","type":"Function","methodName":"wddx_packet_start"},{"id":"function.wddx-serialize-value","name":"wddx_serialize_value","description":"Serialize a single value into a WDDX packet","tag":"refentry","type":"Function","methodName":"wddx_serialize_value"},{"id":"function.wddx-serialize-vars","name":"wddx_serialize_vars","description":"Serialize variables into a WDDX packet","tag":"refentry","type":"Function","methodName":"wddx_serialize_vars"},{"id":"ref.wddx","name":"WDDX Functions","description":"WDDX","tag":"reference","type":"Extension","methodName":"WDDX Functions"},{"id":"book.wddx","name":"WDDX","description":"XML Manipulation","tag":"book","type":"Extension","methodName":"WDDX"},{"id":"intro.xmldiff","name":"Introduction","description":"XML diff and merge","tag":"preface","type":"General","methodName":"Introduction"},{"id":"xmldiff.requirements","name":"Requirements","description":"XML diff and merge","tag":"section","type":"General","methodName":"Requirements"},{"id":"xmldiff.installation","name":"Installation","description":"XML diff and merge","tag":"section","type":"General","methodName":"Installation"},{"id":"xmldiff.setup","name":"Installing\/Configuring","description":"XML diff and merge","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"xmldiff-base.construct","name":"XMLDiff\\Base::__construct","description":"Constructor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"xmldiff-base.diff","name":"XMLDiff\\Base::diff","description":"Produce diff of two XML documents","tag":"refentry","type":"Function","methodName":"diff"},{"id":"xmldiff-base.merge","name":"XMLDiff\\Base::merge","description":"Produce new XML document based on diff","tag":"refentry","type":"Function","methodName":"merge"},{"id":"class.xmldiff-base","name":"XMLDiff\\Base","description":"The XMLDiff\\Base class","tag":"phpdoc:classref","type":"Class","methodName":"XMLDiff\\Base"},{"id":"xmldiff-dom.diff","name":"XMLDiff\\DOM::diff","description":"Diff two DOMDocument objects","tag":"refentry","type":"Function","methodName":"diff"},{"id":"xmldiff-dom.merge","name":"XMLDiff\\DOM::merge","description":"Produce merged DOMDocument","tag":"refentry","type":"Function","methodName":"merge"},{"id":"class.xmldiff-dom","name":"XMLDiff\\DOM","description":"The XMLDiff\\DOM class","tag":"phpdoc:classref","type":"Class","methodName":"XMLDiff\\DOM"},{"id":"xmldiff-memory.diff","name":"XMLDiff\\Memory::diff","description":"Diff two XML documents","tag":"refentry","type":"Function","methodName":"diff"},{"id":"xmldiff-memory.merge","name":"XMLDiff\\Memory::merge","description":"Produce merged XML document","tag":"refentry","type":"Function","methodName":"merge"},{"id":"class.xmldiff-memory","name":"XMLDiff\\Memory","description":"The XMLDiff\\Memory class","tag":"phpdoc:classref","type":"Class","methodName":"XMLDiff\\Memory"},{"id":"xmldiff-file.diff","name":"XMLDiff\\File::diff","description":"Diff two XML files","tag":"refentry","type":"Function","methodName":"diff"},{"id":"xmldiff-file.merge","name":"XMLDiff\\File::merge","description":"Produce merged XML document","tag":"refentry","type":"Function","methodName":"merge"},{"id":"class.xmldiff-file","name":"XMLDiff\\File","description":"The XMLDiff\\File class","tag":"phpdoc:classref","type":"Class","methodName":"XMLDiff\\File"},{"id":"book.xmldiff","name":"XMLDiff","description":"XML diff and merge","tag":"book","type":"Extension","methodName":"XMLDiff"},{"id":"intro.xml","name":"Introduction","description":"XML Parser","tag":"preface","type":"General","methodName":"Introduction"},{"id":"xml.requirements","name":"Requirements","description":"XML Parser","tag":"section","type":"General","methodName":"Requirements"},{"id":"xml.installation","name":"Installation","description":"XML Parser","tag":"section","type":"General","methodName":"Installation"},{"id":"xml.resources","name":"Resource Types","description":"XML Parser","tag":"section","type":"General","methodName":"Resource Types"},{"id":"xml.setup","name":"Installing\/Configuring","description":"XML Parser","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"xml.constants","name":"Predefined Constants","description":"XML Parser","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"xml.eventhandlers","name":"Event Handlers","description":"XML Parser","tag":"article","type":"General","methodName":"Event Handlers"},{"id":"xml.case-folding","name":"Case Folding","description":"XML Parser","tag":"article","type":"General","methodName":"Case Folding"},{"id":"xml.error-codes","name":"Error Codes","description":"XML Parser","tag":"article","type":"General","methodName":"Error Codes"},{"id":"xml.encoding","name":"Character Encoding","description":"XML Parser","tag":"article","type":"General","methodName":"Character Encoding"},{"id":"example.xml-structure","name":"XML Element Structure Example","description":"XML Parser","tag":"section","type":"General","methodName":"XML Element Structure Example"},{"id":"example.xml-map-tags","name":"XML Tag Mapping Example","description":"XML Parser","tag":"section","type":"General","methodName":"XML Tag Mapping Example"},{"id":"example.xml-external-entity","name":"XML External Entity Example","description":"XML Parser","tag":"section","type":"General","methodName":"XML External Entity Example"},{"id":"example.xml-parsing-with-class","name":"XML Parsing With Class","description":"XML Parser","tag":"section","type":"General","methodName":"XML Parsing With Class"},{"id":"xml.examples","name":"Examples","description":"XML Parser","tag":"chapter","type":"General","methodName":"Examples"},{"id":"function.xml-error-string","name":"xml_error_string","description":"Get XML parser error string","tag":"refentry","type":"Function","methodName":"xml_error_string"},{"id":"function.xml-get-current-byte-index","name":"xml_get_current_byte_index","description":"Get current byte index for an XML parser","tag":"refentry","type":"Function","methodName":"xml_get_current_byte_index"},{"id":"function.xml-get-current-column-number","name":"xml_get_current_column_number","description":"Get current column number for an XML parser","tag":"refentry","type":"Function","methodName":"xml_get_current_column_number"},{"id":"function.xml-get-current-line-number","name":"xml_get_current_line_number","description":"Get current line number for an XML parser","tag":"refentry","type":"Function","methodName":"xml_get_current_line_number"},{"id":"function.xml-get-error-code","name":"xml_get_error_code","description":"Get XML parser error code","tag":"refentry","type":"Function","methodName":"xml_get_error_code"},{"id":"function.xml-parse","name":"xml_parse","description":"Start parsing an XML document","tag":"refentry","type":"Function","methodName":"xml_parse"},{"id":"function.xml-parse-into-struct","name":"xml_parse_into_struct","description":"Parse XML data into an array structure","tag":"refentry","type":"Function","methodName":"xml_parse_into_struct"},{"id":"function.xml-parser-create","name":"xml_parser_create","description":"Create an XML parser","tag":"refentry","type":"Function","methodName":"xml_parser_create"},{"id":"function.xml-parser-create-ns","name":"xml_parser_create_ns","description":"Create an XML parser with namespace support","tag":"refentry","type":"Function","methodName":"xml_parser_create_ns"},{"id":"function.xml-parser-free","name":"xml_parser_free","description":"Free an XML parser","tag":"refentry","type":"Function","methodName":"xml_parser_free"},{"id":"function.xml-parser-get-option","name":"xml_parser_get_option","description":"Get options from an XML parser","tag":"refentry","type":"Function","methodName":"xml_parser_get_option"},{"id":"function.xml-parser-set-option","name":"xml_parser_set_option","description":"Set options in an XML parser","tag":"refentry","type":"Function","methodName":"xml_parser_set_option"},{"id":"function.xml-set-character-data-handler","name":"xml_set_character_data_handler","description":"Set up character data handler","tag":"refentry","type":"Function","methodName":"xml_set_character_data_handler"},{"id":"function.xml-set-default-handler","name":"xml_set_default_handler","description":"Set up default handler","tag":"refentry","type":"Function","methodName":"xml_set_default_handler"},{"id":"function.xml-set-element-handler","name":"xml_set_element_handler","description":"Set up start and end element handlers","tag":"refentry","type":"Function","methodName":"xml_set_element_handler"},{"id":"function.xml-set-end-namespace-decl-handler","name":"xml_set_end_namespace_decl_handler","description":"Set up end namespace declaration handler","tag":"refentry","type":"Function","methodName":"xml_set_end_namespace_decl_handler"},{"id":"function.xml-set-external-entity-ref-handler","name":"xml_set_external_entity_ref_handler","description":"Set up external entity reference handler","tag":"refentry","type":"Function","methodName":"xml_set_external_entity_ref_handler"},{"id":"function.xml-set-notation-decl-handler","name":"xml_set_notation_decl_handler","description":"Set up notation declaration handler","tag":"refentry","type":"Function","methodName":"xml_set_notation_decl_handler"},{"id":"function.xml-set-object","name":"xml_set_object","description":"Use XML Parser within an object","tag":"refentry","type":"Function","methodName":"xml_set_object"},{"id":"function.xml-set-processing-instruction-handler","name":"xml_set_processing_instruction_handler","description":"Set up processing instruction (PI) handler","tag":"refentry","type":"Function","methodName":"xml_set_processing_instruction_handler"},{"id":"function.xml-set-start-namespace-decl-handler","name":"xml_set_start_namespace_decl_handler","description":"Set up start namespace declaration handler","tag":"refentry","type":"Function","methodName":"xml_set_start_namespace_decl_handler"},{"id":"function.xml-set-unparsed-entity-decl-handler","name":"xml_set_unparsed_entity_decl_handler","description":"Set up unparsed entity declaration handler","tag":"refentry","type":"Function","methodName":"xml_set_unparsed_entity_decl_handler"},{"id":"ref.xml","name":"XML Parser Functions","description":"XML Parser","tag":"reference","type":"Extension","methodName":"XML Parser Functions"},{"id":"class.xmlparser","name":"XMLParser","description":"The XMLParser class","tag":"phpdoc:classref","type":"Class","methodName":"XMLParser"},{"id":"book.xml","name":"XML Parser","description":"XML Manipulation","tag":"book","type":"Extension","methodName":"XML Parser"},{"id":"intro.xmlreader","name":"Introduction","description":"XMLReader","tag":"preface","type":"General","methodName":"Introduction"},{"id":"xmlreader.requirements","name":"Requirements","description":"XMLReader","tag":"section","type":"General","methodName":"Requirements"},{"id":"xmlreader.installation","name":"Installation","description":"XMLReader","tag":"section","type":"General","methodName":"Installation"},{"id":"xmlreader.setup","name":"Installing\/Configuring","description":"XMLReader","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"xmlreader.close","name":"XMLReader::close","description":"Close the XMLReader input","tag":"refentry","type":"Function","methodName":"close"},{"id":"xmlreader.expand","name":"XMLReader::expand","description":"Returns a copy of the current node as a DOM object","tag":"refentry","type":"Function","methodName":"expand"},{"id":"xmlreader.fromstream","name":"XMLReader::fromStream","description":"Creates an XMLReader from a stream to read from","tag":"refentry","type":"Function","methodName":"fromStream"},{"id":"xmlreader.fromstring","name":"XMLReader::fromString","description":"Creates an XMLReader from an XML string","tag":"refentry","type":"Function","methodName":"fromString"},{"id":"xmlreader.fromuri","name":"XMLReader::fromUri","description":"Creates an XMLReader from a URI to read from","tag":"refentry","type":"Function","methodName":"fromUri"},{"id":"xmlreader.getattribute","name":"XMLReader::getAttribute","description":"Get the value of a named attribute","tag":"refentry","type":"Function","methodName":"getAttribute"},{"id":"xmlreader.getattributeno","name":"XMLReader::getAttributeNo","description":"Get the value of an attribute by index","tag":"refentry","type":"Function","methodName":"getAttributeNo"},{"id":"xmlreader.getattributens","name":"XMLReader::getAttributeNs","description":"Get the value of an attribute by localname and URI","tag":"refentry","type":"Function","methodName":"getAttributeNs"},{"id":"xmlreader.getparserproperty","name":"XMLReader::getParserProperty","description":"Indicates if specified property has been set","tag":"refentry","type":"Function","methodName":"getParserProperty"},{"id":"xmlreader.isvalid","name":"XMLReader::isValid","description":"Indicates if the parsed document is valid","tag":"refentry","type":"Function","methodName":"isValid"},{"id":"xmlreader.lookupnamespace","name":"XMLReader::lookupNamespace","description":"Lookup namespace for a prefix","tag":"refentry","type":"Function","methodName":"lookupNamespace"},{"id":"xmlreader.movetoattribute","name":"XMLReader::moveToAttribute","description":"Move cursor to a named attribute","tag":"refentry","type":"Function","methodName":"moveToAttribute"},{"id":"xmlreader.movetoattributeno","name":"XMLReader::moveToAttributeNo","description":"Move cursor to an attribute by index","tag":"refentry","type":"Function","methodName":"moveToAttributeNo"},{"id":"xmlreader.movetoattributens","name":"XMLReader::moveToAttributeNs","description":"Move cursor to a named attribute","tag":"refentry","type":"Function","methodName":"moveToAttributeNs"},{"id":"xmlreader.movetoelement","name":"XMLReader::moveToElement","description":"Position cursor on the parent Element of current Attribute","tag":"refentry","type":"Function","methodName":"moveToElement"},{"id":"xmlreader.movetofirstattribute","name":"XMLReader::moveToFirstAttribute","description":"Position cursor on the first Attribute","tag":"refentry","type":"Function","methodName":"moveToFirstAttribute"},{"id":"xmlreader.movetonextattribute","name":"XMLReader::moveToNextAttribute","description":"Position cursor on the next Attribute","tag":"refentry","type":"Function","methodName":"moveToNextAttribute"},{"id":"xmlreader.next","name":"XMLReader::next","description":"Move cursor to next node skipping all subtrees","tag":"refentry","type":"Function","methodName":"next"},{"id":"xmlreader.open","name":"XMLReader::open","description":"Set the URI containing the XML to parse","tag":"refentry","type":"Function","methodName":"open"},{"id":"xmlreader.read","name":"XMLReader::read","description":"Move to next node in document","tag":"refentry","type":"Function","methodName":"read"},{"id":"xmlreader.readinnerxml","name":"XMLReader::readInnerXml","description":"Retrieve XML from current node","tag":"refentry","type":"Function","methodName":"readInnerXml"},{"id":"xmlreader.readouterxml","name":"XMLReader::readOuterXml","description":"Retrieve XML from current node, including itself","tag":"refentry","type":"Function","methodName":"readOuterXml"},{"id":"xmlreader.readstring","name":"XMLReader::readString","description":"Reads the contents of the current node as a string","tag":"refentry","type":"Function","methodName":"readString"},{"id":"xmlreader.setparserproperty","name":"XMLReader::setParserProperty","description":"Set parser options","tag":"refentry","type":"Function","methodName":"setParserProperty"},{"id":"xmlreader.setrelaxngschema","name":"XMLReader::setRelaxNGSchema","description":"Set the filename or URI for a RelaxNG Schema","tag":"refentry","type":"Function","methodName":"setRelaxNGSchema"},{"id":"xmlreader.setrelaxngschemasource","name":"XMLReader::setRelaxNGSchemaSource","description":"Set the data containing a RelaxNG Schema","tag":"refentry","type":"Function","methodName":"setRelaxNGSchemaSource"},{"id":"xmlreader.setschema","name":"XMLReader::setSchema","description":"Validate document against XSD","tag":"refentry","type":"Function","methodName":"setSchema"},{"id":"xmlreader.xml","name":"XMLReader::XML","description":"Set the data containing the XML to parse","tag":"refentry","type":"Function","methodName":"XML"},{"id":"class.xmlreader","name":"XMLReader","description":"The XMLReader class","tag":"phpdoc:classref","type":"Class","methodName":"XMLReader"},{"id":"book.xmlreader","name":"XMLReader","description":"XML Manipulation","tag":"book","type":"Extension","methodName":"XMLReader"},{"id":"intro.xmlwriter","name":"Introduction","description":"XMLWriter","tag":"preface","type":"General","methodName":"Introduction"},{"id":"xmlwriter.requirements","name":"Requirements","description":"XMLWriter","tag":"section","type":"General","methodName":"Requirements"},{"id":"xmlwriter.installation","name":"Installation","description":"XMLWriter","tag":"section","type":"General","methodName":"Installation"},{"id":"xmlwriter.resources","name":"Resource Types","description":"XMLWriter","tag":"section","type":"General","methodName":"Resource Types"},{"id":"xmlwriter.setup","name":"Installing\/Configuring","description":"XMLWriter","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"example.xmlwriter-simple","name":"Creating a simple XML document","description":"XMLWriter","tag":"section","type":"General","methodName":"Creating a simple XML document"},{"id":"example.xmlwriter-namespace","name":"Working with XML namespaces","description":"XMLWriter","tag":"section","type":"General","methodName":"Working with XML namespaces"},{"id":"example.xmlwriter-oop","name":"Working with the OO API","description":"XMLWriter","tag":"section","type":"General","methodName":"Working with the OO API"},{"id":"xmlwriter.examples","name":"Examples","description":"XMLWriter","tag":"chapter","type":"General","methodName":"Examples"},{"id":"xmlwriter.endattribute","name":"xmlwriter_end_attribute","description":"End attribute","tag":"refentry","type":"Function","methodName":"xmlwriter_end_attribute"},{"id":"xmlwriter.endattribute","name":"XMLWriter::endAttribute","description":"End attribute","tag":"refentry","type":"Function","methodName":"endAttribute"},{"id":"xmlwriter.endcdata","name":"xmlwriter_end_cdata","description":"End current CDATA","tag":"refentry","type":"Function","methodName":"xmlwriter_end_cdata"},{"id":"xmlwriter.endcdata","name":"XMLWriter::endCdata","description":"End current CDATA","tag":"refentry","type":"Function","methodName":"endCdata"},{"id":"xmlwriter.endcomment","name":"xmlwriter_end_comment","description":"Create end comment","tag":"refentry","type":"Function","methodName":"xmlwriter_end_comment"},{"id":"xmlwriter.endcomment","name":"XMLWriter::endComment","description":"Create end comment","tag":"refentry","type":"Function","methodName":"endComment"},{"id":"xmlwriter.enddocument","name":"xmlwriter_end_document","description":"End current document","tag":"refentry","type":"Function","methodName":"xmlwriter_end_document"},{"id":"xmlwriter.enddocument","name":"XMLWriter::endDocument","description":"End current document","tag":"refentry","type":"Function","methodName":"endDocument"},{"id":"xmlwriter.enddtd","name":"xmlwriter_end_dtd","description":"End current DTD","tag":"refentry","type":"Function","methodName":"xmlwriter_end_dtd"},{"id":"xmlwriter.enddtd","name":"XMLWriter::endDtd","description":"End current DTD","tag":"refentry","type":"Function","methodName":"endDtd"},{"id":"xmlwriter.enddtdattlist","name":"xmlwriter_end_dtd_attlist","description":"End current DTD AttList","tag":"refentry","type":"Function","methodName":"xmlwriter_end_dtd_attlist"},{"id":"xmlwriter.enddtdattlist","name":"XMLWriter::endDtdAttlist","description":"End current DTD AttList","tag":"refentry","type":"Function","methodName":"endDtdAttlist"},{"id":"xmlwriter.enddtdelement","name":"xmlwriter_end_dtd_element","description":"End current DTD element","tag":"refentry","type":"Function","methodName":"xmlwriter_end_dtd_element"},{"id":"xmlwriter.enddtdelement","name":"XMLWriter::endDtdElement","description":"End current DTD element","tag":"refentry","type":"Function","methodName":"endDtdElement"},{"id":"xmlwriter.enddtdentity","name":"xmlwriter_end_dtd_entity","description":"End current DTD Entity","tag":"refentry","type":"Function","methodName":"xmlwriter_end_dtd_entity"},{"id":"xmlwriter.enddtdentity","name":"XMLWriter::endDtdEntity","description":"End current DTD Entity","tag":"refentry","type":"Function","methodName":"endDtdEntity"},{"id":"xmlwriter.endelement","name":"xmlwriter_end_element","description":"End current element","tag":"refentry","type":"Function","methodName":"xmlwriter_end_element"},{"id":"xmlwriter.endelement","name":"XMLWriter::endElement","description":"End current element","tag":"refentry","type":"Function","methodName":"endElement"},{"id":"xmlwriter.endpi","name":"xmlwriter_end_pi","description":"End current PI","tag":"refentry","type":"Function","methodName":"xmlwriter_end_pi"},{"id":"xmlwriter.endpi","name":"XMLWriter::endPi","description":"End current PI","tag":"refentry","type":"Function","methodName":"endPi"},{"id":"xmlwriter.flush","name":"xmlwriter_flush","description":"Flush current buffer","tag":"refentry","type":"Function","methodName":"xmlwriter_flush"},{"id":"xmlwriter.flush","name":"XMLWriter::flush","description":"Flush current buffer","tag":"refentry","type":"Function","methodName":"flush"},{"id":"xmlwriter.fullendelement","name":"xmlwriter_full_end_element","description":"End current element","tag":"refentry","type":"Function","methodName":"xmlwriter_full_end_element"},{"id":"xmlwriter.fullendelement","name":"XMLWriter::fullEndElement","description":"End current element","tag":"refentry","type":"Function","methodName":"fullEndElement"},{"id":"xmlwriter.openmemory","name":"xmlwriter_open_memory","description":"Create new xmlwriter using memory for string output","tag":"refentry","type":"Function","methodName":"xmlwriter_open_memory"},{"id":"xmlwriter.openmemory","name":"XMLWriter::openMemory","description":"Create new xmlwriter using memory for string output","tag":"refentry","type":"Function","methodName":"openMemory"},{"id":"xmlwriter.openuri","name":"xmlwriter_open_uri","description":"Create new xmlwriter using source uri for output","tag":"refentry","type":"Function","methodName":"xmlwriter_open_uri"},{"id":"xmlwriter.openuri","name":"XMLWriter::openUri","description":"Create new xmlwriter using source uri for output","tag":"refentry","type":"Function","methodName":"openUri"},{"id":"xmlwriter.outputmemory","name":"xmlwriter_output_memory","description":"Returns current buffer","tag":"refentry","type":"Function","methodName":"xmlwriter_output_memory"},{"id":"xmlwriter.outputmemory","name":"XMLWriter::outputMemory","description":"Returns current buffer","tag":"refentry","type":"Function","methodName":"outputMemory"},{"id":"xmlwriter.setindent","name":"xmlwriter_set_indent","description":"Toggle indentation on\/off","tag":"refentry","type":"Function","methodName":"xmlwriter_set_indent"},{"id":"xmlwriter.setindent","name":"XMLWriter::setIndent","description":"Toggle indentation on\/off","tag":"refentry","type":"Function","methodName":"setIndent"},{"id":"xmlwriter.setindentstring","name":"xmlwriter_set_indent_string","description":"Set string used for indenting","tag":"refentry","type":"Function","methodName":"xmlwriter_set_indent_string"},{"id":"xmlwriter.setindentstring","name":"XMLWriter::setIndentString","description":"Set string used for indenting","tag":"refentry","type":"Function","methodName":"setIndentString"},{"id":"xmlwriter.startattribute","name":"xmlwriter_start_attribute","description":"Create start attribute","tag":"refentry","type":"Function","methodName":"xmlwriter_start_attribute"},{"id":"xmlwriter.startattribute","name":"XMLWriter::startAttribute","description":"Create start attribute","tag":"refentry","type":"Function","methodName":"startAttribute"},{"id":"xmlwriter.startattributens","name":"xmlwriter_start_attribute_ns","description":"Create start namespaced attribute","tag":"refentry","type":"Function","methodName":"xmlwriter_start_attribute_ns"},{"id":"xmlwriter.startattributens","name":"XMLWriter::startAttributeNs","description":"Create start namespaced attribute","tag":"refentry","type":"Function","methodName":"startAttributeNs"},{"id":"xmlwriter.startcdata","name":"xmlwriter_start_cdata","description":"Create start CDATA tag","tag":"refentry","type":"Function","methodName":"xmlwriter_start_cdata"},{"id":"xmlwriter.startcdata","name":"XMLWriter::startCdata","description":"Create start CDATA tag","tag":"refentry","type":"Function","methodName":"startCdata"},{"id":"xmlwriter.startcomment","name":"xmlwriter_start_comment","description":"Create start comment","tag":"refentry","type":"Function","methodName":"xmlwriter_start_comment"},{"id":"xmlwriter.startcomment","name":"XMLWriter::startComment","description":"Create start comment","tag":"refentry","type":"Function","methodName":"startComment"},{"id":"xmlwriter.startdocument","name":"xmlwriter_start_document","description":"Create document tag","tag":"refentry","type":"Function","methodName":"xmlwriter_start_document"},{"id":"xmlwriter.startdocument","name":"XMLWriter::startDocument","description":"Create document tag","tag":"refentry","type":"Function","methodName":"startDocument"},{"id":"xmlwriter.startdtd","name":"xmlwriter_start_dtd","description":"Create start DTD tag","tag":"refentry","type":"Function","methodName":"xmlwriter_start_dtd"},{"id":"xmlwriter.startdtd","name":"XMLWriter::startDtd","description":"Create start DTD tag","tag":"refentry","type":"Function","methodName":"startDtd"},{"id":"xmlwriter.startdtdattlist","name":"xmlwriter_start_dtd_attlist","description":"Create start DTD AttList","tag":"refentry","type":"Function","methodName":"xmlwriter_start_dtd_attlist"},{"id":"xmlwriter.startdtdattlist","name":"XMLWriter::startDtdAttlist","description":"Create start DTD AttList","tag":"refentry","type":"Function","methodName":"startDtdAttlist"},{"id":"xmlwriter.startdtdelement","name":"xmlwriter_start_dtd_element","description":"Create start DTD element","tag":"refentry","type":"Function","methodName":"xmlwriter_start_dtd_element"},{"id":"xmlwriter.startdtdelement","name":"XMLWriter::startDtdElement","description":"Create start DTD element","tag":"refentry","type":"Function","methodName":"startDtdElement"},{"id":"xmlwriter.startdtdentity","name":"xmlwriter_start_dtd_entity","description":"Create start DTD Entity","tag":"refentry","type":"Function","methodName":"xmlwriter_start_dtd_entity"},{"id":"xmlwriter.startdtdentity","name":"XMLWriter::startDtdEntity","description":"Create start DTD Entity","tag":"refentry","type":"Function","methodName":"startDtdEntity"},{"id":"xmlwriter.startelement","name":"xmlwriter_start_element","description":"Create start element tag","tag":"refentry","type":"Function","methodName":"xmlwriter_start_element"},{"id":"xmlwriter.startelement","name":"XMLWriter::startElement","description":"Create start element tag","tag":"refentry","type":"Function","methodName":"startElement"},{"id":"xmlwriter.startelementns","name":"xmlwriter_start_element_ns","description":"Create start namespaced element tag","tag":"refentry","type":"Function","methodName":"xmlwriter_start_element_ns"},{"id":"xmlwriter.startelementns","name":"XMLWriter::startElementNs","description":"Create start namespaced element tag","tag":"refentry","type":"Function","methodName":"startElementNs"},{"id":"xmlwriter.startpi","name":"xmlwriter_start_pi","description":"Create start PI tag","tag":"refentry","type":"Function","methodName":"xmlwriter_start_pi"},{"id":"xmlwriter.startpi","name":"XMLWriter::startPi","description":"Create start PI tag","tag":"refentry","type":"Function","methodName":"startPi"},{"id":"xmlwriter.text","name":"xmlwriter_text","description":"Write text","tag":"refentry","type":"Function","methodName":"xmlwriter_text"},{"id":"xmlwriter.text","name":"XMLWriter::text","description":"Write text","tag":"refentry","type":"Function","methodName":"text"},{"id":"xmlwriter.tomemory","name":"XMLWriter::toMemory","description":"Create new XMLWriter using memory for string output","tag":"refentry","type":"Function","methodName":"toMemory"},{"id":"xmlwriter.tostream","name":"XMLWriter::toStream","description":"Create new XMLWriter using a stream for output","tag":"refentry","type":"Function","methodName":"toStream"},{"id":"xmlwriter.touri","name":"XMLWriter::toUri","description":"Create new XMLWriter using a URI for output","tag":"refentry","type":"Function","methodName":"toUri"},{"id":"xmlwriter.writeattribute","name":"xmlwriter_write_attribute","description":"Write full attribute","tag":"refentry","type":"Function","methodName":"xmlwriter_write_attribute"},{"id":"xmlwriter.writeattribute","name":"XMLWriter::writeAttribute","description":"Write full attribute","tag":"refentry","type":"Function","methodName":"writeAttribute"},{"id":"xmlwriter.writeattributens","name":"xmlwriter_write_attribute_ns","description":"Write full namespaced attribute","tag":"refentry","type":"Function","methodName":"xmlwriter_write_attribute_ns"},{"id":"xmlwriter.writeattributens","name":"XMLWriter::writeAttributeNs","description":"Write full namespaced attribute","tag":"refentry","type":"Function","methodName":"writeAttributeNs"},{"id":"xmlwriter.writecdata","name":"xmlwriter_write_cdata","description":"Write full CDATA tag","tag":"refentry","type":"Function","methodName":"xmlwriter_write_cdata"},{"id":"xmlwriter.writecdata","name":"XMLWriter::writeCdata","description":"Write full CDATA tag","tag":"refentry","type":"Function","methodName":"writeCdata"},{"id":"xmlwriter.writecomment","name":"xmlwriter_write_comment","description":"Write full comment tag","tag":"refentry","type":"Function","methodName":"xmlwriter_write_comment"},{"id":"xmlwriter.writecomment","name":"XMLWriter::writeComment","description":"Write full comment tag","tag":"refentry","type":"Function","methodName":"writeComment"},{"id":"xmlwriter.writedtd","name":"xmlwriter_write_dtd","description":"Write full DTD tag","tag":"refentry","type":"Function","methodName":"xmlwriter_write_dtd"},{"id":"xmlwriter.writedtd","name":"XMLWriter::writeDtd","description":"Write full DTD tag","tag":"refentry","type":"Function","methodName":"writeDtd"},{"id":"xmlwriter.writedtdattlist","name":"xmlwriter_write_dtd_attlist","description":"Write full DTD AttList tag","tag":"refentry","type":"Function","methodName":"xmlwriter_write_dtd_attlist"},{"id":"xmlwriter.writedtdattlist","name":"XMLWriter::writeDtdAttlist","description":"Write full DTD AttList tag","tag":"refentry","type":"Function","methodName":"writeDtdAttlist"},{"id":"xmlwriter.writedtdelement","name":"xmlwriter_write_dtd_element","description":"Write full DTD element tag","tag":"refentry","type":"Function","methodName":"xmlwriter_write_dtd_element"},{"id":"xmlwriter.writedtdelement","name":"XMLWriter::writeDtdElement","description":"Write full DTD element tag","tag":"refentry","type":"Function","methodName":"writeDtdElement"},{"id":"xmlwriter.writedtdentity","name":"xmlwriter_write_dtd_entity","description":"Write full DTD Entity tag","tag":"refentry","type":"Function","methodName":"xmlwriter_write_dtd_entity"},{"id":"xmlwriter.writedtdentity","name":"XMLWriter::writeDtdEntity","description":"Write full DTD Entity tag","tag":"refentry","type":"Function","methodName":"writeDtdEntity"},{"id":"xmlwriter.writeelement","name":"xmlwriter_write_element","description":"Write full element tag","tag":"refentry","type":"Function","methodName":"xmlwriter_write_element"},{"id":"xmlwriter.writeelement","name":"XMLWriter::writeElement","description":"Write full element tag","tag":"refentry","type":"Function","methodName":"writeElement"},{"id":"xmlwriter.writeelementns","name":"xmlwriter_write_element_ns","description":"Write full namespaced element tag","tag":"refentry","type":"Function","methodName":"xmlwriter_write_element_ns"},{"id":"xmlwriter.writeelementns","name":"XMLWriter::writeElementNs","description":"Write full namespaced element tag","tag":"refentry","type":"Function","methodName":"writeElementNs"},{"id":"xmlwriter.writepi","name":"xmlwriter_write_pi","description":"Writes a PI","tag":"refentry","type":"Function","methodName":"xmlwriter_write_pi"},{"id":"xmlwriter.writepi","name":"XMLWriter::writePi","description":"Writes a PI","tag":"refentry","type":"Function","methodName":"writePi"},{"id":"xmlwriter.writeraw","name":"xmlwriter_write_raw","description":"Write a raw XML text","tag":"refentry","type":"Function","methodName":"xmlwriter_write_raw"},{"id":"xmlwriter.writeraw","name":"XMLWriter::writeRaw","description":"Write a raw XML text","tag":"refentry","type":"Function","methodName":"writeRaw"},{"id":"class.xmlwriter","name":"XMLWriter","description":"The XMLWriter class","tag":"phpdoc:classref","type":"Class","methodName":"XMLWriter"},{"id":"book.xmlwriter","name":"XMLWriter","description":"XML Manipulation","tag":"book","type":"Extension","methodName":"XMLWriter"},{"id":"intro.xsl","name":"Introduction","description":"XSL","tag":"preface","type":"General","methodName":"Introduction"},{"id":"xsl.requirements","name":"Requirements","description":"XSL","tag":"section","type":"General","methodName":"Requirements"},{"id":"xsl.installation","name":"Installation","description":"XSL","tag":"section","type":"General","methodName":"Installation"},{"id":"xsl.setup","name":"Installing\/Configuring","description":"XSL","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"xsl.constants","name":"Predefined Constants","description":"XSL","tag":"appendix","type":"General","methodName":"Predefined Constants"},{"id":"xsl.examples-collection","name":"Example collection.xml and collection.xsl files","description":"XSL","tag":"section","type":"General","methodName":"Example collection.xml and collection.xsl files"},{"id":"xsl.examples-errors","name":"Error handling with libxml error handling functions","description":"XSL","tag":"section","type":"General","methodName":"Error handling with libxml error handling functions"},{"id":"xsl.examples","name":"Examples","description":"XSL","tag":"chapter","type":"General","methodName":"Examples"},{"id":"xsltprocessor.construct","name":"XSLTProcessor::__construct","description":"Creates a new XSLTProcessor object","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"xsltprocessor.getparameter","name":"XSLTProcessor::getParameter","description":"Get value of a parameter","tag":"refentry","type":"Function","methodName":"getParameter"},{"id":"xsltprocessor.getsecurityprefs","name":"XSLTProcessor::getSecurityPrefs","description":"Get security preferences","tag":"refentry","type":"Function","methodName":"getSecurityPrefs"},{"id":"xsltprocessor.hasexsltsupport","name":"XSLTProcessor::hasExsltSupport","description":"Determine if PHP has EXSLT support","tag":"refentry","type":"Function","methodName":"hasExsltSupport"},{"id":"xsltprocessor.importstylesheet","name":"XSLTProcessor::importStylesheet","description":"Import stylesheet","tag":"refentry","type":"Function","methodName":"importStylesheet"},{"id":"xsltprocessor.registerphpfunctionns","name":"XSLTProcessor::registerPHPFunctionNS","description":"Register a PHP function as namespaced XSLT function","tag":"refentry","type":"Function","methodName":"registerPHPFunctionNS"},{"id":"xsltprocessor.registerphpfunctions","name":"XSLTProcessor::registerPHPFunctions","description":"Enables the ability to use PHP functions as XSLT functions","tag":"refentry","type":"Function","methodName":"registerPHPFunctions"},{"id":"xsltprocessor.removeparameter","name":"XSLTProcessor::removeParameter","description":"Remove parameter","tag":"refentry","type":"Function","methodName":"removeParameter"},{"id":"xsltprocessor.setparameter","name":"XSLTProcessor::setParameter","description":"Set value for a parameter","tag":"refentry","type":"Function","methodName":"setParameter"},{"id":"xsltprocessor.setprofiling","name":"XSLTProcessor::setProfiling","description":"Sets profiling output file","tag":"refentry","type":"Function","methodName":"setProfiling"},{"id":"xsltprocessor.setsecurityprefs","name":"XSLTProcessor::setSecurityPrefs","description":"Set security preferences","tag":"refentry","type":"Function","methodName":"setSecurityPrefs"},{"id":"xsltprocessor.transformtodoc","name":"XSLTProcessor::transformToDoc","description":"Transform to a document","tag":"refentry","type":"Function","methodName":"transformToDoc"},{"id":"xsltprocessor.transformtouri","name":"XSLTProcessor::transformToUri","description":"Transform to URI","tag":"refentry","type":"Function","methodName":"transformToUri"},{"id":"xsltprocessor.transformtoxml","name":"XSLTProcessor::transformToXml","description":"Transform to XML","tag":"refentry","type":"Function","methodName":"transformToXml"},{"id":"class.xsltprocessor","name":"XSLTProcessor","description":"The XSLTProcessor class","tag":"phpdoc:classref","type":"Class","methodName":"XSLTProcessor"},{"id":"book.xsl","name":"XSL","description":"XML Manipulation","tag":"book","type":"Extension","methodName":"XSL"},{"id":"refs.xml","name":"XML Manipulation","description":"Function Reference","tag":"set","type":"Extension","methodName":"XML Manipulation"},{"id":"intro.ui","name":"Introduction","description":"UI","tag":"preface","type":"General","methodName":"Introduction"},{"id":"ui.requirements","name":"Requirements","description":"UI","tag":"section","type":"General","methodName":"Requirements"},{"id":"ui.installation","name":"Installation","description":"UI","tag":"section","type":"General","methodName":"Installation"},{"id":"ui.setup","name":"Installing\/Configuring","description":"UI","tag":"chapter","type":"General","methodName":"Installing\/Configuring"},{"id":"ui-point.at","name":"UI\\Point::at","description":"Size Coercion","tag":"refentry","type":"Function","methodName":"at"},{"id":"ui-point.construct","name":"UI\\Point::__construct","description":"Construct a new Point","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-point.getx","name":"UI\\Point::getX","description":"Retrieves X","tag":"refentry","type":"Function","methodName":"getX"},{"id":"ui-point.gety","name":"UI\\Point::getY","description":"Retrieves Y","tag":"refentry","type":"Function","methodName":"getY"},{"id":"ui-point.setx","name":"UI\\Point::setX","description":"Set X","tag":"refentry","type":"Function","methodName":"setX"},{"id":"ui-point.sety","name":"UI\\Point::setY","description":"Set Y","tag":"refentry","type":"Function","methodName":"setY"},{"id":"class.ui-point","name":"UI\\Point","description":"Represents a position (x,y)","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Point"},{"id":"ui-size.construct","name":"UI\\Size::__construct","description":"Construct a new Size","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-size.getheight","name":"UI\\Size::getHeight","description":"Retrieves Height","tag":"refentry","type":"Function","methodName":"getHeight"},{"id":"ui-size.getwidth","name":"UI\\Size::getWidth","description":"Retrives Width","tag":"refentry","type":"Function","methodName":"getWidth"},{"id":"ui-size.of","name":"UI\\Size::of","description":"Point Coercion","tag":"refentry","type":"Function","methodName":"of"},{"id":"ui-size.setheight","name":"UI\\Size::setHeight","description":"Set Height","tag":"refentry","type":"Function","methodName":"setHeight"},{"id":"ui-size.setwidth","name":"UI\\Size::setWidth","description":"Set Width","tag":"refentry","type":"Function","methodName":"setWidth"},{"id":"class.ui-size","name":"UI\\Size","description":"Represents dimensions (width, height)","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Size"},{"id":"ui-window.add","name":"UI\\Window::add","description":"Add a Control","tag":"refentry","type":"Function","methodName":"add"},{"id":"ui-window.construct","name":"UI\\Window::__construct","description":"Construct a new Window","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-window.error","name":"UI\\Window::error","description":"Show Error Box","tag":"refentry","type":"Function","methodName":"error"},{"id":"ui-window.getsize","name":"UI\\Window::getSize","description":"Get Window Size","tag":"refentry","type":"Function","methodName":"getSize"},{"id":"ui-window.gettitle","name":"UI\\Window::getTitle","description":"Get Title","tag":"refentry","type":"Function","methodName":"getTitle"},{"id":"ui-window.hasborders","name":"UI\\Window::hasBorders","description":"Border Detection","tag":"refentry","type":"Function","methodName":"hasBorders"},{"id":"ui-window.hasmargin","name":"UI\\Window::hasMargin","description":"Margin Detection","tag":"refentry","type":"Function","methodName":"hasMargin"},{"id":"ui-window.isfullscreen","name":"UI\\Window::isFullScreen","description":"Full Screen Detection","tag":"refentry","type":"Function","methodName":"isFullScreen"},{"id":"ui-window.msg","name":"UI\\Window::msg","description":"Show Message Box","tag":"refentry","type":"Function","methodName":"msg"},{"id":"ui-window.onclosing","name":"UI\\Window::onClosing","description":"Closing Callback","tag":"refentry","type":"Function","methodName":"onClosing"},{"id":"ui-window.open","name":"UI\\Window::open","description":"Open Dialog","tag":"refentry","type":"Function","methodName":"open"},{"id":"ui-window.save","name":"UI\\Window::save","description":"Save Dialog","tag":"refentry","type":"Function","methodName":"save"},{"id":"ui-window.setborders","name":"UI\\Window::setBorders","description":"Border Use","tag":"refentry","type":"Function","methodName":"setBorders"},{"id":"ui-window.setfullscreen","name":"UI\\Window::setFullScreen","description":"Full Screen Use","tag":"refentry","type":"Function","methodName":"setFullScreen"},{"id":"ui-window.setmargin","name":"UI\\Window::setMargin","description":"Margin Use","tag":"refentry","type":"Function","methodName":"setMargin"},{"id":"ui-window.setsize","name":"UI\\Window::setSize","description":"Set Size","tag":"refentry","type":"Function","methodName":"setSize"},{"id":"ui-window.settitle","name":"UI\\Window::setTitle","description":"Window Title","tag":"refentry","type":"Function","methodName":"setTitle"},{"id":"class.ui-window","name":"UI\\Window","description":"Window","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Window"},{"id":"ui-control.destroy","name":"UI\\Control::destroy","description":"Destroy Control","tag":"refentry","type":"Function","methodName":"destroy"},{"id":"ui-control.disable","name":"UI\\Control::disable","description":"Disable Control","tag":"refentry","type":"Function","methodName":"disable"},{"id":"ui-control.enable","name":"UI\\Control::enable","description":"Enable Control","tag":"refentry","type":"Function","methodName":"enable"},{"id":"ui-control.getparent","name":"UI\\Control::getParent","description":"Get Parent Control","tag":"refentry","type":"Function","methodName":"getParent"},{"id":"ui-control.gettoplevel","name":"UI\\Control::getTopLevel","description":"Get Top Level","tag":"refentry","type":"Function","methodName":"getTopLevel"},{"id":"ui-control.hide","name":"UI\\Control::hide","description":"Hide Control","tag":"refentry","type":"Function","methodName":"hide"},{"id":"ui-control.isenabled","name":"UI\\Control::isEnabled","description":"Determine if Control is enabled","tag":"refentry","type":"Function","methodName":"isEnabled"},{"id":"ui-control.isvisible","name":"UI\\Control::isVisible","description":"Determine if Control is visible","tag":"refentry","type":"Function","methodName":"isVisible"},{"id":"ui-control.setparent","name":"UI\\Control::setParent","description":"Set Parent Control","tag":"refentry","type":"Function","methodName":"setParent"},{"id":"ui-control.show","name":"UI\\Control::show","description":"Control Show","tag":"refentry","type":"Function","methodName":"show"},{"id":"class.ui-control","name":"UI\\Control","description":"Control","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Control"},{"id":"ui-menu.append","name":"UI\\Menu::append","description":"Append Menu Item","tag":"refentry","type":"Function","methodName":"append"},{"id":"ui-menu.appendabout","name":"UI\\Menu::appendAbout","description":"Append About Menu Item","tag":"refentry","type":"Function","methodName":"appendAbout"},{"id":"ui-menu.appendcheck","name":"UI\\Menu::appendCheck","description":"Append Checkable Menu Item","tag":"refentry","type":"Function","methodName":"appendCheck"},{"id":"ui-menu.appendpreferences","name":"UI\\Menu::appendPreferences","description":"Append Preferences Menu Item","tag":"refentry","type":"Function","methodName":"appendPreferences"},{"id":"ui-menu.appendquit","name":"UI\\Menu::appendQuit","description":"Append Quit Menu Item","tag":"refentry","type":"Function","methodName":"appendQuit"},{"id":"ui-menu.appendseparator","name":"UI\\Menu::appendSeparator","description":"Append Menu Item Separator","tag":"refentry","type":"Function","methodName":"appendSeparator"},{"id":"ui-menu.construct","name":"UI\\Menu::__construct","description":"Construct a new Menu","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.ui-menu","name":"UI\\Menu","description":"Menu","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Menu"},{"id":"ui-menuitem.disable","name":"UI\\MenuItem::disable","description":"Disable Menu Item","tag":"refentry","type":"Function","methodName":"disable"},{"id":"ui-menuitem.enable","name":"UI\\MenuItem::enable","description":"Enable Menu Item","tag":"refentry","type":"Function","methodName":"enable"},{"id":"ui-menuitem.ischecked","name":"UI\\MenuItem::isChecked","description":"Detect Checked","tag":"refentry","type":"Function","methodName":"isChecked"},{"id":"ui-menuitem.onclick","name":"UI\\MenuItem::onClick","description":"On Click Callback","tag":"refentry","type":"Function","methodName":"onClick"},{"id":"ui-menuitem.setchecked","name":"UI\\MenuItem::setChecked","description":"Set Checked","tag":"refentry","type":"Function","methodName":"setChecked"},{"id":"class.ui-menuitem","name":"UI\\MenuItem","description":"Menu Item","tag":"phpdoc:classref","type":"Class","methodName":"UI\\MenuItem"},{"id":"ui-area.ondraw","name":"UI\\Area::onDraw","description":"Draw Callback","tag":"refentry","type":"Function","methodName":"onDraw"},{"id":"ui-area.onkey","name":"UI\\Area::onKey","description":"Key Callback","tag":"refentry","type":"Function","methodName":"onKey"},{"id":"ui-area.onmouse","name":"UI\\Area::onMouse","description":"Mouse Callback","tag":"refentry","type":"Function","methodName":"onMouse"},{"id":"ui-area.redraw","name":"UI\\Area::redraw","description":"Redraw Area","tag":"refentry","type":"Function","methodName":"redraw"},{"id":"ui-area.scrollto","name":"UI\\Area::scrollTo","description":"Area Scroll","tag":"refentry","type":"Function","methodName":"scrollTo"},{"id":"ui-area.setsize","name":"UI\\Area::setSize","description":"Set Size","tag":"refentry","type":"Function","methodName":"setSize"},{"id":"class.ui-area","name":"UI\\Area","description":"Area","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Area"},{"id":"ui-executor.construct","name":"UI\\Executor::__construct","description":"Construct a new Executor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-executor.kill","name":"UI\\Executor::kill","description":"Stop Executor","tag":"refentry","type":"Function","methodName":"kill"},{"id":"ui-executor.onexecute","name":"UI\\Executor::onExecute","description":"Execution Callback","tag":"refentry","type":"Function","methodName":"onExecute"},{"id":"ui-executor.setinterval","name":"UI\\Executor::setInterval","description":"Interval Manipulation","tag":"refentry","type":"Function","methodName":"setInterval"},{"id":"class.ui-executor","name":"UI\\Executor","description":"Execution Scheduler","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Executor"},{"id":"ui-controls-tab.append","name":"UI\\Controls\\Tab::append","description":"Append Page","tag":"refentry","type":"Function","methodName":"append"},{"id":"ui-controls-tab.delete","name":"UI\\Controls\\Tab::delete","description":"Delete Page","tag":"refentry","type":"Function","methodName":"delete"},{"id":"ui-controls-tab.hasmargin","name":"UI\\Controls\\Tab::hasMargin","description":"Margin Detection","tag":"refentry","type":"Function","methodName":"hasMargin"},{"id":"ui-controls-tab.insertat","name":"UI\\Controls\\Tab::insertAt","description":"Insert Page","tag":"refentry","type":"Function","methodName":"insertAt"},{"id":"ui-controls-tab.pages","name":"UI\\Controls\\Tab::pages","description":"Page Count","tag":"refentry","type":"Function","methodName":"pages"},{"id":"ui-controls-tab.setmargin","name":"UI\\Controls\\Tab::setMargin","description":"Set Margin","tag":"refentry","type":"Function","methodName":"setMargin"},{"id":"class.ui-controls-tab","name":"UI\\Controls\\Tab","description":"Tab Control","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Tab"},{"id":"ui-controls-check.construct","name":"UI\\Controls\\Check::__construct","description":"Construct a new Check","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-controls-check.gettext","name":"UI\\Controls\\Check::getText","description":"Get Text","tag":"refentry","type":"Function","methodName":"getText"},{"id":"ui-controls-check.ischecked","name":"UI\\Controls\\Check::isChecked","description":"Checked Detection","tag":"refentry","type":"Function","methodName":"isChecked"},{"id":"ui-controls-check.ontoggle","name":"UI\\Controls\\Check::onToggle","description":"Toggle Callback","tag":"refentry","type":"Function","methodName":"onToggle"},{"id":"ui-controls-check.setchecked","name":"UI\\Controls\\Check::setChecked","description":"Set Checked","tag":"refentry","type":"Function","methodName":"setChecked"},{"id":"ui-controls-check.settext","name":"UI\\Controls\\Check::setText","description":"Set Text","tag":"refentry","type":"Function","methodName":"setText"},{"id":"class.ui-controls-check","name":"UI\\Controls\\Check","description":"Check Control","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Check"},{"id":"ui-controls-button.construct","name":"UI\\Controls\\Button::__construct","description":"Construct a new Button","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-controls-button.gettext","name":"UI\\Controls\\Button::getText","description":"Get Text","tag":"refentry","type":"Function","methodName":"getText"},{"id":"ui-controls-button.onclick","name":"UI\\Controls\\Button::onClick","description":"Click Handler","tag":"refentry","type":"Function","methodName":"onClick"},{"id":"ui-controls-button.settext","name":"UI\\Controls\\Button::setText","description":"Set Text","tag":"refentry","type":"Function","methodName":"setText"},{"id":"class.ui-controls-button","name":"UI\\Controls\\Button","description":"Button Control","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Button"},{"id":"ui-controls-colorbutton.getcolor","name":"UI\\Controls\\ColorButton::getColor","description":"Get Color","tag":"refentry","type":"Function","methodName":"getColor"},{"id":"ui-controls-colorbutton.onchange","name":"UI\\Controls\\ColorButton::onChange","description":"Change Handler","tag":"refentry","type":"Function","methodName":"onChange"},{"id":"ui-controls-colorbutton.setcolor","name":"UI\\Controls\\ColorButton::setColor","description":"Set Color","tag":"refentry","type":"Function","methodName":"setColor"},{"id":"class.ui-controls-colorbutton","name":"UI\\Controls\\ColorButton","description":"ColorButton Control","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\ColorButton"},{"id":"ui-controls-label.construct","name":"UI\\Controls\\Label::__construct","description":"Construct a new Label","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-controls-label.gettext","name":"UI\\Controls\\Label::getText","description":"Get Text","tag":"refentry","type":"Function","methodName":"getText"},{"id":"ui-controls-label.settext","name":"UI\\Controls\\Label::setText","description":"Set Text","tag":"refentry","type":"Function","methodName":"setText"},{"id":"class.ui-controls-label","name":"UI\\Controls\\Label","description":"Label Control","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Label"},{"id":"ui-controls-entry.construct","name":"UI\\Controls\\Entry::__construct","description":"Construct a new Entry","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-controls-entry.gettext","name":"UI\\Controls\\Entry::getText","description":"Get Text","tag":"refentry","type":"Function","methodName":"getText"},{"id":"ui-controls-entry.isreadonly","name":"UI\\Controls\\Entry::isReadOnly","description":"Detect Read Only","tag":"refentry","type":"Function","methodName":"isReadOnly"},{"id":"ui-controls-entry.onchange","name":"UI\\Controls\\Entry::onChange","description":"Change Handler","tag":"refentry","type":"Function","methodName":"onChange"},{"id":"ui-controls-entry.setreadonly","name":"UI\\Controls\\Entry::setReadOnly","description":"Set Read Only","tag":"refentry","type":"Function","methodName":"setReadOnly"},{"id":"ui-controls-entry.settext","name":"UI\\Controls\\Entry::setText","description":"Set Text","tag":"refentry","type":"Function","methodName":"setText"},{"id":"class.ui-controls-entry","name":"UI\\Controls\\Entry","description":"Entry Control","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Entry"},{"id":"ui-controls-multilineentry.append","name":"UI\\Controls\\MultilineEntry::append","description":"Append Text","tag":"refentry","type":"Function","methodName":"append"},{"id":"ui-controls-multilineentry.construct","name":"UI\\Controls\\MultilineEntry::__construct","description":"Construct a new Multiline Entry","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-controls-multilineentry.gettext","name":"UI\\Controls\\MultilineEntry::getText","description":"Get Text","tag":"refentry","type":"Function","methodName":"getText"},{"id":"ui-controls-multilineentry.isreadonly","name":"UI\\Controls\\MultilineEntry::isReadOnly","description":"Read Only Detection","tag":"refentry","type":"Function","methodName":"isReadOnly"},{"id":"ui-controls-multilineentry.onchange","name":"UI\\Controls\\MultilineEntry::onChange","description":"Change Handler","tag":"refentry","type":"Function","methodName":"onChange"},{"id":"ui-controls-multilineentry.setreadonly","name":"UI\\Controls\\MultilineEntry::setReadOnly","description":"Set Read Only","tag":"refentry","type":"Function","methodName":"setReadOnly"},{"id":"ui-controls-multilineentry.settext","name":"UI\\Controls\\MultilineEntry::setText","description":"Set Text","tag":"refentry","type":"Function","methodName":"setText"},{"id":"class.ui-controls-multilineentry","name":"UI\\Controls\\MultilineEntry","description":"MultilineEntry Control","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\MultilineEntry"},{"id":"ui-controls-spin.construct","name":"UI\\Controls\\Spin::__construct","description":"Construct a new Spin","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-controls-spin.getvalue","name":"UI\\Controls\\Spin::getValue","description":"Get Value","tag":"refentry","type":"Function","methodName":"getValue"},{"id":"ui-controls-spin.onchange","name":"UI\\Controls\\Spin::onChange","description":"Change Handler","tag":"refentry","type":"Function","methodName":"onChange"},{"id":"ui-controls-spin.setvalue","name":"UI\\Controls\\Spin::setValue","description":"Set Value","tag":"refentry","type":"Function","methodName":"setValue"},{"id":"class.ui-controls-spin","name":"UI\\Controls\\Spin","description":"Spin Control","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Spin"},{"id":"ui-controls-slider.construct","name":"UI\\Controls\\Slider::__construct","description":"Construct a new Slider","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-controls-slider.getvalue","name":"UI\\Controls\\Slider::getValue","description":"Get Value","tag":"refentry","type":"Function","methodName":"getValue"},{"id":"ui-controls-slider.onchange","name":"UI\\Controls\\Slider::onChange","description":"Change Handler","tag":"refentry","type":"Function","methodName":"onChange"},{"id":"ui-controls-slider.setvalue","name":"UI\\Controls\\Slider::setValue","description":"Set Value","tag":"refentry","type":"Function","methodName":"setValue"},{"id":"class.ui-controls-slider","name":"UI\\Controls\\Slider","description":"Slider Control","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Slider"},{"id":"ui-controls-progress.getvalue","name":"UI\\Controls\\Progress::getValue","description":"Get Value","tag":"refentry","type":"Function","methodName":"getValue"},{"id":"ui-controls-progress.setvalue","name":"UI\\Controls\\Progress::setValue","description":"Set Value","tag":"refentry","type":"Function","methodName":"setValue"},{"id":"class.ui-controls-progress","name":"UI\\Controls\\Progress","description":"Progress Control","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Progress"},{"id":"ui-controls-separator.construct","name":"UI\\Controls\\Separator::__construct","description":"Construct a new Separator","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.ui-controls-separator","name":"UI\\Controls\\Separator","description":"Control Separator","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Separator"},{"id":"ui-controls-combo.append","name":"UI\\Controls\\Combo::append","description":"Append Option","tag":"refentry","type":"Function","methodName":"append"},{"id":"ui-controls-combo.getselected","name":"UI\\Controls\\Combo::getSelected","description":"Get Selected Option","tag":"refentry","type":"Function","methodName":"getSelected"},{"id":"ui-controls-combo.onselected","name":"UI\\Controls\\Combo::onSelected","description":"Selected Handler","tag":"refentry","type":"Function","methodName":"onSelected"},{"id":"ui-controls-combo.setselected","name":"UI\\Controls\\Combo::setSelected","description":"Set Selected Option","tag":"refentry","type":"Function","methodName":"setSelected"},{"id":"class.ui-controls-combo","name":"UI\\Controls\\Combo","description":"Combo Control","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Combo"},{"id":"ui-controls-editablecombo.append","name":"UI\\Controls\\EditableCombo::append","description":"Append Option","tag":"refentry","type":"Function","methodName":"append"},{"id":"ui-controls-editablecombo.gettext","name":"UI\\Controls\\EditableCombo::getText","description":"Get Text","tag":"refentry","type":"Function","methodName":"getText"},{"id":"ui-controls-editablecombo.onchange","name":"UI\\Controls\\EditableCombo::onChange","description":"Change Handler","tag":"refentry","type":"Function","methodName":"onChange"},{"id":"ui-controls-editablecombo.settext","name":"UI\\Controls\\EditableCombo::setText","description":"Set Text","tag":"refentry","type":"Function","methodName":"setText"},{"id":"class.ui-controls-editablecombo","name":"UI\\Controls\\EditableCombo","description":"EdiableCombo Control","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\EditableCombo"},{"id":"ui-controls-radio.append","name":"UI\\Controls\\Radio::append","description":"Append Option","tag":"refentry","type":"Function","methodName":"append"},{"id":"ui-controls-radio.getselected","name":"UI\\Controls\\Radio::getSelected","description":"Get Selected Option","tag":"refentry","type":"Function","methodName":"getSelected"},{"id":"ui-controls-radio.onselected","name":"UI\\Controls\\Radio::onSelected","description":"Selected Handler","tag":"refentry","type":"Function","methodName":"onSelected"},{"id":"ui-controls-radio.setselected","name":"UI\\Controls\\Radio::setSelected","description":"Set Selected Option","tag":"refentry","type":"Function","methodName":"setSelected"},{"id":"class.ui-controls-radio","name":"UI\\Controls\\Radio","description":"Radio Control","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Radio"},{"id":"ui-controls-picker.construct","name":"UI\\Controls\\Picker::__construct","description":"Construct a new Picker","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.ui-controls-picker","name":"UI\\Controls\\Picker","description":"Picker Control","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Picker"},{"id":"ui-controls-form.append","name":"UI\\Controls\\Form::append","description":"Append Control","tag":"refentry","type":"Function","methodName":"append"},{"id":"ui-controls-form.delete","name":"UI\\Controls\\Form::delete","description":"Delete Control","tag":"refentry","type":"Function","methodName":"delete"},{"id":"ui-controls-form.ispadded","name":"UI\\Controls\\Form::isPadded","description":"Padding Detection","tag":"refentry","type":"Function","methodName":"isPadded"},{"id":"ui-controls-form.setpadded","name":"UI\\Controls\\Form::setPadded","description":"Set Padding","tag":"refentry","type":"Function","methodName":"setPadded"},{"id":"class.ui-controls-form","name":"UI\\Controls\\Form","description":"Control Form (Arrangement)","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Form"},{"id":"ui-controls-grid.append","name":"UI\\Controls\\Grid::append","description":"Append Control","tag":"refentry","type":"Function","methodName":"append"},{"id":"ui-controls-grid.ispadded","name":"UI\\Controls\\Grid::isPadded","description":"Padding Detection","tag":"refentry","type":"Function","methodName":"isPadded"},{"id":"ui-controls-grid.setpadded","name":"UI\\Controls\\Grid::setPadded","description":"Set Padding","tag":"refentry","type":"Function","methodName":"setPadded"},{"id":"class.ui-controls-grid","name":"UI\\Controls\\Grid","description":"Control Grid (Arrangement)","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Grid"},{"id":"ui-controls-group.append","name":"UI\\Controls\\Group::append","description":"Append Control","tag":"refentry","type":"Function","methodName":"append"},{"id":"ui-controls-group.construct","name":"UI\\Controls\\Group::__construct","description":"Construct a new Group","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-controls-group.gettitle","name":"UI\\Controls\\Group::getTitle","description":"Get Title","tag":"refentry","type":"Function","methodName":"getTitle"},{"id":"ui-controls-group.hasmargin","name":"UI\\Controls\\Group::hasMargin","description":"Margin Detection","tag":"refentry","type":"Function","methodName":"hasMargin"},{"id":"ui-controls-group.setmargin","name":"UI\\Controls\\Group::setMargin","description":"Set Margin","tag":"refentry","type":"Function","methodName":"setMargin"},{"id":"ui-controls-group.settitle","name":"UI\\Controls\\Group::setTitle","description":"Set Title","tag":"refentry","type":"Function","methodName":"setTitle"},{"id":"class.ui-controls-group","name":"UI\\Controls\\Group","description":"Control Group (Arrangement)","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Group"},{"id":"ui-controls-box.append","name":"UI\\Controls\\Box::append","description":"Append Control","tag":"refentry","type":"Function","methodName":"append"},{"id":"ui-controls-box.construct","name":"UI\\Controls\\Box::__construct","description":"Construct a new Box","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-controls-box.delete","name":"UI\\Controls\\Box::delete","description":"Delete Control","tag":"refentry","type":"Function","methodName":"delete"},{"id":"ui-controls-box.getorientation","name":"UI\\Controls\\Box::getOrientation","description":"Get Orientation","tag":"refentry","type":"Function","methodName":"getOrientation"},{"id":"ui-controls-box.ispadded","name":"UI\\Controls\\Box::isPadded","description":"Padding Detection","tag":"refentry","type":"Function","methodName":"isPadded"},{"id":"ui-controls-box.setpadded","name":"UI\\Controls\\Box::setPadded","description":"Set Padding","tag":"refentry","type":"Function","methodName":"setPadded"},{"id":"class.ui-controls-box","name":"UI\\Controls\\Box","description":"Control Box (Arrangement)","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Controls\\Box"},{"id":"ui-draw-pen.clip","name":"UI\\Draw\\Pen::clip","description":"Clip a Path","tag":"refentry","type":"Function","methodName":"clip"},{"id":"ui-draw-pen.fill","name":"UI\\Draw\\Pen::fill","description":"Fill a Path","tag":"refentry","type":"Function","methodName":"fill"},{"id":"ui-draw-pen.restore","name":"UI\\Draw\\Pen::restore","description":"Restore","tag":"refentry","type":"Function","methodName":"restore"},{"id":"ui-draw-pen.save","name":"UI\\Draw\\Pen::save","description":"Save","tag":"refentry","type":"Function","methodName":"save"},{"id":"ui-draw-pen.stroke","name":"UI\\Draw\\Pen::stroke","description":"Stroke a Path","tag":"refentry","type":"Function","methodName":"stroke"},{"id":"ui-draw-pen.transform","name":"UI\\Draw\\Pen::transform","description":"Matrix Transform","tag":"refentry","type":"Function","methodName":"transform"},{"id":"ui-draw-pen.write","name":"UI\\Draw\\Pen::write","description":"Draw Text at Point","tag":"refentry","type":"Function","methodName":"write"},{"id":"class.ui-draw-pen","name":"UI\\Draw\\Pen","description":"Draw Pen","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Pen"},{"id":"ui-draw-path.addrectangle","name":"UI\\Draw\\Path::addRectangle","description":"Draw a Rectangle","tag":"refentry","type":"Function","methodName":"addRectangle"},{"id":"ui-draw-path.arcto","name":"UI\\Draw\\Path::arcTo","description":"Draw an Arc","tag":"refentry","type":"Function","methodName":"arcTo"},{"id":"ui-draw-path.bezierto","name":"UI\\Draw\\Path::bezierTo","description":"Draw Bezier Curve","tag":"refentry","type":"Function","methodName":"bezierTo"},{"id":"ui-draw-path.closefigure","name":"UI\\Draw\\Path::closeFigure","description":"Close Figure","tag":"refentry","type":"Function","methodName":"closeFigure"},{"id":"ui-draw-path.construct","name":"UI\\Draw\\Path::__construct","description":"Construct a new Path","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-draw-path.end","name":"UI\\Draw\\Path::end","description":"Finalize Path","tag":"refentry","type":"Function","methodName":"end"},{"id":"ui-draw-path.lineto","name":"UI\\Draw\\Path::lineTo","description":"Draw a Line","tag":"refentry","type":"Function","methodName":"lineTo"},{"id":"ui-draw-path.newfigure","name":"UI\\Draw\\Path::newFigure","description":"Draw Figure","tag":"refentry","type":"Function","methodName":"newFigure"},{"id":"ui-draw-path.newfigurewitharc","name":"UI\\Draw\\Path::newFigureWithArc","description":"Draw Figure with Arc","tag":"refentry","type":"Function","methodName":"newFigureWithArc"},{"id":"class.ui-draw-path","name":"UI\\Draw\\Path","description":"Draw Path","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Path"},{"id":"ui-draw-matrix.invert","name":"UI\\Draw\\Matrix::invert","description":"Invert Matrix","tag":"refentry","type":"Function","methodName":"invert"},{"id":"ui-draw-matrix.isinvertible","name":"UI\\Draw\\Matrix::isInvertible","description":"Invertible Detection","tag":"refentry","type":"Function","methodName":"isInvertible"},{"id":"ui-draw-matrix.multiply","name":"UI\\Draw\\Matrix::multiply","description":"Multiply Matrix","tag":"refentry","type":"Function","methodName":"multiply"},{"id":"ui-draw-matrix.rotate","name":"UI\\Draw\\Matrix::rotate","description":"Rotate Matrix","tag":"refentry","type":"Function","methodName":"rotate"},{"id":"ui-draw-matrix.scale","name":"UI\\Draw\\Matrix::scale","description":"Scale Matrix","tag":"refentry","type":"Function","methodName":"scale"},{"id":"ui-draw-matrix.skew","name":"UI\\Draw\\Matrix::skew","description":"Skew Matrix","tag":"refentry","type":"Function","methodName":"skew"},{"id":"ui-draw-matrix.translate","name":"UI\\Draw\\Matrix::translate","description":"Translate Matrix","tag":"refentry","type":"Function","methodName":"translate"},{"id":"class.ui-draw-matrix","name":"UI\\Draw\\Matrix","description":"Draw Matrix","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Matrix"},{"id":"ui-draw-color.construct","name":"UI\\Draw\\Color::__construct","description":"Construct new Color","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-draw-color.getchannel","name":"UI\\Draw\\Color::getChannel","description":"Color Manipulation","tag":"refentry","type":"Function","methodName":"getChannel"},{"id":"ui-draw-color.setchannel","name":"UI\\Draw\\Color::setChannel","description":"Color Manipulation","tag":"refentry","type":"Function","methodName":"setChannel"},{"id":"class.ui-draw-color","name":"UI\\Draw\\Color","description":"Color Representation","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Color"},{"id":"ui-draw-stroke.construct","name":"UI\\Draw\\Stroke::__construct","description":"Construct a new Stroke","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-draw-stroke.getcap","name":"UI\\Draw\\Stroke::getCap","description":"Get Line Cap","tag":"refentry","type":"Function","methodName":"getCap"},{"id":"ui-draw-stroke.getjoin","name":"UI\\Draw\\Stroke::getJoin","description":"Get Line Join","tag":"refentry","type":"Function","methodName":"getJoin"},{"id":"ui-draw-stroke.getmiterlimit","name":"UI\\Draw\\Stroke::getMiterLimit","description":"Get Miter Limit","tag":"refentry","type":"Function","methodName":"getMiterLimit"},{"id":"ui-draw-stroke.getthickness","name":"UI\\Draw\\Stroke::getThickness","description":"Get Thickness","tag":"refentry","type":"Function","methodName":"getThickness"},{"id":"ui-draw-stroke.setcap","name":"UI\\Draw\\Stroke::setCap","description":"Set Line Cap","tag":"refentry","type":"Function","methodName":"setCap"},{"id":"ui-draw-stroke.setjoin","name":"UI\\Draw\\Stroke::setJoin","description":"Set Line Join","tag":"refentry","type":"Function","methodName":"setJoin"},{"id":"ui-draw-stroke.setmiterlimit","name":"UI\\Draw\\Stroke::setMiterLimit","description":"Set Miter Limit","tag":"refentry","type":"Function","methodName":"setMiterLimit"},{"id":"ui-draw-stroke.setthickness","name":"UI\\Draw\\Stroke::setThickness","description":"Set Thickness","tag":"refentry","type":"Function","methodName":"setThickness"},{"id":"class.ui-draw-stroke","name":"UI\\Draw\\Stroke","description":"Draw Stroke","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Stroke"},{"id":"ui-draw-brush.construct","name":"UI\\Draw\\Brush::__construct","description":"Construct a new Brush","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-draw-brush.getcolor","name":"UI\\Draw\\Brush::getColor","description":"Get Color","tag":"refentry","type":"Function","methodName":"getColor"},{"id":"ui-draw-brush.setcolor","name":"UI\\Draw\\Brush::setColor","description":"Set Color","tag":"refentry","type":"Function","methodName":"setColor"},{"id":"class.ui-draw-brush","name":"UI\\Draw\\Brush","description":"Brushes","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Brush"},{"id":"ui-draw-brush-gradient.addstop","name":"UI\\Draw\\Brush\\Gradient::addStop","description":"Stop Manipulation","tag":"refentry","type":"Function","methodName":"addStop"},{"id":"ui-draw-brush-gradient.delstop","name":"UI\\Draw\\Brush\\Gradient::delStop","description":"Stop Manipulation","tag":"refentry","type":"Function","methodName":"delStop"},{"id":"ui-draw-brush-gradient.setstop","name":"UI\\Draw\\Brush\\Gradient::setStop","description":"Stop Manipulation","tag":"refentry","type":"Function","methodName":"setStop"},{"id":"class.ui-draw-brush-gradient","name":"UI\\Draw\\Brush\\Gradient","description":"Gradient Brushes","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Brush\\Gradient"},{"id":"ui-draw-brush-lineargradient.construct","name":"UI\\Draw\\Brush\\LinearGradient::__construct","description":"Construct a Linear Gradient","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.ui-draw-brush-lineargradient","name":"UI\\Draw\\Brush\\LinearGradient","description":"Linear Gradient","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Brush\\LinearGradient"},{"id":"ui-draw-brush-radialgradient.construct","name":"UI\\Draw\\Brush\\RadialGradient::__construct","description":"Construct a new Radial Gradient","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"class.ui-draw-brush-radialgradient","name":"UI\\Draw\\Brush\\RadialGradient","description":"Radial Gradient","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Brush\\RadialGradient"},{"id":"ui-draw-text-layout.construct","name":"UI\\Draw\\Text\\Layout::__construct","description":"Construct a new Text Layout","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-draw-text-layout.setcolor","name":"UI\\Draw\\Text\\Layout::setColor","description":"Set Color","tag":"refentry","type":"Function","methodName":"setColor"},{"id":"ui-draw-text-layout.setwidth","name":"UI\\Draw\\Text\\Layout::setWidth","description":"Set Width","tag":"refentry","type":"Function","methodName":"setWidth"},{"id":"class.ui-draw-text-layout","name":"UI\\Draw\\Text\\Layout","description":"Represents Text Layout","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Text\\Layout"},{"id":"ui-draw-text-font.construct","name":"UI\\Draw\\Text\\Font::__construct","description":"Construct a new Font","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-draw-text-font.getascent","name":"UI\\Draw\\Text\\Font::getAscent","description":"Font Metrics","tag":"refentry","type":"Function","methodName":"getAscent"},{"id":"ui-draw-text-font.getdescent","name":"UI\\Draw\\Text\\Font::getDescent","description":"Font Metrics","tag":"refentry","type":"Function","methodName":"getDescent"},{"id":"ui-draw-text-font.getleading","name":"UI\\Draw\\Text\\Font::getLeading","description":"Font Metrics","tag":"refentry","type":"Function","methodName":"getLeading"},{"id":"ui-draw-text-font.getunderlineposition","name":"UI\\Draw\\Text\\Font::getUnderlinePosition","description":"Font Metrics","tag":"refentry","type":"Function","methodName":"getUnderlinePosition"},{"id":"ui-draw-text-font.getunderlinethickness","name":"UI\\Draw\\Text\\Font::getUnderlineThickness","description":"Font Metrics","tag":"refentry","type":"Function","methodName":"getUnderlineThickness"},{"id":"class.ui-draw-text-font","name":"UI\\Draw\\Text\\Font","description":"Represents a Font","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Text\\Font"},{"id":"ui-draw-text-font-descriptor.construct","name":"UI\\Draw\\Text\\Font\\Descriptor::__construct","description":"Construct a new Font Descriptor","tag":"refentry","type":"Function","methodName":"__construct"},{"id":"ui-draw-text-font-descriptor.getfamily","name":"UI\\Draw\\Text\\Font\\Descriptor::getFamily","description":"Get Font Family","tag":"refentry","type":"Function","methodName":"getFamily"},{"id":"ui-draw-text-font-descriptor.getitalic","name":"UI\\Draw\\Text\\Font\\Descriptor::getItalic","description":"Style Detection","tag":"refentry","type":"Function","methodName":"getItalic"},{"id":"ui-draw-text-font-descriptor.getsize","name":"UI\\Draw\\Text\\Font\\Descriptor::getSize","description":"Size Detection","tag":"refentry","type":"Function","methodName":"getSize"},{"id":"ui-draw-text-font-descriptor.getstretch","name":"UI\\Draw\\Text\\Font\\Descriptor::getStretch","description":"Style Detection","tag":"refentry","type":"Function","methodName":"getStretch"},{"id":"ui-draw-text-font-descriptor.getweight","name":"UI\\Draw\\Text\\Font\\Descriptor::getWeight","description":"Weight Detection","tag":"refentry","type":"Function","methodName":"getWeight"},{"id":"class.ui-draw-text-font-descriptor","name":"UI\\Draw\\Text\\Font\\Descriptor","description":"Font Descriptor","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Text\\Font\\Descriptor"},{"id":"function.ui-draw-text-font-fontfamilies","name":"UI\\Draw\\Text\\Font\\fontFamilies","description":"Retrieve Font Families","tag":"refentry","type":"Function","methodName":"UI\\Draw\\Text\\Font\\fontFamilies"},{"id":"function.ui-quit","name":"UI\\quit","description":"Quit UI Loop","tag":"refentry","type":"Function","methodName":"UI\\quit"},{"id":"function.ui-run","name":"UI\\run","description":"Enter UI Loop","tag":"refentry","type":"Function","methodName":"UI\\run"},{"id":"ref.ui","name":"UI Functions","description":"UI","tag":"reference","type":"Extension","methodName":"UI Functions"},{"id":"class.ui-draw-text-font-weight","name":"UI\\Draw\\Text\\Font\\Weight","description":"Font Weight Settings","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Text\\Font\\Weight"},{"id":"class.ui-draw-text-font-italic","name":"UI\\Draw\\Text\\Font\\Italic","description":"Italic Font Settings","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Text\\Font\\Italic"},{"id":"class.ui-draw-text-font-stretch","name":"UI\\Draw\\Text\\Font\\Stretch","description":"Font Stretch Settings","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Text\\Font\\Stretch"},{"id":"class.ui-draw-line-cap","name":"UI\\Draw\\Line\\Cap","description":"Line Cap Settings","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Line\\Cap"},{"id":"class.ui-draw-line-join","name":"UI\\Draw\\Line\\Join","description":"Line Join Settings","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Draw\\Line\\Join"},{"id":"class.ui-key","name":"UI\\Key","description":"Key Identifiers","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Key"},{"id":"class.ui-exception-invalidargumentexception","name":"UI\\Exception\\InvalidArgumentException","description":"InvalidArgumentException","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Exception\\InvalidArgumentException"},{"id":"class.ui-exception-runtimeexception","name":"UI\\Exception\\RuntimeException","description":"RuntimeException","tag":"phpdoc:classref","type":"Class","methodName":"UI\\Exception\\RuntimeException"},{"id":"book.ui","name":"UI","description":"UI","tag":"book","type":"Extension","methodName":"UI"},{"id":"refs.ui","name":"GUI Extensions","description":"Function Reference","tag":"set","type":"Extension","methodName":"GUI Extensions"},{"id":"funcref","name":"Function Reference","description":"PHP Manual","tag":"set","type":"Extension","methodName":"Function Reference"},{"id":"faq.general","name":"General Information","description":"General Information","tag":"chapter","type":"General","methodName":"General Information"},{"id":"faq.mailinglist","name":"Mailing lists","description":"Mailing lists","tag":"chapter","type":"General","methodName":"Mailing lists"},{"id":"faq.obtaining","name":"Obtaining PHP","description":"Obtaining PHP","tag":"chapter","type":"General","methodName":"Obtaining PHP"},{"id":"faq.databases","name":"Database issues","description":"Database issues","tag":"chapter","type":"General","methodName":"Database issues"},{"id":"faq.installation","name":"Installation","description":"Installation","tag":"chapter","type":"General","methodName":"Installation"},{"id":"faq.build","name":"Build Problems","description":"Build Problems","tag":"chapter","type":"General","methodName":"Build Problems"},{"id":"faq.using","name":"Using PHP","description":"Using PHP","tag":"chapter","type":"General","methodName":"Using PHP"},{"id":"faq.passwords","name":"Password Hashing","description":"Hashing passwords safely and securely","tag":"chapter","type":"General","methodName":"Password Hashing"},{"id":"faq.html","name":"PHP and HTML","description":"PHP and HTML","tag":"chapter","type":"General","methodName":"PHP and HTML"},{"id":"faq.com","name":"PHP and COM","description":"PHP and COM","tag":"chapter","type":"General","methodName":"PHP and COM"},{"id":"faq.misc","name":"Miscellaneous Questions","description":"Miscellaneous Questions","tag":"chapter","type":"General","methodName":"Miscellaneous Questions"},{"id":"faq","name":"FAQ","description":"Frequently Asked Questions","tag":"book","type":"Extension","methodName":"FAQ"},{"id":"history.php","name":"History of PHP","description":"Appendices","tag":"sect1","type":"General","methodName":"History of PHP"},{"id":"history.php.related","name":"History of PHP related projects","description":"Appendices","tag":"sect1","type":"General","methodName":"History of PHP related projects"},{"id":"history.php.books","name":"Books about PHP","description":"Appendices","tag":"sect1","type":"General","methodName":"Books about PHP"},{"id":"history.php.publications","name":"Publications about PHP","description":"Appendices","tag":"sect1","type":"General","methodName":"Publications about PHP"},{"id":"history","name":"History of PHP and Related Projects","description":"Appendices","tag":"appendix","type":"General","methodName":"History of PHP and Related Projects"},{"id":"examples","name":"About manual examples","description":"Appendices","tag":"appendix","type":"General","methodName":"About manual examples"},{"id":"migration85.new-features","name":"New Features","description":"Appendices","tag":"sect1","type":"General","methodName":"New Features"},{"id":"migration85.new-classes","name":"New Classes and Interfaces","description":"Appendices","tag":"sect1","type":"General","methodName":"New Classes and Interfaces"},{"id":"migration85.new-functions","name":"New Functions","description":"Appendices","tag":"sect1","type":"General","methodName":"New Functions"},{"id":"migration85.constants","name":"New Global Constants","description":"Appendices","tag":"sect1","type":"General","methodName":"New Global Constants"},{"id":"migration85.incompatible","name":"Backward Incompatible Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Backward Incompatible Changes"},{"id":"migration85.deprecated","name":"Deprecated Features","description":"Appendices","tag":"sect1","type":"General","methodName":"Deprecated Features"},{"id":"migration85.other-changes","name":"Other Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Other Changes"},{"id":"migration85.windows-support","name":"Windows Support","description":"Appendices","tag":"sect1","type":"General","methodName":"Windows Support"},{"id":"migration85","name":"Migrating from PHP 8.4.x to PHP 8.5.x","description":"Appendices","tag":"appendix","type":"General","methodName":"Migrating from PHP 8.4.x to PHP 8.5.x"},{"id":"migration84.new-features","name":"New Features","description":"Appendices","tag":"sect1","type":"General","methodName":"New Features"},{"id":"migration84.new-classes","name":"New Classes, Enums, and Interfaces","description":"Appendices","tag":"sect1","type":"General","methodName":"New Classes, Enums, and Interfaces"},{"id":"migration84.new-functions","name":"New Functions","description":"Appendices","tag":"sect1","type":"General","methodName":"New Functions"},{"id":"migration84.constants","name":"New Global Constants","description":"Appendices","tag":"sect1","type":"General","methodName":"New Global Constants"},{"id":"migration84.incompatible","name":"Backward Incompatible Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Backward Incompatible Changes"},{"id":"migration84.deprecated","name":"Deprecated Features","description":"Appendices","tag":"sect1","type":"General","methodName":"Deprecated Features"},{"id":"migration84.removed-extensions","name":"Removed Extensions","description":"Appendices","tag":"sect1","type":"General","methodName":"Removed Extensions"},{"id":"migration84.other-changes","name":"Other Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Other Changes"},{"id":"migration84.windows-support","name":"Windows Support","description":"Appendices","tag":"sect1","type":"General","methodName":"Windows Support"},{"id":"migration84","name":"Migrating from PHP 8.3.x to PHP 8.4.x","description":"Appendices","tag":"appendix","type":"General","methodName":"Migrating from PHP 8.3.x to PHP 8.4.x"},{"id":"migration83.new-features","name":"New Features","description":"Appendices","tag":"sect1","type":"General","methodName":"New Features"},{"id":"migration83.new-classes","name":"New Classes and Interfaces","description":"Appendices","tag":"sect1","type":"General","methodName":"New Classes and Interfaces"},{"id":"migration83.new-functions","name":"New Functions","description":"Appendices","tag":"sect1","type":"General","methodName":"New Functions"},{"id":"migration83.constants","name":"New Global Constants","description":"Appendices","tag":"sect1","type":"General","methodName":"New Global Constants"},{"id":"migration83.incompatible","name":"Backward Incompatible Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Backward Incompatible Changes"},{"id":"migration83.deprecated","name":"Deprecated Features","description":"Appendices","tag":"sect1","type":"General","methodName":"Deprecated Features"},{"id":"migration83.other-changes","name":"Other Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Other Changes"},{"id":"migration83.windows-support","name":"Windows Support","description":"Appendices","tag":"sect1","type":"General","methodName":"Windows Support"},{"id":"migration83","name":"Migrating from PHP 8.2.x to PHP 8.3.x","description":"Appendices","tag":"appendix","type":"General","methodName":"Migrating from PHP 8.2.x to PHP 8.3.x"},{"id":"migration82.new-features","name":"New Features","description":"Appendices","tag":"sect1","type":"General","methodName":"New Features"},{"id":"migration82.new-functions","name":"New Functions","description":"Appendices","tag":"sect1","type":"General","methodName":"New Functions"},{"id":"migration82.constants","name":"New Global Constants","description":"Appendices","tag":"sect1","type":"General","methodName":"New Global Constants"},{"id":"migration82.incompatible","name":"Backward Incompatible Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Backward Incompatible Changes"},{"id":"migration82.deprecated","name":"Deprecated Features","description":"Appendices","tag":"sect1","type":"General","methodName":"Deprecated Features"},{"id":"migration82.other-changes","name":"Other Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Other Changes"},{"id":"migration82.windows-support","name":"Windows Support","description":"Appendices","tag":"sect1","type":"General","methodName":"Windows Support"},{"id":"migration82","name":"Migrating from PHP 8.1.x to PHP 8.2.x","description":"Appendices","tag":"appendix","type":"General","methodName":"Migrating from PHP 8.1.x to PHP 8.2.x"},{"id":"migration81.new-features","name":"New Features","description":"Appendices","tag":"sect1","type":"General","methodName":"New Features"},{"id":"migration81.new-classes","name":"New Classes and Interfaces","description":"Appendices","tag":"sect1","type":"General","methodName":"New Classes and Interfaces"},{"id":"migration81.new-functions","name":"New Functions","description":"Appendices","tag":"sect1","type":"General","methodName":"New Functions"},{"id":"migration81.constants","name":"New Global Constants","description":"Appendices","tag":"sect1","type":"General","methodName":"New Global Constants"},{"id":"migration81.incompatible","name":"Backward Incompatible Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Backward Incompatible Changes"},{"id":"migration81.deprecated","name":"Deprecated Features","description":"Appendices","tag":"sect1","type":"General","methodName":"Deprecated Features"},{"id":"migration81.other-changes","name":"Other Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Other Changes"},{"id":"migration81","name":"Migrating from PHP 8.0.x to PHP 8.1.x","description":"Appendices","tag":"appendix","type":"General","methodName":"Migrating from PHP 8.0.x to PHP 8.1.x"},{"id":"migration80.new-features","name":"New Features","description":"Appendices","tag":"sect1","type":"General","methodName":"New Features"},{"id":"migration80.new-classes","name":"New Classes and Interfaces","description":"Appendices","tag":"sect1","type":"General","methodName":"New Classes and Interfaces"},{"id":"migration80.incompatible","name":"Backward Incompatible Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Backward Incompatible Changes"},{"id":"migration80.deprecated","name":"Deprecated Features","description":"Appendices","tag":"sect1","type":"General","methodName":"Deprecated Features"},{"id":"migration80.other-changes","name":"Other Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Other Changes"},{"id":"migration80","name":"Migrating from PHP 7.4.x to PHP 8.0.x","description":"Appendices","tag":"appendix","type":"General","methodName":"Migrating from PHP 7.4.x to PHP 8.0.x"},{"id":"migration74.new-features","name":"New Features","description":"Appendices","tag":"sect1","type":"General","methodName":"New Features"},{"id":"migration74.new-classes","name":"New Classes and Interfaces","description":"Appendices","tag":"sect1","type":"General","methodName":"New Classes and Interfaces"},{"id":"migration74.new-functions","name":"New Functions","description":"Appendices","tag":"sect1","type":"General","methodName":"New Functions"},{"id":"migration74.constants","name":"New Global Constants","description":"Appendices","tag":"sect1","type":"General","methodName":"New Global Constants"},{"id":"migration74.incompatible","name":"Backward Incompatible Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Backward Incompatible Changes"},{"id":"migration74.deprecated","name":"Deprecated Features","description":"Appendices","tag":"sect1","type":"General","methodName":"Deprecated Features"},{"id":"migration74.removed-extensions","name":"Removed Extensions","description":"Appendices","tag":"sect1","type":"General","methodName":"Removed Extensions"},{"id":"migration74.other-changes","name":"Other Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Other Changes"},{"id":"migration74.windows-support","name":"Windows Support","description":"Appendices","tag":"sect1","type":"General","methodName":"Windows Support"},{"id":"migration74","name":"Migrating from PHP 7.3.x to PHP 7.4.x","description":"Appendices","tag":"appendix","type":"General","methodName":"Migrating from PHP 7.3.x to PHP 7.4.x"},{"id":"migration73.new-features","name":"New Features","description":"Appendices","tag":"sect1","type":"General","methodName":"New Features"},{"id":"migration73.new-functions","name":"New Functions","description":"Appendices","tag":"sect1","type":"General","methodName":"New Functions"},{"id":"migration73.constants","name":"New Global Constants","description":"Appendices","tag":"sect1","type":"General","methodName":"New Global Constants"},{"id":"migration73.incompatible","name":"Backward Incompatible Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Backward Incompatible Changes"},{"id":"migration73.deprecated","name":"Deprecated Features","description":"Appendices","tag":"sect1","type":"General","methodName":"Deprecated Features"},{"id":"migration73.other-changes","name":"Other Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Other Changes"},{"id":"migration73.windows-support","name":"Windows Support","description":"Appendices","tag":"sect1","type":"General","methodName":"Windows Support"},{"id":"migration73","name":"Migrating from PHP 7.2.x to PHP 7.3.x","description":"Appendices","tag":"appendix","type":"General","methodName":"Migrating from PHP 7.2.x to PHP 7.3.x"},{"id":"migration72.new-features","name":"New features","description":"Appendices","tag":"sect1","type":"General","methodName":"New features"},{"id":"migration72.new-functions","name":"New functions","description":"Appendices","tag":"sect1","type":"General","methodName":"New functions"},{"id":"migration72.constants","name":"New global constants","description":"Appendices","tag":"sect1","type":"General","methodName":"New global constants"},{"id":"migration72.incompatible","name":"Backward incompatible changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Backward incompatible changes"},{"id":"migration72.deprecated","name":"Deprecated features in PHP 7.2.x","description":"Appendices","tag":"sect1","type":"General","methodName":"Deprecated features in PHP 7.2.x"},{"id":"migration72.other-changes","name":"Other changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Other changes"},{"id":"migration72","name":"Migrating from PHP 7.1.x to PHP 7.2.x","description":"Appendices","tag":"appendix","type":"General","methodName":"Migrating from PHP 7.1.x to PHP 7.2.x"},{"id":"migration71.new-features","name":"New features","description":"Appendices","tag":"sect1","type":"General","methodName":"New features"},{"id":"migration71.new-functions","name":"New functions","description":"Appendices","tag":"sect1","type":"General","methodName":"New functions"},{"id":"migration71.constants","name":"New global constants","description":"Appendices","tag":"sect1","type":"General","methodName":"New global constants"},{"id":"migration71.incompatible","name":"Backward incompatible changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Backward incompatible changes"},{"id":"migration71.deprecated","name":"Deprecated features in PHP 7.1.x","description":"Appendices","tag":"sect1","type":"General","methodName":"Deprecated features in PHP 7.1.x"},{"id":"migration71.changed-functions","name":"Changed functions","description":"Appendices","tag":"sect1","type":"General","methodName":"Changed functions"},{"id":"migration71.other-changes","name":"Other changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Other changes"},{"id":"migration71.windows-support","name":"Windows Support","description":"Appendices","tag":"sect1","type":"General","methodName":"Windows Support"},{"id":"migration71","name":"Migrating from PHP 7.0.x to PHP 7.1.x","description":"Appendices","tag":"appendix","type":"General","methodName":"Migrating from PHP 7.0.x to PHP 7.1.x"},{"id":"migration70.incompatible","name":"Backward incompatible changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Backward incompatible changes"},{"id":"migration70.new-features","name":"New features","description":"Appendices","tag":"sect1","type":"General","methodName":"New features"},{"id":"migration70.deprecated","name":"Deprecated features in PHP 7.0.x","description":"Appendices","tag":"sect1","type":"General","methodName":"Deprecated features in PHP 7.0.x"},{"id":"migration70.changed-functions","name":"Changed functions","description":"Appendices","tag":"sect1","type":"General","methodName":"Changed functions"},{"id":"migration70.new-functions","name":"New functions","description":"Appendices","tag":"sect1","type":"General","methodName":"New functions"},{"id":"migration70.classes","name":"New Classes and Interfaces","description":"Appendices","tag":"sect1","type":"General","methodName":"New Classes and Interfaces"},{"id":"migration70.constants","name":"New Global Constants","description":"Appendices","tag":"sect1","type":"General","methodName":"New Global Constants"},{"id":"migration70.sapi-changes","name":"Changes in SAPI Modules","description":"Appendices","tag":"sect1","type":"General","methodName":"Changes in SAPI Modules"},{"id":"migration70.removed-exts-sapis","name":"Removed Extensions and SAPIs","description":"Appendices","tag":"sect1","type":"General","methodName":"Removed Extensions and SAPIs"},{"id":"migration70.other-changes","name":"Other Changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Other Changes"},{"id":"migration70","name":"Migrating from PHP 5.6.x to PHP 7.0.x","description":"Appendices","tag":"appendix","type":"General","methodName":"Migrating from PHP 5.6.x to PHP 7.0.x"},{"id":"migration56.incompatible","name":"Backward incompatible changes","description":"Appendices","tag":"sect1","type":"General","methodName":"Backward incompatible changes"},{"id":"migration56.new-features","name":"New features","description":"Appendices","tag":"sect1","type":"General","methodName":"New features"},{"id":"migration56.deprecated","name":"Deprecated features in PHP 5.6.x","description":"Appendices","tag":"sect1","type":"General","methodName":"Deprecated features in PHP 5.6.x"},{"id":"migration56.changed-functions","name":"Changed functions","description":"Appendices","tag":"sect1","type":"General","methodName":"Changed functions"},{"id":"migration56.new-functions","name":"New functions","description":"Appendices","tag":"sect1","type":"General","methodName":"New functions"},{"id":"migration56.openssl","name":"OpenSSL changes in PHP 5.6.x","description":"Appendices","tag":"sect1","type":"General","methodName":"OpenSSL changes in PHP 5.6.x"},{"id":"migration56.extensions","name":"Other changes to extensions","description":"Appendices","tag":"sect1","type":"General","methodName":"Other changes to extensions"},{"id":"migration56.constants","name":"New global constants","description":"Appendices","tag":"sect1","type":"General","methodName":"New global constants"},{"id":"migration56","name":"Migrating from PHP 5.5.x to PHP 5.6.x","description":"Appendices","tag":"appendix","type":"General","methodName":"Migrating from PHP 5.5.x to PHP 5.6.x"},{"id":"debugger-about","name":"About debugging in PHP","description":"Appendices","tag":"sect1","type":"General","methodName":"About debugging in PHP"},{"id":"debugger","name":"Debugging in PHP","description":"Appendices","tag":"appendix","type":"General","methodName":"Debugging in PHP"},{"id":"configure.about","name":"List of core configure options","description":"Appendices","tag":"sect1","type":"General","methodName":"List of core configure options"},{"id":"configure","name":"Configure options","description":"Appendices","tag":"appendix","type":"General","methodName":"Configure options"},{"id":"ini.list","name":"List of php.ini directives","description":"Appendices","tag":"section","type":"General","methodName":"List of php.ini directives"},{"id":"ini.sections","name":"List of php.ini sections","description":"Appendices","tag":"section","type":"General","methodName":"List of php.ini sections"},{"id":"ini.core","name":"Description of core php.ini directives","description":"Appendices","tag":"section","type":"General","methodName":"Description of core php.ini directives"},{"id":"ini","name":"php.ini directives","description":"Appendices","tag":"appendix","type":"General","methodName":"php.ini directives"},{"id":"extensions.alphabetical","name":"Alphabetical","description":"Appendices","tag":"section","type":"General","methodName":"Alphabetical"},{"id":"extensions.membership","name":"Membership","description":"Appendices","tag":"section","type":"General","methodName":"Membership"},{"id":"extensions.state","name":"State","description":"Appendices","tag":"section","type":"General","methodName":"State"},{"id":"extensions","name":"Extension List\/Categorization","description":"Appendices","tag":"appendix","type":"General","methodName":"Extension List\/Categorization"},{"id":"aliases","name":"List of Function Aliases","description":"Appendices","tag":"appendix","type":"General","methodName":"List of Function Aliases"},{"id":"reserved.keywords","name":"List of Keywords","description":"Appendices","tag":"sect1","type":"General","methodName":"List of Keywords"},{"id":"reserved.classes","name":"Predefined Classes","description":"Appendices","tag":"sect1","type":"General","methodName":"Predefined Classes"},{"id":"reserved.constants","name":"Predefined Constants","description":"Appendices","tag":"sect1","type":"General","methodName":"Predefined Constants"},{"id":"reserved.other-reserved-words","name":"List of other reserved words","description":"Appendices","tag":"sect1","type":"General","methodName":"List of other reserved words"},{"id":"reserved","name":"List of Reserved Words","description":"Appendices","tag":"appendix","type":"General","methodName":"List of Reserved Words"},{"id":"resource","name":"List of Resource Types","description":"Appendices","tag":"appendix","type":"General","methodName":"List of Resource Types"},{"id":"filters.string","name":"String Filters","description":"Appendices","tag":"section","type":"General","methodName":"String Filters"},{"id":"filters.convert","name":"Conversion Filters","description":"Appendices","tag":"section","type":"General","methodName":"Conversion Filters"},{"id":"filters.compression","name":"Compression Filters","description":"Appendices","tag":"section","type":"General","methodName":"Compression Filters"},{"id":"filters.encryption","name":"Encryption Filters","description":"Appendices","tag":"section","type":"General","methodName":"Encryption Filters"},{"id":"filters","name":"List of Available Filters","description":"Appendices","tag":"appendix","type":"General","methodName":"List of Available Filters"},{"id":"transports.inet","name":"Internet Domain: TCP, UDP, SSL, and TLS","description":"Appendices","tag":"section","type":"General","methodName":"Internet Domain: TCP, UDP, SSL, and TLS"},{"id":"transports.unix","name":"Unix Domain: Unix and UDG","description":"Appendices","tag":"section","type":"General","methodName":"Unix Domain: Unix and UDG"},{"id":"transports","name":"List of Supported Socket Transports","description":"Appendices","tag":"appendix","type":"General","methodName":"List of Supported Socket Transports"},{"id":"types.comparisons","name":"PHP type comparison tables","description":"Appendices","tag":"appendix","type":"General","methodName":"PHP type comparison tables"},{"id":"tokens","name":"List of Parser Tokens","description":"Appendices","tag":"appendix","type":"General","methodName":"List of Parser Tokens"},{"id":"userlandnaming.globalnamespace","name":"Global Namespace","description":"Appendices","tag":"section","type":"General","methodName":"Global Namespace"},{"id":"userlandnaming.rules","name":"Rules","description":"Appendices","tag":"section","type":"General","methodName":"Rules"},{"id":"userlandnaming.tips","name":"Tips","description":"Appendices","tag":"section","type":"General","methodName":"Tips"},{"id":"userlandnaming","name":"Userland Naming Guide","description":"Appendices","tag":"appendix","type":"General","methodName":"Userland Naming Guide"},{"id":"about.formats","name":"Formats","description":"Appendices","tag":"sect1","type":"General","methodName":"Formats"},{"id":"about.notes","name":"About user notes","description":"Appendices","tag":"sect1","type":"General","methodName":"About user notes"},{"id":"about.prototypes","name":"How to read a function definition (prototype)","description":"Appendices","tag":"sect1","type":"General","methodName":"How to read a function definition (prototype)"},{"id":"about.phpversions","name":"PHP versions documented in this manual","description":"Appendices","tag":"sect1","type":"General","methodName":"PHP versions documented in this manual"},{"id":"about.more","name":"How to find more information about PHP","description":"Appendices","tag":"sect1","type":"General","methodName":"How to find more information about PHP"},{"id":"about.howtohelp","name":"How to help improve the documentation","description":"Appendices","tag":"sect1","type":"General","methodName":"How to help improve the documentation"},{"id":"about.generate","name":"How we generate the formats","description":"Appendices","tag":"sect1","type":"General","methodName":"How we generate the formats"},{"id":"about.translations","name":"Translations","description":"Appendices","tag":"sect1","type":"General","methodName":"Translations"},{"id":"about","name":"About the manual","description":"Appendices","tag":"appendix","type":"General","methodName":"About the manual"},{"id":"cc.license","name":"Creative Commons Attribution 3.0","description":"Appendices","tag":"appendix","type":"General","methodName":"Creative Commons Attribution 3.0"},{"id":"indexes.functions","name":"Function and Method listing","description":"Appendices","tag":"section","type":"General","methodName":"Function and Method listing"},{"id":"indexes.examples","name":"Example listing","description":"Appendices","tag":"section","type":"General","methodName":"Example listing"},{"id":"indexes","name":"Index listing","description":"Appendices","tag":"appendix","type":"General","methodName":"Index listing"},{"id":"doc.changelog","name":"Changelog","description":"Appendices","tag":"appendix","type":"General","methodName":"Changelog"},{"id":"appendices","name":"Appendices","description":"PHP Manual","tag":"book","type":"Extension","methodName":"Appendices"},{"id":"index","name":"PHP Manual","description":"PHP Manual","tag":"set","type":"Extension","methodName":"PHP Manual"}] \ No newline at end of file diff --git a/manual/help-translate.php b/manual/help-translate.php index 577e5e197c..228460ff46 100644 --- a/manual/help-translate.php +++ b/manual/help-translate.php @@ -1,4 +1,7 @@ How to help translate the PHP Manual

    -If you're interested in helping translate a specific language, then please read the translation section of the Guide for Manual Contributors and contact the appropriate mailing list. Whether or not your language is shown below, you are very welcome to help translate the PHP Manual from English to another language. +If you're interested in helping translate a specific language, then please read the translation section of the Guide for Manual Contributors and contact the appropriate mailing list. Whether or not your language is shown below, you are very welcome to help translate the PHP Manual from English to another language.

    Using outdated translations

    @@ -24,12 +27,12 @@
      $lang) { +foreach (Languages::INACTIVE_ONLINE_LANGUAGES as $cc => $lang) { $link = 'no archive'; - if (in_array($cc, $archived)) { - $link = 'archive'; + if (in_array($cc, $archived, true)) { + $link = 'archive'; } echo '
    • ', $lang, ': (', $link, ')
    • '; } diff --git a/manual/index.php b/manual/index.php index 01404eda1f..1a3a03c3ac 100644 --- a/manual/index.php +++ b/manual/index.php @@ -1,4 +1,4 @@ diff --git a/manual/php4.php b/manual/php4.php index bdd8e81a35..632864d9cb 100644 --- a/manual/php4.php +++ b/manual/php4.php @@ -25,7 +25,7 @@
      • - You can download a copy in the documentation archives. + You can download a copy in the documentation archives.
      • You can also find the PHP 4 legacy manual diff --git a/manual/php5.php b/manual/php5.php index 5649c7691d..28dd12716a 100644 --- a/manual/php5.php +++ b/manual/php5.php @@ -25,7 +25,7 @@
        • - You can download a copy in the documentation archives. + You can download a copy in the documentation archives.
        • You can also find the PHP 5 legacy manual diff --git a/manual/spam_challenge.php b/manual/spam_challenge.php index 8f7710ad32..15bf6a5dd7 100644 --- a/manual/spam_challenge.php +++ b/manual/spam_challenge.php @@ -1,73 +1,66 @@ diff --git a/manual/vote-note.php b/manual/vote-note.php index 4831c85d1f..94b4f69e80 100644 --- a/manual/vote-note.php +++ b/manual/vote-note.php @@ -1,48 +1,49 @@ load($_REQUEST['page'])) && array_key_exists($_REQUEST['id'], $N) && !empty($_REQUEST['vote']) && ($_REQUEST['vote'] === 'up' || $_REQUEST['vote'] === 'down')) { + $response = []; $hash = substr(md5($_REQUEST['page']), 0, 16); - $notes_file = $_SERVER['DOCUMENT_ROOT'] . "/backend/notes/" . - substr($hash, 0, 2) . "/$hash"; + $notes_file = $_SERVER['DOCUMENT_ROOT'] . "/backend/notes/" . substr($hash, 0, 2) . "/$hash"; if (!file_exists($notes_file)) { $response["success"] = false; $response["msg"] = "Invalid request."; } else { - $data = array( + $data = [ "noteid" => $_REQUEST['id'], "sect" => $_REQUEST['page'], "vote" => $_REQUEST['vote'], - "ip" => $_SERVER['REMOTE_ADDR'] - ); + "ip" => $_SERVER['REMOTE_ADDR'], + ]; if (($r = posttohost($master_url, $data)) === null || strpos($r,"failed to open socket to") !== false) { $response["success"] = false; $response["msg"] = "Could not process your request at this time. Please try again later..."; } else { $r = json_decode($r); - if (json_last_error() == JSON_ERROR_NONE && isset($r->status) && $r->status && isset($r->votes)) { + if (isset($r->status, $r->votes) && $r->status) { $response["success"] = true; $response["update"] = (int)$r->votes; - } elseif (json_last_error() == JSON_ERROR_NONE && isset($r->status) && isset($r->message) && $r->status == false) { + } elseif (isset($r->status, $r->message) && !$r->status) { $response["success"] = false; $response["msg"] = $r->message; } else { @@ -54,32 +55,24 @@ echo json_encode($response); exit; } - elseif (!empty($_REQUEST['id']) && !empty($_REQUEST['page']) && ($N = manual_notes_load($_REQUEST['page'])) && array_key_exists($_REQUEST['id'], $N) && !empty($_REQUEST['vote']) && ($_REQUEST['vote'] === 'up' || $_REQUEST['vote'] === 'down')) { + if (!empty($_REQUEST['id']) && !empty($_REQUEST['page']) && ($N = $notes->load($_REQUEST['page'])) && array_key_exists($_REQUEST['id'], $N) && !empty($_REQUEST['vote']) && ($_REQUEST['vote'] === 'up' || $_REQUEST['vote'] === 'down')) { if (!empty($_POST['challenge']) && !empty($_POST['func']) || empty($_POST['arga']) || empty($_POST['argb'])) { if (!test_answer($_POST['func'], $_POST['arga'], $_POST['argb'], $_POST['challenge'])) { $error = "Incorrect answer! Please try again."; } else { - if ($_REQUEST['vote'] == 'up') { - $N[$_REQUEST['id']]['votes']['up']++; - } - elseif ($_REQUEST['vote'] == 'down') { - $N[$_REQUEST['id']]['votes']['down']++; - } - $update = $N[$_REQUEST['id']]['votes']['up'] - $N[$_REQUEST['id']]['votes']['down']; $hash = substr(md5($_REQUEST['page']), 0, 16); - $notes_file = $_SERVER['DOCUMENT_ROOT'] . "/backend/notes/" . - substr($hash, 0, 2) . "/$hash"; + $notes_file = $_SERVER['DOCUMENT_ROOT'] . "/backend/notes/" . substr($hash, 0, 2) . "/$hash"; if (file_exists($notes_file)) { - $data = array( + $data = [ "noteid" => $_REQUEST['id'], "sect" => $_REQUEST['page'], "vote" => $_REQUEST['vote'], "ip" => $_SERVER['REMOTE_ADDR'], - ); + ]; if (($r = posttohost($master_url, $data)) !== null && strpos($r,"failed to open socket to") === false) { $r = json_decode($r); - if (json_last_error() == JSON_ERROR_NONE && isset($r->status) && $r->status && isset($r->votes)) { + if (isset($r->status, $r->votes) && $r->status) { $thankyou = true; } else { $error = "Invalid request."; @@ -107,15 +100,15 @@ site_header("Vote On User Notes"); $headerset = true; - if (!empty($_REQUEST['id']) && !empty($_REQUEST['page']) && ($N = manual_notes_load($_REQUEST['page'])) && array_key_exists($_REQUEST['id'], $N) && !empty($_REQUEST['vote']) && ($_REQUEST['vote'] === 'up' || $_REQUEST['vote'] === 'down')) { + if (!empty($_REQUEST['id']) && !empty($_REQUEST['page']) && ($N = $notes->load($_REQUEST['page'])) && array_key_exists($_REQUEST['id'], $N) && !empty($_REQUEST['vote']) && ($_REQUEST['vote'] === 'up' || $_REQUEST['vote'] === 'down')) { ?>

          Voting

          -

          Please answer this simple SPAM challenge: ?
          - (Example: nine)

          +

          : ?
          + (Example: nine)

          @@ -129,10 +122,7 @@ displaySingle($N[$_REQUEST['id']], false); ?>
          @@ -166,8 +156,8 @@
          -

          Please answer this simple SPAM challenge: ?
          - (Example: nine)

          +

          : ?
          + (Example: nine)

          @@ -185,10 +175,7 @@ displaySingle($N[$_REQUEST['id']], false); ?>
          diff --git a/menu.php b/menu.php new file mode 100644 index 0000000000..62dba080a1 --- /dev/null +++ b/menu.php @@ -0,0 +1,31 @@ + + +

          Menu

          + +

          Use the links below to browse the PHP.net website.

          + + + + "community")); +site_header("Information About This PHP Mirror Site", ["current" => "community"]); ?>

          Information About This PHP Mirror Site

          @@ -67,14 +69,14 @@
          • This site is an official PHP.net mirror site
          • -
          • The mirror site's address is
          • +
          • The mirror site's address is

          Mirror Provider

          • -

            The provider of this mirror is

            +

            The provider of this mirror is

            @@ -85,7 +87,7 @@

            Mirror Services

              -
            • Default language is
            • +
            • Default language is

            Mirror Status

            diff --git a/mirroring-troubles.php b/mirroring-troubles.php index ea79e1825a..b8ed756ca3 100644 --- a/mirroring-troubles.php +++ b/mirroring-troubles.php @@ -9,16 +9,15 @@

            '; -site_header("The PHP mirrors problem and troubleshooting guide", array("current" => "help")); +site_header("The PHP mirrors problem and troubleshooting guide", ["current" => "help"]); ?> -

            Common troubles that PHP.net mirrors face

            +

            Common troubles that mirrors of PHP.net face

            - Mirroring a PHP.net server requires a few specific settings and + Mirroring the PHP.net website requires a few specific settings and considerations, and this document provides a list of problems with possible - solutions. The mirror tools check for these problems and automatically - disable the problematic mirrors. The [?] link within each - title may be used to test this mirror. + solutions. The [?] link within each title may be used to + test this mirror.

            @@ -103,15 +102,6 @@ AddType application/octet-stream .msi

            - -

            Slow response time

            -

            - Although this test is currently a little unfair (it's only based from the - USA), the response time of the server exceeds five seconds. Please confirm - the speed of these mirrors and we'll likely adjust the testing procedure. - This test will be performed from multiple locations in the future. -

            -

            Unable to do external searches [?]

            diff --git a/mirroring.php b/mirroring.php index 475419c801..bd9491ff8f 100644 --- a/mirroring.php +++ b/mirroring.php @@ -8,31 +8,21 @@ mirrors page.

            '; -/* -

            SVN repository mirroring

            -

            - If you are interested in using a local copy of our - SVN repository for yourself, we provide - svnsync instructions - separately. -

            -'; -*/ site_header( 'Mirroring The PHP Website', - array( + [ 'current' => 'community', 'layout_span' => 12, - ) + ], ); ?>

            Mirroring The PHP Website

            - The PHP project does no have an official mirror program anymore, but you can - set-up a mirror for your own network or company. + The PHP project does not have an official mirror program anymore, but you can + set up a mirror for your own network or company.

            @@ -80,13 +70,6 @@ "--exclude='distributions/**' --exclude='extra/**'".

            -

            - PHP mirror sites should provide the exact content coming from our servers, - and must not be altered in any way unless explicitly stated in the mirroring - guidelines. Failing to do will result in immediate termination and permanent - expulsion of your participation in the program. -

            -

            Add SQLite 3 Support

            @@ -154,11 +137,6 @@ # Set mirror's preferred language here SetEnv MIRROR_LANGUAGE "en" - # The next two lines are only necessary if generating - # stats (see below), otherwise you should comment them out - Alias /stats/ /path/to/local/stats/ - SetEnv MIRROR_STATS 1 - # Apache2 has 'AddHandler type-map var' enabled by default. # Remove the comment sign on the line below if you have it enabled. # RemoveHandler var @@ -198,14 +176,6 @@ site should start working.

            -

            Setting Up Local Stats

            - -

            - Setting up local stats can be a plus on your mirror. We - provide some setup - instructions for that. -

            -

            Setup Regular Updates

            @@ -228,66 +198,13 @@ minutes.

            -

            Sponsor Logo

            - -

            - We would like to thank you for providing a mirror, so - if you would like to display a logo on the mirror site promoting your - company, you are able to do so by following these steps: -

            - -
              -
            • Create a 120 x 60 pixel sized logo button.
            • -
            • Copy it to your /www/htdocs/phpweb/backend folder as mirror.gif, mirror.jpg or mirror.png.
            • -
            • Go visit your mirror URL (e.g. http://foo.php.net/mirror.php) and check if it is there.
            • -
            - -

            - The PHP Group and the Network Infrastructure Manager reserve the - right to refuse images based on content, but most things should be fine. -

            - -

            - We have chosen a banner size which conforms with the - Internet - Advertising Bureau standards. -

            - -

            - And finally, don't forget to put a nice little PHP logo somewhere - on your hosting company's site if possible. Grab one of the logos - from the logos download page, and - link it to your mirror. This shows the community that you are a - proud supporter of PHP and open source technology. -

            -

            Mirror Setup Troubleshooting

            The mirror troubleshooting guide contains information about the common and potential problems discovered - when setting up and maintaining a PHP.net mirror. Included are links that - perform many of the tests executed by the automated mirror management tools. -

            - -

            - There is a mailing list named "php-mirrors" at - lists.php.net, to which you can subscribe. - This mailing list is very low-traffic and only used for communication - between mirror maintainers and php.net webmasters. -

            -

            - To subscribe send an empty message - to: php-mirrors-subscribe@lists.php.net -

            - -

            - - Thank you for your interest in providing a mirror! If you ever have any - questions or concerns, drop us a line at - php-mirrors@lists.php.net - --- we are here to help! - + when setting up and maintaining a mirror of PHP.net. Included are links that + can help demonstrate common configuration problems.

            diff --git a/mirrors.php b/mirrors.php index 61c8b25fee..f43220fd9e 100644 --- a/mirrors.php +++ b/mirrors.php @@ -1,4 +1,5 @@ "community")); +site_header("Email confirmation", ["current" => "community"]); // Only run on main php.net box. if (!is_primary_site()) { @@ -24,10 +24,10 @@ } // These sites are handled by automoderation -$sites = array("php.net", "lists.php.net"); +$sites = ["php.net", "lists.php.net"]; // Get data from the URL -list($none, $site, $token, $sender) = explode("/", $_SERVER["PATH_INFO"]); +[$none, $site, $token, $sender] = explode("/", $_SERVER["PATH_INFO"]); // Error in input data if ($sender == "" || strlen($token) < 32 || !isset($sites[$site])) { @@ -47,7 +47,7 @@ "confirm@" . $sites[$site], "confirm", "[confirm: $token $sender]", - "From: $sender" + "From: $sender", ); echo <<languageCode = $_POST['my_lang']; // Add this as first option, selected $options[] = '\n"; + $options[] = '\n"; // Remove, so it is not listed two times - unset($langs[myphpnet_language()]); + unset($langs[$userPreferences->languageCode]); } // We have no cookie and no form submitted @@ -46,25 +50,25 @@ } // Assemble form from collected data -$langpref = "\n"; +$langpref = "\n"; // Save URL shortcut fallback setting if (isset($_POST['urlsearch'])) { - myphpnet_urlsearch($_POST['urlsearch']); + $userPreferences->setUrlSearchType($_POST['urlsearch']); } if (isset($_POST["showug"])) { - myphpnet_showug($_POST["showug"] == "enable"); + $userPreferences->setIsUserGroupTipsEnabled($_POST["showug"] === "enable"); } // Prepare mirror array $mirror_sites = $MIRRORS; -$mirror_sites["NONE"] = array(7 => MIRROR_OK); +$mirror_sites["NONE"] = [7 => MIRROR_OK]; -myphpnet_save(); +$userPreferences->save(); -site_header("My PHP.net", array("current" => "community")); +site_header("My PHP.net", ["current" => "community"]); ?> @@ -94,9 +98,8 @@ If you use a shortcut or search for a function, the language used is determined by checking for the following settings. The list is in priority order, the first is the most important. Normally you don't - need to set your preferred language, as your last seen language is - always remembered, and is a good estimate of your preferred language - most of the time. + need to set your preferred language, as your browser's language preferences + are detected automatically using the Accept-Language header.

            @@ -104,22 +107,19 @@ + "" => $langpref, - "Last seen language" => - (isset($_COOKIE['LAST_LANG']) ? htmlentities($_COOKIE['LAST_LANG'], ENT_QUOTES | ENT_IGNORE, 'UTF-8') : "None"), - "Your Accept-Language browser setting" => (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? htmlentities($_SERVER['HTTP_ACCEPT_LANGUAGE'], ENT_QUOTES | ENT_IGNORE, 'UTF-8') : "None"), "The mirror's default language" => default_language(), - "Default" => "en" -); + "Default" => "en", +]; // Write a row for all settings foreach ($langinfo as $lin => $lid) { @@ -146,25 +146,6 @@ language selection pages, etc.

            -

            Your country

            - -

            - The PHP.net site tries to detect your country - using the Directi - Ip-to-Country Database. This information is used to mark - the events in your country specially. -

            - -
            -" . $COUNTRIES[$COUNTRY] . ""; -} else { - echo "We were unable to detect your country"; -} -?> -
            -

            URL search fallback

            @@ -176,18 +157,18 @@

            - Your setting: searchType; +if ($type === UserPreferences::URL_NONE || $type === UserPreferences::URL_FUNC) { echo ' checked="checked"'; } -echo '> Function list search -> PHP Documentation search +>

            @@ -197,8 +178,8 @@ We are experimenting with listing nearby user groups. This feature is highly experimental and will very likely change a lot and be broken at times.

            - >
            - > + isUserGroupTipsEnabled ? "checked=checked" : "" ?>>
            + isUserGroupTipsEnabled ? "" : "checked=checked" ?>>

            diff --git a/openapi.yml b/openapi.yml new file mode 100644 index 0000000000..3ab1221e5b --- /dev/null +++ b/openapi.yml @@ -0,0 +1,160 @@ +openapi: 3.1.0 +info: + title: "PHP Website API" + description: "APIs available for use on the www.php.net website." + version: 2025.4.1 + +servers: + - url: "https://www.php.net" + description: "The php.net website." + +components: + pathItems: + releases: + get: + summary: "Atom feed of php.net news and announcements." + responses: + "200": + description: "Atom feed of php.net news and announcements." + content: + "application/atom+xml": + schema: + readOnly: true + externalDocs: + description: "Standard Atom feed with additional fields in the php: xml namespace." + url: http://php.net/ns/releases + +paths: + "/mirror-info.php": + get: + summary: >- + Returns information about the host running php.net. + Historically, this was unique per mirror. + With the move to a CDN model in 2019, there is now only one canonical source, and thus only one relevant configuration. + Refer to https://github.com/php/web-php/blob/master/mirror-info.php for the serialization format of the response. + responses: + "200": + description: "Successful response of host configuration. This API does not error." + content: + "text/plain": + schema: + type: string + readOnly: true + externalDocs: + description: "This pipe delimited string's contents are described in the source code for this file." + url: "https://github.com/php/web-php/blob/master/mirror-info.php" + example: "https://www.php.net/|8.4.5|1743832640|0|0|en|manual-noalias|1|Core,date,libxml,json,SPL,Zend OPcache|php-web4|169.254.12.255" + + "/releases/feed.php": + "$ref": "#/components/pathItems/releases" + + # Redirects to /releases/feed.php + "/relases.atom": + "$ref": "#/components/pathItems/releases" + + "/releases/branches.php": + get: + summary: "Currently active versions of PHP." + responses: + "200": + description: "Actively supported per-branch versions of PHP." + content: + "application/json": + schema: + type: array + items: + type: object + properties: + branch: + description: "Major.Minor branch identifier, e.g. (8.4, 5.6, etc...)" + type: string + latest: + description: "Most recent release on this branch (e.g. 8.4.5, 5.6.40, etc...)" + type: string + state: + description: "Overall release readiness of the branch." + type: string + enum: + - stable + - security + - eol + - future + initial_release: + description: "Date on which first GA release of the branch was announced." + type: string + format: date-time + active_support_end: + description: "Date on which general bugfix support for this branch ends." + type: string + format: date-time + security_support_end: + description: "Date on which all support for this branch ends." + type: string + format: date-time + + "/pre-release-builds.php": + get: + summary: "Current pre-release versions of PHP." + parameters: + - in: query + name: format + schema: + type: string + enum: [ "json", "serialize" ] + required: false + description: Output format + - in: query + name: only + schema: + type: string + enum: [ "dev_versions" ] + required: false + description: Include only dev version numbers + + responses: + "200": + description: "Actively RC per-branch versions of PHP." + content: + "application/json": + schema: + type: array + items: + type: object + properties: + active: + description: "Whether RC version is active" + type: boolean + release: + type: object + properties: + type: + description: "Unstable release type" + type: string + enum: + - alpha + - beta + - RC + number: + description: "Unstable release number" + type: integer + sha256_gz: + description: "Unstable release gz hash" + type: string + sha256_bz2: + description: "Unstable release bz2 hash" + type: string + sha256_xz: + description: "Unstable release xz hash" + type: string + date: + description: "Date of release" + type: string + baseurl: + description: "Download base URL" + type: string + enabled: + description: "enabled" + type: boolean + dev_version: + description: "dev_version" + type: string diff --git a/package.json b/package.json new file mode 100644 index 0000000000..6678d5ccce --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "name": "php.net", + "devDependencies": { + "@playwright/test": "^1.44.0", + "@types/node": "^20.12.11" + }, + "scripts": {} +} diff --git a/pear/index.php b/pear/index.php index 7b2cb896e4..8022e4c89b 100644 --- a/pear/index.php +++ b/pear/index.php @@ -1,4 +1,5 @@ + Test Releases +

            + The downloads on this page are not meant to be run in production. They are + for testing only. +
            + +
            + If you find a problem when running your library or application with these + builds, please file a report on + GitHub Issues. +
            +
            + QA Releases API +
            +

            + The QA API is based on the query string. +

            +

            + Pass in the format parameter, with serialize or + json as value to obtain all information: +

            + +

            + To only try dev version numbers, add only=dev_versions: +

            + +
            +
            +'; + +site_header("Pre-Release Builds", [ + 'current' => 'downloads', +]); + +?> +

            Pre-Release Builds

            +

            +This page contains links to the Pre-release builds that the release +managers create before each actual release. These builds are meant for the +community to test whether no inadvertent changes have been made, and +whether no regressions have been introduced. +

            + +

            Source Builds

            + + 1 ? 's' : ''; + ?> + + $info) : ?> +

            + PHP +

            +
            + +
              + $file_info) : ?> +
            • + + + + + + + + No checksum value available)  + + +
            • + +
            + + +

            There are no QA releases available at the moment to test.

            + + +

            Windows Builds

            += 2) { + $branchKey = $parts[0] . '.' . $parts[1]; + $allowedBranches[$branchKey] = true; + } + } + } + + $buildLabel = static function (string $key, array $entry): string { + $tool = 'VS'; + if (strpos($key, 'vs17') !== false) { + $tool .= '17'; + } elseif (strpos($key, 'vs16') !== false) { + $tool .= '16'; + } elseif (strpos($key, 'vc15') !== false) { + $tool = 'VC15'; + } + + $arch = (strpos($key, 'x64') !== false) ? 'x64' : ((strpos($key, 'x86') !== false) ? 'x86' : ''); + $ts = (strpos($key, 'nts') !== false) ? 'Non Thread Safe' : 'Thread Safe'; + + if (strncmp($key, 'nts-', 4) === 0) { + $ts = 'Non Thread Safe'; + } elseif (strncmp($key, 'ts-', 3) === 0) { + $ts = 'Thread Safe'; + } + + return trim(($tool ? $tool . ' ' : '') . ($arch ? $arch . ' ' : '') . $ts); + }; + + $packageNames = [ + 'zip' => 'Zip', + 'debug_pack' => 'Debug Pack', + 'devel_pack' => 'Development package (SDK to develop PHP extensions)', + ]; + + $makeListItem = static function (string $label, array $fileInfo, ?string $mtime, bool $includeSha) use ($winQaBase): ?string { + $path = $fileInfo['path'] ?? ''; + if ($path === '') { + return null; + } + + $href = $winQaBase . ltrim($path, '/'); + $size = $fileInfo['size'] ?? ''; + $sha = $fileInfo['sha256'] ?? ''; + $hrefAttr = htmlspecialchars($href, ENT_QUOTES, 'UTF-8'); + $labelText = htmlspecialchars($label, ENT_QUOTES, 'UTF-8'); + + $parts = ['' . $labelText . '']; + if ($size !== '') { + $parts[] = '' . htmlspecialchars($size, ENT_QUOTES, 'UTF-8') . ''; + } + + if ($mtime) { + $timestamp = strtotime($mtime); + if ($timestamp) { + $parts[] = '' . gmdate('d M Y', $timestamp) . ''; + } + } + + if ($includeSha && $sha !== '') { + $parts[] = '' . htmlspecialchars($sha, ENT_QUOTES, 'UTF-8') . ''; + } + + return '
          • ' . implode(' ', $parts) . '
          • '; + }; + + foreach ($decoded as $branch => $info) { + if (!is_array($info) || empty($info['version'])) { + continue; + } + + if ($branch === 'comment') { + continue; + } + + if (!empty($allowedBranches) && empty($allowedBranches[$branch])) { + continue; + } + + $topItems = []; + if (!empty($info['source']) && is_array($info['source'])) { + $item = $makeListItem('Download source code', $info['source'], $info['source']['mtime'] ?? null, false); + if ($item !== null) { + $topItems[] = $item; + } + } + + if (!empty($info['test_pack']) && is_array($info['test_pack'])) { + $item = $makeListItem('Download tests package (phpt)', $info['test_pack'], $info['test_pack']['mtime'] ?? null, false); + if ($item !== null) { + $topItems[] = $item; + } + } + + $builds = []; + foreach ($info as $buildKey => $entry) { + if (!is_array($entry) || in_array($buildKey, ['version', 'source', 'test_pack'], true)) { + continue; + } + + $label = $buildLabel($buildKey, $entry); + if ($label === '') { + continue; + } + + $packageItems = []; + foreach ($packageNames as $pkgKey => $pkgLabel) { + if (empty($entry[$pkgKey]) || !is_array($entry[$pkgKey])) { + continue; + } + + $rendered = $makeListItem($pkgLabel, $entry[$pkgKey], $entry['mtime'] ?? null, true); + if ($rendered !== null) { + $packageItems[] = $rendered; + } + } + + if (empty($packageItems)) { + continue; + } + + $builds[] = [ + 'label' => $label, + 'items' => $packageItems, + ]; + } + + if (empty($topItems) && empty($builds)) { + continue; + } + + $winQaReleases[] = [ + 'version_label' => $info['version'], + 'top_items' => $topItems, + 'builds' => $builds, + ]; + } + if (!empty($winQaReleases)) { + usort($winQaReleases, static function ($a, $b) { + return version_compare($b['version_label'], $a['version_label']); + }); + } + } else { + $winQaMessage = 'Windows QA release index could not be parsed.'; + } +} else { + $winQaMessage = 'Windows QA release index is unavailable.'; +} + +if ($winQaMessage !== '') { + echo '

            ', htmlspecialchars($winQaMessage), '

            '; +} elseif (empty($winQaReleases)) { + echo "

            No Windows QA builds match the currently active QA releases.

            "; +} else { + foreach ($winQaReleases as $release) { + $versionLabel = $release['version_label']; + + echo '

            PHP ', htmlspecialchars($versionLabel), '

            '; + echo '
            '; + if (!empty($release['top_items'])) { + echo '
              '; + foreach ($release['top_items'] as $item) { + echo $item; + } + echo '
            '; + } + + foreach ($release['builds'] as $build) { + echo '
            ' . $build['label'] . '
            '; + echo '
              '; + foreach ($build['items'] as $item) { + echo $item; + } + echo '
            '; + } + echo '
            '; + } +} +?> + + $SIDEBAR_DATA]); + diff --git a/privacy.php b/privacy.php index 0e2e69f3f1..ce1b25f4e2 100644 --- a/privacy.php +++ b/privacy.php @@ -1,7 +1,7 @@ "footer")); +site_header("Privacy Policy", ["current" => "footer"]); ?>

            Privacy Policy

            @@ -31,9 +31,15 @@

            Cookies

            php.net uses cookies to keep track of user preferences. Unless - you login on the site, the cookies will not be used to store personal information and + you login on the site, the cookies will not be used to store personal information, and we do not give away the information from the cookies.

            +

            + We also use self-hosted analytics service to improve popular sections of the documentation, + and never share user data with third parties. + You may deactivate or restrict the transmission of cookies by changing the settings of your web browser. + Cookies that are already stored may be deleted at any time. +

            = 70 || (strpos($functions[$file], $notfound) !== FALSE)) { + if ($p >= 70 || (strpos($functions[$file], $notfound) !== false)) { $maybe[$file] = '' . $functions[$file] . ''; } // Otherwise it is just similar @@ -105,15 +104,14 @@ function quickref_table($functions, $sort = true) } // Do not index page if presented as a search result -if (count($maybe) > 0) { $head_options = array("noindex"); } -else { $head_options = array(); } +if (count($maybe) > 0) { $head_options = ["noindex"]; } +else { $head_options = []; } -site_header("Manual Quick Reference", $head_options+array("current" => "help")); +site_header("Manual Quick Reference", $head_options + ["current" => "help"]); // Note: $notfound is defined (with htmlspecialchars) inside manual-lookup.php $notfound_enc = urlencode($notfound); - if ($snippet = is_known_snippet($notfound)) { echo "

            Related snippet found for '{$notfound}'

            "; echo "

            {$snippet}

            "; @@ -132,9 +130,7 @@ function quickref_table($functions, $sort = true) '

            Full website search', -); - -site_footer($config); +]); } diff --git a/releases/4_1_0_fr.php b/releases/4_1_0_fr.php index 66c99da22a..04c16a721d 100644 --- a/releases/4_1_0_fr.php +++ b/releases/4_1_0_fr.php @@ -1,7 +1,7 @@ "fr")); +site_header("Annonce de publication de PHP 4.1.0", ["lang" => "fr"]); ?>

            Annonce de publication de PHP 4.1.0

            diff --git a/releases/4_2_0_fr.php b/releases/4_2_0_fr.php index 47b700f9f0..80fb718f14 100644 --- a/releases/4_2_0_fr.php +++ b/releases/4_2_0_fr.php @@ -1,7 +1,7 @@ "fr")); +site_header("Annonce de publication de PHP 4.2.0", ["lang" => "fr"]); ?>

            Annonce de publication de PHP 4.2.0

            diff --git a/releases/4_2_1.php b/releases/4_2_1.php index 53cf98f87f..2d9ab46a9f 100644 --- a/releases/4_2_1.php +++ b/releases/4_2_1.php @@ -41,7 +41,7 @@

            PHP 4.2.1 also has improved (but still experimental) support for Apache version 2. We do not recommend that you use this in a production environment, - but feel free to test it and report bugs to the bug + but feel free to test it and report bugs to the bug system.

            diff --git a/releases/4_2_1_fr.php b/releases/4_2_1_fr.php index edc4cb53c3..0ab53a1520 100644 --- a/releases/4_2_1_fr.php +++ b/releases/4_2_1_fr.php @@ -1,7 +1,7 @@ "fr")); +site_header("Annonce de publication de PHP 4.2.1", ["lang" => "fr"]); ?>

            Annonce de publication de PHP 4.2.1

            @@ -54,7 +54,7 @@ (mais toujours expérimentale) avec Apache 2. Nous ne recommandons pas son utilisation dans un environnement de production. Testez-le intensivement, et rapportez tous les bugs dans le - système. + système.

            Variables externes

            diff --git a/releases/4_2_2_fr.php b/releases/4_2_2_fr.php index d7193b08a6..a9125184d5 100644 --- a/releases/4_2_2_fr.php +++ b/releases/4_2_2_fr.php @@ -1,7 +1,7 @@ "fr")); +site_header("Annonce de publication de PHP 4.2.2", ["lang" => "fr"]); ?>

            diff --git a/releases/4_3_0_fr.php b/releases/4_3_0_fr.php index b49e328ff2..8fc1a959c2 100644 --- a/releases/4_3_0_fr.php +++ b/releases/4_3_0_fr.php @@ -1,7 +1,7 @@ "fr")); +site_header("Annonce de publication de PHP 4.3.0", ["lang" => "fr"]); ?>

            Annonce de publication de PHP 4.3.0

            diff --git a/releases/4_3_2_fr.php b/releases/4_3_2_fr.php index f944df03e5..bd62af5f7b 100644 --- a/releases/4_3_2_fr.php +++ b/releases/4_3_2_fr.php @@ -1,7 +1,7 @@ "fr")); +site_header("Annonce de publication de PHP 4.3.2", ["lang" => "fr"]); ?>

            Annonce de publication de PHP 4.3.2

            diff --git a/releases/4_3_4_fr.php b/releases/4_3_4_fr.php index ccb2c17399..4f36924454 100644 --- a/releases/4_3_4_fr.php +++ b/releases/4_3_4_fr.php @@ -1,7 +1,7 @@ "fr")); +site_header("Annonce de publication de PHP 4.3.4", ["lang" => "fr"]); ?>

            Annonce de publication de PHP 4.3.4

            diff --git a/releases/4_4_1.php b/releases/4_4_1.php index 1d3bb9450e..deab581479 100644 --- a/releases/4_4_1.php +++ b/releases/4_4_1.php @@ -41,7 +41,7 @@

            This release also fixes 35 other defects, where the most important is the the fix that removes a notice when passing a by-reference result of a function -as a by-reference value to another function. (Bug #33558). +as a by-reference value to another function. (Bug #33558).

            For a full list of changes in PHP 4.4.1, see the diff --git a/releases/5_3_3.php b/releases/5_3_3.php index bd9c9ea56a..516ddd3762 100644 --- a/releases/5_3_3.php +++ b/releases/5_3_3.php @@ -22,7 +22,7 @@ non-namespaced classes.

            '); - ?>

            + ?>

            There is no impact on migration from 5.2.x because namespaces were only introduced in PHP 5.3.

          diff --git a/releases/5_4_0.php b/releases/5_4_0.php index be67e7d4b8..ee7fe07869 100644 --- a/releases/5_4_0.php +++ b/releases/5_4_0.php @@ -17,8 +17,8 @@

          • New language syntax including Traits, - shortened array syntax - and more
          • + shortened array syntax + and more
          • Improved performance and reduced memory consumption
          • Support for multibyte languages now available in all builds of PHP at the flip of a runtime switch
          • diff --git a/releases/7_3_31.php b/releases/7_3_31.php new file mode 100644 index 0000000000..0fe4f9603a --- /dev/null +++ b/releases/7_3_31.php @@ -0,0 +1,16 @@ + +

            PHP 7.3.31 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 7.3.31. This is a security release fixing CVE-2021-21706.

            + +

            All PHP 7.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 7.3.31 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 7.3.32 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 7.3.32. This is a security release.

            + +

            All PHP 7.3 FPM users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 7.3.32 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 7.3.33 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 7.3.33. This is a security release.

            + +

            All PHP 7.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 7.3.33 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 7.4.24 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 7.4.24. This is a security release.

            + +

            All PHP 7.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 7.4.24 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 7.4.25 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 7.4.25. This is a security release.

            + +

            All PHP 7.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 7.4.25 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 7.4.26 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 7.4.26. This is a security release.

            + +

            All PHP 7.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 7.4.26 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 7.4.27 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 7.4.27. This is a bug fix release.

            + +

            All PHP 7.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 7.4.27 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 7.4.28 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 7.4.28. This is a security release.

            + +

            All PHP 7.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 7.4.28 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 7.4.29 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 7.4.29. This is a security release for Windows users.

            + +

            This is primarily a release for Windows users due to necessarily +upgrades to the OpenSSL and zlib dependencies in which security issues +have been found. All PHP 7.4 on Windows users are encouraged to upgrade +to this version.

            + +

            For source downloads of PHP 7.4.29 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 7.4.30 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 7.4.30. This is a security release.

            + +

            All PHP 7.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 7.4.30 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 7.4.32 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 7.4.32. This is a security release.

            + +

            This release addresses an infinite recursion with specially +constructed phar files, and prevents a clash with variable name mangling for +the __Host/__Secure HTTP headers.

            + +

            All PHP 7.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 7.4.32 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 7.4.33 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 7.4.33.

            + +

            This is security release that fixes an OOB read due to insufficient +input validation in imageloadfont(), and a buffer overflow in +hash_update() on long parameter.

            + +

            All PHP 7.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 7.4.33 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + 'English', + 'de' => 'Deutsch', + 'es' => 'Español', + 'fr' => 'Français', + 'it' => 'Italiano', + 'ja' => '日本語', + 'nl' => 'Nederlands', + 'pt_BR' => 'Brazilian Portuguese', + 'ru' => 'Русский', + 'tr' => 'Türkçe', + 'zh' => '简体中文', + 'ka' => 'ქართული', +]; function common_header(string $description): void { global $MYSITE; @@ -17,9 +29,9 @@ function common_header(string $description): void { $meta_description = \htmlspecialchars($description); \site_header("PHP 8.0.0 Release Announcement", [ - 'current' => 'php8', - 'css' => ['php8.css'], - 'meta_tags' => << 'php8', + 'css' => ['php8.css'], + 'meta_tags' => << @@ -34,24 +46,10 @@ function common_header(string $description): void { META - ]); + ]); } function language_chooser(string $currentLang): void { - $LANGUAGES = [ - 'en' => 'English', - 'de' => 'Deutsch', - 'es' => 'Español', - 'fr' => 'Français', - 'it' => 'Italiano', - 'ja' => '日本語', - 'nl' => 'Nederlands', - 'pt_BR' => 'Português do Brasil', - 'ru' => 'Русский', - 'tr' => 'Türkçe', - 'zh' => '简体中文', - ]; - // Print out the form with all the options echo ' @@ -61,7 +59,7 @@ function language_chooser(string $currentLang): void { '; $tab = ' '; - foreach ($LANGUAGES as $lang => $text) { + foreach (LANGUAGES as $lang => $text) { $selected = ($lang === $currentLang) ? ' selected="selected"' : ''; echo $tab, "\n"; } @@ -72,3 +70,12 @@ function language_chooser(string $currentLang): void { '; } +function message($code, $language = 'en') +{ + $original = require __DIR__ . '/languages/en.php'; + if (($language !== 'en') && file_exists(__DIR__ . '/languages/' . $language . '.php')) { + $translation = require __DIR__ . '/languages/' . $language . '.php'; + } + + return $translation[$code] ?? $original[$code] ?? $code; +} diff --git a/releases/8.0/de.php b/releases/8.0/de.php index 5b42b42a76..45cb5470ed 100644 --- a/releases/8.0/de.php +++ b/releases/8.0/de.php @@ -1,506 +1,5 @@ -
            -
            -
            - -
            -
            -
            - -
            Released!
            -
            - PHP 8.0 ist ein Major-Update der Sprache PHP.
            Es beinhaltet viele neue Funktionen - und Optimierungen wie beispielsweise Named Arguments, Union Types, Attribute, Constructor Property Promotion, - Match Ausdrücke, Nullsafe Operator, JIT und Verbesserungen des Typen-Systems, der Fehlerbehandlung und der - Konsistenz. -
            - -
            -
            - -
            -
            -

            - Named Arguments - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -
              -
            • Gib nur notwendige Parameter an, überspringe optionale.
            • -
            • Parameter sind unabhängig von der Reihenfolge und selbstdokumentierend.
            • -
            -
            -
            - -
            -

            - Attribute - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Anstelle von PHPDoc Annotations kannst du nun strukturierte Meta-Daten in nativer PHP Syntax nutzen.

            -
            -
            - -
            -

            - Constructor Property Promotion - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - x = $x; - $this->y = $y; - $this->z = $z; - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Weniger Codewiederholungen für das Definieren und Initialisieren von Objektattributen.

            -
            -
            - -
            -

            - Union Types - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - number = $number; - } -} - -new Number(\'NaN\'); // Ok' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Anstelle von PHPDoc Annotations für kombinierte Typen kannst du native Union-Type-Deklarationen verwenden, - welche zur Laufzeit validiert werden.

            -
            -
            - -
            -

            - Match Ausdruck - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - Oh nein!' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - "Oh nein!", - 8.0 => "Das hatte ich erwartet", -}; -//> Das hatte ich erwartet' - );?> -
            -
            -
            -
            -

            Der neue Match Ausdruck ist ähnlich wie die Switch Anweisung und bietet folgende Funktionen:

            -
              -
            • Da Match ein Ausdruck ist, kann sein Ergebnis in einer Variable gespeichert oder ausgegeben werden.
            • -
            • Match Zweige unterstützen nur einzeilige Ausdrücke und benötigen keinen break; Ausdruck.
            • -
            • Match führt strikte Vergleiche durch.
            • -
            -
            -
            - -
            -

            - Nullsafe Operator - RFC -

            -
            -
            -
            PHP 7
            -
            - user; - - if ($user !== null) { - $address = $user->getAddress(); - - if ($address !== null) { - $country = $address->country; - } - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - user?->getAddress()?->country;' - );?> -
            -
            -
            -
            -

            Anstelle von Null-Checks kannst du Funktionsaufrufe nun direkt mit dem neuen Nullsafe Operator - aneinanderreihen. Wenn ein Funktionsaufruf innerhalb der Kette Null zurückliefert, wird die weitere - Ausführung abgebrochen und die gesamte Kette wird zu Null ausgewertet.

            -
            -
            - -
            -

            - Vernünftige String-zu-Zahl Vergleiche - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Wenn eine Zahl mit einem numerischen String verglichen wird, benutzt PHP 8 einen Zahlen-Vergleich. Andernfalls - wird die Zahl zu einem String konvertiert und ein String-Vergleich durchgeführt.

            -
            -
            - -
            -

            - Konsistente Typen-Fehler für interne Funktionen - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Die meisten internen Funktionen erzeugen nun eine Error Exception wenn die Typenvalidierung der Parameter - fehlschlägt.

            -
            -
            -
            - -
            -

            Just-In-Time Compiler

            -

            - PHP 8 führt zwei JIT Compiler Engines ein. Tracing-JIT, der vielversprechendere der beiden, zeigt eine bis zu drei - mal bessere Performance in synthetischen Benchmarks und eine 1,5 bis zweifache Verbesserung in einigen speziellen, - langlaufenden Anwendungen. Die Performance einer typischen Anwendung ist auf dem Niveau von PHP 7.4. -

            -

            - Relativer Beitrag des JIT Compilers zur Performance von PHP 8 -

            -

            - Just-In-Time compilation -

            - -
            -
            -

            Verbesserungen am Typen-System und an der Fehlerbehandlung

            -
              -
            • - Striktere Typen-Checks für arithmetische/bitweise Operatoren - RFC -
            • -
            • - Validierung abstrakter Methoden in einem Trait RFC -
            • -
            • - Korrekte Signaturen magischer Funktionen RFC -
            • -
            • - Neue Klassifizierung von Engine-Warnings RFC -
            • -
            • - Inkompatiblen Methoden-Signaturen erzeugen einen Fatal Error RFC -
            • -
            • - Der @ Operator unterdrückt keine Fatal Errors mehr. -
            • -
            • - Vererbung mit privaten Methoden RFC -
            • -
            • - Mixed Typ RFC -
            • -
            • - Static als Rückgabetyp RFC -
            • -
            • - Typen für interne Funktionen - E-Mail-Thread -
            • -
            • - Objekte ohne Methoden anstelle des resource Typs für - Curl, - Gd, - Sockets, - OpenSSL, - XMLWriter, und - XML - Extension -
            • -
            -
            -
            -

            Weitere Syntax-Anpassungen und Verbesserungen

            -
              -
            • - Erlauben eines abschließenden Kommas in Parameter-Listen RFC - und Closure Use Listen RFC. -
            • -
            • - Catches ohne Exception-Variable RFC -
            • -
            • - Anpassungen an der Syntax für Variablen RFC -
            • -
            • - Namespaces werden als ein Token ausgewertet RFC -
            • -
            • - Throw ist jetzt ein Ausdruck RFC -
            • -
            • - Nutzung von ::class auf Objekten RFC -
            • -
            - -

            Neue Klassen, Interfaces, und Funktionen

            - -
            -
            -
            - - - - - - - -
            -
            -
            - -
            -
            -
            - -
            Released!
            -
            - PHP 8.0 is a major update of the PHP language.
            It contains many new features and - optimizations including named arguments, union types, attributes, constructor property promotion, match - expression, nullsafe operator, JIT, and improvements in the type system, error handling, and consistency. -
            - -
            -
            - -
            -
            -

            - Named arguments - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            - - -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -
              -
            • Specify only required parameters, skipping optional ones.
            • -
            • Arguments are order-independent and self-documented.
            • -
            -
            -
            - -
            -

            - Attributes - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Instead of PHPDoc annotations, you can now use structured metadata with PHP's native syntax.

            -
            -
            - -
            -

            - Constructor property promotion - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - x = $x; - $this->y = $y; - $this->z = $z; - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Less boilerplate code to define and initialize properties.

            -
            -
            - -
            -

            - Union types - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - number = $number; - } -} - -new Number(\'NaN\'); // Ok' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Instead of PHPDoc annotations for a combination of types, you can use native union type declarations that are - validated at runtime.

            -
            -
            - -
            -

            - Match expression - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - Oh no!' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - "Oh no!", - 8.0 => "This is what I expected", -}; -//> This is what I expected' - );?> -
            -
            -
            -
            -

            The new match is similar to switch and has the following features:

            -
              -
            • Match is an expression, meaning its result can be stored in a variable or returned.
            • -
            • Match branches only support single-line expressions and do not need a break; statement.
            • -
            • Match does strict comparisons.
            • -
            -
            -
            - -
            -

            - Nullsafe operator - RFC -

            -
            -
            -
            PHP 7
            -
            - user; - - if ($user !== null) { - $address = $user->getAddress(); - - if ($address !== null) { - $country = $address->country; - } - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - user?->getAddress()?->country;' - );?> -
            -
            -
            -
            -

            Instead of null check conditions, you can now use a chain of calls with the new nullsafe operator. When the - evaluation of one element in the chain fails, the execution of the entire chain aborts and the entire chain - evaluates to null.

            -
            -
            - -
            -

            - Saner string to number comparisons - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            When comparing to a numeric string, PHP 8 uses a number comparison. Otherwise, it converts the number to a - string and uses a string comparison.

            -
            -
            - -
            -

            - Consistent type errors for internal functions - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Most of the internal functions now throw an Error exception if the validation of the parameters fails.

            -
            -
            -
            - -
            -

            Just-In-Time compilation

            -

            - PHP 8 introduces two JIT compilation engines. Tracing JIT, the most promising of the two, shows about 3 times better - performance on synthetic benchmarks and 1.5–2 times improvement on some specific long-running applications. Typical - application performance is on par with PHP 7.4. -

            -

            - Relative JIT contribution to PHP 8 performance -

            -

            - Just-In-Time compilation -

            - -
            -
            -

            Type system and error handling improvements

            -
              -
            • - Stricter type checks for arithmetic/bitwise operators - RFC -
            • -
            • - Abstract trait method validation RFC -
            • -
            • - Correct signatures of magic methods RFC -
            • -
            • - Reclassified engine warnings RFC -
            • -
            • - Fatal error for incompatible method signatures RFC -
            • -
            • - The @ operator no longer silences fatal errors. -
            • -
            • - Inheritance with private methods RFC -
            • -
            • - Mixed type RFC -
            • -
            • - Static return type RFC -
            • -
            • - Types for internal functions - Email thread -
            • -
            • - Opaque objects instead of resources for - Curl, - Gd, - Sockets, - OpenSSL, - XMLWriter, and - XML - extensions -
            • -
            -
            -
            -

            Other syntax tweaks and improvements

            -
              -
            • - Allow a trailing comma in parameter lists RFC - and closure use lists RFC -
            • -
            • - Non-capturing catches RFC -
            • -
            • - Variable Syntax Tweaks RFC -
            • -
            • - Treat namespaced names as single token RFC -
            • -
            • - Throw is now an expression RFC -
            • -
            • - Allow ::class on objects RFC -
            • -
            - -

            New Classes, Interfaces, and Functions

            - -
            -
            -
            - - - - - - - -
            -
            -
            - -
            -
            -
            - -
            Released!
            -
            - PHP 8.0 es una actualización importante del lenguaje PHP que contiene nuevos recursos y optimizaciones - incluyendo argumentos nombrados, tipos de uniones, atributos, promoción de propiedades constructivas, - expresiones match, operador nullsafe, JIT (traducción dinámica) y también mejoras en el sistema de tipos, - manejo de errores y consistencia en general. -
            - -
            -
            - -
            -
            -

            - Argumentos nombrados - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            - - -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -
              -
            • Solamente especifica los parámetros requeridos, omite los opcionales.
            • -
            • Los argumentos son independientes del orden y se documentan automáticamente.
            • -
            -
            -
            - -
            -

            - Atributos - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            En vez de anotaciones en PHPDoc, puedes usar metadatos estructurados con el sintax nativo de PHP.

            -
            -
            - -
            -

            - Promoción de propiedades constructivas - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - x = $x; - $this->y = $y; - $this->z = $z; - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Menos código repetitivo para definir e inicializar una propiedad.

            -
            -
            - -
            -

            - Tipos de unión - RFC - Doc -

            -
            -
            -
            PHP 7
            -
            - number = $number; - } -} - -new Number(\'NaN\'); // Ok' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            En vez de anotaciones en PHPDoc para combinar tipos, puedes usar una declaración de tipo unión nativa que será validada en el momento de ejecución.

            -
            -
            - -
            -

            - Expresiones match - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - Oh no!' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - "Oh no!", - 8.0 => "This is what I expected", -}; -//> This is what I expected' - );?> -
            -
            -
            -
            - -

            Las nuevas expresiones match son similares a switch y tienen las siguientes características:

            -
              -
            • Match es una expresión; esto quiere decir que pueden ser almacenadas como variables o devueltas.
            • -
            • Match soporta expresiones de una línea y no necesitan romper declarar un break.
            • -
            • Match hace comparaciones estrictas.
            • -
            -
            -
            - -
            -

            - Operador Nullsafe - RFC -

            -
            -
            -
            PHP 7
            -
            - user; - - if ($user !== null) { - $address = $user->getAddress(); - - if ($address !== null) { - $country = $address->country; - } - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - user?->getAddress()?->country;' - );?> -
            -
            -
            -
            -

            En vez de verificar condiciones nulas, tu puedes utilizar una cadena de llamadas con el nuevo operador nullsafe. - Cuando la evaluación de un elemento falla, la ejecución de la entire cadena es abortada y la cadena entera es evaluada como nula.

            -
            -
            - -
            -

            - Comparaciones inteligentes entre “strings” y números - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Cuando comparas con un “string” numérico, PHP8 usa comparación numérica o de otro caso convierte el número a - un "string" y asi los compara.

            -
            -
            - -
            -

            - Errores consistentes para funciones internas. - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            La mayoría de las funciones internas ahora proveen un error de excepción si el parámetro no es validado.

            -
            -
            -
            - -
            -

            JIT (traducciones dinámicas)

            -

            - PHP8 introduce 2 motores de compilación JIT. Transit JIT, es el más prometedor de los dos y performa 3 veces mejor - en benchmarks sintéticos y 1.5-2 mejor en algunas aplicaciones específicas a largo plazo. Performancia de aplicaciones - típicas es a la par de las de PHP7.4 -

            -

            - JIT contribuciones al funcionamiento relativo de PHP8 -

            -

            - Just-In-Time compilation -

            - -
            -
            -

            Mejorias en los tipos de sistemas y manejo de errores

            -
              -
            • - Verificaciones estrictas de operadores aritméticos/bitwise. - RFC -
            • -
            • - Validación de métodos con características abstractas RFC -
            • -
            • - Firmas correctas de métodos mágicos RFC -
            • -
            • - Reclacificamiento de errores fatales RFC -
            • -
            • - Errores fatales incompatibles con el método de firma RFC -
            • -
            • - El operador @ no omitirá errores fatales. -
            • -
            • - Herencia con métodos privados RFC -
            • -
            • - Tipos mixtos RFC -
            • -
            • - Tipo retorno statico RFC -
            • -
            • - Tipos para funciones internas - Email thread -
            • -
            • - Objetos opacos en ves de recursos para - Curl, - Gd, - Sockets, - OpenSSL, - XMLWriter, - y XML extensiones -
            • -
            -
            -
            -

            Otros ajustes y mejoras del sintax

            -
              -
            • - Permitir una coma al final de una lista de parámetros RFC - y lista de use en closures RFC -
            • -
            • - Catches que no capturan RFC -
            • -
            • - Ajustes al syntax variable RFC -
            • -
            • - Tratamiento de nombres de namespace como tokens únicosRFC -
            • -
            • - Throw es ahora una expresión RFC -
            • -
            • - Permitir ::class on objects RFC -
            • -
            - -

            Nuevas clases, interfaces y funciones

            - -
            -
            -
            - - - - -
            -
            -
            - -
            -
            -
            - -
            Released!
            -
            - PHP 8.0 est une mise à jour majeure du langage PHP.
            - Elle contient beaucoup de nouvelles fonctionnalités et d'optimisations, incluant les arguments nommés, - les types d'union, attributs, promotion de propriété de constructeur, l'expression match, l'opérateur - nullsafe, JIT (Compilation à la Volée), et des améliorations dans le système de typage, la gestion - d'erreur, et de cohérence. -
            - -
            -
            - -
            -
            -

            - Arguments nommés - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            - - -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -
              -
            • Spécifiez uniquement les paramètres requis, omettant ceux optionnels.
            • -
            • Les arguments sont indépendants de l'ordre et auto-documentés.
            • -
            -
            -
            - -
            -

            - Attributs - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Au lieux d'annotations PHPDoc, vous pouvez désormais utiliser les métadonnées structurés avec la syntaxe native de PHP.

            -
            -
            - -
            -

            - Promotion de propriétés de constructeur - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - x = $x; - $this->y = $y; - $this->z = $z; - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Moins de code redondant pour définir et initialiser les propriétés.

            -
            -
            - -
            -

            - Types d'union - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - number = $number; - } -} - -new Number(\'NaN\'); // Ok' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            - Au lieu d'annotation PHPDoc pour une combinaison de type, vous pouvez utiliser les déclarations de types - d'union native qui sont validées lors de l'exécution. -

            -
            -
            - -
            -

            - Expression match - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - Oh no!' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - "Oh no!", - 8.0 => "This is what I expected", -}; -//> This is what I expected' - );?> -
            -
            -
            -
            -

            La nouvelle instruction match est similaire à switch et a les fonctionnalités suivantes :

            -
              -
            • Match est une expression, signifiant que son résultat peut être enregistré dans une variable ou retourné.
            • -
            • Les branches de match supportent uniquement les expressions d'une seule ligne, et n'a pas besoin d'une déclaration break;.
            • -
            • Match fait des comparaisons strictes.
            • -
            -
            -
            - -
            -

            - Opérateur Nullsafe - RFC -

            -
            -
            -
            PHP 7
            -
            - user; - - if ($user !== null) { - $address = $user->getAddress(); - - if ($address !== null) { - $country = $address->country; - } - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - user?->getAddress()?->country;' - );?> -
            -
            -
            -
            -

            - Au lieu de faire des vérifications conditionnelles de null, vous pouvez utiliser une chaîne d'appel - avec le nouvel opérateur nullsafe. Qui lorsque l'évaluation d'un élément de la chaîne échoue, l'exécution - de la chaîne complète est terminée et la chaîne entière évalue à null. -

            -
            -
            - -
            -

            - Comparaisons entre les chaînes de caractères et les nombres plus saines - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            - Lors de la comparaison avec une chaîne numérique, PHP 8 utilise une comparaison de nombre. - Sinon, il convertit le nombre à une chaîne de caractères et utilise une comparaison de chaîne de caractères. -

            -
            -
            - -
            -

            - Erreurs de type cohérent pour les fonctions internes - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            La plupart des fonctions internes lancent désormais une exception Error si la validation du paramètre échoue.

            -
            -
            -
            - -
            -

            Compilation Juste-à-Temps (JIT)

            -

            - PHP 8 introduit deux moteurs de compilation JIT (juste à temps/compilation à la volée). - Le Tracing JIT, le plus prometteur des deux, montre environ 3 fois plus de performances sur des benchmarks - synthétiques et 1,5-2 fois plus de performances sur certaines applications à longue durée d'exécution. - Généralement les performances des applications sont identiques à PHP 7.4. -

            -

            - Contribution relative du JIT à la performance de PHP 8 -

            -

            - Just-In-Time compilation -

            - -
            -
            -

            Amélioration du système de typage et de la gestion d'erreur

            -
              -
            • - Vérification de type plus sévère pour les opérateurs arithmétiques et bit à bit - RFC -
            • -
            • - Validation de méthode abstraite des traits RFC -
            • -
            • - Signature valide des méthodes magiques RFC -
            • -
            • - Reclassifications des avertissements du moteur RFC -
            • -
            • - Erreur fatale pour des signatures de méthodes incompatibles RFC -
            • -
            • - L'opérateur @ ne silence plus les erreurs fatales. -
            • -
            • - Héritages avec les méthodes privées RFC -
            • -
            • - Type mixed RFC -
            • -
            • - Type de retour static RFC -
            • -
            • - Types pour les fonctions internes - Discussion e-mail -
            • -
            • - Objets opaques au lieu de ressources pour les extensions - Curl, - Gd, - Sockets, - OpenSSL, - XMLWriter, et - XML -
            • -
            -
            -
            -

            Autres ajustements de syntaxe et améliorations

            -
              -
            • - Autorisation des virgules trainantes dans les listes de paramètres RFC - et dans les listes des use d'une fermeture RFC -
            • -
            • - Les catchs non capturant RFC -
            • -
            • - Ajustement de la Syntaxe des Variables RFC -
            • -
            • - Traite les noms des espaces de nom comme un seul token RFC -
            • -
            • - Throw est désormais une expression RFC -
            • -
            • - Autorisation de ::class sur les objets RFC -
            • -
            - -

            Nouvelles Classes, Interfaces, et Fonctions

            - -
            -
            -
            - - - - - - -chooseCode("", "", $_SERVER['HTTP_ACCEPT_LANGUAGE']); + +mirror_redirect("/releases/8.0/$lang.php"); diff --git a/releases/8.0/it.php b/releases/8.0/it.php index f3e4d327c2..5f525d0ac8 100644 --- a/releases/8.0/it.php +++ b/releases/8.0/it.php @@ -1,504 +1,5 @@ -
            -
            -
            - -
            -
            -
            - -
            Released!
            -
            - PHP 8.0 è una nuova versione major del linguaggio PHP.
            - Contiene molte nuove funzionalità ed ottimizzazioni quali i named arguments, - la definizione di tipi unione, gli attributi, la promozione a proprietà degli argomenti del costruttore, - l'espressione match, l'operatore nullsafe, la compilazione JIT e - miglioramenti al sistema dei tipi, alla gestione degli errori e alla consistenza. -
            - -
            -
            - -
            -
            -

            - Named arguments - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            - - -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -
              -
            • Indica solamente i parametri richiesti, saltando quelli opzionali.
            • -
            • Gli argomenti sono indipendenti dall'ordine e auto-documentati.
            • -
            -
            -
            - -
            -

            - Attributi - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Invece delle annotazioni PHPDoc, ora puoi usare metadati strutturati nella sintassi nativa PHP.

            -
            -
            - -
            -

            - Promozione a proprietà degli argomenti del costruttore - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - x = $x; - $this->y = $y; - $this->z = $z; - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Meno ripetizioni di codice per definire ed inizializzare le proprietà.

            -
            -
            - -
            -

            - Tipi unione - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - number = $number; - } -} - -new Number(\'NaN\'); // Ok' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Invece di indicare una combinazione di tipi con le annotazioni PHPDoc, puoi usare una dichiarazione nativa - di tipo unione che viene validato durante l'esecuzione.

            -
            -
            - -
            -

            - Espressione match - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - Oh no!' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - "Oh no!", - 8.0 => "This is what I expected", -}; -//> This is what I expected' - );?> -
            -
            -
            -
            -

            La nuova espressione match è simile allo switch e ha le seguenti funzionalità:

            -
              -
            • Match è un'espressione, ovvero il suo risultato può essere salvato in una variabile o ritornato.
            • -
            • I rami del match supportano solo espressioni a singola linea e non necessitano di un'espressione break;.
            • -
            • Match esegue comparazioni strict.
            • -
            -
            -
            - -
            -

            - Operatore nullsafe - RFC -

            -
            -
            -
            PHP 7
            -
            - user; - - if ($user !== null) { - $address = $user->getAddress(); - - if ($address !== null) { - $country = $address->country; - } - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - user?->getAddress()?->country;' - );?> -
            -
            -
            -
            -

            Invece di controllare la presenza di un null, puoi ora usare una catena di chiamate con il nuovo operatore nullsafe. Quando - la valutazione di un elemento della catena fallisce, l'esecuzione della catena si interrompe e l'intera catena - restituisce il valore null.

            -
            -
            - -
            -

            - Comparazioni più coerenti di stringhe e numeri - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Nella comparazione di una stringa numerica, PHP 8 usa la comparazione numerica. Altrimenti, converte il numero - in una stringa e usa la comparazione tra stringhe.

            -
            -
            - -
            -

            - Tipi di errori consistenti per le funzioni native - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            La maggior parte delle funzioni native ora lanciano una eccezione Error se la validazione degli argomenti fallisce.

            -
            -
            -
            - -
            -

            Compilazione Just-In-Time

            -

            - PHP 8 intrduce due motori di compilazione JIT. Tracing JIT, il più promettente dei due, mostra delle prestazioni 3 - volte superiori nei benchmarks sintetici e 1.5–2 volte superiori per alcuni specifici processi applicativi a lunga esecuzione. - Le prestazioni delle tipiche applicazioni web sono al pari con PHP 7.4. -

            -

            - Miglioramenti delle performance in PHP 8 grazie a JIT -

            -

            - Just-In-Time compilation -

            - -
            -
            -

            Sistema dei tipi e miglioramenti alla gestione degli errori

            -
              -
            • - Controlli più stringenti per gli operatori aritmetici e bitwise - RFC -
            • -
            • - Validazione dei metodi astratti nei trait RFC -
            • -
            • - Firme corrette nei metodi magici RFC -
            • -
            • - Riclassificazione degli errori RFC -
            • -
            • - Errori fatali per firme di metodi non compatibili RFC -
            • -
            • - L'operatore @ non silenzia più gli errori fatali. -
            • -
            • - Ereditarietà e metodi privati RFC -
            • -
            • - Tipo mixed RFC -
            • -
            • - Tipo di ritorno static RFC -
            • -
            • - Tipi per le funzioni native - Email thread -
            • -
            • - Oggetti opachi invece che risorse per le estensioni - Curl, - Gd, - Sockets, - OpenSSL, - XMLWriter, e - XML -
            • -
            -
            -
            -

            Altre ritocchi e migliorie di sintassi

            -
              -
            • - Permessa una virgola finale nella lista dei parametri RFC - e nell'espressione use per le closure RFC -
            • -
            • - Catch senza argomento RFC -
            • -
            • - Correzioni alla sintassi di variabile RFC -
            • -
            • - Trattamento dei nomi di namespace come un singolo token RFC -
            • -
            • - Throw è ora un'espressione RFC -
            • -
            • - Permesso l'utilizzo di ::class sugli oggetti RFC -
            • -
            - -

            Nuove classi, interfacce e funzioni

            - -
            -
            -
            - - - - -
            -
            -
            - -
            -
            -
            - -
            Released!
            -
            - PHP 8.0 は、PHP 言語のメジャーアップデートです。
            このアップデートには、たくさんの新機能や最適化が含まれています。 - たとえば 名前付き引数、 union 型、アトリビュート、コンストラクタでのプロパティのプロモーション、match 式、nullsafe 演算子、JIT、型システムの改善、エラーハンドリング、一貫性の向上などです。 -
            - -
            -
            - -
            -
            -

            - 名前付き引数 - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            - - -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -
              -
            • 必須の引数だけを指定し、オプションの引数はスキップしています。
            • -
            • 引数の順番に依存せず、自己文書化(self-documented)されています。
            • -
            -
            -
            - -
            -

            - アトリビュート - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            PHPDoc のアノテーションの代わりに、PHP ネイティブの文法で構造化されたメタデータを扱えるようになりました。

            -
            -
            - -
            -

            - コンストラクタでの、プロパティのプロモーション - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - x = $x; - $this->y = $y; - $this->z = $z; - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            ボイラープレートのコードを減らすため、コンストラクタでプロパティを定義し、初期化します。

            -
            -
            - -
            -

            - Union 型 - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - number = $number; - } -} - -new Number(\'NaN\'); // Ok' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            PHPDoc のアノテーションを使って型を組み合わせる代わりに、実行時に検証が行われる union型 をネイティブで使えるようになりました。

            -
            -
            - -
            -

            - Match 式 - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - Oh no!' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - "Oh no!", - 8.0 => "This is what I expected", -}; -//> This is what I expected' - );?> -
            -
            -
            -
            -

            match は switch 文に似ていますが、以下の機能があります:

            -
              -
            • match は式なので、結果を返したり、変数に保存したりできます。
            • -
            • match の分岐は一行の式だけをサポートしており、break; 文は不要です。
            • -
            • match は、型と値について、厳密な比較を行います。
            • -
            -
            -
            - -
            -

            - Nullsafe 演算子 - RFC -

            -
            -
            -
            PHP 7
            -
            - user; - - if ($user !== null) { - $address = $user->getAddress(); - - if ($address !== null) { - $country = $address->country; - } - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - user?->getAddress()?->country;' - );?> -
            -
            -
            -
            -

            null チェックの条件を追加する代わりに、nullsafe演算子 を使って呼び出しをチェインさせられるようになりました。呼び出しチェインのひとつが失敗すると、チェインの実行全体が停止し、null と評価されます。

            -
            -
            - -
            -

            - 数値と文字列の比較 - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            数値形式の文字列と比較する場合は、PHP 8 は数値として比較を行います。それ以外の場合は、数値を文字列に変換し、文字列として比較を行います。

            -
            -
            - -
            -

            - - 内部関数の型に関するエラーが一貫したものに - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            ほとんどの内部関数は、引数の検証に失敗すると Error 例外をスローするようになりました。

            -
            -
            -
            - -
            -

            JIT (ジャストインタイム) コンパイル

            -

            - PHP 8 は JITコンパイル のエンジンをふたつ搭載しています。 - トレーシングJITは、もっとも有望なふたつの人工的なベンチマークで、 - 約3倍のパフォーマンスを示しました。 - また、長期間動いている特定のあるアプリケーションでは、1.5-2倍のパフォーマンス向上が見られました。 - 典型的なアプリケーションのパフォーマンスは、PHP 7.4 と同等でした。 -

            -

            - PHP 8 のパフォーマンスに対するJITの貢献 - -

            -

            - Just-In-Time compilation -

            - -
            -
            -

            型システムとエラーハンドリングの改善

            -
              -
            • - 算術/ビット演算子のより厳密な型チェック - RFC -
            • -
            • - トレイトの抽象メソッドの検証 RFC -
            • -
            • - マジックメソッドのシグネチャ RFC -
            • -
            • - エンジンの警告を整理 RFC -
            • -
            • - 互換性のないメソッドシグネチャは fatal error に。 - RFC -
            • -
            • - @ 演算子は、致命的なエラーを隠さなくなりました。 -
            • -
            • - private メソッドの継承時のシグネチャチェック RFC -
            • -
            • - Mixed 型のサポート RFC -
            • -
            • - 戻り値で static 型をサポート RFC -
            • -
            • - 内部関数に型アノテーション - Email thread -
            • -
            • - 一部の拡張機能が、リソースからオブジェクトに移行: - Curl, - Gd, - Sockets, - OpenSSL, - XMLWriter, - XML -
            • -
            -
            -
            -

            その他文法の調整や改善

            -
              -
            • - 引数やクロージャーのuseリストの最後にカンマがつけられるように RFC - RFC -
            • -
            • - catch で例外のキャプチャが不要に RFC -
            • -
            • - 変数の文法の調整 RFC -
            • -
            • - 名前空間の名前を単一のトークンとして扱う RFC -
            • -
            • - Throw は式になりました RFC -
            • -
            • - オブジェクトに対して ::class が使えるように RFC -
            • -
            - -

            新しいクラス、インターフェイス、関数

            - -
            -
            -
            - - - - - - - 'PHP 8.0 ist ein Major-Update der Sprache PHP. Es beinhaltet viele neue Funktionen und Optimierungen wie beispielsweise Named Arguments, Union Types, Attribute, Constructor Property Promotion, Match Ausdrücke, Nullsafe Operator, JIT und Verbesserungen des Typen-Systems, der Fehlerbehandlung und der Konsistenz.', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.0 ist ein Major-Update der Sprache PHP.
            Es beinhaltet viele neue Funktionen und Optimierungen wie beispielsweise Named Arguments, Union Types, Attribute, Constructor Property Promotion, Match Ausdrücke, Nullsafe Operator, JIT und Verbesserungen des Typen-Systems, der Fehlerbehandlung und der Konsistenz.', + 'upgrade_now' => 'Wechsle jetzt zu PHP 8!', + + 'named_arguments_title' => 'Named Arguments', + 'named_arguments_description' => '
          • Gib nur notwendige Parameter an, überspringe optionale.
          • Parameter sind unabhängig von der Reihenfolge und selbstdokumentierend.
          • ', + 'attributes_title' => 'Attribute', + 'attributes_description' => 'Anstelle von PHPDoc Annotations kannst du nun strukturierte Meta-Daten in nativer PHP Syntax nutzen.', + 'constructor_promotion_title' => 'Constructor Property Promotion', + 'constructor_promotion_description' => 'Weniger Codewiederholungen für das Definieren und Initialisieren von Objektattributen.', + 'union_types_title' => 'Union Types', + 'union_types_description' => 'Anstelle von PHPDoc Annotations für kombinierte Typen kannst du native Union-Type-Deklarationen verwenden, welche zur Laufzeit validiert werden.', + 'match_expression_title' => 'Match Ausdruck', + 'match_expression_description' => '

            Der neue match Ausdruck ist ähnlich wie die switch Anweisung und bietet folgende Funktionen:

            +
              +
            • Da Match ein Ausdruck ist, kann sein Ergebnis in einer Variable gespeichert oder ausgegeben werden.
            • +
            • Match Zweige unterstützen nur einzeilige Ausdrücke und benötigen keinen break Ausdruck.
            • +
            • Match führt strikte Vergleiche durch.
            • +
            ', + + 'nullsafe_operator_title' => 'Nullsafe Operator', + 'nullsafe_operator_description' => 'Anstelle von Null-Checks kannst du Funktionsaufrufe nun direkt mit dem neuen Nullsafe Operator aneinanderreihen. Wenn ein Funktionsaufruf innerhalb der Kette Null zurückliefert, wird die weitere Ausführung abgebrochen und die gesamte Kette wird zu Null ausgewertet.', + 'saner_string_number_comparisons_title' => 'Vernünftige String-zu-Zahl Vergleiche', + 'saner_string_number_comparisons_description' => 'Wenn eine Zahl mit einem numerischen String verglichen wird, benutzt PHP 8 einen Zahlen-Vergleich. Andernfalls wird die Zahl zu einem String konvertiert und ein String-Vergleich durchgeführt.', + 'consistent_internal_function_type_errors_title' => 'Konsistente Typen-Fehler für interne Funktionen', + 'consistent_internal_function_type_errors_description' => 'Die meisten internen Funktionen erzeugen nun eine Error Exception wenn die Typenvalidierung der Parameter fehlschlägt.', + + 'jit_compilation_title' => 'Just-In-Time Compiler', + 'jit_compilation_description' => 'PHP 8 führt zwei JIT Compiler Engines ein. Tracing-JIT, der vielversprechendere der beiden, zeigt eine bis zu drei mal bessere Performance in synthetischen Benchmarks und eine 1,5 bis zweifache Verbesserung in einigen speziellen, langlaufenden Anwendungen. Die Performance einer typischen Anwendung ist auf dem Niveau von PHP 7.4.', + 'jit_performance_title' => 'Relativer Beitrag des JIT Compilers zur Performance von PHP 8', + + 'type_improvements_title' => 'Verbesserungen am Typen-System und an der Fehlerbehandlung', + 'arithmetic_operator_type_checks' => 'Striktere Typen-Checks für arithmetische/bitweise Operatoren', + 'abstract_trait_method_validation' => 'Validierung abstrakter Methoden in einem Trait', + 'magic_method_signatures' => 'Korrekte Signaturen magischer Funktionen', + 'engine_warnings' => 'Neue Klassifizierung von Engine-Warnings', + 'lsp_errors' => 'Inkompatiblen Methoden-Signaturen erzeugen einen Fatal Error', + 'at_operator_no_longer_silences_fatal_errors' => 'Der @ Operator unterdrückt keine Fatal Errors mehr.', + 'inheritance_private_methods' => 'Vererbung mit privaten Methoden', + 'mixed_type' => 'mixed Typ', + 'static_return_type' => 'static als Rückgabetyp', + 'internal_function_types' => 'Typen für interne Funktionen', + 'email_thread' => 'E-Mail-Thread', + 'opaque_objects_instead_of_resources' => 'Objekte ohne Methoden anstelle des resource Typs für + Curl, + Gd, + Sockets, + OpenSSL, + XMLWriter, und + XML + Extension', + + 'other_improvements_title' => 'Weitere Syntax-Anpassungen und Verbesserungen', + 'allow_trailing_comma' => 'Erlauben eines abschließenden Kommas in Parameter-Listen RFC + und Closure Use Listen RFC.', + 'non_capturing_catches' => 'Catches ohne Exception-Variable', + 'variable_syntax_tweaks' => 'Anpassungen an der Syntax für Variablen', + 'namespaced_names_as_token' => 'Namespaces werden als ein Token ausgewertet', + 'throw_expression' => 'throw ist jetzt ein Ausdruck', + 'class_name_literal_on_object' => 'Nutzung von ::class auf Objekten', + + 'new_classes_title' => 'Neue Klassen, Interfaces, und Funktionen', + 'weak_map_class' => 'Weak Map Klasse', + 'stringable_interface' => 'Stringable Interface', + 'token_as_object' => 'token_get_all() mit einer Objekt-Implementierung', + 'new_dom_apis' => 'Neue APIs für DOM-Traversal and -Manipulation', + + 'footer_title' => 'Bessere Performance, bessere Syntax, optimierte Typsicherheit.', + 'footer_description' => '

            + Für den direkten Code-Download von PHP 8 schaue bitte auf der Downloads Seite vorbei. + Windows Pakete können auf der PHP für Windows Seite gefunden werden. + Die Liste der Änderungen ist im ChangeLog festgehalten. +

            +

            + Der Migration Guide ist im PHP Manual verfügbar. Lies dort + nach für detaillierte Informationen zu den neuen Funktionen und inkompatiblen Änderungen zu vorherigen PHP + Versionen. +

            ', +]; diff --git a/releases/8.0/languages/en.php b/releases/8.0/languages/en.php new file mode 100644 index 0000000000..a67b978de6 --- /dev/null +++ b/releases/8.0/languages/en.php @@ -0,0 +1,89 @@ + 'PHP 8.0 is a major update of the PHP language. It contains many new features and optimizations including named arguments, union types, attributes, constructor property promotion, match expression, nullsafe operator, JIT, and improvements in the type system, error handling, and consistency.', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.0 is a major update of the PHP language.
            It contains many new features and optimizations including named arguments, union types, attributes, constructor property promotion, match expression, nullsafe operator, JIT, and improvements in the type system, error handling, and consistency.', + 'upgrade_now' => 'Upgrade to PHP 8 now!', + + 'named_arguments_title' => 'Named arguments', + 'named_arguments_description' => '
          • Specify only required parameters, skipping optional ones.
          • Arguments are order-independent and self-documented.
          • ', + 'attributes_title' => 'Attributes', + 'attributes_description' => 'Instead of PHPDoc annotations, you can now use structured metadata with PHP\'s native syntax.', + 'constructor_promotion_title' => 'Constructor property promotion', + 'constructor_promotion_description' => 'Less boilerplate code to define and initialize properties.', + 'union_types_title' => 'Union types', + 'union_types_description' => 'Instead of PHPDoc annotations for a combination of types, you can use native union type declarations that are validated at runtime.', + 'ok' => 'Ok', + 'oh_no' => 'Oh no!', + 'this_is_expected' => 'This is what I expected', + 'match_expression_title' => 'Match expression', + 'match_expression_description' => '

            The new match is similar to switch and has the following features:

            +
              +
            • Match is an expression, meaning its result can be stored in a variable or returned.
            • +
            • Match branches only support single-line expressions and do not need a break statement.
            • +
            • Match does strict comparisons.
            • +
            ', + + 'nullsafe_operator_title' => 'Nullsafe operator', + 'nullsafe_operator_description' => 'Instead of null check conditions, you can now use a chain of calls with the new nullsafe operator. When the evaluation of one element in the chain fails, the execution of the entire chain aborts and the entire chain evaluates to null.', + 'saner_string_number_comparisons_title' => 'Saner string to number comparisons', + 'saner_string_number_comparisons_description' => 'When comparing to a numeric string, PHP 8 uses a number comparison. Otherwise, it converts the number to a string and uses a string comparison.', + 'consistent_internal_function_type_errors_title' => 'Consistent type errors for internal functions', + 'consistent_internal_function_type_errors_description' => 'Most of the internal functions now throw an Error exception if the validation of the parameters fails.', + + 'jit_compilation_title' => 'Just-In-Time compilation', + 'jit_compilation_description' => 'PHP 8 introduces two JIT compilation engines. Tracing JIT, the most promising of the two, shows about 3 times better performance on synthetic benchmarks and 1.5–2 times improvement on some specific long-running applications. Typical application performance is on par with PHP 7.4.', + 'jit_performance_title' => 'Relative JIT contribution to PHP 8 performance', + + 'type_improvements_title' => 'Type system and error handling improvements', + 'arithmetic_operator_type_checks' => 'Stricter type checks for arithmetic/bitwise operators', + 'abstract_trait_method_validation' => 'Abstract trait method validation', + 'magic_method_signatures' => 'Correct signatures of magic methods', + 'engine_warnings' => 'Reclassified engine warnings', + 'lsp_errors' => 'Fatal error for incompatible method signatures', + 'at_operator_no_longer_silences_fatal_errors' => 'The @ operator no longer silences fatal errors.', + 'inheritance_private_methods' => 'Inheritance with private methods', + 'mixed_type' => 'mixed type', + 'static_return_type' => 'static return type', + 'internal_function_types' => 'Types for internal functions', + 'email_thread' => 'Email thread', + 'opaque_objects_instead_of_resources' => 'Opaque objects instead of resources for + Curl, + Gd, + Sockets, + OpenSSL, + XMLWriter, and + XML + extensions', + + 'other_improvements_title' => 'Other syntax tweaks and improvements', + 'allow_trailing_comma' => 'Allow a trailing comma in parameter lists RFC + and closure use lists RFC', + 'non_capturing_catches' => 'Non-capturing catches', + 'variable_syntax_tweaks' => 'Variable Syntax Tweaks', + 'namespaced_names_as_token' => 'Treat namespaced names as single token', + 'throw_expression' => 'throw is now an expression', + 'class_name_literal_on_object' => 'Allow ::class on objects', + + 'new_classes_title' => 'New Classes, Interfaces, and Functions', + 'weak_map_class' => 'Weak Map class', + 'stringable_interface' => 'Stringable interface', + 'new_str_functions' => 'str_contains(), + str_starts_with(), + str_ends_with()', + 'token_as_object' => 'token_get_all() object implementation', + 'new_dom_apis' => 'New DOM Traversal and Manipulation APIs', + + 'footer_title' => 'Better performance, better syntax, improved type safety.', + 'footer_description' => '

            + For source downloads of PHP 8 please visit the downloads page. + Windows binaries can be found on the PHP for Windows site. + The list of changes is recorded in the ChangeLog. +

            +

            + The migration guide is available in the PHP Manual. Please + consult it for a detailed list of new features and backward-incompatible changes. +

            ', +]; diff --git a/releases/8.0/languages/es.php b/releases/8.0/languages/es.php new file mode 100644 index 0000000000..7947d4e5ac --- /dev/null +++ b/releases/8.0/languages/es.php @@ -0,0 +1,81 @@ + 'PHP 8.0 es una actualización importante del lenguaje php que contiene nuevos recursos y optimizaciones incluyendo argumentos nombrados, tipos de uniones, atributos, promoción de propiedades constructivas, expresiones de equivalencia, operador nullsafe, JIT (traducción dinámica) y también mejoras en el sistema de tipos, manejo de errores y consistencia en general.', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.0 es una actualización importante del lenguaje PHP que contiene nuevos recursos y optimizaciones incluyendo argumentos nombrados, tipos de uniones, atributos, promoción de propiedades constructivas, expresiones match, operador nullsafe, JIT (traducción dinámica) y también mejoras en el sistema de tipos, manejo de errores y consistencia en general.', + 'upgrade_now' => 'Actualizate a PHP 8!', + + 'named_arguments_title' => 'Argumentos nombrados', + 'named_arguments_description' => '
          • Solamente especifica los parámetros requeridos, omite los opcionales.
          • Los argumentos son independientes del orden y se documentan automáticamente.
          • ', + 'attributes_title' => 'Atributos', + 'attributes_description' => 'En vez de anotaciones en PHPDoc, puedes usar metadatos estructurados con la sintaxis nativa de PHP.', + 'constructor_promotion_title' => 'Promoción de propiedades constructivas', + 'constructor_promotion_description' => 'Menos código repetitivo para definir e inicializar una propiedad.', + 'union_types_title' => 'Tipos de unión', + 'union_types_description' => 'En vez de anotaciones en PHPDoc para combinar tipos, puedes usar una declaración de tipo unión nativa que será validada en el momento de ejecución.', + 'match_expression_title' => 'Expresiones match', + 'match_expression_description' => '

            Las nuevas expresiones match son similares a switch y tienen las siguientes características:

            +
              +
            • Match es una expresión; esto quiere decir que pueden ser almacenadas como variables o devueltas.
            • +
            • Match soporta expresiones de una línea y no necesitan romper declarar un break.
            • +
            • Match hace comparaciones estrictas.
            • +
            ', + + 'nullsafe_operator_title' => 'Operador Nullsafe', + 'nullsafe_operator_description' => 'En vez de verificar condiciones nulas, tu puedes utilizar una cadena de llamadas con el nuevo operador nullsafe. Cuando la evaluación de un elemento falla, la ejecución de la entire cadena es abortada y la cadena entera es evaluada como null.', + 'saner_string_number_comparisons_title' => 'Comparaciones inteligentes entre “strings” y números', + 'saner_string_number_comparisons_description' => 'Cuando comparas con un “string” numérico, PHP8 usa comparación numérica o de otro caso convierte el número a un "string" y asi los compara.', + 'consistent_internal_function_type_errors_title' => 'Errores consistentes para funciones internas.', + 'consistent_internal_function_type_errors_description' => 'La mayoría de las funciones internas ahora proveen un Error de excepción si el parámetro no es validado.', + + 'jit_compilation_title' => 'JIT (traducciones dinámicas)', + 'jit_compilation_description' => 'PHP8 introduce 2 motores de compilación JIT. Transit JIT, es el más prometedor de los dos y performa 3 veces mejor en benchmarks sintéticos y 1.5-2 mejor en algunas aplicaciones específicas a largo plazo. Performancia de aplicaciones típicas es a la par de las de PHP7.4', + 'jit_performance_title' => 'JIT contribuciones al funcionamiento relativo de PHP8', + + 'type_improvements_title' => 'Mejorias en los tipos de sistemas y manejo de errores', + 'arithmetic_operator_type_checks' => 'Verificaciones estrictas de operadores aritméticos/bitwise.', + 'abstract_trait_method_validation' => 'Validación de métodos con características abstractas', + 'magic_method_signatures' => 'Firmas correctas de métodos mágicos', + 'engine_warnings' => 'Reclacificamiento de errores fatales', + 'lsp_errors' => 'Errores fatales incompatibles con el método de firma', + 'at_operator_no_longer_silences_fatal_errors' => 'El operador @ no omitirá errores fatales.', + 'inheritance_private_methods' => 'Herencia con métodos privados', + 'mixed_type' => 'Tipo mixed', + 'static_return_type' => 'Tipo retorno static', + 'internal_function_types' => 'Tipos para funciones internas', + 'email_thread' => 'Email thread', + 'opaque_objects_instead_of_resources' => 'Objetos opacos en ves de recursos para + Curl, + Gd, + Sockets, + OpenSSL, + XMLWriter, + y XML extensiones', + + 'other_improvements_title' => 'Otros ajustes y mejoras del sintax', + 'allow_trailing_comma' => 'Permitir una coma al final de una lista de parámetros RFC + y lista de use en closures RFC', + 'non_capturing_catches' => 'Catches que no capturan', + 'variable_syntax_tweaks' => 'Ajustes al syntax variable', + 'namespaced_names_as_token' => 'Tratamiento de nombres de namespace como tokens únicos', + 'throw_expression' => 'throw es ahora una expresión', + 'class_name_literal_on_object' => 'Permitir ::class on objects', + + 'new_classes_title' => 'Nuevas clases, interfaces y funciones', + 'weak_map_class' => 'Weak Map clase', + 'token_as_object' => 'token_get_all() Implementación de objeto', + 'new_dom_apis' => 'New DOM Traversal and Manipulation APIs', + + 'footer_title' => 'Mejor performancia, mejor syntax, aumentada seguridad de tipos.', + 'footer_description' => '

            + Para bajar el código fuente de PHP8 visita la página downloads. + Código binario para windows lo puedes encontrar en la página PHP for Windows. + La lista de cambios está disponible en la página ChangeLog. +

            +

            + La guía de migración está disponible en el manual de PHP. + Por favor consultala para una lista detallada de alteraciones cambios y compatibilidad. +

            ', +]; diff --git a/releases/8.0/languages/fr.php b/releases/8.0/languages/fr.php new file mode 100644 index 0000000000..18adaaeb4a --- /dev/null +++ b/releases/8.0/languages/fr.php @@ -0,0 +1,82 @@ + "PHP 8.0 est une mise à jour majeure du langage PHP. Elle contient beaucoup de nouvelle fonctionnalités et d'optimisations, incluant les arguments nommés, les types d'union, attributs, promotion de propriétés de constructeur, l'expression match, l'opérateur nullsafe, JIT (Compilation à la Volée), et des améliorations dans le système de typage, la gestion d'erreur, et de cohérence.", + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.0 est une mise à jour majeure du langage PHP.
            Elle contient beaucoup de nouvelles fonctionnalités et d\'optimisations, incluant les arguments nommés, les types d\'union, attributs, promotion de propriété de constructeur, l\'expression match, l\'opérateur nullsafe, JIT (Compilation à la Volée), et des améliorations dans le système de typage, la gestion d\'erreur, et de cohérence.', + 'upgrade_now' => 'Migrez à PHP 8 maintenant!', + + 'named_arguments_title' => 'Arguments nommés', + 'named_arguments_description' => '
          • Spécifiez uniquement les paramètres requis, omettant ceux optionnels.
          • Les arguments sont indépendants de l\'ordre et auto-documentés.
          • ', + 'attributes_title' => 'Attributs', + 'attributes_description' => 'Au lieux d\'annotations PHPDoc, vous pouvez désormais utiliser les métadonnées structurés avec la syntaxe native de PHP.', + 'constructor_promotion_title' => 'Promotion de propriétés de constructeur', + 'constructor_promotion_description' => 'Moins de code redondant pour définir et initialiser les propriétés.', + 'union_types_title' => "Types d'union", + 'union_types_description' => "Au lieu d'annotation PHPDoc pour une combinaison de type, vous pouvez utiliser les déclarations de types d'union native qui sont validées lors de l'exécution.", + 'match_expression_title' => 'Expression match', + 'match_expression_description' => '

            La nouvelle instruction match est similaire à switch et a les fonctionnalités suivantes :

            +
              +
            • Match est une expression, signifiant que son résultat peut être enregistré dans une variable ou retourné.
            • +
            • Les branches de match supportent uniquement les expressions d\'une seule ligne, et n\'a pas besoin d\'une déclaration break.
            • +
            • Match fait des comparaisons strictes.
            • +
            ', + + 'nullsafe_operator_title' => 'Opérateur Nullsafe', + 'nullsafe_operator_description' => "Au lieu de faire des vérifications conditionnelles de null, vous pouvez utiliser une chaîne d'appel avec le nouvel opérateur nullsafe. Qui lorsque l'évaluation d'un élément de la chaîne échoue, l'exécution de la chaîne complète est terminée et la chaîne entière évalue à null.", + 'saner_string_number_comparisons_title' => 'Comparaisons entre les chaînes de caractères et les nombres plus saines', + 'saner_string_number_comparisons_description' => 'Lors de la comparaison avec une chaîne numérique, PHP 8 utilise une comparaison de nombre. Sinon, il convertit le nombre à une chaîne de caractères et utilise une comparaison de chaîne de caractères.', + 'consistent_internal_function_type_errors_title' => 'Erreurs de type cohérent pour les fonctions internes', + 'consistent_internal_function_type_errors_description' => 'La plupart des fonctions internes lancent désormais une exception Error si la validation du paramètre échoue.', + + 'jit_compilation_title' => 'Compilation Juste-à-Temps (JIT)', + 'jit_compilation_description' => "PHP 8 introduit deux moteurs de compilation JIT (juste à temps/compilation à la volée). Le Tracing JIT, le plus prometteur des deux, montre environ 3 fois plus de performances sur des benchmarks synthétiques et 1,5-2 fois plus de performances sur certaines applications à longue durée d'exécution. Généralement les performances des applications sont identiques à PHP 7.4.", + 'jit_performance_title' => 'Contribution relative du JIT à la performance de PHP 8', + + 'type_improvements_title' => "Amélioration du système de typage et de la gestion d'erreur", + 'arithmetic_operator_type_checks' => 'Vérification de type plus sévère pour les opérateurs arithmétiques et bit à bit', + 'abstract_trait_method_validation' => 'Validation de méthode abstraite des traits', + 'magic_method_signatures' => 'Signature valide des méthodes magiques', + 'engine_warnings' => 'Reclassifications des avertissements du moteur', + 'lsp_errors' => 'Erreur fatale pour des signatures de méthodes incompatibles', + 'at_operator_no_longer_silences_fatal_errors' => "L'opérateur @ ne silence plus les erreurs fatales.", + 'inheritance_private_methods' => 'Héritages avec les méthodes privées', + 'mixed_type' => 'Type mixed', + 'static_return_type' => 'Type de retour static', + 'internal_function_types' => 'Types pour les fonctions internes', + 'email_thread' => 'Discussion e-mail', + 'opaque_objects_instead_of_resources' => 'Objets opaques au lieu de ressources pour les extensions + Curl, + Gd, + Sockets, + OpenSSL, + XMLWriter, et + XML', + + 'other_improvements_title' => 'Autres ajustements de syntaxe et améliorations', + 'allow_trailing_comma' => 'Autorisation des virgules trainantes dans les listes de paramètres RFC + et dans les listes des use d\'une fermeture RFC', + 'non_capturing_catches' => 'Les catchs non capturant', + 'variable_syntax_tweaks' => 'Ajustement de la Syntaxe des Variables', + 'namespaced_names_as_token' => 'Traite les noms des espaces de nom comme un seul token', + 'throw_expression' => 'throw est désormais une expression', + 'class_name_literal_on_object' => 'Autorisation de ::class sur les objets', + + 'new_classes_title' => 'Nouvelles Classes, Interfaces, et Fonctions', + 'weak_map_class' => 'Classe Weak Map', + 'stringable_interface' => 'Interface Stringable', + 'token_as_object' => 'Implémentation objet de token_get_all()', + 'new_dom_apis' => 'Nouvelles APIs pour traverser et manipuler le DOM', + + 'footer_title' => 'Meilleures performances, meilleure syntaxe, amélioration de la sécurité de type.', + 'footer_description' => '

            + Pour le téléchargement des sources de PHP 8 veuillez visiter la page de téléchargement. + Les binaires Windows peuvent être trouvés sur le site de PHP pour Windows. + La liste des changements est notée dans le ChangeLog. +

            +

            + Le guide de migration est disponible dans le manuel PHP. + Veuillez le consulter pour une liste détaillée des nouvelles fonctionnalités et changements non rétrocompatibles. +

            ', +]; diff --git a/releases/8.0/languages/it.php b/releases/8.0/languages/it.php new file mode 100644 index 0000000000..77d3420e46 --- /dev/null +++ b/releases/8.0/languages/it.php @@ -0,0 +1,82 @@ + 'PHP 8.0 è una nuova versione major del linguaggio PHP. Contiene molte nuove funzionalità ed ottimizzazioni quali i named arguments, la definizione di tipi unione, gli attributi, la promozione a proprietà degli argomenti del costruttore, l\'espressione match, l\'operatore nullsafe, la compilazione JIT e miglioramenti al sistema dei tipi, alla gestione degli errori e alla consistenza.', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.0 è una nuova versione major del linguaggio PHP.
            Contiene molte nuove funzionalità ed ottimizzazioni quali i named arguments, la definizione di tipi unione, gli attributi, la promozione a proprietà degli argomenti del costruttore, l\'espressione match, l\'operatore nullsafe, la compilazione JIT e miglioramenti al sistema dei tipi, alla gestione degli errori e alla consistenza.', + 'upgrade_now' => 'Aggiorna a PHP 8!', + + 'named_arguments_title' => 'Named arguments', + 'named_arguments_description' => '
          • Indica solamente i parametri richiesti, saltando quelli opzionali.
          • Gli argomenti sono indipendenti dall\'ordine e auto-documentati.
          • ', + 'attributes_title' => 'Attributi', + 'attributes_description' => 'Invece delle annotazioni PHPDoc, ora puoi usare metadati strutturati nella sintassi nativa PHP.', + 'constructor_promotion_title' => 'Promozione a proprietà degli argomenti del costruttore', + 'constructor_promotion_description' => 'Meno ripetizioni di codice per definire ed inizializzare le proprietà.', + 'union_types_title' => 'Tipi unione', + 'union_types_description' => 'Invece di indicare una combinazione di tipi con le annotazioni PHPDoc, puoi usare una dichiarazione nativa di tipo unione che viene validato durante l\'esecuzione.', + 'match_expression_title' => 'Espressione match', + 'match_expression_description' => '

            La nuova espressione match è simile allo switch e ha le seguenti funzionalità:

            +
              +
            • Match è un\'espressione, ovvero il suo risultato può essere salvato in una variabile o ritornato.
            • +
            • I rami del match supportano solo espressioni a singola linea e non necessitano di un\'espressione break.
            • +
            • Match esegue comparazioni strict.
            • +
            ', + + 'nullsafe_operator_title' => 'Operatore nullsafe', + 'nullsafe_operator_description' => "Invece di controllare la presenza di un null, puoi ora usare una catena di chiamate con il nuovo operatore nullsafe. Quando la valutazione di un elemento della catena fallisce, l'esecuzione della catena si interrompe e l'intera catena restituisce il valore null.", + 'saner_string_number_comparisons_title' => 'Comparazioni più coerenti di stringhe e numeri', + 'saner_string_number_comparisons_description' => 'Nella comparazione di una stringa numerica, PHP 8 usa la comparazione numerica. Altrimenti, converte il numero in una stringa e usa la comparazione tra stringhe.', + 'consistent_internal_function_type_errors_title' => 'Tipi di errori consistenti per le funzioni native', + 'consistent_internal_function_type_errors_description' => 'La maggior parte delle funzioni native ora lanciano una eccezione Error se la validazione degli argomenti fallisce.', + + 'jit_compilation_title' => 'Compilazione Just-In-Time', + 'jit_compilation_description' => 'PHP 8 intrduce due motori di compilazione JIT. Tracing JIT, il più promettente dei due, mostra delle prestazioni 3 volte superiori nei benchmarks sintetici e 1.5–2 volte superiori per alcuni specifici processi applicativi a lunga esecuzione. Le prestazioni delle tipiche applicazioni web sono al pari con PHP 7.4.', + 'jit_performance_title' => 'Miglioramenti delle performance in PHP 8 grazie a JIT', + + 'type_improvements_title' => 'Sistema dei tipi e miglioramenti alla gestione degli errori', + 'arithmetic_operator_type_checks' => 'Controlli più stringenti per gli operatori aritmetici e bitwise', + 'abstract_trait_method_validation' => 'Validazione dei metodi astratti nei trait', + 'magic_method_signatures' => 'Firme corrette nei metodi magici', + 'engine_warnings' => 'Riclassificazione degli errori', + 'lsp_errors' => 'Errori fatali per firme di metodi non compatibili', + 'at_operator_no_longer_silences_fatal_errors' => "L'operatore @ non silenzia più gli errori fatali.", + 'inheritance_private_methods' => 'Ereditarietà e metodi privati', + 'mixed_type' => 'Tipo mixed', + 'static_return_type' => 'Tipo di ritorno static', + 'internal_function_types' => 'Tipi per le funzioni native', + 'email_thread' => 'Email thread', + 'opaque_objects_instead_of_resources' => 'Oggetti opachi invece che risorse per le estensioni + Curl, + Gd, + Sockets, + OpenSSL, + XMLWriter, e + XML', + + 'other_improvements_title' => 'Altre ritocchi e migliorie di sintassi', + 'allow_trailing_comma' => 'Permessa una virgola finale nella lista dei parametri RFC + e nell\'espressione use per le closure RFC', + 'non_capturing_catches' => 'Catch senza argomento', + 'variable_syntax_tweaks' => 'Correzioni alla sintassi di variabile', + 'namespaced_names_as_token' => 'Trattamento dei nomi di namespace come un singolo token', + 'throw_expression' => "throw è ora un'espressione", + 'class_name_literal_on_object' => "Permesso l'utilizzo di ::class sugli oggetti", + + 'new_classes_title' => 'Nuove classi, interfacce e funzioni', + 'weak_map_class' => 'Classe Weak Map', + 'stringable_interface' => 'Interfaccia Stringable', + 'token_as_object' => 'Classe PhpToken come alternativa a token_get_all()', + 'new_dom_apis' => 'New DOM Traversal and Manipulation APIs', + + 'footer_title' => 'Performance migliorate, migliore sintassi, e migliore sicurezza dei tipi.', + 'footer_description' => '

            + Per scaricare il codice sorgente visita di PHP 8 visita la pagina di download. + I binari eseguibili per Windows possono essere trovati sul sito PHP for Windows. + Una lista dei cambiamenti è registrata nel ChangeLog. +

            +

            + La guida alla migrazione è disponibile nel manuale PHP. + Consultatelo per una lista completa delle nuove funzionalità e dei cambiamenti non retrocompatibili. +

            ', +]; diff --git a/releases/8.0/languages/ja.php b/releases/8.0/languages/ja.php new file mode 100644 index 0000000000..aab61bbe99 --- /dev/null +++ b/releases/8.0/languages/ja.php @@ -0,0 +1,83 @@ + 'PHP 8.0 は、PHP 言語のメジャーアップデートです。このアップデートには、たくさんの新機能や最適化が含まれています。たとえば名前付き引数、union 型、アトリビュート、コンストラクタでのプロパティのプロモーション、match 式、 nullsafe 演算子、JIT、型システムの改善、エラーハンドリング、一貫性の向上などです。', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.0 は、PHP 言語のメジャーアップデートです。
            このアップデートには、たくさんの新機能や最適化が含まれています。たとえば 名前付き引数、 union 型、アトリビュート、コンストラクタでのプロパティのプロモーション、match 式、nullsafe 演算子、JIT、型システムの改善、エラーハンドリング、一貫性の向上などです。', + 'upgrade_now' => 'PHP 8 にアップデートしよう!', + + 'named_arguments_title' => '名前付き引数', + 'named_arguments_description' => '
          • 必須の引数だけを指定し、オプションの引数はスキップしています。
          • 引数の順番に依存せず、自己文書化(self-documented)されています。
          • ', + 'attributes_title' => 'アトリビュート', + 'attributes_description' => 'PHPDoc のアノテーションの代わりに、PHP ネイティブの文法で構造化されたメタデータを扱えるようになりました。', + 'constructor_promotion_title' => 'コンストラクタでの、プロパティのプロモーション', + 'constructor_promotion_description' => 'ボイラープレートのコードを減らすため、コンストラクタでプロパティを定義し、初期化します。', + 'union_types_title' => 'Union 型', + 'union_types_description' => 'PHPDoc のアノテーションを使って型を組み合わせる代わりに、実行時に検証が行われる union型 をネイティブで使えるようになりました。', + 'match_expression_title' => 'Match 式', + 'match_expression_description' => '

            matchswitch 文に似ていますが、以下の機能があります:

            +
              +
            • match は式なので、結果を返したり、変数に保存したりできます。
            • +
            • match の分岐は一行の式だけをサポートしており、break 文は不要です。
            • +
            • match は、型と値について、厳密な比較を行います。
            • +
            ', + + 'nullsafe_operator_title' => 'Nullsafe 演算子', + 'nullsafe_operator_description' => 'null チェックの条件を追加する代わりに、nullsafe演算子 を使って呼び出しをチェインさせられるようになりました。呼び出しチェインのひとつが失敗すると、チェインの実行全体が停止し、null と評価されます。', + 'saner_string_number_comparisons_title' => '数値と文字列の比較', + 'saner_string_number_comparisons_description' => '数値形式の文字列と比較する場合は、PHP 8 は数値として比較を行います。それ以外の場合は、数値を文字列に変換し、文字列として比較を行います。', + 'consistent_internal_function_type_errors_title' => '内部関数の型に関するエラーが一貫したものに', + 'consistent_internal_function_type_errors_description' => 'ほとんどの内部関数は、引数の検証に失敗すると Error 例外をスローするようになりました。', + + 'jit_compilation_title' => 'JIT (ジャストインタイム) コンパイル', + 'jit_compilation_description' => 'PHP 8 は JITコンパイル のエンジンをふたつ搭載しています。トレーシングJITは、もっとも有望なふたつの人工的なベンチマークで、約3倍のパフォーマンスを示しました。また、長期間動いている特定のあるアプリケーションでは、1.5-2倍のパフォーマンス向上が見られました。典型的なアプリケーションのパフォーマンスは、PHP 7.4 と同等でした。', + 'jit_performance_title' => 'PHP 8 のパフォーマンスに対するJITの貢献', + + 'type_improvements_title' => '型システムとエラーハンドリングの改善', + 'arithmetic_operator_type_checks' => '算術/ビット演算子のより厳密な型チェック', + 'abstract_trait_method_validation' => 'トレイトの抽象メソッドの検証', + 'magic_method_signatures' => 'マジックメソッドのシグネチャ', + 'engine_warnings' => 'エンジンの警告を整理', + 'lsp_errors' => '互換性のないメソッドシグネチャは fatal error に。', + 'at_operator_no_longer_silences_fatal_errors' => '@ 演算子は、致命的なエラーを隠さなくなりました。', + 'inheritance_private_methods' => 'private メソッドの継承時のシグネチャチェック', + 'mixed_type' => 'mixed 型のサポート', + 'static_return_type' => '戻り値で static 型をサポート', + 'internal_function_types' => '内部関数に型アノテーション', + 'email_thread' => 'Email thread', + 'opaque_objects_instead_of_resources' => '一部の拡張機能が、リソースからオブジェクトに移行: + Curl, + Gd, + Sockets, + OpenSSL, + XMLWriter, + XML', + + 'other_improvements_title' => 'その他文法の調整や改善', + 'allow_trailing_comma' => '引数やクロージャーのuseリストの最後にカンマがつけられるように RFC + RFC', + 'non_capturing_catches' => 'catch で例外のキャプチャが不要に', + 'variable_syntax_tweaks' => '変数の文法の調整', + 'namespaced_names_as_token' => '名前空間の名前を単一のトークンとして扱う', + 'throw_expression' => 'throw は式になりました', + 'class_name_literal_on_object' => 'オブジェクトに対して ::class が使えるように', + + 'new_classes_title' => '新しいクラス、インターフェイス、関数', + 'weak_map_class' => 'Weak Map クラス', + 'stringable_interface' => 'Stringable インターフェイス', + 'token_as_object' => 'token_get_all() をオブジェクトベースで実装', + 'new_dom_apis' => 'New DOM Traversal and Manipulation APIs', + + 'footer_title' => 'パフォーマンスの向上、より良い文法、型システムの改善', + 'footer_description' => '

            + PHP 8 のソースコードのダウンロードは、 + downloads のページをどうぞ。 + Windows 用のバイナリは PHP for Windows のページにあります。 + 変更の一覧は ChangeLog にあります。 +

            +

            + 移行ガイド が PHP マニュアルで利用できます。 + 新機能や下位互換性のない変更の詳細については、移行ガイドを参照して下さい。 +

            ', +]; diff --git a/releases/8.0/languages/ka.php b/releases/8.0/languages/ka.php new file mode 100644 index 0000000000..de0615c1da --- /dev/null +++ b/releases/8.0/languages/ka.php @@ -0,0 +1,84 @@ + 'PHP 8.0 — PHP ენის დიდი განახლება. ის შეიცავს ბევრ ახალ შესაძლებლობას და ოპტიმიზაციებს, მათ შორის დასახელებული არგუმენტები, union type, ატრიბუტები, თვისებების გამარტივებული განსაზღვრა კონსტრუქტორში, გამოსახულება match, ოპერატორი nullsafe, JIT და გაუმჯობესებები ტიპის სისტემაში, შეცდომების დამუშავება და თანმიმდევრულობა.', + 'documentation' => 'დოკუმენტაცია', + 'main_title' => 'რელიზი!', + 'main_subtitle' => 'PHP 8.0 — PHP ენის დიდი განახლება.
            ის შეიცავს ბევრ ახალ შესაძლებლობას და ოპტიმიზაციებს, მათ შორის დასახელებული არგუმენტები, union type, ატრიბუტები, თვისებების გამარტივებული განსაზღვრა კონსტრუქტორში, გამოსახულება match, ოპერატორი nullsafe, JIT და გაუმჯობესებები ტიპის სისტემაში, შეცდომების დამუშავება და თანმიმდევრულობა.', + 'upgrade_now' => 'გადადით PHP 8-ზე!', + + 'named_arguments_title' => 'დასახელებული არგუმენტები', + 'named_arguments_description' => '
          • მიუთითეთ მხოლოდ საჭირო პარამეტრები, გამოტოვეთ არასავალდებულო.
          • არგუმენტების თანმიმდევრობა არ არის მნიშვნელოვანი, არგუმენტები თვითდოკუმენტირებადია.
          • ', + 'attributes_title' => 'Attributes', + 'attributes_description' => 'PHPDoc ანოტაციების ნაცვლად, შეგიძლიათ გამოიყენოთ სტრუქტურული მეტამონაცემები ნატიური PHP სინტაქსით.', + 'constructor_promotion_title' => 'თვისებების განახლება კონსტრუქტორში', + 'constructor_promotion_description' => 'ნაკლები შაბლონური კოდი თვისებების განსაზღვრისა და ინიციალიზაციისთვის.', + 'union_types_title' => 'Union types', + 'union_types_description' => 'PHPDoc ანოტაციების ნაცვლად, გაერთიანებული ტიპებისთვის შეგიძლიათ გამოიყენოთ განცხადება union type, რომლებიც მოწმდება შესრულების დროს.', + 'ok' => 'შეცდომები არაა', + 'oh_no' => 'ოოო არა!', + 'this_is_expected' => 'ის, რასაც მე ველოდი', + 'match_expression_title' => 'გამოსახულება Match', + 'match_expression_description' => '

            ახალი გამოსახულება match, switch ოპერატორის მსგავსია შემდეგი მახასიათებლებით:

            +
              +
            • Match — ეს არის გამოსახულება, მისი შედეგი შეიძლება შენახული იყოს ცვლადში ან დაბრუნდეს.
            • +
            • პირობა match მხარს უჭერერს მხოლოდ ერთსტრიქონიან გამოსახულებებს, რომლებიც არ საჭიროებენ break კონტროლის კონსტრუქციას.
            • +
            • გამოსახულება match იყენებს მკაცრ შედარებას.
            • +
            ', + + 'nullsafe_operator_title' => 'ოპერატორი Nullsafe', + 'nullsafe_operator_description' => 'null-ის შემოწმების ნაცვლად, შეგიძლიათ გამოიყენოთ გამოძახების თანმიმდევრობა ახალ Nullsafe ოპერატორით. როდესაც ერთ-ერთი ელემენტი თანმიმდევრობაში აბრუნებს null-ს, შესრულება ჩერდება და მთელი თანმიმდევრობა აბრუნებს null-ს.', + 'saner_string_number_comparisons_title' => 'სტრიქონებისა და რიცხვების გაუმჯობესებული შედარება', + 'saner_string_number_comparisons_description' => 'PHP 8 რიცხვითი სტრიქონის შედარებისას იყენებს რიცხვების შედარებას. წინააღმდეგ შემთხვევაში, რიცხვი გარდაიქმნება სტრიქონად და გამოიყენება სტრიქონების შედარება.', + 'consistent_internal_function_type_errors_title' => 'ტიპების თანმიმდევრულობის შეცდომები ჩაშენებული ფუნქციებისთვის', + 'consistent_internal_function_type_errors_description' => 'შიდა ფუნქციების უმეტესობა უკვე გამორიცხავს Error გამონაკლისს, თუ შეცდომა მოხდა პარამეტრის შემოწმებისას.', + + 'jit_compilation_title' => 'კომპილაცია Just-In-Time', + 'jit_compilation_description' => 'PHP 8 წარმოგიდგენთ JIT-კომპილაციის ორ მექანიზმს. JIT ტრასირება, მათგან ყველაზე პერსპექტიულია, სინთეზურ ბენჩმარკზე აჩვენებს მუშაობის გაუმჯობესებას დაახლოებით 3-ჯერ და 1.5-2-ჯერ ზოგიერთ დიდ ხანს მომუშავე აპლიკაციებში. აპლიკაციის სტანდარტული წარმადობა ერთ და იგივე დონეზეა PHP 7.4-თან.', + 'jit_performance_title' => 'JIT-ის შედარებითი წვლილი PHP 8-ის წარმადობაში', + + 'type_improvements_title' => 'გაუმჯობესებები ტიპის სისტემაში და შეცდომების დამუშავება', + 'arithmetic_operator_type_checks' => 'ტიპის უფრო მკაცრი შემოწმება არითმეტიკული/ბიტიური ოპერატორებისთვის', + 'abstract_trait_method_validation' => 'აბსტრაქტული თვისებების მეთოდების შემოწმება', + 'magic_method_signatures' => 'ჯადოსნური მეთოდების სწორი სიგნატურები', + 'engine_warnings' => 'ძრავის გაფრთხილებების ხელახალი კლასიფიკაცია', + 'lsp_errors' => 'ფატალური შეცდომა, როდესაც მეთოდის სიგნატურა შეუთავსებელია', + 'at_operator_no_longer_silences_fatal_errors' => '@ ოპერატორი აღარ აჩუმებს ფატალურ შეცდომებს.', + 'inheritance_private_methods' => 'მემკვიდრეობა private მეთოდებთან', + 'mixed_type' => 'ახალი ტიპი mixed', + 'static_return_type' => 'დაბრუნების ტიპი static', + 'internal_function_types' => 'ტიპები სტანდარტული ფუნქციებისთვის', + 'email_thread' => 'Email თემა', + 'opaque_objects_instead_of_resources' => 'გაუმჭვირვალე ობიექტები რესურსების ნაცვლად + Curl, + Gd, + Sockets, + OpenSSL, + XMLWriter, and + XML + გაფართოებებისთვის', + + 'other_improvements_title' => 'სინტაქსის სხვა გაუმჯობესება', + 'allow_trailing_comma' => 'მძიმე დაშვებულია პარამეტრების სიის ბოლოს RFC + და use დამოკლების სიაში RFC', + 'non_capturing_catches' => 'ბლოკი catch ცვლადის მითითების გარეშე', + 'variable_syntax_tweaks' => 'ცვლადის სინტაქსის ცვლილება', + 'namespaced_names_as_token' => 'სახელების სივრცეში სახელები განიხილება, როგორც ერთიამნი ტოკენი', + 'throw_expression' => 'გამოსახულება throw', + 'class_name_literal_on_object' => 'დამატება ::class ობიექტებისთვის', + + 'new_classes_title' => 'ახალი კლასები, ინტერფეისები და ფუნქციები', + 'token_as_object' => 'token_get_all() ობიექტზე-ორიენტირებული ფუნქცია', + 'new_dom_apis' => 'ახალი API-ები DOM-ის გადასასვლელად და დასამუშავებლად', + + 'footer_title' => 'უკეთესი წარმადობა, უკეთესი სინტაქსი, უფრო საიმედო ტიპების სისტემა.', + 'footer_description' => '

            + PHP 8 წყაროს კოდის ჩამოსატვირთად ეწვიეთ ჩამოტვირთვის გვერდს. + Windows-ის ბინარული ფაილები განთავსებულია საიტზე PHP Windows-თვის. + ცვლილებების სია წარმოდგენილია ChangeLog-ში. +

            +

            + მიგრაციის გზამკვლევი ხელმისაწვდომია დოკუმენტაციის განყოფილებაში. გთხოვთ, + შეისწავლოთ იგი ახალი ფუნქციების დეტალური ჩამონათვალის მისაღებად და უკუ შეუთავსებელი ცვლილებებისთვის. +

            ', +]; diff --git a/releases/8.0/languages/nl.php b/releases/8.0/languages/nl.php new file mode 100644 index 0000000000..af1630978e --- /dev/null +++ b/releases/8.0/languages/nl.php @@ -0,0 +1,81 @@ + 'PHP 8.0 is een omvangrijke update van de PHP programmeertaal. Het bevat veel nieuwe mogelijkheden en optimalisaties, waaronder argument naamgeving, unie types, attributen, promotie van constructor eigenschappen, expressie vergelijking, null-veilige operator, JIT, en verbeteringen aan het type systeem, foute afhandeling, en consistentie.', + 'documentation' => 'Doc', + 'main_title' => 'Beschikbaar!', + 'main_subtitle' => 'PHP 8.0 is een omvangrijke update van de PHP programmeertaal.
            Het bevat veel nieuwe mogelijkheden en optimalisaties, waaronder argument naamgeving, unie types, attributen, promotie van constructor eigenschappen, expressie vergelijking, null-veilige operator, JIT, en verbeteringen aan het type systeem, foute afhandeling, en consistentie.', + 'upgrade_now' => 'Update naar PHP 8!', + + 'named_arguments_title' => 'Argument naamgeving', + 'named_arguments_description' => '
          • Geef enkel vereiste parameters op, sla optionele parameters over.
          • Argumenten hebben een onafhankelijke volgorde en documenteren zichzelf.
          • ', + 'attributes_title' => 'Attributen', + 'attributes_description' => 'In plaats van met PHPDoc annotaties kan je nu gestructureerde metadata gebruiken in PHP\'s eigen syntaxis.', + 'constructor_promotion_title' => 'Promotie van constructor eigenschappen', + 'constructor_promotion_description' => 'Minder standaardcode nodig om eigenschappen te definiëren en initialiseren.', + 'union_types_title' => 'Unie types', + 'union_types_description' => 'In plaats van met PHPDoc annotaties kan je de mogelijke types via unie types declareren zodat deze ook gevalideerd worden tijdens de runtime.', + 'match_expression_title' => 'Expressie vergelijking', + 'match_expression_description' => '

            De nieuwe match is gelijkaardig aan switch en heeft volgende eigenschappen:

            +
              +
            • Match is een expressie, dit wil zeggen dat je het in een variabele kan bewaren of teruggeven.
            • +
            • Match aftakkingen zijn expressies van één enkele lijn en bevatten geen break statements.
            • +
            • Match vergelijkingen zijn strikt.
            • +
            ', + + 'nullsafe_operator_title' => 'Null-veilige operator', + 'nullsafe_operator_description' => 'In plaats van een controle op null uit te voeren kan je nu een ketting van oproepen vormen met de null-veilige operator. Wanneer één expressie in de ketting faalt, zal de rest van de ketting niet uitgevoerd worden en is het resultaat van de hele ketting null.', + 'saner_string_number_comparisons_title' => 'Verstandigere tekst met nummer vergelijkingen', + 'saner_string_number_comparisons_description' => 'Wanneer PHP 8 een vergelijking uitvoert tegen een numerieke tekst zal er een numerieke vergelijking uitgevoerd worden. Anders zal het nummer naar een tekst omgevormd worden en er een tekstuele vergelijking uitgevoerd worden.', + 'consistent_internal_function_type_errors_title' => 'Consistente type fouten voor interne functies', + 'consistent_internal_function_type_errors_description' => 'De meeste interne functies gooien nu een Error exception als de validatie van parameters faalt.', + + 'jit_compilation_title' => 'Just-In-Time compilatie', + 'jit_compilation_description' => 'PHP 8 introduceert twee systemen voor JIT compilatie. De tracerende JIT is veelbelovend en presteert ongeveer 3 keer beter bij synthetische metingen en kan sommige langlopende applicaties 1.5–2 keer verbeteren. Prestaties van typische web applicaties ligt in lijn met PHP 7.4.', + 'jit_performance_title' => 'Relatieve JIT bijdrage aan de prestaties van PHP 8', + + 'type_improvements_title' => 'Type systeem en verbeteringen van de fout afhandeling', + 'arithmetic_operator_type_checks' => 'Strikte type controles bij rekenkundige/bitsgewijze operatoren', + 'abstract_trait_method_validation' => 'Validatie voor abstracte trait methodes', + 'magic_method_signatures' => 'Correcte signatures bij magic methods', + 'engine_warnings' => 'Herindeling van de engine warnings', + 'lsp_errors' => 'Fatal error bij incompatibele method signatures', + 'at_operator_no_longer_silences_fatal_errors' => 'De @ operator werkt niet meer bij het onderdrukken van fatale fouten.', + 'inheritance_private_methods' => 'Overerving bij private methods', + 'mixed_type' => 'mixed type', + 'static_return_type' => 'static return type', + 'internal_function_types' => 'Types voor interne functies', + 'email_thread' => 'Email draadje', + 'opaque_objects_instead_of_resources' => 'Opaque objects in plaats van resources voor + Curl, + Gd, + Sockets, + OpenSSL, + XMLWriter, and + XML + extensies', + + 'other_improvements_title' => 'Andere syntaxis aanpassingen en verbeteringen', + 'allow_trailing_comma' => 'Sta toe om een komma te plaatsen bij het laatste parameter in een lijst RFC + en bij de use in closures RFC', + 'non_capturing_catches' => 'Catches die niets vangen', + 'variable_syntax_tweaks' => 'Variabele Syntaxis Aanpassingen', + 'namespaced_names_as_token' => 'Namespaced namen worden als één enkel token afgehandeld', + 'throw_expression' => 'throw is nu een expressie', + 'class_name_literal_on_object' => '::class werkt bij objecten', + + 'new_classes_title' => 'Nieuwe Classes, Interfaces, en Functies', + 'token_as_object' => 'token_get_all() object implementatie', + 'new_dom_apis' => 'New DOM Traversal and Manipulation APIs', + + 'footer_title' => 'Betere prestaties, betere syntaxis, verbeterd type systeem.', + 'footer_description' => '

            + Ga naar de downloads pagina om de PHP 8 code te verkrijgen. + Uitvoerbare bestanden voor Windows kan je vinden op de PHP voor Windows website. + De volledige lijst met wijzigingen is vastgelegd in een ChangeLog. +

            +

            + De migratie gids is beschikbaar in de PHP Handleiding. Gebruik + deze om een gedetailleerde lijst te krijgen van nieuwe opties en neerwaarts incompatibele aanpassingen. +

            ', +]; diff --git a/releases/8.0/languages/pt_BR.php b/releases/8.0/languages/pt_BR.php new file mode 100644 index 0000000000..4af6ac2049 --- /dev/null +++ b/releases/8.0/languages/pt_BR.php @@ -0,0 +1,88 @@ + 'PHP 8.0 é uma atualização importante da linguagem PHP. Ela contém muitos novos recursos e otimizações, incluindo argumentos nomeados, união de tipos, atributos, promoção de propriedade do construtor, expressão match, operador nullsafe, JIT e melhorias no sistema de tipos, tratamento de erros e consistência.', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.0 é uma atualização importante da linguagem PHP.
            Ela contém muitos novos recursos e otimizações, incluindo argumentos nomeados, união de tipos, atributos, promoção de propriedade do construtor, expressão match, operador nullsafe, JIT e melhorias no sistema de tipos, tratamento de erros e consistência.', + 'upgrade_now' => 'Atualize para o PHP 8!', + + 'named_arguments_title' => 'Argumentos nomeados', + 'named_arguments_description' => '
          • Especifique apenas os parâmetros obrigatórios, pulando os opcionais.
          • Os argumentos são independentes da ordem e autodocumentados.
          • ', + 'attributes_title' => 'Atributos', + 'attributes_description' => 'Em vez de anotações PHPDoc, agora você pode usar metadados estruturados com a sintaxe nativa do PHP.', + 'constructor_promotion_title' => 'Promoção de propriedade de construtor', + 'constructor_promotion_description' => 'Menos código boilerplate para definir e inicializar propriedades.', + 'union_types_title' => 'União de tipos', + 'union_types_description' => 'Em vez de anotações PHPDoc para uma combinação de tipos, você pode usar declarações de união de tipos nativa que são validados em tempo de execução', + 'match_expression_title' => 'Expressão match', + 'match_expression_description' => '

            A nova expressão match é semelhante ao switch e tem os seguintes recursos:

            +
              +
            • Match é uma expressão, o que significa que seu resultado pode ser armazenado em uma variável ou + retornado.
            • +
            • Match suporta apenas expressões de uma linha e não precisa de uma declaração break.
            • +
            • Match faz comparações estritas.
            • +
            ', + + 'nullsafe_operator_title' => 'Operador nullsafe', + 'nullsafe_operator_description' => 'Em vez de verificar condições nulas, agora você pode usar uma cadeia de chamadas com o novo operador nullsafe. Quando a avaliação de um elemento da cadeia falha, a execução de toda a cadeia é abortada e toda a cadeia é avaliada como nula.', + 'saner_string_number_comparisons_title' => 'Comparações mais inteligentes entre strings e números', + 'saner_string_number_comparisons_description' => 'Ao comparar com uma string numérica, o PHP 8 usa uma comparação numérica. Caso contrário, ele converte o número em uma string e usa uma comparação de string.', + 'consistent_internal_function_type_errors_title' => 'Erros consistentes para tipos de dados em funções internas', + 'consistent_internal_function_type_errors_description' => 'A maioria das funções internas agora lançam uma exceção Error se a validação do parâmetro falhar.', + + 'jit_compilation_title' => 'Compilação Just-In-Time', + 'jit_compilation_description' => 'PHP 8 apresenta dois motores de compilação JIT. Tracing JIT, o mais promissor dos dois, mostra desempenho cerca de 3 vezes melhor em benchmarks sintéticos e melhoria de 1,5 a 2 vezes em alguns aplicativos específicos de longa execução. O desempenho típico das aplicações está no mesmo nível do PHP 7.4.', + 'jit_performance_title' => 'Relative JIT contribution to PHP 8 performance', + + 'type_improvements_title' => 'Melhorias no sistema de tipo e tratamento de erros', + 'arithmetic_operator_type_checks' => 'Verificações de tipo mais rígidas para operadores aritméticos / bit a bit', + 'abstract_trait_method_validation' => 'Validação de método abstrato em traits', + 'magic_method_signatures' => 'Assinaturas corretas de métodos mágicos', + 'engine_warnings' => 'Avisos de motor reclassificados', + 'lsp_errors' => 'Erro fatal para assinaturas de método incompatíveis', + 'at_operator_no_longer_silences_fatal_errors' => 'O operador @ não silencia mais os erros fatais.', + 'inheritance_private_methods' => 'Herança com métodos privados', + 'mixed_type' => 'Tipo mixed', + 'static_return_type' => 'Tipo de retorno static', + 'internal_function_types' => 'Tipagem de funções internas', + 'email_thread' => 'Discussão por email', + 'opaque_objects_instead_of_resources' => 'Objetos opacos em vez de recursos para + Curl, + Gd, + Sockets, + OpenSSL, + XMLWriter, e + XML + extensões', + + 'other_improvements_title' => 'Outros ajustes e melhorias de sintaxe', + 'allow_trailing_comma' => 'Permitir vírgula no final da lista de parâmetros RFC + e listas de uso em closures RFC', + 'non_capturing_catches' => 'Catches sem variável na captura de exceção', + 'variable_syntax_tweaks' => 'Ajustes de sintaxe para variáveis', + 'namespaced_names_as_token' => 'Tratamento de nomes de namespace como token único', + 'throw_expression' => 'throw como expressão', + 'class_name_literal_on_object' => 'Permitir ::class em objetos', + + 'new_classes_title' => 'Novas classes, interfaces e funções', + 'weak_map_class' => 'Classe Weak Map', + 'stringable_interface' => 'Interface Stringable', + 'token_as_object' => 'token_get_all() implementado com objetos', + 'new_dom_apis' => 'New DOM Traversal and Manipulation APIs', + + 'footer_title' => 'Obtenha melhoria de desempenho gratuita. + Obtenha melhor sintaxe.
            + Obtenha mais segurança de tipos.', + 'footer_description' => '

            + Para downloads do código-fonte do PHP 8, visite a página de + downloads. + Os binários do Windows podem ser encontrados na página PHP para + Windows. + A lista de mudanças é registrada no ChangeLog. +

            +

            + O guia de migração está disponível no Manual do PHP. + Consulte-o para obter uma lista detalhada de novos recursos e alterações incompatíveis com versões anteriores. +

            ', +]; diff --git a/releases/8.0/languages/ru.php b/releases/8.0/languages/ru.php new file mode 100644 index 0000000000..17acb1cd2d --- /dev/null +++ b/releases/8.0/languages/ru.php @@ -0,0 +1,86 @@ + 'PHP 8.0 — большое обновление языка PHP. Оно содержит множество новых возможностей и оптимизаций, включая именованные аргументы, тип union, атрибуты, упрощённое определение свойств в конструкторе, выражение match, оператор nullsafe, JIT и улучшения в системе типов, обработке ошибок и консистентности.', + 'documentation' => 'Документация', + 'main_title' => 'доступен!', + 'main_subtitle' => 'PHP 8.0 — большое обновление языка PHP.
            Оно содержит множество новых возможностей и оптимизаций, включая именованные аргументы, union type, атрибуты, упрощённое определение свойств в конструкторе, выражение match, оператор nullsafe, JIT и улучшения в системе типов, обработке ошибок и консистентности.', + 'upgrade_now' => 'Переходите на PHP 8!', + + 'named_arguments_title' => 'Именованные аргументы', + 'named_arguments_description' => '
          • Указывайте только необходимые параметры, пропускайте необязательные.
          • Порядок аргументов не важен, аргументы самодокументируемы.
          • ', + 'attributes_title' => 'Атрибуты', + 'attributes_description' => 'Вместо аннотаций PHPDoc вы можете использовать структурные метаданные с нативным синтаксисом PHP.', + 'constructor_promotion_title' => 'Объявление свойств в конструкторе', + 'constructor_promotion_description' => 'Меньше шаблонного кода для определения и инициализации свойств.', + 'union_types_title' => 'Тип Union', + 'union_types_description' => 'Вместо аннотаций PHPDoc для объединённых типов вы можете использовать объявления типа union, которые проверяются во время выполнения.', + 'ok' => 'Нет ошибки', + 'oh_no' => 'О нет!', + 'this_is_expected' => 'То, что я и ожидал', + 'match_expression_title' => 'Выражение Match', + 'match_expression_description' => '

            Новое выражение match похоже на оператор switch со следующими особенностями:

            +
              +
            • Match — это выражение, его результат может быть сохранён в переменной или возвращён.
            • +
            • Условия match поддерживают только однострочные выражения, для которых не требуется управляющая конструкция break.
            • +
            • Выражение match использует строгое сравнение.
            • +
            ', + + 'nullsafe_operator_title' => 'Оператор Nullsafe', + 'nullsafe_operator_description' => 'Вместо проверки на null вы можете использовать последовательность вызовов с новым оператором Nullsafe. Когда один из элементов в последовательности возвращает null, выполнение прерывается и вся последовательность возвращает null.', + 'saner_string_number_comparisons_title' => 'Улучшенное сравнение строк и чисел', + 'saner_string_number_comparisons_description' => 'При сравнении с числовой строкой PHP 8 использует сравнение чисел. В противном случае число преобразуется в строку и используется сравнение строк.', + 'consistent_internal_function_type_errors_title' => 'Ошибки согласованности типов для встроенных функций', + 'consistent_internal_function_type_errors_description' => 'Большинство внутренних функций теперь выбрасывают исключение Error, если при проверке параметра возникает ошибка.', + + 'jit_compilation_title' => 'Компиляция Just-In-Time', + 'jit_compilation_description' => 'PHP 8 представляет два механизма JIT-компиляции. Трассировка JIT, наиболее перспективная из них, на синтетических бенчмарках показывает улучшение производительности примерно в 3 раза и в 1,5–2 раза на некоторых долго работающих приложениях. Стандартная производительность приложения находится на одном уровне с PHP 7.4.', + 'jit_performance_title' => 'Относительный вклад JIT в производительность PHP 8', + + 'type_improvements_title' => 'Улучшения в системе типов и обработке ошибок', + 'arithmetic_operator_type_checks' => 'Более строгие проверки типов для арифметических/побитовых операторов', + 'abstract_trait_method_validation' => 'Проверка методов абстрактных трейтов', + 'magic_method_signatures' => 'Правильные сигнатуры магических методов', + 'engine_warnings' => 'Реклассификация предупреждений движка', + 'lsp_errors' => 'Фатальная ошибка при несовместимости сигнатур методов', + 'at_operator_no_longer_silences_fatal_errors' => 'Оператор @ больше не подавляет фатальные ошибки.', + 'inheritance_private_methods' => 'Наследование с private методами', + 'mixed_type' => 'Новый тип mixed', + 'static_return_type' => 'Возвращаемый тип static', + 'internal_function_types' => 'Типы для стандартных функций', + 'email_thread' => 'E-mail Тема', + 'opaque_objects_instead_of_resources' => 'Непрозрачные объекты вместо ресурсов для + Curl, + Gd, + Sockets, + OpenSSL, + XMLWriter, e + XML + расширения', + + 'other_improvements_title' => 'Прочие улучшения синтаксиса', + 'allow_trailing_comma' => 'Разрешена запятая в конце списка параметров RFC + и в списке use замыканий RFC', + 'non_capturing_catches' => 'Блок catch без указания переменной', + 'variable_syntax_tweaks' => 'Изменения синтаксиса переменных', + 'namespaced_names_as_token' => 'Имена в пространстве имен рассматриваются как единый токен', + 'throw_expression' => 'Выражение throw', + 'class_name_literal_on_object' => 'Добавление ::class для объектов', + + 'new_classes_title' => 'Новые классы, интерфейсы и функции', + 'weak_map_class' => 'Класс Weak Map', + 'stringable_interface' => 'Интерфейс Stringable', + 'token_as_object' => 'Объектно-ориентированная функция token_get_all()', + 'new_dom_apis' => 'Новые API для обходения и обработки DOM', + + 'footer_title' => 'Выше производительность, лучше синтаксис, надежнее система типов.', + 'footer_description' => '

            + Для загрузки исходного кода PHP 8 посетите страницу downloads. + Бинарные файлы Windows находятся на сайте PHP для Windows. + Список изменений представлен в ChangeLog. +

            +

            + Руководство по миграции доступно в разделе документации. Пожалуйста, + изучите его для получения подробного списка новых возможностей и обратно несовместимых изменений. +

            ', +]; diff --git a/releases/8.0/languages/tr.php b/releases/8.0/languages/tr.php new file mode 100644 index 0000000000..d6c67e9116 --- /dev/null +++ b/releases/8.0/languages/tr.php @@ -0,0 +1,85 @@ + 'PHP 8.0, PHP dili için önemli bir güncellemedir. Optimizasyonlar ve yeni özellikler: Adlandırılmış Değişkenler, Union Types, Attributes, Kurucularda Özellik Tanımı, Match İfadesi, Nullsafe Operatorü, JIT(Anında Derleme) yanında tip sistemi, hata işleme ve tutarlılıkta iyileştirmeler içerir.', + 'documentation' => 'Doc', + 'main_title' => 'Yayında!', + 'main_subtitle' => 'PHP 8.0, PHP dili için önemli bir güncellemedir.
            Optimizasyonlar ve yeni özellikler: Adlandırılmış Değişkenler, Union Types, Attributes, Kurucularda Özellik Tanımı, Match İfadesi, Nullsafe Operatorü, JIT(Anında Derleme) yanında tip sistemi, hata işleme ve tutarlılıkta iyileştirmeler içerir.', + 'upgrade_now' => "PHP 8'e geçiş yapın!", + + 'named_arguments_title' => 'Adlandırılmış Değişkenler', + 'named_arguments_description' => '
          • Opsiyonel parametreleri atlayabiliyor ve yalnızca zorunlu olanları belirtebiliyorsunuz.
          • Parametrelerin sırası önemli değil ve kendi kendilerini dokümante ediyorlar.
          • ', + 'attributes_title' => 'Attributes', + 'attributes_description' => 'PHPDoc yorum satırları yerine PHP sözdizimi ile yapılandırılmış metadata kullanılabiliyor.', + 'constructor_promotion_title' => 'Kurucularda Özellik Tanımı', + 'constructor_promotion_description' => 'Sınıfların özelliklerini tanımlamak için daha az kodlama yapılabiliyor.', + 'union_types_title' => 'Union types', + 'union_types_description' => 'Değişken türlerinin kombinasyonu için PHPDoc açıklamaları yerine çalışma zamanında doğrulanan birleşim türleri (union types) tanımlamaları kullanılabiliyor.', + 'match_expression_title' => 'Match İfadesi', + 'match_expression_description' => '

            Yeni match ifadesi switch\'e çok benzer ve aşağıdaki özelliklere sahiptir:

            +
              +
            • Match bir ifadedir, sonucu bir değişkende saklanabilir veya döndürülebilir.
            • +
            • Match\'in karşılıkları tek satır ifadeleri destekler ve break kullanılması gerekmez.
            • +
            • Match katı (strict) tip karşılaştırma yapar.
            • +
            ', + + 'nullsafe_operator_title' => 'Nullsafe Operatorü', + 'nullsafe_operator_description' => 'Null koşulları için kontroller yazmak yerine yeni Nullsafe operatörüyle çağrı zinciri oluşturabilirsiniz. Oluşturduğunuz zincirdeki herhangi bir parça hatalı değerlendirilirse tüm zincirin işlevi durur ve null olarak değerlendirilir.', + 'saner_string_number_comparisons_title' => 'Daha Akıllı String ve Sayı Karşılaştırmaları', + 'saner_string_number_comparisons_description' => 'Sayısal string karşılaştırılırken PHP 8 sayısal olarak karşılaştırır. Aksi halde sayı bir string\'e çevrilir ve string olarak karşılaştırılır.', + 'consistent_internal_function_type_errors_title' => 'Dahili İşlevler için Tutarlı Hata Türleri', + 'consistent_internal_function_type_errors_description' => 'Artık dahili işlevlere gönderilen parametreler doğrulanamazsa Error exception fırlatıyorlar.', + + 'jit_compilation_title' => 'Just-In-Time Derlemesi (JIT)', + 'jit_compilation_description' => 'PHP 8, iki JIT derleme motoru sunuyor. Tracing JIT, ikisi arasında en yetenekli olanı. Karşılaştırmalarda yaklaşık 3 kat daha iyi performans ve uzun süre işlem yapan bazı uygulamalarda 1,5–2 kat iyileşme gösteriyor. Normal uygulamalarda performansı PHP 7.4 ile aynı.', + 'jit_performance_title' => 'PHP 8 performasına JIT katkısının karşılaştırması', + + 'type_improvements_title' => 'Tip sistemi ve hata işlemede iyileştirmeler', + 'arithmetic_operator_type_checks' => 'Aritmetik/bitsel operatörler için daha katı tip denetimi', + 'abstract_trait_method_validation' => 'Soyut özellikli metodlar için doğrulama', + 'magic_method_signatures' => 'Sihirli metodlar için doğru işaretlemeler', + 'engine_warnings' => 'Yeniden sınıflandırılan motor hataları', + 'lsp_errors' => 'Uyumsuz metod işaretleri için fatal error', + 'at_operator_no_longer_silences_fatal_errors' => '@ operatörü artık önemli hataları susturmuyor', + 'inheritance_private_methods' => 'Private methodlarda kalıtımlar', + 'mixed_type' => 'mixed tipi', + 'static_return_type' => 'static return tipi', + 'internal_function_types' => 'Dahili işlevler için tip açıklamaları', + 'email_thread' => 'E-posta konusu', + 'opaque_objects_instead_of_resources' => 'Eklentiler için özkaynak türleri(resources) yerine opak nesneler: + Curl, + Gd, + Sockets, + OpenSSL, + XMLWriter ve + XML.', + + 'other_improvements_title' => 'Diğer PHP sözdizimi düzenlemeleri ve iyileştirmeleri', + 'allow_trailing_comma' => 'Parametre ve closure listelerinin sonunda virgül kullanılabilmesi RFC + RFC', + 'non_capturing_catches' => 'Değişken atamasına gerek olmayan hataların yakalanabilmesi', + 'variable_syntax_tweaks' => 'Değişken sözdizimlerinde iyileştirmeler', + 'namespaced_names_as_token' => 'İsim alanındaki tanımları tek bir belirteç olarak değerlendirme', + 'throw_expression' => 'throw deyimi artık bir ifade (expression)', + 'class_name_literal_on_object' => 'Nesnelerde ::class kullanılabilmesi', + + 'new_classes_title' => 'Yeni Sınıflar, Arayüzler ve Fonksiyonlar', + 'weak_map_class' => 'Weak Map sınıfı', + 'stringable_interface' => 'Stringable arayüzü', + 'new_str_functions' => 'str_contains(), + str_starts_with(), + str_ends_with() fonksiyonları', + 'token_as_object' => 'token_get_all() nesne implementasyonu', + 'new_dom_apis' => 'New DOM Traversal and Manipulation APIs', + + 'footer_title' => 'Daha iyi performans, daha iyi sözdizimi, geliştirilmiş tip desteği.', + 'footer_description' => '

            + PHP 8\'i indirmek için downloads sayfasını ziyaret edebilirsiniz. + Windows için derlenmiş sürümüne PHP for Windows sayfasından ulaşabilirsiniz. + Değişiklikler için ChangeLog\'a göz atabilirsiniz. +

            +

            + PHP Kılavuzundan PHP 8 için Göç Belgelerine ulaşabilirsiniz. + Yeni özellikler ve geriye dönük uyumluluğu etkileyecek değişikliklerin ayrıntılı listesi için göç belgesini inceleyiniz. +

            ', +]; diff --git a/releases/8.0/languages/zh.php b/releases/8.0/languages/zh.php new file mode 100644 index 0000000000..9fa1a8aa7d --- /dev/null +++ b/releases/8.0/languages/zh.php @@ -0,0 +1,86 @@ + 'PHP 8.0 是 PHP 语言的一次重大更新。它包含了很多新功能与优化项,包括命名参数、联合类型、注解、构造器属性提升、match 表达式、Nullsafe 运算符、JIT,并改进了类型系统、错误处理、语法一致性。', + 'documentation' => '文档', + 'main_title' => '已发布!', + 'main_subtitle' => 'PHP 8.0 是 PHP 语言的一次重大更新。
            它包含了很多新功能与优化项,包括命名参数、联合类型、注解、构造器属性提升、match 表达式、nullsafe 运算符、JIT,并改进了类型系统、错误处理、语法一致性。', + 'upgrade_now' => '更新到 PHP 8!', + + 'named_arguments_title' => '命名参数', + 'named_arguments_description' => '
          • 仅仅指定必填参数,跳过可选参数。
          • 参数的顺序无关、自己就是文档(self-documented)
          • ', + 'attributes_title' => '注解', + 'attributes_description' => '现在可以用 PHP 原生语法来使用结构化的元数据,而非 PHPDoc 声明。', + 'constructor_promotion_title' => '构造器属性提升', + 'constructor_promotion_description' => '更少的样板代码来定义并初始化属性。', + 'union_types_title' => '联合类型', + 'union_types_description' => '相较于以前的 PHPDoc 声明类型的组合, 现在可以用原生支持的联合类型声明取而代之,并在运行时得到校验。', + 'match_expression_title' => 'Match 表达式', + 'match_expression_description' => '

            新的 match 类似于 switch,并具有以下功能:

            +
              +
            • Match 是一个表达式,它可以储存到变量中亦可以直接返回。
            • +
            • Match 分支仅支持单行,它不需要一个 break 语句。
            • +
            • Match 使用严格比较。
            • +
            ', + + 'nullsafe_operator_title' => 'Nullsafe 运算符', + 'nullsafe_operator_description' => '现在可以用新的 nullsafe 运算符链式调用,而不需要条件检查 null。 如果链条中的一个元素失败了,整个链条会中止并认定为 Null。', + 'saner_string_number_comparisons_title' => '字符串与数字的比较更符合逻辑', + 'saner_string_number_comparisons_description' => 'PHP 8 比较数字字符串(numeric string)时,会按数字进行比较。不是数字字符串时,将数字转化为字符串,按字符串比较。', + 'consistent_internal_function_type_errors_title' => '内部函数类型错误的一致性。', + 'consistent_internal_function_type_errors_description' => '现在大多数内部函数在参数验证失败时抛出 Error 级异常。', + + 'jit_compilation_title' => '即时编译', + 'jit_compilation_description' => 'PHP 8 引入了两个即时编译引擎。 Tracing JIT 在两个中更有潜力,它在综合基准测试中显示了三倍的性能,并在某些长时间运行的程序中显示了 1.5-2 倍的性能改进。典型的应用性能则和 PHP 7.4 不相上下。', + 'jit_performance_title' => '关于 JIT 对 PHP 8 性能的贡献', + + 'type_improvements_title' => '类型系统与错误处理的改进', + 'arithmetic_operator_type_checks' => '算术/位运算符更严格的类型检测', + 'abstract_trait_method_validation' => 'Abstract trait 方法的验证', + 'magic_method_signatures' => '确保魔术方法签名正确', + 'engine_warnings' => 'PHP 引擎 warning 警告的重新分类', + 'lsp_errors' => '不兼容的方法签名导致 Fatal 错误', + 'at_operator_no_longer_silences_fatal_errors' => '操作符 @ 不再抑制 fatal 错误。', + 'inheritance_private_methods' => '私有方法继承', + 'mixed_type' => 'mixed 类型', + 'static_return_type' => 'static 返回类型', + 'internal_function_types' => '内部函数的类型', + 'email_thread' => 'Email thread', + 'opaque_objects_instead_of_resources' => '扩展 + Curl、 + Gd、 + Sockets、 + OpenSSL、 + XMLWriter、 + XML + 以 Opaque 对象替换 resource。', + + 'other_improvements_title' => '其他语法调整和改进', + 'allow_trailing_comma' => '允许参数列表中的末尾逗号 RFC、 + 闭包 use 列表中的末尾逗号 RFC', + 'non_capturing_catches' => '无变量捕获的 catch', + 'variable_syntax_tweaks' => '变量语法的调整', + 'namespaced_names_as_token' => 'Namespace 名称作为单个 token', + 'throw_expression' => '现在 throw 是一个表达式', + 'class_name_literal_on_object' => '允许对象的 ::class', + + 'new_classes_title' => '新的类、接口、函数', + 'weak_map_class' => 'Weak Map 类', + 'stringable_interface' => 'Stringable 接口', + 'new_str_functions' => 'str_contains()、 + str_starts_with()、 + str_ends_with()', + 'token_as_object' => 'token_get_all() 对象实现', + 'new_dom_apis' => 'New DOM Traversal and Manipulation APIs', + + 'footer_title' => '性能更好,语法更好,类型安全更完善', + 'footer_description' => '

            + 请访问 下载 页面下载 PHP 8 源代码。 + 在 PHP for Windows 站点中可找到 Windows 二进制文件。 + ChangeLog 中有变更历史记录清单。 +

            +

            + PHP 手册中有 迁移指南。 + 请参考它描述的新功能详细清单、向后不兼容的变化。 +

            ', +]; diff --git a/releases/8.0/nl.php b/releases/8.0/nl.php index 37256c3fa2..1a972eecb8 100644 --- a/releases/8.0/nl.php +++ b/releases/8.0/nl.php @@ -1,507 +1,6 @@ -
            -
            -
            - -
            -
            -
            - -
            Beschikbaar!
            -
            - PHP 8.0 is een omvangrijke update van de PHP programmeertaal.
            Het bevat - veel nieuwe mogelijkheden en optimalisaties, waaronder argument naamgeving, unie types, attributen, - promotie van constructor eigenschappen, expressie vergelijking, null-veilige operator, JIT, en - verbeteringen aan het type systeem, foute afhandeling, en consistentie. -
            - -
            -
            - -
            -
            -

            - Argument naamgeving - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            - - -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -
              -
            • Geef enkel vereiste parameters op, sla optionele parameters over.
            • -
            • Argumenten hebben een onafhankelijke volgorde en documenteren zichzelf.
            • -
            -
            -
            - -
            -

            - Attributen - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            In plaats van met PHPDoc annotaties kan je nu gestructureerde metadata gebruiken in PHP's eigen syntaxis.

            -
            -
            - -
            -

            - Promotie van constructor eigenschappen - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - x = $x; - $this->y = $y; - $this->z = $z; - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Minder standaardcode nodig om eigenschappen te definiëren en initialiseren.

            -
            -
            - -
            -

            - Unie types - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - number = $number; - } -} - -new Number(\'NaN\'); // Ok' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            In plaats van met PHPDoc annotaties kan je de mogelijke types via unie types declareren zodat - deze ook gevalideerd worden tijdens de runtime.

            -
            -
            - -
            -

            - Expressie vergelijking - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - Oh no!' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - "Oh no!", - 8.0 => "This is what I expected", -}; -//> This is what I expected' - );?> -
            -
            -
            -
            -

            De nieuwe match is gelijkaardig aan switch en heeft volgende eigenschappen:

            -
              -
            • Match is een expressie, dit wil zeggen dat je het in een variabele kan bewaren of teruggeven.
            • -
            • Match aftakkingen zijn expressies van één enkele lijn en bevatten geen break statements.
            • -
            • Match vergelijkingen zijn strikt.
            • -
            -
            -
            - -
            -

            - Null-veilige operator - RFC -

            -
            -
            -
            PHP 7
            -
            - user; - - if ($user !== null) { - $address = $user->getAddress(); - - if ($address !== null) { - $country = $address->country; - } - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - user?->getAddress()?->country;' - );?> -
            -
            -
            -
            -

            In plaats van een controle op null uit te voeren kan je nu een ketting van oproepen vormen met de null-veilige operator. - Wanneer één expressie in de ketting faalt, zal de rest van de ketting niet uitgevoerd worden en is het resultaat van - de hele ketting null.

            -
            -
            - -
            -

            - Verstandigere tekst met nummer vergelijkingen - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Wanneer PHP 8 een vergelijking uitvoert tegen een numerieke tekst zal er een numerieke vergelijking uitgevoerd - worden. Anders zal het nummer naar een tekst omgevormd worden en er een tekstuele vergelijking uitgevoerd worden.

            -
            -
            - -
            -

            - Consistente type fouten voor interne functies - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            De meeste interne functies gooien nu een Error exception als de validatie van parameters faalt.

            -
            -
            -
            - -
            -

            Just-In-Time compilatie

            -

            - PHP 8 introduceert twee systemen voor JIT compilatie. De tracerende JIT is veelbelovend en presteert ongeveer 3 keer beter - bij synthetische metingen en kan sommige langlopende applicaties 1.5–2 keer verbeteren. Prestaties van typische web applicaties - ligt in lijn met PHP 7.4. -

            -

            - Relatieve JIT bijdrage aan de prestaties van PHP 8 -

            -

            - Just-In-Time compilatie -

            - -
            -
            -

            Type systeem en verbeteringen van de fout afhandeling

            -
              -
            • - Strikte type controles bij rekenkundige/bitsgewijze operatoren - RFC -
            • -
            • - Validatie voor abstracte trait methodes RFC -
            • -
            • - Correcte signatures bij magic methods RFC -
            • -
            • - Herindeling van de engine warnings RFC -
            • -
            • - Fatal error bij incompatibele method signatures RFC -
            • -
            • - De @ operator werkt niet meer bij het onderdrukken van fatale fouten. -
            • -
            • - Overerving bij private methods RFC -
            • -
            • - Mixed type RFC -
            • -
            • - Static return type RFC -
            • -
            • - Types voor interne functies - Email draadje -
            • -
            • - Opaque objects in plaats van resources voor - Curl, - Gd, - Sockets, - OpenSSL, - XMLWriter, and - XML - extensies -
            • -
            -
            -
            -

            Andere syntaxis aanpassingen en verbeteringen

            -
              -
            • - Sta toe om een komma te plaatsen bij het laatste parameter in een lijst RFC - en bij de use in closures RFC -
            • -
            • - Catches die niets vangen RFC -
            • -
            • - Variabele Syntaxis Aanpassingen RFC -
            • -
            • - Namespaced namen worden als één enkel token afgehandeld RFC -
            • -
            • - Throw is nu een expressie RFC -
            • -
            • - ::class werkt bij objecten RFC -
            • -
            - -

            Nieuwe Classes, Interfaces, en Functies

            - -
            -
            -
            - - - - - - - -
            -
            -
            - -
            -
            -
            - -
            Released!
            -
            - PHP 8.0 é uma atualização importante da linguagem PHP.
            Ela contém muitos novos - recursos e otimizações, incluindo argumentos nomeados, união de tipos, atributos, promoção de propriedade do - construtor, expressão match, operador nullsafe, JIT e melhorias no sistema de tipos, tratamento de - erros e consistência. -
            - -
            -
            - -
            -
            -

            - Argumentos nomeados - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -
              -
            • Especifique apenas os parâmetros obrigatórios, pulando os opcionais.
            • -
            • Os argumentos são independentes da ordem e autodocumentados.
            • -
            -
            -
            - -
            -

            - Atributos - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Em vez de anotações PHPDoc, agora você pode usar metadados estruturados com a sintaxe nativa do PHP.

            -
            -
            - -
            -

            - Promoção de propriedade de construtor - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - x = $x; - $this->y = $y; - $this->z = $z; - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Menos código boilerplate para definir e inicializar propriedades.

            -
            -
            - -
            -

            - União de tipos - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - number = $number; - } -} - -new Number(\'NaN\'); // Ok' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Em vez de anotações PHPDoc para uma combinação de tipos, você pode usar declarações de união de tipos nativa - que são validados em tempo de execução.

            -
            -
            - -
            -

            - Expressão match - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - Oh no!' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - "Oh no!", - 8.0 => "This is what I expected", -}; -//> This is what I expected' - );?> -
            -
            -
            -
            -

            A nova expressão match é semelhante ao switch e tem os seguintes recursos:

            -
              -
            • Match é uma expressão, o que significa que seu resultado pode ser armazenado em uma variável ou - retornado.
            • -
            • Match suporta apenas expressões de uma linha e não precisa de uma declaração break;.
            • -
            • Match faz comparações estritas.
            • -
            -
            -
            - -
            -

            - Operador nullsafe - RFC -

            -
            -
            -
            PHP 7
            -
            - user; - - if ($user !== null) { - $address = $user->getAddress(); - - if ($address !== null) { - $country = $address->country; - } - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - user?->getAddress()?->country;' - );?> -
            -
            -
            -
            -

            Em vez de verificar condições nulas, agora você pode usar uma cadeia de chamadas com o novo operador nullsafe. - Quando a avaliação de um elemento da cadeia falha, a execução de toda a cadeia é abortada e toda a cadeia é - avaliada como nula.

            -
            -
            - -
            -

            - Comparações mais inteligentes entre strings e números - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Ao comparar com uma string numérica, o PHP 8 usa uma comparação numérica. Caso contrário, ele converte o - número em uma string e usa uma comparação de string.

            -
            -
            - -
            -

            - Erros consistentes para tipos de dados em funções internas - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            A maioria das funções internas agora lançam uma exceção Error se a validação do parâmetro falhar.

            -
            -
            -
            - -
            -

            Compilação Just-In-Time

            -

            - PHP 8 apresenta dois motores de compilação JIT. Tracing JIT, o mais promissor dos dois, mostra desempenho cerca de - 3 vezes melhor em benchmarks sintéticos e melhoria de 1,5 a 2 vezes em alguns aplicativos específicos de longa - execução. O desempenho típico das aplicações está no mesmo nível do PHP 7.4. -

            -

            - Relative JIT contribution to PHP 8 performance -

            -

            - Just-In-Time compilation -

            - -
            -
            -

            Melhorias no sistema de tipo e tratamento de erros

            -
              -
            • - Verificações de tipo mais rígidas para operadores aritméticos / bit a bit - RFC -
            • -
            • - Validação de método abstrato em traits - RFC -
            • -
            • - Assinaturas corretas de métodos mágicos RFC -
            • -
            • - Avisos de motor reclassificados RFC -
            • -
            • - Erro fatal para assinaturas de método incompatíveis RFC -
            • -
            • - O operador @ não silencia mais os erros fatais. -
            • -
            • - Herança com métodos privados RFC -
            • -
            • - Tipo mixed RFC -
            • -
            • - Tipo de retorno static RFC -
            • -
            • - Tipagem de funções internas - Discussão por email -
            • -
            • - Objetos opacos em vez de recursos para - Curl, - Gd, - Sockets, - OpenSSL, - XMLWriter, e - XML - extensões -
            • -
            -
            -
            -

            Outros ajustes e melhorias de sintaxe

            -
              -
            • - Permitir vírgula no final da lista de parâmetros - RFC e listas de uso em closures - RFC -
            • -
            • - Catches sem variável na captura de exceção RFC -
            • -
            • - Ajustes de sintaxe para variáveis RFC -
            • -
            • - Tratamento de nomes de namespace como token único - RFC -
            • -
            • - Throw como expressão RFC -
            • -
            • - Permitir ::class em objetos RFC -
            • -
            - -

            Novas classes, interfaces e funções

            - -
            -
            -
            - - - - - - - +
            +
            +
            + +
            +
            +
            + +
            +
            +
            + +
            +
            +
            + +
            +
            +

            + + RFC + +

            +
            +
            +
            PHP 7
            +
            + +
            +
            +
            +
            +
            PHP 8
            +
            + +
            +
            +
            +
            +
              + +
            +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP 7
            +
            + +
            +
            +
            +
            +
            PHP 8
            +
            + +
            +
            +
            +
            +

            +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP 7
            +
            + x = $x; + $this->y = $y; + $this->z = $z; + } + } + PHP + );?> +
            +
            +
            +
            +
            PHP 8
            +
            + +
            +
            +
            +
            +

            +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP 7
            +
            + number = $number; + } + } + + new Number('NaN'); // + PHP + . ' ' . message('ok', $lang), + );?> +
            +
            +
            +
            +
            PHP 8
            +
            + +
            +
            +
            +
            +

            +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP 7
            +
            + {$ohNoText} + PHP + );?> +
            +
            +
            +
            +
            PHP 8
            +
            + "{$ohNoText}", + 8.0 => "{$expectedText}", + }; + //> {$expectedText} + PHP + );?> +
            +
            +
            +
            + +
            +
            + +
            +

            + + RFC +

            +
            +
            +
            PHP 7
            +
            + user; + + if ($user !== null) { + $address = $user->getAddress(); + + if ($address !== null) { + $country = $address->country; + } + } + } + PHP + );?> +
            +
            +
            +
            +
            PHP 8
            +
            + user?->getAddress()?->country; + PHP + );?> +
            +
            +
            +
            +

            +
            +
            + +
            +

            + + RFC +

            +
            +
            +
            PHP 7
            +
            + +
            +
            +
            +
            +
            PHP 8
            +
            + +
            +
            +
            +
            +

            +
            +
            + +
            +

            + + RFC +

            +
            +
            +
            PHP 7
            +
            + +
            +
            +
            +
            +
            PHP 8
            +
            + +
            +
            +
            +
            +

            +
            +
            +
            + +
            +

            +

            +

            +
            + Just-In-Time compilation +
            + +
            +
            +

            +
            + +
            +
            + +
            +

            +
            + +
            + +

            +
            + +
            +
            +
            +
            + + + + -
            -
            -
            - -
            -
            -
            - -
            релизнут!
            -
            - PHP 8.0 — большое обновление языка PHP.
            Оно содержит множество новых возможностей и - оптимизаций, включая именованные аргументы, union type, атрибуты, упрощённое определение свойств в конструкторе, выражение match, - оператор nullsafe, JIT и улучшения в системе типов, обработке ошибок и консистентности. -
            - -
            -
            - -
            -
            -

            - Именованные аргументы - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -
              -
            • Указывайте только необходимые параметры, пропускайте необязательные.
            • -
            • Порядок аргументов не важен, аргументы самодокументируемы.
            • -
            -
            -
            - -
            -

            - Атрибуты - RFC Документация -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Вместо аннотаций PHPDoc вы можете использовать структурные метаданные с нативным синтаксисом PHP.

            -
            -
            - -
            -

            - Объявление свойств в конструкторе - RFC Документация -

            -
            -
            -
            PHP 7
            -
            - x = $x; - $this->y = $y; - $this->z = $z; - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Меньше шаблонного кода для определения и инициализации свойств.

            -
            -
            - -
            -

            - Union types - RFC Документация -

            -
            -
            -
            PHP 7
            -
            - number = $number; - } -} - -new Number(\'NaN\'); // Нет ошибки' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Вместо аннотаций PHPDoc для объединенных типов вы можете использовать объявления union type, которые - проверяются во время выполнения.

            -
            -
            - -
            -

            - Выражение Match - RFC Документация -

            -
            -
            -
            PHP 7
            -
            - О нет!' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - "О нет!", - 8.0 => "То, что я и ожидал", -}; -//> То, что я и ожидал' - );?> -
            -
            -
            -
            -

            Новое выражение match похоже на оператор switch со следующими особенностями:

            -
              -
            • Match — это выражение, его результат может быть сохранён в переменной или возвращён.
            • -
            • Условия match поддерживают только однострочные выражения, для которых не требуется управляющая конструкция break;.
            • -
            • Выражение match использует строгое сравнение.
            • -
            -
            -
            - -
            -

            - Оператор Nullsafe - RFC -

            -
            -
            -
            PHP 7
            -
            - user; - - if ($user !== null) { - $address = $user->getAddress(); - - if ($address !== null) { - $country = $address->country; - } - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - user?->getAddress()?->country;' - );?> -
            -
            -
            -
            -

            Вместо проверки на null вы можете использовать последовательность вызовов с новым оператором Nullsafe. Когда - один из элементов в последовательности возвращает null, выполнение прерывается и вся последовательность - возвращает null.

            -
            -
            - -
            -

            - Улучшенное сравнение строк и чисел - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            При сравнении с числовой строкой PHP 8 использует сравнение чисел. В противном случае число преобразуется в - строку и используется сравнение строк.

            -
            -
            - -
            -

            - Ошибки согласованности типов для встроенных функций - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Большинство внутренних функций теперь выбрасывают исключение Error, если при проверке параметра возникает ошибка.

            -
            -
            -
            - -
            -

            Компиляция Just-In-Time

            -

            - PHP 8 представляет два механизма JIT-компиляции. Трассировка JIT, наиболее перспективная из них, на синтетических бенчмарках показывает - улучшение производительности примерно в 3 раза и в 1,5–2 раза на некоторых долго работающих приложениях. Стандартная - производительность приложения находится на одном уровне с PHP 7.4. -

            -

            - Относительный вклад JIT в производительность PHP 8 -

            -

            - Компиляция Just-In-Time -

            - -
            -
            -

            Улучшения в системе типов и обработке ошибок

            -
              -
            • - Более строгие проверки типов для арифметических/побитовых операторов - RFC -
            • -
            • - Проверка методов абстрактных трейтов RFC -
            • -
            • - Правильные сигнатуры магических методов RFC -
            • -
            • - Реклассификация предупреждений движка RFC -
            • -
            • - Фатальная ошибка при несовместимости сигнатур методов RFC -
            • -
            • - Оператор @ больше не подавляет фатальные ошибки. -
            • -
            • - Наследование с private методами RFC -
            • -
            • - Новый тип mixed RFC -
            • -
            • - Возвращаемый тип static RFC -
            • -
            • - Типы для стандартных функций - E-mail Тема -
            • -
            • - Непрозрачные объекты вместо ресурсов для - Curl, - Gd, - Sockets, - OpenSSL, - XMLWriter, e - XML - расширения -
            • -
            -
            -
            -

            Прочие улучшения синтаксиса

            -
              -
            • - Разрешена запятая в конце списка параметров RFC - и в списке use замыканий RFC -
            • -
            • - Блок catch без указания переменной RFC -
            • -
            • - Изменения синтаксиса переменных RFC -
            • -
            • - Имена в пространстве имен рассматриваются как единый токен RFC -
            • -
            • - Выражение Throw RFC -
            • -
            • - Добавление ::class для объектов RFC -
            • -
            - -

            Новые классы, интерфейсы и функции

            - -
            -
            -
            - - - - - - - -
            -
            -
            - -
            -
            -
            - -
            Yayında!
            -
            - PHP 8.0, PHP dili için önemli bir güncellemedir.
            Optimizasyonlar ve yeni özellikler: - Adlandırılmış Değişkenler, Union Types, Attributes, Kurucularda Özellik Tanımı, Match İfadesi, Nullsafe - Operatorü, JIT(Anında Derleme) yanında tip sistemi, hata işleme ve tutarlılıkta iyileştirmeler içerir. -
            - -
            -
            - -
            -
            -

            - Adlandırılmış Değişkenler - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            - - -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -
              -
            • Opsiyonel parametreleri atlayabiliyor ve yalnızca zorunlu olanları belirtebiliyorsunuz.
            • -
            • Parametrelerin sırası önemli değil ve kendi kendilerini dokümante ediyorlar.
            • -
            -
            -
            - -
            -

            - Attributes - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            PHPDoc yorum satırları yerine PHP sözdizimi ile yapılandırılmış metadata kullanılabiliyor.

            -
            -
            - -
            -

            - Kurucularda Özellik Tanımı - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - x = $x; - $this->y = $y; - $this->z = $z; - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Sınıfların özelliklerini tanımlamak için daha az kodlama yapılabiliyor.

            -
            -
            - -
            -

            - Union types - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - number = $number; - } -} - -new Number(\'NaN\'); // Ok' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Değişken türlerinin kombinasyonu için PHPDoc açıklamaları yerine çalışma zamanında doğrulanan - birleşim türleri (union types) tanımlamaları kullanılabiliyor.

            -
            -
            - -
            -

            - Match İfadesi - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - Oh no!' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - "Oh no!", - 8.0 => "This is what I expected", -}; -//> This is what I expected' - );?> -
            -
            -
            -
            -

            Yeni match ifadesi switch'e çok benzer ve aşağıdaki özelliklere sahiptir:

            -
              -
            • Match bir ifadedir, sonucu bir değişkende saklanabilir veya döndürülebilir.
            • -
            • Match'in karşılıkları tek satır ifadeleri destekler ve break; kullanılması gerekmez.
            • -
            • Match katı (strict) tip karşılaştırma yapar.
            • -
            -
            -
            - -
            -

            - Nullsafe Operatorü - RFC -

            -
            -
            -
            PHP 7
            -
            - user; - - if ($user !== null) { - $address = $user->getAddress(); - - if ($address !== null) { - $country = $address->country; - } - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - user?->getAddress()?->country;' - );?> -
            -
            -
            -
            -

            Null koşulları için kontroller yazmak yerine yeni Nullsafe operatörüyle çağrı zinciri - oluşturabilirsiniz. Oluşturduğunuz zincirdeki herhangi bir parça hatalı - değerlendirilirse tüm zincirin işlevi durur ve null olarak değerlendirilir.

            -
            -
            - -
            -

            - Daha Akıllı String ve Sayı Karşılaştırmaları - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Sayısal string karşılaştırılırken PHP 8 sayısal olarak karşılaştırır. Aksi halde sayı bir - string'e çevrilir ve string olarak karşılaştırılır.

            -
            -
            - -
            -

            - Dahili İşlevler için Tutarlı Hata Türleri - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            Artık dahili işlevlere gönderilen parametreler doğrulanamazsa Error exception fırlatıyorlar.

            -
            -
            -
            - -
            -

            Just-In-Time Derlemesi (JIT)

            -

            - PHP 8, iki JIT derleme motoru sunuyor. Tracing JIT, ikisi arasında en yetenekli olanı. Karşılaştırmalarda - yaklaşık 3 kat daha iyi performans ve uzun süre işlem yapan bazı uygulamalarda 1,5–2 kat iyileşme gösteriyor. - Normal uygulamalarda performansı PHP 7.4 ile aynı. -

            -

            - PHP 8 performasına JIT katkısının karşılaştırması -

            -

            - Just-In-Time compilation -

            - -
            -
            -

            Tip sistemi ve hata işlemede iyileştirmeler

            -
              -
            • - Aritmetik/bitsel operatörler için daha katı tip denetimi - RFC -
            • -
            • - Soyut özellikli metodlar için doğrulama RFC -
            • -
            • - Sihirli metodlar için doğru işaretlemeler RFC -
            • -
            • - Yeniden sınıflandırılan motor hataları RFC -
            • -
            • - Uyumsuz metod işaretleri için fatal error RFC -
            • -
            • - @ operatörü artık önemli hataları susturmuyor -
            • -
            • - Private methodlarda kalıtımlar RFC -
            • -
            • - Mixed tipi RFC -
            • -
            • - Static return tipi RFC -
            • -
            • - Dahili işlevler için tip açıklamaları - E-posta konusu -
            • -
            • - Eklentiler için özkaynak türleri(resources) yerine opak nesneler: - Curl, - Gd, - Sockets, - OpenSSL, - XMLWriter ve - XML. -
            • -
            -
            -
            -

            Diğer PHP sözdizimi düzenlemeleri ve iyileştirmeleri

            -
              -
            • - Parametre ve closure listelerinin sonunda virgül kullanılabilmesi RFC - RFC -
            • -
            • - Değişken atamasına gerek olmayan hataların yakalanabilmesi RFC -
            • -
            • - Değişken sözdizimlerinde iyileştirmeler RFC -
            • -
            • - İsim alanındaki tanımları tek bir belirteç olarak değerlendirme RFC -
            • -
            • - Throw deyimi artık bir ifade (expression) RFC -
            • -
            • - Nesnelerde ::class kullanılabilmesi RFC -
            • -
            - -

            Yeni Sınıflar, Arayüzler ve Fonksiyonlar

            - -
            -
            -
            - - - - - - - -
            -
            -
            - -
            -
            -
            - -
            已发布!
            -
            - PHP 8.0 是 PHP 语言的一个主版本更新。 -
            它包含了很多新功能与优化项, - 包括命名参数、联合类型、注解、构造器属性提升、match 表达式、nullsafe 运算符、JIT,并改进了类型系统、错误处理、语法一致性。 -
            - -
            -
            - -
            -
            -

            - 命名参数 - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            - - -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -
              -
            • 仅仅指定必填参数,跳过可选参数。
            • -
            • 参数的顺序无关、自己就是文档(self-documented)
            • -
            -
            -
            - -
            -

            - 注解 - RFC Doc -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            现在可以用 PHP 原生语法来使用结构化的元数据,而非 PHPDoc 声明。

            -
            -
            - -
            -

            - 构造器属性提升 - RFC 文档 -

            -
            -
            -
            PHP 7
            -
            - x = $x; - $this->y = $y; - $this->z = $z; - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            更少的样板代码来定义并初始化属性。

            -
            -
            - -
            -

            - 联合类型 - RFC 文档 -

            -
            -
            -
            PHP 7
            -
            - number = $number; - } -} -new Number(\'NaN\'); // Ok' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            相较于以前的 PHPDoc 声明类型的组合, - 现在可以用原生支持的联合类型声明取而代之,并在运行时得到校验。

            -
            -
            - -
            -

            - Match 表达式 - RFC 文档 -

            -
            -
            -
            PHP 7
            -
            - Oh no!' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - "Oh no!", - 8.0 => "This is what I expected", -}; -//> This is what I expected' - );?> -
            -
            -
            -
            -

            新的 match 类似于 switch,并具有以下功能:

            -
              -
            • Match 是一个表达式,它可以储存到变量中亦可以直接返回。
            • -
            • Match 分支仅支持单行,它不需要一个 break; 语句。
            • -
            • Match 使用严格比较。
            • -
            -
            -
            - -
            -

            - Nullsafe 运算符 - RFC -

            -
            -
            -
            PHP 7
            -
            - user; - if ($user !== null) { - $address = $user->getAddress(); - - if ($address !== null) { - $country = $address->country; - } - } -}' - );?> -
            -
            -
            -
            -
            PHP 8
            -
            - user?->getAddress()?->country;' - );?> -
            -
            -
            -
            -

            现在可以用新的 nullsafe 运算符链式调用,而不需要条件检查 null。 - 如果链条中的一个元素失败了,整个链条会中止并认定为 Null。

            -
            -
            - -
            -

            - 字符串与数字的比较更符合逻辑 - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            PHP 8 比较数字字符串(numeric string)时,会按数字进行比较。 - 不是数字字符串时,将数字转化为字符串,按字符串比较。

            -
            -
            - -
            -

            - 内部函数类型错误的一致性。 - RFC -

            -
            -
            -
            PHP 7
            -
            - -
            -
            -
            -
            -
            PHP 8
            -
            - -
            -
            -
            -
            -

            现在大多数内部函数在参数验证失败时抛出 Error 级异常。

            -
            -
            -
            - -
            -

            即时编译

            -

            - PHP 8 引入了两个即时编译引擎。 - Tracing JIT 在两个中更有潜力,它在综合基准测试中显示了三倍的性能, - 并在某些长时间运行的程序中显示了 1.5-2 倍的性能改进。 - 典型的应用性能则和 PHP 7.4 不相上下。 -

            -

            - 关于 JIT 对 PHP 8 性能的贡献 -

            -

            - Just-In-Time compilation -

            - -
            -
            -

            类型系统与错误处理的改进

            -
              -
            • - 算术/位运算符更严格的类型检测 - RFC -
            • -
            • - Abstract trait 方法的验证 RFC -
            • -
            • - 确保魔术方法签名正确 RFC -
            • -
            • - PHP 引擎 warning 警告的重新分类 RFC -
            • -
            • - 不兼容的方法签名导致 Fatal 错误 RFC -
            • -
            • - 操作符 @ 不再抑制 fatal 错误。 -
            • -
            • - 私有方法继承 RFC -
            • -
            • - Mixed 类型 RFC -
            • -
            • - Static 返回类型 RFC -
            • -
            • - 内部函数的类型 - Email thread -
            • -
            • - 扩展 - Curl、 - Gd、 - Sockets、 - OpenSSL、 - XMLWriter、 - XML - 以 Opaque 对象替换 resource。 -
            • -
            -
            -
            -

            其他语法调整和改进

            -
              -
            • - 允许参数列表中的末尾逗号 RFC、 - 闭包 use 列表中的末尾逗号 RFC -
            • -
            • - 无变量捕获的 catch RFC -
            • -
            • - 变量语法的调整 RFC -
            • -
            • - Namespace 名称作为单个 token RFC -
            • -
            • - 现在 throw 是一个表达式 RFC -
            • -
            • - 允许对象的 ::class RFC -
            • -
            - -

            新的类、接口、函数

            - -
            -
            -
            - - - - - - - 'English', + 'es' => 'Español', + 'de' => 'Deutsch', + 'pt_BR' => 'Brazilian Portuguese', + 'ru' => 'Русский', + 'zh' => '简体中文', + 'ka' => 'ქართული', + 'ja' => '日本語', +]; + +function common_header(string $description): void { + global $MYSITE; + + $meta_image_path = \htmlspecialchars( + \filter_var($MYSITE . 'images/php8/php_8_1_released.png', \FILTER_VALIDATE_URL)); + $meta_description = \htmlspecialchars($description); + + \site_header("PHP 8.1.0 Release Announcement", [ + 'current' => 'php8', + 'css' => ['php8.css'], + 'meta_tags' => << + + + + + + + + + + + + +META + ]); +} + +function language_chooser(string $currentLang): void { + // Print out the form with all the options + echo ' + +
            + + +
            + +'; +} + +function message($code, $language = 'en') +{ + $original = require __DIR__ . '/languages/en.php'; + if (($language !== 'en') && file_exists(__DIR__ . '/languages/' . $language . '.php')) { + $translation = require __DIR__ . '/languages/' . $language . '.php'; + } + + return $translation[$code] ?? $original[$code] ?? $code; +} diff --git a/releases/8.1/de.php b/releases/8.1/de.php new file mode 100644 index 0000000000..45cb5470ed --- /dev/null +++ b/releases/8.1/de.php @@ -0,0 +1,5 @@ +chooseCode("", "", $_SERVER['HTTP_ACCEPT_LANGUAGE']); + +mirror_redirect("/releases/8.1/$lang.php"); diff --git a/releases/8.1/ja.php b/releases/8.1/ja.php new file mode 100644 index 0000000000..9db1f5ca85 --- /dev/null +++ b/releases/8.1/ja.php @@ -0,0 +1,5 @@ + 'PHP 8.1 ist ein Minor-Update der Sprache PHP und beinhaltet viele neue Features und Verbesserungen. Unter anderem Enumerations, Readonly-Properties, First-Class Callable Syntax, Fibers, Intersection-Types, Performance-Optimierungen.', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.1 ist ein Minor-Update der Sprache PHP.
            Es beinhaltet viele neue Features und Verbesserungen.
            Unter anderem Enumerations, Readonly-Properties, First-Class Callable Syntax, Fibers, Intersection-Types, Performance-Optimierungen.', + 'upgrade_now' => 'Wechsle jetzt zu PHP 8.1!', + 'documentation' => 'Doc', + + 'enumerations_title' => 'Enumerations', + 'enumerations_content' => '

            Du kannst nun Enums statt Konstanten für mehr Typensicherheit und direkter Validierung nutzen.

            ', + + 'readonly_properties_title' => 'Readonly-Properties', + 'readonly_properties_content' => '

            Readonly-Properties können nach einer Initialisierung nicht mehr verändert werden.
            Sie sind ein ideales Werkzeug um Value-Objekte und Data-Transfer-Objekte zu erstellen.

            ', + + 'first_class_callable_syntax_title' => 'First-Class Callable Syntax', + 'first_class_callable_syntax_content' => '

            Durch die sogenannte First-Class Callable Syntax kannst du eine Referenz zu jeder beliebigen Funktion erhalten.

            ', + + 'new_in_initializers_title' => 'New in Initialisierungen', + 'new_in_initializers_content' => '

            Objekte können nun als Default-Wert für Parameter, statische Variablen, Konstanten, so wie als Argument für Attribute genutzt werden.

            +

            Dies ermöglicht nun auch die Nutzung von verschachtelten Attributen.

            ', + + 'pure_intersection_types_title' => 'Pure-Intersection-Types', + 'pure_intersection_types_content' => '

            Nutze die Intersection-Types, wenn du sicherstellen möchtest, dass das übergebene Objekt mehrere Typen implementieren.

            +

            Es ist aktuell nicht möglich eine Kombination aus Intersection- und Union-Types zu nutzen, wie z.B. A&B|C.

            ', + + 'never_return_type_title' => 'Der Rückgabetyp Never', + 'never_return_type_content' => '

            Eine Funktion mit dem Rückgabetyp never gibt an, dass sie keinen Rückgabewert besitzt und die Funktion entweder eine Exception wirft oder das Script durch die(), exit(), trigger_error(), oder einer ähnlichen Funktion terminiert wird.

            ', + + 'final_class_constants_title' => 'Final Klassen Konstanten', + 'final_class_constants_content' => '

            Es ist nun möglich Klassen Konstanten als final zu definieren, sodass diese in einer Vererbung nicht überschrieben werden können.

            ', + + 'octal_numeral_notation_title' => 'Explizite Oktalsystem-Zahl Notation', + 'octal_numeral_notation_content' => '

            Du kannst nun Oktalsystem-Zahlen explizit durch einen 0o-Prefix angeben.

            ', + + 'fibers_title' => 'Fibers', + 'fibers_content' => '

            Fibers sind eine grundlegende Funktionalität zur Implementierung von verzahnten Abläufen. Sie sind dazu gedacht Code-Blöcke zu erstellen, die pausiert und wiederaufgenommen werden ähnlich wie die Generator-Implementierung, jedoch von überall aus. Fibers selbst stellen keine Nebenläufigkeit bereit und benötigen somit eine Event-Loop Implementierung. Aber sie ermöglichen die gemeinsame Nutzung einer API in einem blockierenden und nicht blockierenden Kontext.

            Fibers können dazu dienen, Funktionen wie z.B. Promise::then() oder Generator basierte Koroutinen zu ersetzen. Generell wird davon ausgegangen, dass Bibliotheken-Entwickler eine Abstraktion um die Fibers herum bauen werden, sodass man selten in Berührung mit den Fibers kommen wird.

            ', + + 'array_unpacking_title' => 'Entpacken von Arrays mit string-basierten Keys', + 'array_unpacking_content' => '

            PHP unterstützte bereits das Entpacken von Arrays mit int-basiertem Key in andere Arrays. Jetzt ist es auch möglich Arrays mit einem string-basiertem Key oder auch einer Kombination aus beiden Varianten zu entpacken.

            ', + + 'performance_title' => 'Performance-Optimierungen', + 'performance_chart' => 'Symfony Demo App Request Zeit
            + 25 aufeinanderfolgende Läufe, 250 Requests (sek)
            + (kleiner ist besser)
            ', + 'performance_results_title' => 'Das Ergebnis (Relativ zu PHP 8.0):', + 'performance_results_symfony' => '23.0% schnellere Symfony Demo', + 'performance_results_wordpress' => '3.5% schnelleres WordPress', + 'performance_related_functions_title' => 'Performance relevante Features in PHP 8.1:', + 'performance_jit_arm64' => 'JIT Backend für ARM64 (AArch64)', + 'performance_inheritance_cache' => 'Vererbungscache (verhindern das Relinken von Klassen in bei jedem Request)', + 'performance_fast_class_name_resolution' => 'Schnelleres auflösen von Klassennamen (verhindern von Kleinschreibungsumwandlung und Hash Lookups )', + 'performance_timelib_date_improvements' => 'timelib und ext/date Performance-Optimierungen', + 'performance_spl' => 'SPL Dateisystem Iteratoren-Optimierungen', + 'performance_serialize_unserialize' => 'Serialisierung- / Deserialisierung-Optimierungen', + 'performance_internal_functions' => 'Einige Optimierungen an internen Funktionen (get_declared_classes(), explode(), strtr(), strnatcmp(), dechex())', + 'performance_jit' => 'JIT Verbesserungen und Korrekturen', + + 'other_new_title' => 'Neue Klassen, Interfaces und Funktionen', + 'other_new_returntypewillchange' => 'Neues Attribut #[ReturnTypeWillChange].', + 'other_new_fsync_fdatasync' => 'Neue Funktionen fsync und fdatasync.', + 'other_new_array_is_list' => 'Neue Funktion array_is_list.', + 'other_new_sodium_xchacha20' => 'Neue Sodium XChaCha20 Funktionen.', + + 'bc_title' => 'Veraltete Funktionalität und inkompatible Änderungen zu vorherigen PHP Versionen', + 'bc_null_to_not_nullable' => 'Übergabe von null an nicht null-fähige interne Funktionsparameter ist veraltet.', + 'bc_return_types' => 'Interne PHP Klassen-Methoden besitzen nun Rückgabetypen', + 'bc_serializable_deprecated' => 'Das Serializable Interface ist nun veraltet.', + 'bc_html_entity_encode_decode' => 'HTML-Entitäten en/decode Funktionen verarbeiten und ersetzen einfache Anführungszeichen im Standard.', + 'bc_globals_restrictions' => 'Restriktionen an der $GLOBALS Variable.', + 'bc_mysqli_exceptions' => 'MySQLi: Der Standard Error-Modus wirft nun Exceptions.', + 'bc_float_to_int_conversion' => 'Implizite nicht kompatible Float zu Int Konvertierung ist veraltet.', + 'bc_finfo_objects' => 'finfo Erweiterung: file_info nutzt nun das finfo-Objekt statt einer resource.', + 'bc_imap_objects' => 'IMAP: imap nutzt nun das IMAP\Connection Objekt statt des resource-Typen.', + 'bc_ftp_objects' => 'FTP Erweiterung: Nutzt nun das FTP\Connection Objekt statt des resource-Typen.', + 'bc_gd_objects' => 'GD Erweiterung: Die Klasse GdFont ersetzt nun den zuvor genutzten resource-Typ.', + 'bc_ldap_objects' => 'LDAP: Die resource-Typen wurden auf LDAP\Connection, LDAP\Result und LDAP\ResultEntry umgestellt.', + 'bc_postgresql_objects' => 'PostgreSQL: Die resource-Typen wurden auf PgSql\Connection, PgSql\Result und PgSql\Lob umgestellt.', + 'bc_pspell_objects' => 'Pspell: Der resource-Typ von pspell und pspell config wurden auf PSpell\Dictionary und PSpell\Config umgestellt.', + + 'footer_title' => 'Bessere Performance, verbesserte Syntax und verbesserte Typensicherheit.', + 'footer_content' => '

            + Für den direkten Code-Download von PHP 8.1 schaue bitte auf der Downloads Seite vorbei. + Windows Pakete können auf der PHP für Windows Seite gefunden werden. + Die Liste der Änderungen ist im ChangeLog festgehalten. +

            +

            + Der Migration Guide ist im PHP Manual verfügbar. Lies dort + nach für detaillierte Informationen zu den neuen Funktionen und inkompatiblen Änderungen zu vorherigen PHP + Versionen. +

            ', +]; diff --git a/releases/8.1/languages/en.php b/releases/8.1/languages/en.php new file mode 100644 index 0000000000..9f62cbf49a --- /dev/null +++ b/releases/8.1/languages/en.php @@ -0,0 +1,91 @@ + 'PHP 8.1 is a major update of the PHP language. Enums, readonly properties, first-class callable syntax, fibers, intersection types, performance improvements and more.', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.1 is a major update of the PHP language.
            It contains many new features, including enums, readonly properties, first-class callable syntax, fibers, intersection types, performance improvements and more.', + 'upgrade_now' => 'Upgrade to PHP 8.1 now!', + 'documentation' => 'Doc', + + 'enumerations_title' => 'Enumerations', + 'enumerations_content' => 'Use enum instead of a set of constants and get validation out of the box.', + + 'readonly_properties_title' => 'Readonly Properties', + 'readonly_properties_content' => '

            Readonly properties cannot be changed after initialization, i.e. after a value is assigned to them.
            They are a great way to model value objects and data-transfer objects.

            ', + + 'first_class_callable_syntax_title' => 'First-class Callable Syntax', + 'first_class_callable_syntax_content' => '

            It is now possible to get a reference to any function – this is called first-class callable syntax.

            ', + + 'new_in_initializers_title' => 'New in initializers', + 'new_in_initializers_content' => '

            Objects can now be used as default parameter values, static variables, and global constants, as well as in attribute arguments.

            +

            This effectively makes it possible to use nested attributes.

            ', + + 'pure_intersection_types_title' => 'Pure Intersection Types', + 'pure_intersection_types_content' => '

            Use intersection types when a value needs to satisfy multiple type constraints at the same time.

            +

            It is not currently possible to mix intersection and union types together such as A&B|C.

            ', + + 'never_return_type_title' => 'Never return type', + 'never_return_type_content' => '

            A function or method declared with the never type indicates that it will not return a value and will either throw an exception or end the script’s execution with a call of die(), exit(), trigger_error(), or something similar.

            ', + + 'final_class_constants_title' => 'Final class constants', + 'final_class_constants_content' => '

            It is possible to declare final class constants, so that they cannot be overridden in child classes.

            ', + + 'octal_numeral_notation_title' => 'Explicit Octal numeral notation', + 'octal_numeral_notation_content' => '

            It is now possible to write octal numbers with the explicit 0o prefix.

            ', + + 'fibers_title' => 'Fibers', + 'fibers_content' => '

            Fibers are primitives for implementing lightweight cooperative concurrency. They are a means of creating code blocks that can be paused and resumed like Generators, but from anywhere in the stack. Fibers themselves don\'t magically provide concurrency, there still needs to be an event loop. However, they allow blocking and non-blocking implementations to share the same API.

            Fibers allow getting rid of the boilerplate code previously seen with Promise::then() or Generator based coroutines. Libraries will generally build further abstractions around Fibers, so there\'s no need to interact with them directly.

            ', + + 'array_unpacking_title' => 'Array unpacking support for string-keyed arrays', + 'array_unpacking_content' => '

            PHP supported unpacking inside arrays through the spread operator before, but only if the arrays had integer keys. Now it is possible to unpack arrays with string keys too.

            ', + + 'performance_title' => 'Performance Improvements', + 'performance_chart' => 'Symfony Demo App request time
            + 25 consecutive runs, 250 requests (sec)
            + (less is better)
            ', + 'performance_results_title' => 'The result (relative to PHP 8.0):', + 'performance_results_symfony' => '23.0% Symfony Demo speedup', + 'performance_results_wordpress' => '3.5% WordPress speedup', + 'performance_related_functions_title' => 'Performance related features in PHP 8.1:', + 'performance_jit_arm64' => 'JIT backend for ARM64 (AArch64)', + 'performance_inheritance_cache' => 'Inheritance cache (avoid relinking classes in each request)', + 'performance_fast_class_name_resolution' => 'Fast class name resolution (avoid lowercasing and hash lookup)', + 'performance_timelib_date_improvements' => 'timelib and ext/date performance improvements', + 'performance_spl' => 'SPL file-system iterators improvements', + 'performance_serialize_unserialize' => 'serialize/unserialize optimizations', + 'performance_internal_functions' => 'Some internal functions optimization (get_declared_classes(), explode(), strtr(), strnatcmp(), dechex())', + 'performance_jit' => 'JIT improvements and fixes', + + 'other_new_title' => 'New Classes, Interfaces, and Functions', + 'other_new_returntypewillchange' => 'New #[ReturnTypeWillChange] attribute.', + 'other_new_fsync_fdatasync' => 'New fsync and fdatasync functions.', + 'other_new_array_is_list' => 'New array_is_list function.', + 'other_new_sodium_xchacha20' => 'New Sodium XChaCha20 functions.', + + 'bc_title' => 'Deprecations and backward compatibility breaks', + 'bc_null_to_not_nullable' => 'Passing null to non-nullable internal function parameters is deprecated.', + 'bc_return_types' => 'Tentative return types in PHP built-in class methods', + 'bc_serializable_deprecated' => 'Serializable interface deprecated.', + 'bc_html_entity_encode_decode' => 'HTML entity en/decode functions process single quotes and substitute by default.', + 'bc_globals_restrictions' => '$GLOBALS variable restrictions.', + 'bc_mysqli_exceptions' => 'MySQLi: Default error mode set to exceptions.', + 'bc_float_to_int_conversion' => 'Implicit incompatible float to int conversion is deprecated.', + 'bc_finfo_objects' => 'finfo Extension: file_info resources migrated to existing finfo objects.', + 'bc_imap_objects' => 'IMAP: imap resources migrated to IMAP\Connection class objects.', + 'bc_ftp_objects' => 'FTP Extension: Connection resources migrated to FTP\Connection class objects.', + 'bc_gd_objects' => 'GD Extension: Font identifiers migrated to GdFont class objects.', + 'bc_ldap_objects' => 'LDAP: resources migrated to LDAP\Connection, LDAP\Result, and LDAP\ResultEntry objects.', + 'bc_postgresql_objects' => 'PostgreSQL: resources migrated to PgSql\Connection, PgSql\Result, and PgSql\Lob objects.', + 'bc_pspell_objects' => 'Pspell: pspell, pspell config resources migrated to PSpell\Dictionary, PSpell\Config class objects.', + + 'footer_title' => 'Better performance, better syntax, improved type safety.', + 'footer_content' => '

            + For source downloads of PHP 8.1 please visit the downloads page. + Windows binaries can be found on the PHP for Windows site. + The list of changes is recorded in the ChangeLog. +

            +

            + The migration guide is available in the PHP Manual. Please + consult it for a detailed list of new features and backward-incompatible changes. +

            ', +]; diff --git a/releases/8.1/languages/es.php b/releases/8.1/languages/es.php new file mode 100644 index 0000000000..75485a3424 --- /dev/null +++ b/releases/8.1/languages/es.php @@ -0,0 +1,95 @@ + 'PHP 8.1 es una actualización importante del lenguaje PHP. Enumeraciones, propiedades de solo lectura, sintaxis first-class callable, fibers, tipos de intersección, mejoras de rendimiento y más.', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.1 es una actualización importante del lenguaje PHP.
            Contiene muchas características nuevas y mejoradas, incluyendo enumeraciones, propiedades de solo lectura, sintaxis first-class callable, fibers, tipos de intersección, mejoras de rendimiento y más.', + 'upgrade_now' => '¡Actualizar a PHP 8.1 ahora!', + 'documentation' => 'Doc', + + 'enumerations_title' => 'Enumeraciones', + 'enumerations_content' => 'Use enum en lugar de un conjunto de constantes y obtenga la validación lista para su uso.', + + 'readonly_properties_title' => 'Propiedades de solo lectura', + 'readonly_properties_content' => '

            Las propiedades de solo lectura no se pueden cambiar después de la inicialización, es decir, después de que se les asigne un valor. Son una excelente manera de modelar objetos de valor y objetos de transferencia de datos.

            ', + + 'first_class_callable_syntax_title' => 'Sintaxis First-class Callable', + 'first_class_callable_syntax_content' => '

            Ahora es posible obtener una referencia a cualquier función; esto se llama sintaxis First-class Callable.

            ', + + 'new_in_initializers_title' => 'Expresión New en constructor', + 'new_in_initializers_content' => '

            Los objetos instanciados pueden ahora se utilizados como parámetros por defecto, así como variables estáticas, constantes globales, así como argumentos de atributos.

            +

            Esto efectivamente permite usar atributos anidados.

            ', + + 'pure_intersection_types_title' => 'Tipos de intersección pura', + 'pure_intersection_types_content' => '

            Utilice tipos de intersección cuando un valor necesite resolver varias restricciones de tipado al mismo tiempo.

            +

            Actualmente no es posible mezclar tipos de intersección y unión como A&B|C.

            ', + + 'never_return_type_title' => 'Tipo de retorno Never', + 'never_return_type_content' => '

            Una función o método declarado con el tipo never indica que no devolverá un valor y producirá una excepción o finalizará la ejecución del script con una llamada de die(), exit(), trigger_error(), o similar.

            ', + + 'final_class_constants_title' => 'Constantes de clase final', + 'final_class_constants_content' => '

            Es posible declarar la constante final en la clase, para que no puedan ser sobreescrita en las clases heredadas.

            ', + + 'octal_numeral_notation_title' => 'Notación numérica octal explícita', + 'octal_numeral_notation_content' => '

            Ahora es posible escribir números octales con el prefijo explícito 0o.

            ', + + 'fibers_title' => 'Fibers', + 'fibers_content' => '

            Fibers es la forma primitiva para la implementación ligera de concurrencia. Son un medio para crear bloques de código que se puedan pausarse y reanudarse como generadores (Generators), pero desde cualquier lugar de la pila. Los Fibers en sí mismo, no proporcionan la concurrecia mágicamente, todavía se necesita tener un bucle de eventos. Sin embargo, permiten que las implementaciones de bloqueo y no-bloqueo compartan la misma API.

            Los Fibers permiten deshacerse del código repetitivo visto anteriormente con Promise::then() o las corutinas basadas en el generador (Generator). Las bibliotecas generalmente construirán más abstracciones alrededor de Fibers, por lo que no hay necesidad de interactuar con ellas directamente.

            ', + + 'array_unpacking_title' => 'Soporte de desestructuración de Arrays', + 'array_unpacking_content' => '

            PHP soportaba la desestructuración de Arrays, pero solo si el Array tenía keys de tipo integer. Ahora también es posible la desestructuración de Arrays con keys de tipo string.

            ', + + 'performance_title' => 'Mejoras de rendimiento', + 'performance_chart' => 'Aplicación de demostración de Symfony - tiempo de solicitudes
            + 25 ejecuciones consecutivas, 250 solicitudes (seg)
            + (menos es mejor)
            ', + 'performance_results_title' => 'El resultado (en relación con PHP 8.0):', + 'performance_results_symfony' => 'La aplicación de demostración de Symfony es 23.0% más rápida', + 'performance_results_wordpress' => 'Un sitio WordPress es 3.5% más rápido', + 'performance_related_functions_title' => 'Características relacionadas con el rendimiento en PHP 8.1:', + 'performance_jit_arm64' => 'JIT backend para ARM64 (AArch64)', + 'performance_inheritance_cache' => 'Caché heredado (Evite volver a vincular clases en cada solicitud)', + 'performance_fast_class_name_resolution' => 'Resolución rápida de nombres de clases (evita la resolución de nombres en minúscula y la búsqueda vía hash)', + 'performance_timelib_date_improvements' => 'Mejoras en el rendimiento de timelib and ext/date', + 'performance_spl' => 'Mejoras en los iteradores del sistema de archivos SPL', + 'performance_serialize_unserialize' => 'Optimización en serialize/unserialize', + 'performance_internal_functions' => 'Optimización de algunas funciones internas (get_declared_classes(), explode(), strtr(), strnatcmp(), dechex())', + 'performance_jit' => 'Mejoras y correcciones de JIT', + + 'other_new_title' => 'Nuevas clases, interfaces y funciones', + 'other_new_returntypewillchange' => 'Nuevo atributo #[ReturnTypeWillChange].', + 'other_new_fsync_fdatasync' => 'Nuevas funciones fsync y fdatasync.', + 'other_new_array_is_list' => 'Nueva función array_is_list.', + 'other_new_sodium_xchacha20' => 'Nuevas funciones para Sodium XChaCha20.', + + 'bc_title' => 'Obsolescencias y la falta de compatibilidad con versiones anteriores', + 'bc_null_to_not_nullable' => 'Pasar null como parámetro en funciones internas non-nullable queda obsoleto.', + 'bc_return_types' => 'Tipos de retorno en los métodos de clase integrados de PHP', + 'bc_serializable_deprecated' => 'Interfaz Serializable es obsoleta.', + 'bc_html_entity_encode_decode' => 'Las funciones de entidad HTML en/decode procesan comillas simples y son sustituidas por defecto.', + 'bc_globals_restrictions' => 'Restricciones en la variable $GLOBALS.', + 'bc_mysqli_exceptions' => 'MySQLi: Modo de error predeterminado establecido en excepciones.', + 'bc_float_to_int_conversion' => 'La conversión implícita incompatible de float a int es obsoleta.', + 'bc_finfo_objects' => 'Extensión finfo: recursos de file_info migrado a objetos finfo existentes.', + 'bc_imap_objects' => 'IMAP: imap resources migrated to IMAP\Connection class objects.', + 'bc_ftp_objects' => ' Extensión FTP: Recursos de conexión migrados a la clase FTP\Connection.', + 'bc_gd_objects' => 'Extensión GD: Los indetificadores de fuentes (Font) migrados a la clase GdFont.', + 'bc_ldap_objects' => 'LDAP: recursos migrados a las clases LDAP\Connection, LDAP\Result, y LDAP\ResultEntry.', + 'bc_postgresql_objects' => 'PostgreSQL: recursos migrados a las clases PgSql\Connection, PgSql\Result, y PgSql\Lob.', + 'bc_pspell_objects' => 'Pspell: los recursos de configuración de pspell y pspell han sido migrados a las clases PSpell\Dictionary, PSpell\Config.', + + 'footer_title' => 'Mejor rendimiento, mejor sintaxis, mejor seguridad de tipos.', + 'footer_content' => '

            + Para descargar el código fuente de PHP 8.1, visite la página de descargas. + Los binarios de Windows se encuentran en el sitio de PHP para Windows. + La lista de cambios se registra en el ChangeLog. +

            +

            + La guía de migración está disponible en el Manual de PHP. Por favor, + consúltelo para obtener una lista detallada de las nuevas características y los cambios incompatibles con versiones anteriores. +

            ', +]; diff --git a/releases/8.1/languages/ja.php b/releases/8.1/languages/ja.php new file mode 100644 index 0000000000..9c993e7dfb --- /dev/null +++ b/releases/8.1/languages/ja.php @@ -0,0 +1,94 @@ + 'PHP8.1は、PHPのメジャーアップデートです。Enum、読み取り専用プロパティ、callableの新シンタックス、Fiber、交差型、パフォーマンス向上など数々の新機能があります。', + 'main_title' => 'リリース!', + 'main_subtitle' => 'PHP8.1は、PHPのメジャーアップデートです。
            Enum、読み取り専用プロパティ、callableの新シンタックス、Fiber、交差型、パフォーマンス向上など数々の新機能があります。', + 'upgrade_now' => '今すぐアップデートする。', + 'documentation' => 'ドキュメント', + + 'enumerations_title' => 'ENUM型', + 'enumerations_content' => '

            定数のかわりにENUMを使うことで、すっきりと書けるようになります。

            ', + + 'readonly_properties_title' => '読み取り専用プロパティ', + 'readonly_properties_content' => '

            読み取り専用プロパティは、一度でも値を割り当てると、その後変更することはできません。
            これはValue ObjectやData Transfer Objectを実現するのに最適です。

            ', + + 'first_class_callable_syntax_title' => '第一級callable', + 'first_class_callable_syntax_content' => '

            任意の関数へのリファレンスを取得できるようになりました。第一級callableと呼ばれます。

            ', + + 'new_in_initializers_title' => '引数デフォルト値にNew', + 'new_in_initializers_content' => '

            引数デフォルト値、およびstatic変数、グローバル定数、アトリビュート引数にnewを書けるようになりました。

            +

            特にアトリビュートの入れ子において威力を発揮します。

            ', + + 'pure_intersection_types_title' => '交差型', + 'pure_intersection_types_content' => '

            交差型は、複数の型を全て満たすことを示す型です。

            +

            A&B|Cのように、交差型とUNION型を混在させることは今のところできません。

            ', + + 'never_return_type_title' => 'Never型', + 'never_return_type_content' => '

            値を返さないことを示すnever型が追加されました。die()exit()trigger_error()等、関数内でスクリプトが中断される場合に使います。

            ', + + 'final_class_constants_title' => 'Finalクラス定数', + 'final_class_constants_content' => '

            Finalクラス定数は、子クラスで上書きされないことが保証されるクラス定数です。

            ', + + 'octal_numeral_notation_title' => '8進数表記', + 'octal_numeral_notation_content' => '

            8進数を0oのプレフィックスで書くことができるようになりました。

            ', + + 'fibers_title' => 'Fiber', + 'fibers_content' => '

            Fiberは同時実行を実現する軽量な機能です。ジェネレータのような、スタックのどこからでも一時停止や再開が可能なコードを作ることができます。ただしFiber自体は必要最低限の機能しか持っていないため、非同期処理を実現するためにはイベントループ等の実装が必要です。

            ユーザがFiberを直接使用することはほとんどなく、ライブラリを経由して利用することが推奨されます。

            ', + + 'array_unpacking_title' => '文字列キー配列のアンパック', + 'array_unpacking_content' => '

            これまでPHPは、スプレッド演算子による配列展開は数値キーしか対応していませんでした。PHP8.1では文字列キーの配列についてもアンパックに対応します。

            ', + + 'performance_title' => 'パフォーマンス向上', + 'performance_chart' => 'Symfonyデモ リクエスト時間
            + 秒間250リクエストを25回連続実行
            ', + 'performance_results_title' => 'PHP8.0に対して:', + 'performance_results_symfony' => 'Symfonyデモでは23.0%の高速化を達成。', + 'performance_results_wordpress' => 'WordPressでは3.5%の高速化を達成。', + 'performance_related_functions_title' => 'PHP8.1でのパフォーマンス向上技術:', + 'performance_jit_arm64' => 'ARM64 (AArch64)へのJITバックエンド対応。', + 'performance_inheritance_cache' => 'リクエスト毎にクラスを再リンクせず、キャッシュを継続する。', + 'performance_fast_class_name_resolution' => 'クラス名の解決の高速化。', + 'performance_timelib_date_improvements' => 'timelibおよびext/dateの高速化。', + 'performance_spl' => 'SPLイテレータの改良。', + 'performance_serialize_unserialize' => 'serialize/unserializeの最適化。', + 'performance_internal_functions' => 'いくつかの内部関数(get_declared_classes()・explode()・strtr()・strnatcmp()・dechex()等)の最適化。', + 'performance_jit' => 'JITの改善。', + + 'other_new_title' => '新しいクラス・インターフェイス・関数', + 'other_new_returntypewillchange' => '#[ReturnTypeWillChange]アトリビュート。', + 'other_new_fsync_fdatasync' => 'fsyncfdatasync関数。', + 'other_new_array_is_list' => 'array_is_list関数。', + 'other_new_sodium_xchacha20' => 'SodiumがXChaCha20暗号化に対応。', + + 'bc_title' => '互換性のない変更点', + 'bc_null_to_not_nullable' => 'nullableでない内部関数にnullを渡すことを非推奨化。', + 'bc_return_types' => 'ビルトインクラスの返り値の型判定が厳格になりました。', + 'bc_serializable_deprecated' => 'Serializableインターフェイスを非推奨化。', + 'bc_html_entity_encode_decode' => 'HTMLエンコード関数は、デフォルトでシングルクォートもエスケープするようになりました。', + 'bc_globals_restrictions' => '$GLOBALSの扱いが他のグローバル変数と同じようになりました。', + 'bc_mysqli_exceptions' => 'MySQLiのエラーモードのデフォルトが例外になりました。', + 'bc_float_to_int_conversion' => 'floatからintへ暗黙の型変換を非推奨化。', + 'bc_finfo_objects' => 'file_infoが返す型はリソースからfinfoオブジェクトになりました。', + 'bc_imap_objects' => 'imap関数が返す型はリソースからIMAP\Connectionオブジェクトになりました。', + 'bc_ftp_objects' => 'FTP関数が返す型はリソースからFTP\Connectionオブジェクトになりました。', + 'bc_gd_objects' => 'GDのフォント関数が返す型はリソースからGdFontオブジェクトになりました。', + 'bc_ldap_objects' => 'LDAP関数が返す型はリソースからLDAP\ConnectionLDAP\ResultLDAP\ResultEntryオブジェクトになりました。', + 'bc_postgresql_objects' => 'PostgreSQL関数が返す型はリソースからPgSql\ConnectionPgSql\ResultPgSql\Lobオブジェクトになりました。', + 'bc_pspell_objects' => 'Pspell関数が返す型はリソースからPSpell\DictionaryPSpell\Configオブジェクトになりました。', + + 'footer_title' => 'より良いパフォーマンス、より良いシンタックス、より良い型安全性。', + 'footer_content' => '

            + PHP 8.1 ソースコードのダウンロードは こちらから。 + Windowsのバイナリはこちらから。 + 変更点の一覧はこちらにあります。 +

            +

            + マニュアルからマイグレーションガイドが利用可能です。 + 新機能や互換性のない変更の詳細については、マイグレーションガイドを参照してください。 +

            ', +]; diff --git a/releases/8.1/languages/ka.php b/releases/8.1/languages/ka.php new file mode 100644 index 0000000000..f9af3d2248 --- /dev/null +++ b/releases/8.1/languages/ka.php @@ -0,0 +1,96 @@ + 'PHP 8.1 — PHP ენის დიდი განახლება. ჩამოთვლები, readonly-თვისებები, callback-ფუნქციები როგორც პირველი კლასის ობიექტები, ფაიბერები, ტიპების კვეთა, წარმადობის გაუმჯობესება და სხვა მრავალი.', + 'main_title' => 'რელიზი!', + 'main_subtitle' => 'PHP 8.1 — PHP ენის დიდი განახლება.
            ის შეიცავს ბევრ ახალ შესაძლებლობას, მათ შორის ჩამოთვლები, readonly-თვისებები, callback-ფუნქციები როგორც პირველი კლასის ობიექტები, ფაიბერები, ტიპების კვეთა, წარმადობის გაუმჯობესება და სხვა მრავალი.', + 'upgrade_now' => 'გადადით PHP 8.1-ზე!!', + 'documentation' => 'დოკუმენტაცია', + + 'enumerations_title' => 'ჩამოთვლები', + 'enumerations_content' => 'გამოიყენეთ ჩამოთვლები კონსტანტების ნაკრების ნაცვლად, კოდის შესრულების დროს, მათი ავტომატური ვალიდაციისთვის.', + + 'readonly_properties_title' => 'Readonly-თვისებები', + 'readonly_properties_content' => '

            Readonly თვისებების შეცვლა შეუძლებელია ინიციალიზაციის შემდეგ (ანუ მას შემდეგ რაც მათ მიენიჭება მნიშვნელობა).
            ისინი ძალიან სასარგებლო იქნება ისეთი ობიექტების განხორციელებისას, როგორიცაა VO და DTO.

            ', + + 'first_class_callable_syntax_title' => 'Callback-ფუნქციები როგორც პირველი კლასის ობიექტები', + 'first_class_callable_syntax_content' => '

            ახალი სინტაქსით, ნებისმიერ ფუნქციას შეუძლია იმოქმედოს როგორც პირველი კლასის ობიექტი. ამრიგად, ის ჩაითვლება როგორც ჩვეულებრივი მნიშვნელობა, რომელიც შეიძლება, მაგალითად, შევინახოთ ცვლადში.

            ', + + 'new_in_initializers_title' => 'ობიექტის გაფართოებული ინიციალიზაცია', + 'new_in_initializers_content' => '

            ახლა ობიექტები შეიძლება გამოყენებულ იქნას როგორც ნაგულისხმევი პარამეტრის მნიშვნელობები, სტატიკური ცვლადებისა და გლობალური კონსტანტებში, და ასევე ატრიბუტების არგუმენტებში.

            +

            ამრიგად, შესაძლებელი გახდა ჩაშენებული არგუმენტების გამოყენება.

            ', + + 'pure_intersection_types_title' => 'ტიპების კვეთა', + 'pure_intersection_types_content' => '

            გამოიყენეთ კვეთის ტიპები, როდესაც მნიშვნელობას სჭირდება ერთდროულად მრავალი ტიპის შეზღუდვის დაკმაყოფილება.

            +

            ამ დროისთვის, ტიპის კვეთა არ შეიძლება გამოყენებულ იქნას გაერთიანებულ ტიპებთან ერთად., მაგალითად, A&B|C.

            ', + + 'never_return_type_title' => 'Never დაბრუნების ტიპი', + 'never_return_type_content' => '

            ფუნქცია ან მეთოდი, რომელიც გამოცხადებულია never ტიპთან ერთად, მიუთითებს იმაზე, რომ ისინი არ დააბრუნებენ მნიშვნელობას და ან გამოიტანს გამონაკლისს, ან დაასრულებს სკრიპტის შესრულებას ფუნქციის die(), exit(), trigger_error() გამოძახებით, ან რაიმე მსგავსით.

            ', + + 'final_class_constants_title' => 'კლასის საბოლოო კონსტანტები', + 'final_class_constants_content' => '

            უკვე, კლასის კონსტანტები შესაძლებელია გამოცხადდეს როგორც საბოლოო (final), რათა მათი ხელახლა გამოცხადება არ მოხდეს შვილ კლასებში.

            ', + + 'octal_numeral_notation_title' => 'აშკარა რვაობითი რიცხვითი აღნიშვნა', + 'octal_numeral_notation_content' => '

            ახლა თქვენ შეგიძლიათ ჩაწეროთ რვაობითი რიცხვები აშკარა პრეფიქსით 0o prefix.

            ', + + 'fibers_title' => 'ფაიბერები', + 'fibers_content' => '

            ფაიბერები - ეს არის პრიმიტივები მსუბუქი საერთო კონკურენციის განსახორციელებლად. ისინი წარმოადგენენ კოდის ბლოკების შექმნის საშუალებას, რომელიც შეიძლება შეჩერდეს და განახლდეს, გენერატორების მსგავსად, მაგრამ სტეკის ნებისმიერი წერტილიდან. ფაიბერები თავისთავად არ იძლევა ამოცანების ასინქრონულად შესრულების შსაძლებლობას, მაინც უნდა არსებობდეს მოვლენის მართვის ციკლი. თუმცა, ისინი საშუალებას აძლევენ მბლოკავ და არამბლოკავ რეალიზაციება გამოიყენონ ერთი და იგივე იგივე API.

            +

            ფაიბერები საშუალებას გაძლევთ თავიდან აიცილოთ შაბლონური კოდი, რომელსაც ადრე იყენებდნენ Promise::then() გამოყენებით ან გენერატორზე დაფუძნებული კორუტინები. ბიბლიოთეკები ჩვეულებრივ ქმნიან დამატებით აბსტრაქციებს ფაიბერების ირგვლივ, ამიტომ არ არის საჭირო მათთან უშუალო ურთიერთობა.

            ', + + 'array_unpacking_title' => 'მასივების ჩამოქაფების მხარდაჭერა სტრიქონიანი გასაღებებით', + 'array_unpacking_content' => '

            PHP ადრე გამოიყენება მასივების ჩამოქაფებას ოპერატორის ... დახმარებით, მაგრამ მხოლოდ იმ შემთხვევაში, თუ მასივები იყო მთელი რიცხვების გასაღებით. ახლა თქვენ ასევე შეგიძლიათ ჩამოქაფოთ მასივები სტრიქონიანი გასაღებებით.

            ', + + 'performance_title' => 'შესრულების გაუმჯობესება', + 'performance_chart' => 'Symfony-ის დემო აპლიკაციის მოთხოვნის დრო
            + 25 ზედიზედ გაშვება, 250 მოთხოვნა (წმ)
            + (რაც ნაკლები მით უკეთესი)
            ', + 'performance_results_title' => 'შედეგი (PHP 8.0-თან შედარებით):', + 'performance_results_symfony' => 'Symfony დემო აპლიკაციის დაჩქარება 23.0%-ით', + 'performance_results_wordpress' => 'WordPress-ის 3.5%-ით დაჩქარება', + 'performance_related_functions_title' => 'ფუნქციონალურობა გაუმჯობესებული შესრულებით PHP 8.1-ში:', + 'performance_jit_arm64' => 'JIT ბექენდი ARM64 (AArch64)-თვის', + 'performance_inheritance_cache' => 'მემკვიდრეობითი ქეში (თავიდან აირიდეთ კლასების ხელახლა დაკავშირება ყველა მოთხოვნაში)', + 'performance_fast_class_name_resolution' => 'კლასის სახელის სწრაფი გარჩევადობა (მოერიდეთ მცირე რეგისტრს და ჰეშში ძიებას)', + 'performance_timelib_date_improvements' => 'შესრულების გაუმჯობესება timelib და ext/date.', + 'performance_spl' => 'SPL ფაილური სისტემის იტერატორების გაუმჯობესება.', + 'performance_serialize_unserialize' => 'serialize()/unserialize() ფუნქციების ოპტიმიზაცია.', + 'performance_internal_functions' => 'ზოგიერთი შიდა ფუნქციის ოპტიმიზაცია (get_declared_classes(), explode(), strtr(), strnatcmp(), dechex())', + 'performance_jit' => 'JIT-ის გაუმჯობესება და შესწორებები.', + + 'other_new_title' => 'ახალი კლასები, ინტერფეისები და ფუნქციები', + 'other_new_returntypewillchange' => 'დამატებულია ახალი ატრიბუტი #[ReturnTypeWillChange].', + 'other_new_fsync_fdatasync' => 'დამატებულია ფუნქციები fsync და fdatasync.', + 'other_new_array_is_list' => 'დამატებულია ახალი ფუნქცია array_is_list.', + 'other_new_sodium_xchacha20' => 'ახალი ფუნქციები Sodium XChaCha20.', + + 'bc_title' => 'მოძველებული ფუნქციონალობა და ცვლილებები უკუ თავსებადობაში', + 'bc_null_to_not_nullable' => 'NULL მნიშვნელობების ჩაშენებული ფუნქციის პარამეტრებზე გადაცემა, მოძველებულია.', + 'bc_return_types' => 'დაბრუნების წინასწარი ტიპები რომლებიც აბრუნებს მნიშვნელობებს PHP-ის ჩაშენებული კლასის მეთოდებში', + 'bc_serializable_deprecated' => 'Serializable ინტერფეისი მოძველებულია.', + 'bc_html_entity_encode_decode' => 'HTML ერთეულის კოდირების/დეკოდირების ფუნქციები გარდაქმნის ერთმაგ ბრჭყალებს და ცვლის არასწორ სიმბოლოებს იუნიკოდის შემცვლელი სიმბოლოთი.', + 'bc_globals_restrictions' => '$GLOBALS ცვლადის გამოყენების შეზღუდვები.', + 'bc_mysqli_exceptions' => 'MySQLi: ნაგულისხმევი შეცდომის რეჟიმი დაყენებულია გამონაკლისებზე.', + 'bc_float_to_int_conversion' => 'იმპლიციტური შეუთავსებელი რიცხვის მცოცავი წერტილიდან მთელ რიცხვამდე კონვერტაცია მოძველებულია.', + 'bc_finfo_objects' => 'finfo მოდული: file_info რესურსები ახლა წარმოდგენილია როგორც finfo ობიექტი.', + 'bc_imap_objects' => 'IMAP: imap რესურსები ახლა წარმოდგენილია როგორც IMAP\Connection ობიექტი.', + 'bc_ftp_objects' => 'FTP Extension: Connection რესურსები ახლა წარმოდგენილია როგორც FTP\Connection ობიექტი.', + 'bc_gd_objects' => 'GD Extension: Font identifiers тახლა წარმოდგენილია როგორც GdFont ობიექტი.', + 'bc_ldap_objects' => 'LDAP: რესურსები ახლა წარმოდგენილია როგორც ობიექტი LDAP\Connection, LDAP\Result, და LDAP\ResultEntry objects.', + 'bc_postgresql_objects' => 'PostgreSQL: რესურსები ახლა წარმოდგენილია როგორც ობიექტი PgSql\Connection, PgSql\Result, და PgSql\Lob.', + 'bc_pspell_objects' => 'Pspell: რესურსები pspell, pspell config წარმოდგენილია როგორც ობიექტი PSpell\Dictionary, PSpell\Config', + + 'footer_title' => 'უკეთესი წარმადობა, უკეთესი სინტაქსი, უფრო საიმედო ტიპების სისტემა.', + 'footer_content' => '

            + PHP 8.1 წყაროს კოდის ჩამოსატვირთად ეწვიეთ გვერდს ჩამოტვირთვა. + Windows-ის ბინარული ფაილები განთავსებულია საიტზე PHP Windows-თვის. + ცვლილებების სია წარმოდგენილია ChangeLog-ში. +

            +

            + მიგრაციის გზამკვლევი ხელმისაწვდომია დოკუმენტაციის განყოფილებაში. + გთხოვთ, შეისწავლოთ იგი ახალი ფუნქციების დეტალური ჩამონათვალის მისაღებად და უკუ შეუთავსებელი ცვლილებებისთვის. +

            ', +]; diff --git a/releases/8.1/languages/pt_BR.php b/releases/8.1/languages/pt_BR.php new file mode 100644 index 0000000000..e1845b5aba --- /dev/null +++ b/releases/8.1/languages/pt_BR.php @@ -0,0 +1,95 @@ + 'PHP 8.1 é uma atualização importante da linguagem PHP. Enums, propriedades somente leitura, sintaxe de callables de primeira classe, fibras, tipos de interseção, melhorias de performance e mais.', + 'main_title' => 'Lançado!', + 'main_subtitle' => 'PHP 8.1 é uma atualização importante da linguagem PHP.
            Ela contem muitas funcionalidades novas, incluindo enums, propriedades somente leitura, sintaxe de chamáveis de primeira classe, fibras, tipos de interseção, melhorias de performance e mais.', + 'upgrade_now' => 'Atualize para o PHP 8.1 agora!', + 'documentation' => 'Doc', + + 'enumerations_title' => 'Enumerações', + 'enumerations_content' => 'Use enum em vez de um conjunto de constantes e obtenha validação de forma transparente.', + + 'readonly_properties_title' => 'Propriedades Somente Leitura', + 'readonly_properties_content' => '

            Propriedades somente leitura não podem ser alteradas após a inicialização, ou seja, após um valor ser atribuido a elas.
            Elas são uma ótima maneira de modelar objetos de valor (Value Objects) e objetos de transferência de dados (DTO).

            ', + + 'first_class_callable_syntax_title' => 'Sintaxe de Callabes de Primeira Classe', + 'first_class_callable_syntax_content' => '

            Agora é possível obter a referência de qualquer função – isso é chamado de sintaxe de callable de primeira classe.

            ', + + 'new_in_initializers_title' => 'New em inicializadores', + 'new_in_initializers_content' => '

            Objetos agora podem ser usados como valor padrão de parâmetros, variáveis estáticas, e constantes globais, bem como em argumentos de atributos.

            +

            Isso efetivamente torna possível usar atributos aninhados.

            ', + + 'pure_intersection_types_title' => 'Tipos de Interseção Puros', + 'pure_intersection_types_content' => '

            Use tipos de interseção quando um valor precisa satisfazer múltiplas restrições de tipo ao mesmo tempo.

            +

            Atualmente não é possível misturar tipos de interseção e união como A&B|C.

            ', + + 'never_return_type_title' => 'Tipo de retorno never', + 'never_return_type_content' => '

            Uma função ou método declarada com o tipo never indica que ela não irá retornar um valor e irá lançar uma exceção ou terminar a execução do script com uma chamada de die(), exit(), trigger_error(), ou algo similar.

            ', + + 'final_class_constants_title' => 'Constantes de classe finais', + 'final_class_constants_content' => '

            É possível declarar constantes de classe como final, de forma que elas não possam ser sobrescritas em classes filhas.

            ', + + 'octal_numeral_notation_title' => 'Notação explícita de numeral octal', + 'octal_numeral_notation_content' => '

            Agora é possível escrever números octais com o prefixo explícito 0o.

            ', + + 'fibers_title' => 'Fibras', + 'fibers_content' => '

            Fibras são primitivos para implementar concorrência cooperativa leve. Elas são meios de criar blocos de código que podem ser pausados e retomados como Geradores, mas de qualquer lugar da pilha de execução. Fibras em si não fornecem concorrência magicamente, um laço de eventos ainda é necessário. No entanto, elas permitem que implementações bloqueantes e não bloqueantes compartilhem a mesma API.

            Fibras permitem livrar-se de código boilerplate visto anteriormente com Promise::then() ou corrotinas baseadas em Geradores. Bibliotecas geralmente constróem abstrações adicionais em torno das Fibras, então não há necessidade de interagir com elas diretamente.

            ', + + 'array_unpacking_title' => 'Suporte a desempacotamento de array para arrays com chaves string', + 'array_unpacking_content' => '

            PHP já suportava o desempacotamento dentro de arrays através do operador de espalhamento, mas somente se o array tivesse chaves de inteiro. Agora também é possível desempacotar arrays com chaves string.

            ', + + 'performance_title' => 'Melhorias de Performance', + 'performance_chart' => 'Tempo de requisição do App Demo Symfony
            + 25 execuções consecutivas, 250 requisições (sec)
            + (menos é melhor)
            ', + 'performance_results_title' => 'O resultado (relativo ao PHP 8.0):', + 'performance_results_symfony' => '23.0% mais rápido no Demo Symfony', + 'performance_results_wordpress' => '3.5% mais rápido no WordPress', + 'performance_related_functions_title' => 'Funcionalidades relacionadas a performance no PHP 8.1:', + 'performance_jit_arm64' => 'Backend JIT para ARM64 (AArch64)', + 'performance_inheritance_cache' => 'Cache de herança (evita religamento de classes em cada requisição)', + 'performance_fast_class_name_resolution' => 'Resolução rápida de nome de classe (evita conversão em minúsculas e busca via hash)', + 'performance_timelib_date_improvements' => 'Melhorias de performance na timelib e ext/date', + 'performance_spl' => 'Melhorias em iteradores de sistema de arquivo SPL', + 'performance_serialize_unserialize' => 'Otimizações em serialize/unserialize', + 'performance_internal_functions' => 'Otimização de algumas funções internas (get_declared_classes(), explode(), strtr(), strnatcmp(), dechex())', + 'performance_jit' => 'Melhorias e correções no JIT', + + 'other_new_title' => 'Novas Classes, Interfaces e Funções', + 'other_new_returntypewillchange' => 'Novo atributo #[ReturnTypeWillChange].', + 'other_new_fsync_fdatasync' => 'Novas funções fsync e fdatasync.', + 'other_new_array_is_list' => 'Nova função array_is_list.', + 'other_new_sodium_xchacha20' => 'Novas funções Sodium XChaCha20.', + + 'bc_title' => 'Alterações obsoletas e incompatibilidades com versões anteriores', + 'bc_null_to_not_nullable' => 'Passagem de null para parâmetros não anuláveis em funções internas está depreciada.', + 'bc_return_types' => 'Tipos de retorno provisórios em métodos de classes embutidas do PHP.', + 'bc_serializable_deprecated' => 'Interface Serializable depreciada.', + 'bc_html_entity_encode_decode' => 'Funções de de/codificação de entidades HTML processam aspas simples e as substituem por padrão.', + 'bc_globals_restrictions' => 'Restrições da variável $GLOBALS.', + 'bc_mysqli_exceptions' => 'MySQLi: Modo de erro padrão definido para exceções.', + 'bc_float_to_int_conversion' => 'Conversão implícita incompatível de float para int está depreciada.', + 'bc_finfo_objects' => 'Extenção finfo: Recursos file_info migrados para objetos finfo existentes.', + 'bc_imap_objects' => 'IMAP: Recursos imap migrados para objetos da classe IMAP\Connection.', + 'bc_ftp_objects' => 'Extensão FTP: Recursos de conexão migrados para objetos da classe FTP\Connection.', + 'bc_gd_objects' => 'Extensão GD: Identificadores de fonte migrados para objetos da classe GdFont.', + 'bc_ldap_objects' => 'LDAP: Recursos migrados para objetos LDAP\Connection, LDAP\Result, e LDAP\ResultEntry.', + 'bc_postgresql_objects' => 'PostgreSQL: Recursos migrados para PgSql\Connection, PgSql\Result, e PgSql\Lob objects.', + 'bc_pspell_objects' => 'Pspell: Recursos de dicionário e configuração migrados para objetos de classe PSpell\Dictionary e PSpell\Config.', + + 'footer_title' => 'Mais performance, melhor sintaxe, segurança de tipos aperfeiçoada.', + 'footer_content' => '

            + Para downloads dos fontes do PHP 8.1, por favor visite a página de downloads. + Binarios para Windows podem ser encontrados no site PHP for Windows. + A lista de mudanças está registrada em ChangeLog. +

            +

            + O guia de migração está disponível no Manual do PHP. Por favor, + consulte-o para uma lista delhadada de novas funcionalidades e mudanças incompatíveis com versões anteriores. +

            ', +]; diff --git a/releases/8.1/languages/ru.php b/releases/8.1/languages/ru.php new file mode 100644 index 0000000000..077630db99 --- /dev/null +++ b/releases/8.1/languages/ru.php @@ -0,0 +1,97 @@ + 'PHP 8.1 — большое обновление языка PHP: перечисления, readonly-свойства, callback-функции как объекты первого класса, файберы, пересечение типов, улучшения производительности и многое другое.', + 'main_title' => 'доступен!', + 'main_subtitle' => 'PHP 8.1 — большое обновление языка PHP.
            Оно содержит множество новых возможностей, включая перечисления, readonly-свойства, callback-функции как объекты первого класса, файберы, пересечение типов, улучшения производительности и многое другое.', + 'upgrade_now' => 'Переходите на PHP 8.1!', + 'documentation' => 'Документация', + + 'enumerations_title' => 'Перечисления', + 'enumerations_content' => 'Используйте перечисления вместо набора констант, чтобы валидировать их автоматически во время выполнения кода.', + + 'readonly_properties_title' => 'Readonly-свойства', + 'readonly_properties_content' => '

            Readonly-свойства нельзя изменить после инициализации (т.е. когда им было присвоено значение).
            Они будут крайне полезны при реализации объектов типа VO и DTO.

            ', + + 'first_class_callable_syntax_title' => 'Callback-функции как объекты первого класса', + 'first_class_callable_syntax_content' => '

            С помощью нового синтаксиса любая функция может выступать в качестве объекта первого класса. Тем самым она будет рассматриваться как обычное значение, которое можно, например, сохранить в переменную.

            ', + + 'new_in_initializers_title' => 'Расширенная инициализация объектов ', + 'new_in_initializers_content' => '

            Объекты теперь можно использовать в качестве значений параметров по умолчанию, статических переменных и глобальных констант, а также в аргументах атрибутов.

            +

            Таким образом появилась возможность использования вложенных атрибутов.

            ', + + 'pure_intersection_types_title' => 'Пересечение типов', + 'pure_intersection_types_content' => '

            Теперь в объявлении типов параметров можно указать, что значение должно относиться к нескольким типам одновременно.

            +

            В данный момент пересечения типов нельзя использовать вместе с объединёнными типами, например, A&B|C.

            ', + + 'never_return_type_title' => 'Тип возвращаемого значения never', + 'never_return_type_content' => '

            Функция или метод, объявленные с типом never, указывают на то, что они не вернут значение и либо выбросят исключение, либо завершат выполнение скрипта с помощью вызова функции die(), exit(), trigger_error() или чем-то подобным.

            ', + + 'final_class_constants_title' => 'Окончательные константы класса', + 'final_class_constants_content' => '

            Теперь константы класса можно объявить как окончательные (final), чтобы их нельзя было переопределить в дочерних классах.

            ', + + 'octal_numeral_notation_title' => 'Явное восьмеричное числовое обозначение', + 'octal_numeral_notation_content' => '

            Теперь можно записывать восьмеричные числа с явным префиксом 0o.

            ', + + 'fibers_title' => 'Файберы', + 'fibers_content' => '

            Файберы — это примитивы для реализации облегчённой невытесняющей конкурентности. Они являются средством создания блоков кода, которые можно приостанавливать и возобновлять, как генераторы, но из любой точки стека. Файберы сами по себе не предоставляют возможностей асинхронного выполнения задач, всё равно должен быть цикл обработки событий. Однако они позволяют блокирующим и неблокирующим реализациям использовать один и тот же API.

            +

            Файберы позволяют избавиться от шаблонного кода, который ранее использовался с помощью Promise::then() или корутин на основе генератора. Библиотеки обычно создают дополнительные абстракции вокруг файберов, поэтому нет необходимости взаимодействовать с ними напрямую.

            ', + + 'array_unpacking_title' => 'Поддержка распаковки массивов со строковыми ключами', + 'array_unpacking_content' => '

            PHP раньше поддерживал распаковку массивов с помощью оператора ..., но только если массивы были с целочисленными ключами. Теперь можно также распаковывать массивы со строковыми ключами.

            ', + + 'performance_title' => 'Улучшения производительности', + 'performance_chart' => 'Время запроса демо-приложения Symfony
            + 25 последовательных запусков по 250 запросов (сек)
            + (чем меньше тем лучше)
            ', + 'performance_results_title' => 'Результат (относительно PHP 8.0):', + 'performance_results_symfony' => 'Ускорение демо-приложения Symfony на 23,0%', + 'performance_results_wordpress' => 'Ускорение WordPress на 3,5%', + 'performance_related_functions_title' => 'Функциональность с улучшенной производительностью в PHP 8.1:', + 'performance_jit_arm64' => 'Бэкенд JIT для ARM64 (AArch64).', + 'performance_inheritance_cache' => 'Кеш наследования (не требуется связывать классы при каждом запросе).', + 'performance_fast_class_name_resolution' => 'Ускорено разрешение имени класса (исключены преобразование регистра имени и поиск по хешу).', + 'performance_timelib_date_improvements' => 'Улучшения производительности timelib и ext/date.', + 'performance_spl' => 'Улучшения итераторов файловой системы SPL.', + 'performance_serialize_unserialize' => 'Оптимизация функций serialize()/unserialize().', + 'performance_internal_functions' => 'Оптимизация некоторых внутренних функций (get_declared_classes(), explode(), + strtr(), strnatcmp(), dechex()).', + 'performance_jit' => 'Улучшения и исправления JIT.', + + 'other_new_title' => 'Новые классы, интерфейсы и функции', + 'other_new_returntypewillchange' => 'Добавлен новый атрибут #[ReturnTypeWillChange].', + 'other_new_fsync_fdatasync' => 'Добавлены функции fsync и fdatasync.', + 'other_new_array_is_list' => 'Добавлена новая функция array_is_list.', + 'other_new_sodium_xchacha20' => 'Новые функции Sodium XChaCha20.', + + 'bc_title' => 'Устаревшая функциональность и изменения в обратной совместимости', + 'bc_null_to_not_nullable' => 'Передача значения NULL параметрам встроенных функций, не допускающим значение NULL, объявлена устаревшей.', + 'bc_return_types' => 'Предварительные типы возвращаемых значений во встроенных методах классов PHP', + 'bc_serializable_deprecated' => 'Интерфейс Serializable объявлен устаревшим.', + 'bc_html_entity_encode_decode' => 'Функции по кодированию/декодированию HTML-сущностей по умолчанию преобразуют одинарные кавычки и заменяют недопустимые символы на символ замены Юникода.', + 'bc_globals_restrictions' => 'Ограничены способы использования переменной $GLOBALS.', + 'bc_mysqli_exceptions' => 'Модуль MySQLi: режим ошибок по умолчанию установлен на выбрасывание исключения.', + 'bc_float_to_int_conversion' => 'Неявное преобразование числа с плавающей точкой к целому с потерей ненулевой дробной части объявлено устаревшим.', + 'bc_finfo_objects' => 'Модуль finfo: ресурсы file_info заменены на объекты finfo.', + 'bc_imap_objects' => 'Модуль IMAP: ресурсы imap заменены на объекты IMAP\Connection.', + 'bc_ftp_objects' => 'Модуль FTP: ресурсы Connection заменены на объекты FTP\Connection.', + 'bc_gd_objects' => 'Модуль GD: Font identifiers заменены на объекты GdFont.', + 'bc_ldap_objects' => 'Модуль LDAP: ресурсы заменены на объекты LDAP\Connection, LDAP\Result и LDAP\ResultEntry.', + 'bc_postgresql_objects' => 'Модуль PostgreSQL: ресурсы заменены на объекты PgSql\Connection, PgSql\Result и PgSql\Lob.', + 'bc_pspell_objects' => 'Модуль Pspell: ресурсы pspell, pspell config заменены на объекты PSpell\Dictionary, PSpell\Config.', + + 'footer_title' => 'Выше производительность, лучше синтаксис, надёжнее система типов.', + 'footer_content' => '

            + Для загрузки исходного кода PHP 8.1 посетите страницу Downloads. + Бинарные файлы Windows находятся на сайте PHP for Windows. + Список изменений перечислен на странице ChangeLog. +

            +

            + Руководство по миграции доступно в разделе документации. + Ознакомьтесь с ним, чтобы узнать обо всех новых возможностях и изменений, затрагивающих обратную совместимость. +

            ', +]; diff --git a/releases/8.1/languages/zh.php b/releases/8.1/languages/zh.php new file mode 100644 index 0000000000..58a14f9732 --- /dev/null +++ b/releases/8.1/languages/zh.php @@ -0,0 +1,95 @@ + 'PHP 8.1 是 PHP 语言的一次重大更新。它包含了许多新功能,包括枚举、只读属性、First-class 可调用语法、纤程、交集类型和性能改进等。', + 'main_title' => '已发布!', + 'main_subtitle' => 'PHP 8.1 是 PHP 语言的一次重大更新。
            它包含了许多新功能,包括枚举、只读属性、First-class 可调用语法、纤程、交集类型和性能改进等。', + 'upgrade_now' => '更新到 PHP 8.1 !', + 'documentation' => '文档', + + 'enumerations_title' => '枚举', + 'enumerations_content' => '使用枚举而不是一组常量并立即进行验证。', + + 'readonly_properties_title' => '只读属性', + 'readonly_properties_content' => '

            只读属性不能在初始化后更改,即在为它们分配值后。它们可以用于对值对象和数据传输对象建模。

            ', + + 'first_class_callable_syntax_title' => 'First-class 可调用语法', + 'first_class_callable_syntax_content' => '

            现在可以获得对任何函数的引用。这统称为 First-class 可调用语法。

            ', + + 'new_in_initializers_title' => '新的初始化器', + 'new_in_initializers_content' => '

            对象现在可以用作默认参数值、静态变量和全局常量,以及属性参数。

            +

            这有效地使使用 嵌套属性 成为可能。

            ', + + 'pure_intersection_types_title' => '纯交集类型', + 'pure_intersection_types_content' => '

            当一个值需要同时满足多个类型约束时,使用交集类型。

            +

            注意,目前无法将交集和联合类型混合在一起,例如 A&B|C

            ', + + 'never_return_type_title' => 'Never 返回类型', + 'never_return_type_content' => '

            使用 never 类型声明的函数或方法表示它不会返回值,并且会抛出异常或通过调用 die()exit()trigger_error() 或类似的东西来结束脚本的执行。

            ', + + 'final_class_constants_title' => 'Final 类常量', + 'final_class_constants_content' => '

            可以声明 final 类常量,以禁止它们在子类中被重写。

            ', + + 'octal_numeral_notation_title' => '显式八进制数字表示法', + 'octal_numeral_notation_content' => '

            现在可以使用显式 0o 前缀表示八进制数。

            ', + + 'fibers_title' => '纤程', + 'fibers_content' => '

            Fibers 是用于实现轻量级协作并发的基础类型。它们是一种创建可以像生成器一样暂停和恢复的代码块的方法,但可以从堆栈中的任何位置进行。Fibers 本身并没有提供并发性,仍然需要一个事件循环。但是,它们允许通过阻塞和非阻塞实现共享相同的 API。

            Fibers 允许摆脱以前在 Promise::then() 或基于生成器的协程中看到的样板代码。库通常会围绕 Fiber 构建进一步的抽象,因此无需直接与它们交互。

            ', + + 'array_unpacking_title' => '对字符串键控数组的数组解包支持', + 'array_unpacking_content' => '

            PHP 以前支持通过扩展运算符在数组内部解包,但前提是数组具有整数键。现在也可以使用字符串键解包数组。

            ', + + 'performance_title' => '性能改进', + 'performance_chart' => 'Symfony Demo App 请求时间
            + 25 次连续运行,250 次请求(秒)
            + (越少越好)
            ', + 'performance_results_title' => '结果(相对于 PHP 8.0):', + 'performance_results_symfony' => 'Symfony Demo 有 23.0% 的提升', + 'performance_results_wordpress' => 'WordPress 有 3.5% 的提升', + 'performance_related_functions_title' => 'PHP 8.1 中与性能相关的特性:', + 'performance_jit_arm64' => 'ARM64 的 JIT 后端 (AArch64)', + 'performance_inheritance_cache' => '继承缓存(避免在每个请求中重新链接类)', + 'performance_fast_class_name_resolution' => '快速解析类名(避免小写和哈希查找)', + 'performance_timelib_date_improvements' => 'timelib 和 ext/date 性能改进', + 'performance_spl' => 'SPL 文件系统迭代器改进', + 'performance_serialize_unserialize' => 'serialize/unserialize 优化', + 'performance_internal_functions' => '一些内部函数优化(get_declared_classes()、explode()、strtr()、strnatcmp() 和 dechex())', + 'performance_jit' => 'JIT 的改进和修复', + + 'other_new_title' => '新的类、接口和函数', + 'other_new_returntypewillchange' => '#[ReturnTypeWillChange] 属性。', + 'other_new_fsync_fdatasync' => 'fsyncfdatasync 函数。', + 'other_new_array_is_list' => 'array_is_list 函数。', + 'other_new_sodium_xchacha20' => 'Sodium XChaCha20 函数。', + + 'bc_title' => '弃用和向后不兼容', + 'bc_null_to_not_nullable' => '向非空值的内部函数参数传递空值的做法已被弃用。', + 'bc_return_types' => 'PHP 内置类方法中的暂定返回类型', + 'bc_serializable_deprecated' => 'Serializable 接口已弃用。', + 'bc_html_entity_encode_decode' => 'html_entity_encode/html_entity_decode 函数默认处理单引号和用 Unicode 替换字符来替换无效字符。', + 'bc_globals_restrictions' => '$GLOBALS 变量限制。', + 'bc_mysqli_exceptions' => 'MySQLi:默认错误模式设置为异常。', + 'bc_float_to_int_conversion' => '隐式不兼容的 float 到 int 转换已被弃用。', + 'bc_finfo_objects' => 'finfo 扩展:file_info 资源迁移到现有的 finfo 对象。', + 'bc_imap_objects' => 'IMAP:imap 资源迁移到 IMAP\Connection 类对象。', + 'bc_ftp_objects' => 'FTP 扩展:连接资源迁移到 FTP\Connection 类对象。', + 'bc_gd_objects' => 'GD 扩展:字体标识符迁移到 GdFont 类对象。', + 'bc_ldap_objects' => 'LDAP:资源类型迁移到 LDAP\ConnectionLDAP\ResultLDAP\ResultEntry 对象。', + 'bc_postgresql_objects' => 'PostgreSQL:资源类型迁移到 PgSql\ConnectionPgSql\ResultPgSql\Lob 对象。', + 'bc_pspell_objects' => 'Pspell:pspell 和 pspell config 资源类型迁移到 PSpell\DictionaryPSpell\Config 类对象。', + + 'footer_title' => '更好的性能、更好的语法、改进类型安全。', + 'footer_content' => '

            + 请访问 下载 页面下载 PHP 8.1 源代码。 + 在 PHP for Windows 站点中可找到 Windows 二进制文件。 + ChangeLog 中有变更历史记录清单。 +

            +

            + PHP 手册中有 迁移指南。 + 请参考它描述的新功能详细清单、向后不兼容的变化。 +

            ', +]; diff --git a/releases/8.1/pt_BR.php b/releases/8.1/pt_BR.php new file mode 100644 index 0000000000..be7e4f4750 --- /dev/null +++ b/releases/8.1/pt_BR.php @@ -0,0 +1,5 @@ + +
            +
            +
            + +
            +
            +
            + +
            +
            +
            + +
            +
            +
            + +
            +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.1
            +
            + +
            +
            +
            +
            +
            PHP 8.1
            +
            + +
            +
            +
            +
            + +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.1
            +
            + status = $status; + } + + public function getStatus(): Status + { + return $this->status; + } +} +PHP + + );?> +
            +
            +
            +
            +
            PHP 8.1
            +
            + status = $status; + } +} +PHP + );?> +
            +
            +
            +
            + +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.1
            +
            + +
            +
            +
            +
            +
            PHP 8.1
            +
            + foo(...); + +$fn = strlen(...); +PHP + );?> +
            +
            +
            +
            + +
            +
            + +
            +

            + + RFC +

            +
            +
            +
            PHP < 8.1
            +
            + logger = $logger ?? new NullLogger(); + } +} +PHP + );?> +
            +
            +
            +
            +
            PHP 8.1
            +
            + logger = $logger; + } +} +PHP + );?> +
            +
            +
            + +
            + +
            +
            +
            +
            PHP < 8.1
            +
            + +
            +
            +
            +
            +
            PHP 8.1
            +
            + +
            +
            +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.1
            +
            + +
            +
            +
            +
            +
            PHP 8.1
            +
            + +
            +
            +
            +
            + +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.1
            +
            + +
            +
            +
            +
            +
            PHP 8.1
            +
            + +
            +
            +
            +
            + +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.1
            +
            + +
            +
            +
            +
            +
            PHP 8.1
            +
            + +
            +
            +
            +
            + +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.1
            +
            + +
            +
            +
            +
            +
            PHP 8.1
            +
            + +
            +
            +
            +
            + +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.1
            +
            + request('https://example.com/') + ->then(function (Response $response) { + return $response->getBody()->buffer(); + }) + ->then(function (string $responseBody) { + print json_decode($responseBody)['code']; + }); +PHP + + );?> +
            +
            +
            +
            +
            PHP 8.1
            +
            + request('https://example.com/'); +print json_decode($response->getBody()->buffer())['code']; +PHP + );?> +
            +
            +
            +
            + +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.1
            +
            + 1]; +$arrayB = ['b' => 2]; + +$result = array_merge(['a' => 0], $arrayA, $arrayB); + +// ['a' => 1, 'b' => 2] +PHP + );?> +
            +
            +
            +
            +
            PHP 8.1
            +
            + 1]; +$arrayB = ['b' => 2]; + +$result = ['a' => 0, ...$arrayA, ...$arrayB]; + +// ['a' => 1, 'b' => 2] +PHP + );?> +
            +
            +
            +
            + +
            +
            +
            + +
            +
            +

            +
            +
            + +
            + +
            +
            +

            +
              +
            • +
            • +
            +

            +
              +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            +
            +
            + +
            +

            +
            +
              +
            • +
            • +
            • +
            • +
            +
            +

            +
            +
              +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            +
            +
            +
            + + + + 'English', + 'es' => 'Español', + 'de' => 'Deutsch', + 'fr' => 'Français', + 'pt_BR' => 'Brazilian Portuguese', + 'ru' => 'Russian', + 'ja' => '日本語', + 'zh' => '简体中文', +]; + +function common_header(string $description): void { + global $MYSITE; + + $meta_image_path = \htmlspecialchars( + \filter_var($MYSITE . 'images/php8/php_8_2_released.png', \FILTER_VALIDATE_URL)); + $meta_description = \htmlspecialchars($description); + + \site_header("PHP 8.2.0 Release Announcement", [ + 'current' => 'php8', + 'css' => ['php8.css'], + 'meta_tags' => << + + + + + + + + + + + + +META + ]); +} + +function language_chooser(string $currentLang): void { + // Print out the form with all the options + echo ' +
            +
            + + +
            +
            +'; +} + +function message($code, $language = 'en') +{ + $original = require __DIR__ . '/languages/en.php'; + if (($language !== 'en') && file_exists(__DIR__ . '/languages/' . $language . '.php')) { + $translation = require __DIR__ . '/languages/' . $language . '.php'; + } + + return $translation[$code] ?? $original[$code] ?? $code; +} diff --git a/releases/8.2/de.php b/releases/8.2/de.php new file mode 100644 index 0000000000..45cb5470ed --- /dev/null +++ b/releases/8.2/de.php @@ -0,0 +1,5 @@ +chooseCode("", "", $_SERVER['HTTP_ACCEPT_LANGUAGE']); + +mirror_redirect("/releases/8.2/$lang.php"); diff --git a/releases/8.2/ja.php b/releases/8.2/ja.php new file mode 100644 index 0000000000..9db1f5ca85 --- /dev/null +++ b/releases/8.2/ja.php @@ -0,0 +1,5 @@ + 'PHP 8.2 ist ein Minor-Update der Sprache PHP und beinhaltet viele neue Features und Verbesserungen. Unter anderem readonly Klassen, die Typen null, false und true und Performance-Optimierungen.', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.2 ist ein Minor-Update der Sprache PHP und beinhaltet viele neue Features und Verbesserungen.
            Unter anderem readonly Klassen, die Typen null, false und true und Performance-Optimierungen.', + 'upgrade_now' => 'Wechsle jetzt zu PHP 8.2!', + 'readonly_classes_title' => 'Readonly Klassen', + 'dnf_types_title' => 'Disjunktive Normalform (DNF) Typen', + 'dnf_types_description' => 'DNF Typen erlauben die Nutzung von Verbund- und Intersektionstypen, durch das Befolgen von strikten Regeln: wenn Verbundstypen mit Intersektionstypen gleichzeitig genutzt werden müssen Intersektionstypen geklammert werden.', + 'null_false_true_types_title' => 'null, false, und true als eigene Typen', + 'random_title' => 'Neue "Random" Erweiterung', + 'random_description' => '

            Die "random" Erweiterungen stellt eine neue objektorientierte API bereit, um Zufallszahlen zu generieren. Statt auf den global Seed des "random number generator (RNG)" zu setzen, welcher den Mersenne Twister Algorithmus nutzt, stellt die objektorientierte API mehrere Klassen ("Engine"s) mit modernen Algorithmen zur Verfügung, welche jeweils ihren eigenen und somit unabhängigen Seed setzen können.

            +

            Die \Random\Randomizer Klasse stellt Funktionen bereit, um Zufallszahlen zu generieren, Arrays oder auch Strings zufällig zu mischen und viele mehr.

            ', + 'constants_in_traits_title' => 'Konstanten in Traits', + 'constants_in_traits_description' => 'Es kann nicht auf Konstanten eines Traits durch den Namen des Traits zugegriffen werden, jedoch über die implementierende Klasse.', + 'deprecate_dynamic_properties_title' => 'Missbilligung von Dynamische Properties', + 'deprecate_dynamic_properties_description' => '

            Das dynamische Erstellen / zuweisen von Properties wurden als veraltet markiert um Fehler zu vermeiden. Eine Klasse kann jedoch durch das Attribut #[\AllowDynamicProperties] weiterhin die Nutzung erlauben. Die stdClass erlaubt dynamische Properties weiterhin.

            +

            Die Nutzung von der magischen Methoden __get/__set sind nicht von dieser Änderung betroffen.

            ', + 'new_classes_title' => 'Neue Klassen, Interfaces, and Funktionen', + 'new_mysqli' => 'Neue mysqli_execute_query Funktion und neue mysqli::execute_query Methode.', + 'new_attributes' => 'Neue Attribute #[\AllowDynamicProperties] und #[\SensitiveParameter].', + 'new_zip' => 'Neue ZipArchive::getStreamIndex, ZipArchive::getStreamName, und ZipArchive::clearError Methoden.', + 'new_reflection' => 'Neue ReflectionFunction::isAnonymous und ReflectionMethod::hasPrototype Methoden.', + 'new_functions' => 'Neue curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length Funktionen.', + 'bc_title' => 'Veraltete Funktionalität und inkompatible Änderungen zu vorherigen PHP Versionen', + 'bc_string_interpolation' => 'Die Nutzung der String Interpolation ${} ist als veraltet markiert.', + 'bc_utf8' => 'Die Funktionen utf8_encode und utf8_decode sind als veraltet markiert.', + 'bc_datetime' => 'Die Methoden DateTime::createFromImmutable und DateTimeImmutable::createFromMutable haben nun den Rückgabetyp static.', + 'bc_odbc' => 'Die Erweiterungen ODBC und PDO_ODBC maskieren nun den Benutzernamen und das Passwort.', + 'bc_str_locale_sensitive' => 'Die Funktionen strtolower und strtoupper sind nicht mehr Locale-Sensitiv.', + 'bc_spl_enforces_signature' => 'Die Methoden SplFileObject::getCsvControl, SplFileObject::fflush, SplFileObject::ftell, SplFileObject::fgetc, und SplFileObject::fpassthru forcieren nun ihre Signatur.', + 'bc_spl_false' => 'Die Methode SplFileObject::hasChildren hat nun den Rückgabetypen false.', + 'bc_spl_null' => 'Die Methode SplFileObject::getChildren hat nun den Rückgabetypen null.', + 'bc_spl_deprecated' => 'Die interne Methode SplFileInfo::_bad_state_ex wurde als veraltet markiert.', + 'footer_title' => 'Bessere Performance, verbesserte Syntax und verbesserte Typensicherheit.', + 'footer_content' => '

            + Für den direkten Code-Download von PHP 8.2 schaue bitte auf der Downloads Seite vorbei. + Windows Pakete können auf der PHP für Windows Seite gefunden werden. + Die Liste der Änderungen ist im ChangeLog festgehalten. +

            +

            + Der Migration Guide ist im PHP Manual verfügbar. Lies dort + nach für detaillierte Informationen zu den neuen Funktionen und inkompatiblen Änderungen zu vorherigen PHP + Versionen. +

            ', +]; diff --git a/releases/8.2/languages/en.php b/releases/8.2/languages/en.php new file mode 100644 index 0000000000..dc3c4bd1fb --- /dev/null +++ b/releases/8.2/languages/en.php @@ -0,0 +1,40 @@ + 'PHP 8.2 is a major update of the PHP language. Readonly classes, null, false, and true as stand-alone types, deprecated dynamic properties, performance improvements and more', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.2 is a major update of the PHP language.
            It contains many new features, including readonly classes, null, false, and true as stand-alone types, deprecated dynamic properties, performance improvements and more.', + 'upgrade_now' => 'Upgrade to PHP 8.2 now!', + 'readonly_classes_title' => 'Readonly classes', + 'dnf_types_title' => 'Disjunctive Normal Form (DNF) Types', + 'dnf_types_description' => 'DNF types allow us to combine union and intersection types, following a strict rule: when combining union and intersection types, intersection types must be grouped with brackets.', + 'null_false_true_types_title' => 'Allow null, false, and true as stand-alone types', + 'random_title' => 'New "Random" extension', + 'random_description' => '

            The "random" extension provides a new object-oriented API to random number generation. Instead of relying on a globally seeded random number generator (RNG) using the Mersenne Twister algorithm the object-oriented API provides several classes ("Engine"s) providing access to modern algorithms that store their state within objects to allow for multiple independent seedable sequences.

            +

            The \Random\Randomizer class provides a high level interface to use the engine\'s randomness to generate a random integer, to shuffle an array or string, to select random array keys and more.

            ', + 'constants_in_traits_title' => 'Constants in traits', + 'constants_in_traits_description' => 'You cannot access the constant through the name of the trait, but, you can access the constant through the class that uses the trait.', + 'deprecate_dynamic_properties_title' => 'Deprecate dynamic properties', + 'deprecate_dynamic_properties_description' => '

            The creation of dynamic properties is deprecated to help avoid mistakes and typos, unless the class opts in by using the #[\AllowDynamicProperties] attribute. stdClass allows dynamic properties.

            +

            Usage of the __get/__set magic methods is not affected by this change.

            ', + 'new_classes_title' => 'New Classes, Interfaces, and Functions', + 'new_mysqli' => 'New mysqli_execute_query function and mysqli::execute_query method.', + 'new_attributes' => 'New #[\AllowDynamicProperties] and #[\SensitiveParameter] attributes.', + 'new_zip' => 'New ZipArchive::getStreamIndex, ZipArchive::getStreamName, and ZipArchive::clearError methods.', + 'new_reflection' => 'New ReflectionFunction::isAnonymous and ReflectionMethod::hasPrototype methods.', + 'new_functions' => 'New curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length functions.', + 'bc_title' => 'Deprecations and backward compatibility breaks', + 'bc_string_interpolation' => 'Deprecated ${} string interpolation.', + 'bc_utf8' => 'Deprecated utf8_encode and utf8_decode functions.', + 'bc_datetime' => 'Methods DateTime::createFromImmutable and DateTimeImmutable::createFromMutable has a tentative return type of static.', + 'bc_odbc' => 'Extensions ODBC and PDO_ODBC escapes the username and password.', + 'bc_str_locale_sensitive' => 'Functions strtolower and strtoupper are no longer locale-sensitive.', + 'bc_spl_enforces_signature' => 'Methods SplFileObject::getCsvControl, SplFileObject::fflush, SplFileObject::ftell, SplFileObject::fgetc, and SplFileObject::fpassthru enforces their signature.', + 'bc_spl_false' => 'Method SplFileObject::hasChildren has a tentative return type of false.', + 'bc_spl_null' => 'Method SplFileObject::getChildren has a tentative return type of null.', + 'bc_spl_deprecated' => 'The internal method SplFileInfo::_bad_state_ex has been deprecated.', + 'footer_title' => 'Better performance, better syntax, improved type safety.', + 'footer_description' => '

            For source downloads of PHP 8.2 please visit the downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog.

            +

            The migration guide is available in the PHP Manual. Please consult it for a detailed list of new features and backward-incompatible changes.

            ', +]; diff --git a/releases/8.2/languages/es.php b/releases/8.2/languages/es.php new file mode 100644 index 0000000000..9f8a71fec9 --- /dev/null +++ b/releases/8.2/languages/es.php @@ -0,0 +1,40 @@ + 'PHP 8.2 es una actualización importante del lenguaje PHP. Clases de solo lectura, null, false y true como tipos independientes, propiedades dinámicas en desuso, mejoras de rendimiento y más', + 'documentation' => 'Doc', + 'main_title' => '¡Lanzado!', + 'main_subtitle' => 'PHP 8.2 es una actualización importante del lenguaje PHP.
            Contiene muchas características nuevas, incluidas clases de solo lectura, null, false y true como tipos independientes, propiedades dinámicas en desuso, mejoras de rendimiento y más.', + 'upgrade_now' => '¡Actualiza a PHP 8.2 ahora!', + 'readonly_classes_title' => 'Clases de solo lectura', + 'dnf_types_title' => 'Tipos de forma normal disyuntiva (DNF)', + 'dnf_types_description' => 'Los tipos DNF nos permiten combinar unión y intersección de tipos, siguiendo una regla estricta: al combinar tipos de unión e intersección, los tipos de intersección deben agruparse con corchetes.', + 'null_false_true_types_title' => 'Permitir null, false y true como tipos independientes', + 'random_title' => 'Nueva extensión "Random"', + 'random_description' => '

            La extensión "random" proporciona una nueva API orientada a objetos para la generación de números aleatorios. En lugar de depender de un generador de números aleatorios (RNG) globalmente sembrado utilizando el algoritmo Mersenne Twister, la API orientada a objetos proporciona varias clases ("Engine") que proporcionan acceso a algoritmos modernos que almacenan su estado dentro de objetos para permitir múltiples secuencias sembrables independientes.

            +

            La clase \Random\Randomizer proporciona una interfaz de alto nivel para utilizar la aleatoriedad del motor para generar un número entero aleatorio, para mezclar un array o cadena, para seleccionar claves de array aleatorias y más.

            ', + 'constants_in_traits_title' => 'Constantes en rasgos', + 'constants_in_traits_description' => 'No se puede acceder a la constante a través del nombre del rasgo, pero se puede acceder a la constante a través de la clase que utiliza el rasgo.', + 'deprecate_dynamic_properties_title' => 'Deprecar propiedades dinámicas', + 'deprecate_dynamic_properties_description' => '

            La creación de propiedades dinámicas está en desuso para ayudar a evitar errores y errores tipográficos, a menos que la clase opte por usar el atributo #[\AllowDynamicProperties]. stdClass permite propiedades dinámicas.

            +

            El uso de los métodos mágicos __get/__set no se ve afectado por este cambio.

            ', + 'new_classes_title' => 'Nuevas clases, interfaces y funciones', + 'new_mysqli' => 'Nueva función mysqli_execute_query y método mysqli::execute_query.', + 'new_attributes' => 'Nuevos atributos #[\AllowDynamicProperties] y #[\SensitiveParameter].', + 'new_zip' => 'Nuevos métodos ZipArchive::getStreamIndex, ZipArchive::getStreamName y ZipArchive::clearError.', + 'new_reflection' => 'Nuevos métodos ReflectionFunction::isAnonymous y ReflectionMethod::hasPrototype.', + 'new_functions' => 'Nuevas funciones curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length funciones.', + 'bc_title' => 'Deprecaciones y cambios de compatibilidad hacia atrás', + 'bc_string_interpolation' => 'Interpolación de cadena ${} en desuso.', + 'bc_utf8' => 'Funciones en desuso utf8_encode y utf8_decode.', + 'bc_datetime' => 'Los métodos DateTime::createFromImmutable y DateTimeImmutable::createFromMutable tienen un tipo de retorno tentativo de static.', + 'bc_odbc' => 'Las extensiones ODBC y PDO_ODBC escapan el nombre de usuario y la contraseña.', + 'bc_str_locale_sensitive' => 'Las funciones strtolower y strtoupper ya no son sensibles al entorno regional.', + 'bc_spl_enforces_signature' => 'Los métodos SplFileObject::getCsvControl, SplFileObject::fflush, SplFileObject::ftell, SplFileObject::fgetc y SplFileObject::fpassthru aplican su firma.', + 'bc_spl_false' => 'El método SplFileObject::hasChildren tiene un tipo de retorno tentativo de false.', + 'bc_spl_null' => 'El método SplFileObject::getChildren tiene un tipo de retorno tentativo de null.', + 'bc_spl_deprecated' => 'El método interno SplFileInfo::_bad_state_ex ha sido deprecado.', + 'footer_title' => 'Mejor rendimiento, mejor sintaxis, mayor seguridad en los tipos.', + 'footer_description' => '

            Para descargar el código fuente de PHP 8.2, por favor visite la página de descargas. Los binarios de Windows se pueden encontrar en el sitio de PHP para Windows. La lista de cambios está registrada en el ChangeLog.

            +

            La guía de migración está disponible en el Manual de PHP. Por favor, consulte la guía para obtener una lista detallada de las nuevas características y cambios incompatibles con versiones anteriores.

            ', +]; diff --git a/releases/8.2/languages/fr.php b/releases/8.2/languages/fr.php new file mode 100644 index 0000000000..fdd2a5de32 --- /dev/null +++ b/releases/8.2/languages/fr.php @@ -0,0 +1,40 @@ + 'PHP 8.2 est une mise à jour majeure du langage PHP. Classes en lecture seule, null, false, et true comme types "stand-alone", propriétés dynamiques désormais obsolètes, amélioration des performances et plus encore.', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.2 est une mise à jour majeure du langage PHP.
            Elle contient beaucoup de nouvelles fonctionnalités et d\'optimisations, incluant les classes en lecture seule, les types "stand-alone" null, false, et true, les propriétés dynamiques désormais obsolètes, et plus encore.', + 'upgrade_now' => 'Migrer vers PHP 8.2 maintenant!', + 'readonly_classes_title' => 'Classes en lecture seule', + 'dnf_types_title' => 'Types FDN (forme normale disjonctive)', + 'dnf_types_description' => 'Les types FDN permettent de combiner des types union et intersection, en suivant une règle stricte: lorsque des types union et intersection sont combinés, les types intersection doivent être groupés entre parenthèses.', + 'null_false_true_types_title' => 'Permettre null, false, et true comme types stand-alone', + 'random_title' => 'Nouvelle extension "Random"', + 'random_description' => '

            L\'extension "random" fournit une nouvelle API orientée objet de génération de nombres aléatoires. Plutôt que de reposer sur un générateur de nombres aléatoires (utilisant l\'algorithme Mersenne Twister) globalement initialisé, l\'API orientée objet offre plusieurs classes permettant d\'accéder à des algorithmes modernes stockant leur état au sein des objets, afin de fournir des séquences d\'initialisations bien distinctes.

            +

            La classe \Random\Randomizer fournit une interface de haut niveau permettant, par exemple, de générer un entier aléatoire, mélanger un tableau ou une chaine de caractère, et plus encore.

            ', + 'constants_in_traits_title' => 'Constantes dans les traits', + 'constants_in_traits_description' => 'Il n\'est pas possible d\'accéder à une constante par le nom du trait, mais il est cependant possible d\'y accéder par la classe utilisant ce trait.', + 'deprecate_dynamic_properties_title' => 'Propriétés dynamiques désormais obsolètes', + 'deprecate_dynamic_properties_description' => '

            Afin d\'éviter des erreurs, la création des propriétés dynamiques est obsolète, sauf si la classe contient l\'attribut #[\AllowDynamicProperties]. stdClass autorise les propriétés dynamiques.

            +

            L\'utilisation des méthodes magiques __get/__set n\'est pas affectée par ce changement..

            ', + 'new_classes_title' => 'Nouvelles classes, interfaces, et fonctions', + 'new_mysqli' => 'Nouvelles fonction mysqli_execute_query et méthode mysqli::execute_query.', + 'new_attributes' => 'Nouveaux attributs #[\AllowDynamicProperties] et #[\SensitiveParameter].', + 'new_zip' => 'Nouvelles méthodes ZipArchive::getStreamIndex, ZipArchive::getStreamName, et ZipArchive::clearError.', + 'new_reflection' => 'Nouvelles méthodes ReflectionFunction::isAnonymous et ReflectionMethod::hasPrototype.', + 'new_functions' => 'Nouvelles fonctions curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.', + 'bc_title' => 'Obsolescence et changements non retrocompatibles', + 'bc_string_interpolation' => 'L\'interpolation ${} est désormais obsolète.', + 'bc_utf8' => 'Les fonctions utf8_encode et utf8_decode sont désormais obsolètes.', + 'bc_datetime' => 'Les méthodes DateTime::createFromImmutable et DateTimeImmutable::createFromMutable ont comme type de retour provisoire static.', + 'bc_odbc' => 'Les extensions ODBC et PDO_ODBC échappent les noms d\'utilisateurs et mots de passe.', + 'bc_str_locale_sensitive' => 'Les fonctions strtolower et strtoupper ne sont plus sensibles à la locale.', + 'bc_spl_enforces_signature' => 'Les méthodes SplFileObject::getCsvControl, SplFileObject::fflush, SplFileObject::ftell, SplFileObject::fgetc, et SplFileObject::fpassthru renforcent leur signature.', + 'bc_spl_false' => 'La méthode SplFileObject::hasChildren a un type de retour provisoire false.', + 'bc_spl_null' => 'La méthode SplFileObject::getChildren a un type de retour provisoire null.', + 'bc_spl_deprecated' => 'La méthode interne SplFileInfo::_bad_state_ex est désormais obsolète.', + 'footer_title' => 'Meilleures performances, meilleure syntaxe et amélioration de la sureté du typage.', + 'footer_description' => '

            Pour le téléchargement des sources de PHP 8.2 veuillez visiter la page de téléchargement page. Les binaires Windows peuvent être trouvés sur le site de PHP Pour Windows. La liste des changements est disponible dans le ChangeLog.

            +

            Le guide de migration est disponible dans le manuel PHP. Veuillez le consulter pour une liste détaillée des nouvelles fonctionnalités et changements non rétrocompatibles.

            ', +]; diff --git a/releases/8.2/languages/ja.php b/releases/8.2/languages/ja.php new file mode 100644 index 0000000000..0b57afba1d --- /dev/null +++ b/releases/8.2/languages/ja.php @@ -0,0 +1,40 @@ + 'PHP 8.2 は、PHP 言語のメジャーアップデートです。読み取り専用クラス、独立した型 null, true, false、動的なプロパティの非推奨化などの機能や、パフォーマンスの向上が含まれています。', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.2 は、PHP 言語のメジャーアップデートです。
            このアップデートには、たくさんの新機能や最適化が含まれています。読み取り専用クラス、独立した型 null, false, true、動的なプロパティの非推奨化や、パフォーマンスの向上などが含まれています。', + 'upgrade_now' => 'PHP 8.2 にアップデートしよう!', + 'readonly_classes_title' => '読み取り専用クラス', + 'dnf_types_title' => 'DNF(Disjunctive Normal Form)型', + 'dnf_types_description' => 'DNF 型を使うと、union 型交差型 を組み合わせることができます。これらを組み合わせるときは、交差型は括弧で囲まなければいけません。', + 'null_false_true_types_title' => 'null, false, true が、独立した型に', + 'random_title' => '"Random" 拡張モジュール', + 'random_description' => '

            "random" 拡張モジュールは、乱数を生成するための、新しいオブジェクト指向の API を提供します。グローバルなシードに依存していた、メルセンヌ・ツイスターを使った乱数生成器(RNG) の代わりに、オブジェクト志向の API が複数の("エンジン" の)クラスを提供します。このクラスは、ステートをオブジェクトの内部に保存した状態で、モダンなアルゴリズムへのアクセスを提供します。これによって、複数の独立したシードのシーケンスを許容することができます。

            +

            \Random\Randomizer クラスは、エンジンのランダムな値を使って高レベルなインターフェイスを提供します。これを使うと、ランダムな数字を生成したり、配列や文字列をシャッフルしたり、配列のキーをランダムに選択したりなどができます。

            ', + 'constants_in_traits_title' => 'トレイトで定数', + 'constants_in_traits_description' => 'トレイトの名前経由で定数にはアクセスできませんが、トレイトを使うクラスを通じて定数にアクセスできます。', + 'deprecate_dynamic_properties_title' => '動的なプロパティが非推奨に', + 'deprecate_dynamic_properties_description' => '

            クラスを #[\AllowDynamicProperties] でマークしない限り、動的なプロパティの作成は推奨されなくなりました。これはミスや typo を防ぐのを助けるためです。stdClass は動的なプロパティを許可しています。

            +

            マジックメソッド __get/__set を使う場合は、この変更の影響を受けません。

            ', + 'new_classes_title' => '新しいクラス、インターフェイス、関数', + 'new_mysqli' => 'mysqli_execute_query, mysqli::execute_query', + 'new_attributes' => '新しいアトリビュート #[\AllowDynamicProperties],#[\SensitiveParameter]', + 'new_zip' => 'ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError', + 'new_reflection' => 'ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype', + 'new_functions' => 'curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length', + 'bc_title' => '非推奨および、非互換の変更', + 'bc_string_interpolation' => '${} 形式の、文字列への値の埋め込みは、推奨されなくなりました。', + 'bc_utf8' => 'utf8_encodeutf8_decode は、推奨されなくなりました。', + 'bc_datetime' => 'DateTime::createFromImmutableDateTimeImmutable::createFromMutable は、仮の戻り値の型が static になりました。', + 'bc_odbc' => '拡張モジュール ODBCPDO_ODBC は、ユーザー名とパスワードをエスケープするようになりました。', + 'bc_str_locale_sensitive' => 'strtolowerstrtoupper は、ロケールに依存しなくなりました。', + 'bc_spl_enforces_signature' => 'SplFileObject::getCsvControl, SplFileObject::fflush, SplFileObject::ftell, SplFileObject::fgetc, SplFileObject::fpassthru は、シグネチャを強制するようになりました。', + 'bc_spl_false' => 'SplFileObject::hasChildren は、仮の戻り値の型が false になりました。', + 'bc_spl_null' => 'SplFileObject::getChildren は、仮の戻り値の型が null になりました。', + 'bc_spl_deprecated' => '内部メソッド SplFileInfo::_bad_state_ex は、推奨されなくなりました。', + 'footer_title' => 'パフォーマンスの向上、より良い文法、型システムの改善', + 'footer_description' => '

            PHP 8.2 のソースコードのダウンロードは、downloads のページをどうぞ。 Windows 用のバイナリは PHP for Windows のページにあります。変更の一覧は ChangeLog にあります。

            +

            移行ガイド が PHP マニュアルで利用できます。新機能や下位互換性のない変更の詳細については、移行ガイドを参照して下さい。

            ', +]; diff --git a/releases/8.2/languages/pt_BR.php b/releases/8.2/languages/pt_BR.php new file mode 100644 index 0000000000..59a89fa690 --- /dev/null +++ b/releases/8.2/languages/pt_BR.php @@ -0,0 +1,41 @@ + 'PHP 8.2 é a grande atualização da linguagem PHP. Classe somente leitura, null, false e true como tipos stand alone, depreciação de propriedades dinâmicas, melhorias de desempenho e mais', + 'documentation' => 'Doc', + 'main_title' => 'Lançado!', + 'main_subtitle' => 'PHP 8.2 é a grande atualização da linguagem PHP.
            Esta atualização inclui muitos novos recursos e otimizações. Classe somente leitura, tipo independente, null, false e true como tipos stand alone, propriedades dinâmicas obsoletas, melhorias de desempenho e muito mais.', + 'upgrade_now' => 'Atualize para PHP 8.2 agora!', + 'readonly_classes_title' => 'Classes somente leitura', + 'dnf_types_title' => 'Tipos DNF (Disjunctive Normal Form)', + 'dnf_types_description' => 'Tipos DNF nos permite união e interseção de tipos, seguindo uma regra estrita: ao combinar tipos de união e interseção, os tipos de interseção devem ser agrupados com colchetes', + 'null_false_true_types_title' => 'Permite null, false e true como tipos stand alone', + 'random_title' => 'Nova extensão "Random"', + 'random_description' => '

            A extensão "random" fornece uma nova API orientada a objetos para geração de números aleatórios. Em vez de depender de um gerador de números aleatórios globalmente semeado (RNG) usando o algoritmo Mersenne Twister, a API orientada a objetos fornece várias classes ("Engine"s) que fornecem acesso a algoritmos modernos que armazenam seu estado em objetos para permitir várias sequências semeáveis ​​independentes .

            +

            A classe \Random\Randomizer fornece uma interface de alto nível para usar a aleatoriedade do mecanismo para gerar um número inteiro aleatório, embaralhar um array ou string, selecionar chaves de array aleatórias e muito mais.

            ', + 'constants_in_traits_title' => 'Constantes em Traits', + 'constants_in_traits_description' => 'Você não pode acessar a constante através do nome da Trait, mas você pode acessar a constante através da classe que usa a Trait.', + 'deprecate_dynamic_properties_title' => 'Propriedades dinâmicas obsoletas', + 'deprecate_dynamic_properties_description' => '

            A criação de propriedades dinâmicas está obsoleta para ajudar a evitar enganos e erros de digitação, a menos que a classe opte por usar o atributo de #[\AllowDynamicProperties]. stdClass permite propriedades dinâmicas.

            +

            O uso dos métodos mágicos __get/__set não é afetado por esta alteração.

            ', + 'new_classes_title' => 'Novas classes, Interfaces, e Funções', + 'new_mysqli' => 'Nova função mysqli_execute_query e método mysqli::execute_query .', + 'new_attributes' => 'Novos atributos #[\AllowDynamicProperties] e #[\SensitiveParameter].', + 'new_zip' => 'Novos métodos ZipArchive::getStreamIndex, ZipArchive::getStreamName, e ZipArchive::clearError.', + 'new_reflection' => 'Novo método ReflectionFunction::isAnonymous e ReflectionMethod::hasPrototype .', + 'new_functions' => 'Novas funçõescurl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.', + 'bc_title' => 'Alterações obsoletas e incompatíveis', + 'bc_string_interpolation' => 'Interpolação de string obsoleta ${}.', + 'bc_utf8' => 'Funções obsoletasutf8_encode e utf8_decode .', + 'bc_datetime' => 'Métodos DateTime::createFromImmutable e DateTimeImmutable::createFromMutable tem um tipo de retorno provisório de static.', + 'bc_odbc' => 'Extensions ODBC e PDO_ODBC escapes the username e password.', + 'bc_str_locale_sensitive' => 'Funções strtolower e strtoupper não são mais sensíveis à localidade.', + 'bc_spl_enforces_signature' => 'Métodos SplFileObject::getCsvControl, SplFileObject::fflush, SplFileObject::ftell, SplFileObject::fgetc, e SplFileObject::fpassthru impõe a sua assinatura.', + 'bc_spl_false' => 'Método SplFileObject::hasChildren tem um tipo de retorno provisório de false.', + 'bc_spl_null' => 'Método SplFileObject::getChildren tem um tipo de retorno provisório de null.', + 'bc_spl_deprecated' => 'O método interno SplFileInfo::_bad_state_ex foi obsoleto.', + 'footer_title' => 'Melhor desempenho, melhor sintaxe, segurança de tipo aprimorada.', + 'footer_description' => '

            Para downloads dos fontes do PHP 8.2, visite a página downloads. Os binários do Windows podem ser encontrados no site PHP para Windows. A lista de mudanças está registrada no ChangeLog.

            +

            O guia de migração está disponível no Manual do PHP. Consulte-o para obter uma lista detalhada de novos recursos e alterações incompatíveis com versões anteriores.', +]; + diff --git a/releases/8.2/languages/ru.php b/releases/8.2/languages/ru.php new file mode 100644 index 0000000000..64b8100262 --- /dev/null +++ b/releases/8.2/languages/ru.php @@ -0,0 +1,40 @@ + 'PHP 8.2 — большое обновление языка PHP. Readonly-классы, самостоятельные типы null, false и true, устаревшие динамические свойства, улучшение производительности и многое другое.', + 'documentation' => 'Документация', + 'main_title' => 'выпущен!', + 'main_subtitle' => 'PHP 8.2 — большое обновление языка PHP.
            Оно содержит множество новых возможностей, включая readonly-классы, самостоятельные типы null, false и true, устаревшие динамические свойства, улучшение производительности и многое другое.', + 'upgrade_now' => 'Переходите на PHP 8.2!', + 'readonly_classes_title' => 'Readonly-классы', + 'dnf_types_title' => 'Типы в виде дизъюнктивной нормальной формы (ДНФ)', + 'dnf_types_description' => 'ДНФ позволяет совместить объединение и пересечение типов, при этом обязательно типы пересечения следует сгруппировать скобками.', + 'null_false_true_types_title' => 'Самостоятельные типы null, false и true', + 'random_title' => 'Новый модуль "Random"', + 'random_description' => '

            Модуль "random" предлагает новый объектно-ориентированный API для генерации случайных чисел. Вместо использования глобального генератора случайных чисел (ГСЧ) на базе алгоритма вихря Мерсенна, в объектно-ориентированном API доступно несколько ГСЧ, представленных отдельными классами (как реализации интерфейса Engine), которые хранят внутреннее состояние, позволяя создавать несколько независимых последовательностей случайных чисел.

            +

            Класс \Random\Randomizer представляет высокоуровневый интерфейс по использованию движков для генерации случайного целого числа, перемешивания массива или строки, выбора случайных ключей массива и многое другое.

            ', + 'constants_in_traits_title' => 'Константы в трейтах', + 'constants_in_traits_description' => 'Нельзя получить доступ к константе через имя трейта, но можно через класс, который использует этот трейт.', + 'deprecate_dynamic_properties_title' => 'Динамические свойства объявлены устаревшими', + 'deprecate_dynamic_properties_description' => '

            Чтобы помочь избежать ошибок и опечаток, больше не рекомендуется определять динамические свойства, только если сам класс явно не разрешит это при помощи атрибута #[\AllowDynamicProperties]. В экземплярах stdClass по-прежнему можно использовать динамические свойства.

            +

            Это изменение не влияет на использование магических методов __get/__set.

            ', + 'new_classes_title' => 'Новые классы, интерфейсы и функции', + 'new_mysqli' => 'Новая функция mysqli_execute_query и метод mysqli::execute_query.', + 'new_attributes' => 'Новые атрибуты #[\AllowDynamicProperties] и #[\SensitiveParameter].', + 'new_zip' => 'Новые методы ZipArchive::getStreamIndex, ZipArchive::getStreamName и ZipArchive::clearError.', + 'new_reflection' => 'Новые методы ReflectionFunction::isAnonymous и ReflectionMethod::hasPrototype.', + 'new_functions' => 'Новые функции curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.', + 'bc_title' => 'Устаревшая функциональность и изменения в обратной совместимости', + 'bc_string_interpolation' => 'Интерполяции строк вида ${} следует избегать.', + 'bc_utf8' => 'Не рекомендуется использовать функции utf8_encode и utf8_decode.', + 'bc_datetime' => 'У методов DateTime::createFromImmutable и DateTimeImmutable::createFromMutable задан предварительный тип возвращаемого значения static.', + 'bc_odbc' => 'Модули ODBC и PDO_ODBC экранирует имя пользователя и пароль.', + 'bc_str_locale_sensitive' => 'При работе функции strtolower и strtoupper теперь не учитывают локаль.', + 'bc_spl_enforces_signature' => 'Методы SplFileObject::getCsvControl, SplFileObject::fflush, SplFileObject::ftell, SplFileObject::fgetc и SplFileObject::fpassthru усиливают свою сигнатуру.', + 'bc_spl_false' => 'У метода SplFileObject::hasChildren предварительный тип возвращаемого значения задан как false.', + 'bc_spl_null' => 'У метода SplFileObject::getChildren предварительный тип возвращаемого значения задан как null.', + 'bc_spl_deprecated' => 'Внутренний метод SplFileInfo::_bad_state_ex объявлен устаревшим.', + 'footer_title' => 'Выше производительность, лучше синтаксис, надёжнее система типов.', + 'footer_description' => '

            Для загрузки исходного кода PHP 8.2 посетите страницу Downloads. Бинарные файлы Windows находятся на сайте PHP for Windows. Список изменений перечислен на странице ChangeLog.

            +

            Руководство по миграции доступно в разделе документации. Ознакомьтесь с ним, чтобы узнать обо всех новых возможностях и изменениях, затрагивающих обратную совместимость.

            ', +]; diff --git a/releases/8.2/languages/zh.php b/releases/8.2/languages/zh.php new file mode 100644 index 0000000000..0454f5f66e --- /dev/null +++ b/releases/8.2/languages/zh.php @@ -0,0 +1,54 @@ + 'PHP 8.2 是 PHP 语言的一次重大更新。它包含了只读类、null、false 和 true 作为独立的类型、废弃动态属性、性能改进等。', + 'documentation' => '文档', + 'main_title' => '已发布!', + 'main_subtitle' => 'PHP 8.2 是 PHP 语言的一次重大更新。
            它包含了只读类、null、false 和 true 作为独立的类型、废弃动态属性、性能改进等。', + 'upgrade_now' => '更新到 PHP 8.2 !', + 'readonly_classes_title' => '只读类', + 'dnf_types_title' => '析取范式 (DNF)类型', + 'dnf_types_description' => 'DNF 类型允许我们组合 unionintersection类型,遵循一个严格规则:组合并集和交集类型时,交集类型必须用括号进行分组。', + 'null_false_true_types_title' => '允许 nullfalsetrue 作为独立类型', + 'random_title' => '新的“随机”扩展', + 'random_description' => '

            “随机”扩展为随机数生成提供了一个新的面向对象的 API。这个面向对象的 API 提供了几个类(“引擎”),提供对现代算法的访问,这些算法在对象中存储其状态,以允许多个独立的可播种序列,而不是依赖于使用 Mersenne Twister 算法的全局种子随机数发生器(RNG)。

            +

            \Random\Randomizer 类提供了一个高级接口来使用引擎的随机性来生成随机整数、随机排列数组或字符串、选择随机数组键等。

            ', + 'constants_in_traits_title' => 'Traits 中的常量', + 'constants_in_traits_description' => '您不能通过 trait 名称访问常量,但是您可以通过使用 trait 的类访问常量。', + 'deprecate_dynamic_properties_title' => '弃用动态属性', + 'deprecate_dynamic_properties_description' => '

            动态属性的创建已被弃用,以帮助避免错误和拼写错误,除非该类通过使用 #[\AllowDynamicProperties] 属性来选择。stdClass 允许动态属性。

            +

            __get/__set 魔术方法的使用不受此更改的影响。

            ', + + 'new_classes_title' => '新的类、接口和函数', + 'new_mysqli' => '新增 mysqli_execute_query 函数和 mysqli::execute_query 方法。', + 'new_attributes' => '新增 #[\AllowDynamicProperties]#[\SensitiveParameter] 属性。', + 'new_zip' => '新增 ZipArchive::getStreamIndexZipArchive::getStreamNameZipArchive::clearError 方法。', + 'new_reflection' => '新增 ReflectionFunction::isAnonymousReflectionMethod::hasPrototype 方法。', + 'new_functions' => '新增 curl_upkeepmemory_reset_peak_usageini_parse_quantitylibxml_get_external_entity_loadersodium_crypto_stream_xchacha20_xor_icopenssl_cipher_key_length 方法。', + + 'bc_title' => '弃用和向后不兼容', + 'bc_string_interpolation' => '弃用 ${} 字符串插值。', + 'bc_utf8' => '弃用 utf8_encodeutf8_decode 函数。', + 'bc_datetime' => 'DateTime::createFromImmutableDateTimeImmutable::createFromMutable 方法暂定返回类型为 static。', + 'bc_odbc' => 'ODBCPDO_ODBC 扩展转义用户名和密码。', + 'bc_str_locale_sensitive' => 'strtolowerstrtoupper 函数不再对语言环境敏感。', + 'bc_spl_enforces_signature' => 'SplFileObject::getCsvControlSplFileObject::fflushSplFileObject::ftellSplFileObject::fgetcSplFileObject::fpassthru 方法强制执行它们的签名。', + 'bc_spl_false' => 'SplFileObject::hasChildren 方法暂定返回类型为 false。', + 'bc_spl_null' => 'SplFileObject::getChildren 方法暂定返回类型为 null。', + 'bc_spl_deprecated' => '内置方法 SplFileInfo::_bad_state_ex 已被废弃。', + + 'footer_title' => '更好的性能、更好的语法、改进类型安全。', + 'footer_description' => '

            + 请访问 下载 页面下载 PHP 8.2 源代码。 + 在 PHP for Windows 站点中可找到 Windows 二进制文件。 + ChangeLog 中有变更历史记录清单。 +

            +

            + PHP 手册中有 迁移指南。 + 请参考它描述的新功能详细清单、向后不兼容的变化。 +

            ', +]; diff --git a/releases/8.2/pt_BR.php b/releases/8.2/pt_BR.php new file mode 100644 index 0000000000..be7e4f4750 --- /dev/null +++ b/releases/8.2/pt_BR.php @@ -0,0 +1,5 @@ + +
            +
            +
            + +
            +
            +
            + +
            +
            +
            + +
            +
            +
            + +
            +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.2
            +
            + title = $title; + $this->status = $status; + } +} +PHP + + ); ?> +
            +
            +
            +
            +
            PHP 8.2
            +
            + title = $title; + $this->status = $status; + } +} +PHP + ); ?> +
            +
            +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.2
            +
            + +
            +
            +
            +
            +
            PHP 8.2
            +
            + +
            +
            +
            +
            +
            + +
            + +
            +

            + + RFC + RFC +

            +
            +
            +
            PHP < 8.2
            +
            + +
            +
            +
            +
            +
            PHP 8.2
            +
            + +
            +
            +
            +
            + +
            +

            + + RFC + RFC + +

            +
            +
            +
            PHP 8.2
            +
            + jump(); + + $fibers[] = new Fiber(function () use ($fiberRng, $i): void { + $randomizer = new Randomizer($fiberRng); + + echo "{$i}: " . $randomizer->getInt(0, 100), PHP_EOL; + }); +} + +// The randomizer will use a CSPRNG by default. +$randomizer = new Randomizer(); + +// Even though the fibers execute in a random order, they will print the same value +// each time, because each has its own unique instance of the RNG. +$fibers = $randomizer->shuffleArray($fibers); +foreach ($fibers as $fiber) { + $fiber->start(); +} +PHP + ); ?> +
            +
            +
            +
            +
            + +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP 8.2
            +
            + +
            +
            +
            +
            +
            + +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.2
            +
            + last_name = 'Doe'; + +$user = new stdClass(); +$user->last_name = 'Doe'; +PHP + + ); ?> +
            +
            +
            +
            +
            PHP 8.2
            +
            + last_name = 'Doe'; // Deprecated notice + +$user = new stdClass(); +$user->last_name = 'Doe'; // Still allowed +PHP + ); ?> +
            +
            +
            +
            +
            + +
            + +
            + +
            +
            +

            +
            +
              +
            • +
            • +
            • +
            • +
            • +
            +
            +
            + +
            +

            +
            +
              +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            +
            +
            +
            + + + + 'English', + 'es' => 'Español', + 'de' => 'Deutsch', + 'ru' => 'Russian', + 'zh' => '简体中文', + 'pt_BR' => 'Brazilian Portuguese', + 'ja' => '日本語', + 'uk' => 'Українська', +]; + +function common_header(string $description): void { + global $MYSITE; + + $meta_image_path = \htmlspecialchars( + \filter_var($MYSITE . 'images/php8/php_8_3_released.png', \FILTER_VALIDATE_URL)); + $meta_description = \htmlspecialchars($description); + + \site_header("PHP 8.3.0 Release Announcement", [ + 'current' => 'php8', + 'css' => ['php8.css'], + 'meta_tags' => << + + + + + + + + + + + + +META + ]); +} + +function language_chooser(string $currentLang): void { + // Print out the form with all the options + echo ' +
            +
            + + +
            +
            +'; +} + +function message($code, $language = 'en') +{ + $original = require __DIR__ . '/languages/en.php'; + if (($language !== 'en') && file_exists(__DIR__ . '/languages/' . $language . '.php')) { + $translation = require __DIR__ . '/languages/' . $language . '.php'; + } + + return $translation[$code] ?? $original[$code] ?? $code; +} diff --git a/releases/8.3/de.php b/releases/8.3/de.php new file mode 100644 index 0000000000..45cb5470ed --- /dev/null +++ b/releases/8.3/de.php @@ -0,0 +1,5 @@ +chooseCode("", "", $_SERVER['HTTP_ACCEPT_LANGUAGE']); + +mirror_redirect("/releases/8.3/$lang.php"); diff --git a/releases/8.3/ja.php b/releases/8.3/ja.php new file mode 100644 index 0000000000..266e8d61b8 --- /dev/null +++ b/releases/8.3/ja.php @@ -0,0 +1,5 @@ + 'PHP 8.3 ist ein Major-Update der Sprache PHP. Es beinhaltet viele neue Features und Verbesserungen.
            Unter anderem die Typisierung von Klassen-Konstanten, tiefes Klonen von Readonly-Properties und Erweiterungen der Zufallsfunktionalität. Darüber hinaus sind wie üblich Performance-Optimierungen, Bug-Fixes und andere Aufräumarbeiten eingeflossen.', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.3 ist ein Major-Update der Sprache PHP.
            Es beinhaltet viele neue Features und Verbesserungen.
            Unter anderem die Typisierung von Klassen-Konstanten, tiefes Klonen von Readonly-Properties und Erweiterungen der Zufallsfunktionalität. Darüber hinaus sind wie üblich Performance-Optimierungen, Bug-Fixes und andere Aufräumarbeiten eingeflossen.', + 'upgrade_now' => 'Wechsle jetzt zu PHP 8.3!', + + 'readonly_title' => 'Klonen von Readonly-Properties', + 'readonly_description' => 'readonly-Properties können nun innerhalb der magischen __clone Methode geändert werden.', + 'json_validate_title' => 'New json_validate() Funktion', + 'json_validate_description' => 'json_validate() erlaubt es einen String auf syntaktisch korrektes JSON auf eine effizientere Art und Weise als json_decode() zu prüfen.', + 'typed_class_constants_title' => 'Typisierung von Klassen-Konstanten', + 'override_title' => 'Das neue #[\Override]-Attribut', + 'override_description' => 'Durch das Nutzen des #[\Override]-Attributs bei einer Methode, wird PHP nun sicherstellen, dass diese Methode in einer Elternklasse oder einem implementierten Interface vorhanden ist. Die Angabe des Attributs macht deutlich, dass das Überschreiben der Method absichtlich erfolgt ist und erleichtert ein Refactoring, da das Entfernen der überschriebenen Methode in der Elternklasse dazu führt, dass ein Fehler geworfen wird.', + 'randomizer_getbytesfromstring_title' => 'Neue Methode Randomizer::getBytesFromString()', + 'randomizer_getbytesfromstring_description' => 'Die Random-Erweiterung, die in PHP 8.2 hinzugefügt wurde, wurde um eine neue Methode erweitert, die es erlaubt einen String zu generieren, der ausschließlich aus bestimmten Zeichen besteht. Diese Methode erlaubt es auf einfache Weise zufällige Bezeichner, wie beispielsweise Domainnamen, und numerische Strings beliebiger Länge zu erzeugen.', + 'randomizer_getfloat_nextfloat_title' => 'Neue Methoden Randomizer::getFloat() und Randomizer::nextFloat()', + 'randomizer_getfloat_nextfloat_description' => '

            Durch die limitierte Präzision und der impliziten Rundung von Gleitkommazahlen war das gleichverteilte Generieren von Gleitkommazahlen innerhalb eines vorgegebenen Bereichs nicht einfach. Gängige Userland-Lösungen führen zu einer ungleichmäßigen Verteilung und geben potentiell Zahlen außerhalb des gewünschten Bereichs zurück.

            Der Randomizer wurde daher um zwei Methoden erweitert, um zufällige Gleitkommazahlen mit einer Gleichverteilung zu generieren. Die Randomizer::getFloat()-Methode nutzt den γ-section-Algorithmus, welcher in Drawing Random Floating-Point Numbers from an Interval. Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022. veröffentlicht wurde.

            ', + 'dynamic_class_constant_fetch_title' => 'Dynamisches Abrufen von Klassen-Konstanten', + 'command_line_linter_title' => 'Kommandozeilen-Linter unterstützt mehrere Dateien', + 'command_line_linter_description' => '

            Der Kommandozeilen-Linter erlaubt nun die Prüfung mehrerer Dateien.

            ', + + 'new_classes_title' => 'Neue Klassen, Interfaces, und Funktionen', + 'new_dom' => 'Neue DOMElement::getAttributeNames(), DOMElement::insertAdjacentElement(), DOMElement::insertAdjacentText(), DOMElement::toggleAttribute(), DOMNode::contains(), DOMNode::getRootNode(), DOMNode::isEqualNode(), DOMNameSpaceNode::contains(), und DOMParentNode::replaceChildren() Methoden.', + 'new_intl' => 'Neue IntlCalendar::setDate(), IntlCalendar::setDateTime(), IntlGregorianCalendar::createFromDate(), und IntlGregorianCalendar::createFromDateTime() Methoden.', + 'new_ldap' => 'Neue ldap_connect_wallet(), und ldap_exop_sync() Funktionen.', + 'new_mb_str_pad' => 'Neue mb_str_pad() Funktion.', + 'new_posix' => 'Neue posix_sysconf(), posix_pathconf(), posix_fpathconf(), und posix_eaccess() Funktionen.', + 'new_reflection' => 'Neue ReflectionMethod::createFromMethodName() Methode.', + 'new_socket' => 'Neue socket_atmark() Funktion.', + 'new_str' => 'Neue str_increment(), str_decrement(), und stream_context_set_options() Funktionen.', + 'new_ziparchive' => 'Neue ZipArchive::getArchiveFlag() Methode.', + 'new_openssl_ec' => 'Unterstützung der OpenSSL Erweiterung für das generieren von EC Schlüssel mit eigener Angabe von EC Parametern.', + 'new_ini' => 'Neue INI Einstellung zend.max_allowed_stack_size zum Angeben der maximal erlaubten Stack größe.', + 'ini_fallback' => 'Die php.ini Unterstützt nun die Fallback/Default-Wert Syntax.', + 'anonymous_readonly' => 'Anonymous Klassen können nun auch als readonly markiert werden.', + + 'bc_title' => 'Veraltete Funktionalität und inkompatible Änderungen zu vorherigen PHP Versionen', + 'bc_datetime' => 'Adäquatere Date/Time-Exceptions.', + 'bc_arrays' => 'Die Zuweisung eines Negativen-Index n bei einem leeren Array sorgt nun dafür, dass der nächste Index n + 1 statt 0 ist.', + 'bc_range' => 'Vänderungen an der range() Funktion.', + 'bc_traits' => 'Veränderungen an der erneuten Deklarierung von Properties durch Traits.', + 'bc_umultipledecimalseparators' => 'Die U_MULTIPLE_DECIMAL_SEPERATORS Konstante wurde als Veraltet markiert und wurde durch U_MULTIPLE_DECIMAL_SEPARATORS ersetzt.', + 'bc_mtrand' => 'Die MT_RAND_PHP Mt19937 Variante wurde als veraltet markiert.', + 'bc_reflection' => 'Der Rückgabewert von ReflectionClass::getStaticProperties() wurde von ?array zu array geändert.', + 'bc_ini' => 'Die INI Einstellungen assert.active, assert.bail, assert.callback, assert.exception, and assert.warning wurden als veraltet markiert.', + 'bc_standard' => 'Das Aufrufen der Funktionen get_class() und get_parent_class() ohne die Angabe von Parametern ist veraltet.', + 'bc_sqlite3' => 'SQLite3: Wirft nun im default Exceptions.', + + 'footer_title' => 'Bessere Performance, verbesserte Syntax und verbesserte Typensicherheit.', + 'footer_description' => '

            For source downloads of PHP 8.3 please visit the downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog.

            +

            The migration guide is available in the PHP Manual. Please consult it for a detailed list of new features and backward-incompatible changes.

            ', +]; diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php new file mode 100644 index 0000000000..6d3f0450ae --- /dev/null +++ b/releases/8.3/languages/en.php @@ -0,0 +1,55 @@ + 'PHP 8.3 is a major update of the PHP language. It contains many new features, such as explicit typing of class constants, deep-cloning of readonly properties and additions to the randomness functionality. As always it also includes performance improvements, bug fixes, and general cleanup.', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.3 is a major update of the PHP language.
            It contains many new features, such as explicit typing of class constants, deep-cloning of readonly properties and additions to the randomness functionality. As always it also includes performance improvements, bug fixes, and general cleanup.', + 'upgrade_now' => 'Upgrade to PHP 8.3 now!', + + 'readonly_title' => 'Deep-cloning of readonly properties', + 'readonly_description' => 'readonly properties may now be modified once within the magic __clone method to enable deep-cloning of readonly properties.', + 'json_validate_title' => 'New json_validate() function', + 'json_validate_description' => 'json_validate() allows to check if a string is syntactically valid JSON, while being more efficient than json_decode().', + 'typed_class_constants_title' => 'Typed class constants', + 'override_title' => 'New #[\Override] attribute', + 'override_description' => 'By adding the #[\Override] attribute to a method, PHP will ensure that a method with the same name exists in a parent class or in an implemented interface. Adding the attribute makes it clear that overriding a parent method is intentional and simplifies refactoring, because the removal of an overridden parent method will be detected.', + 'randomizer_getbytesfromstring_title' => 'New Randomizer::getBytesFromString() method', + 'randomizer_getbytesfromstring_description' => 'The Random Extension that was added in PHP 8.2 was extended by a new method to generate random strings consisting of specific bytes only. This method allows the developer to easily generate random identifiers, such as domain names, and numeric strings of arbitrary length.', + 'randomizer_getfloat_nextfloat_title' => 'New Randomizer::getFloat() and Randomizer::nextFloat() methods', + 'randomizer_getfloat_nextfloat_description' => '

            Due to the limited precision and implicit rounding of floating point numbers, generating an unbiased float lying within a specific interval is non-trivial and the commonly used userland solutions may generate biased results or numbers outside the requested range.

            The Randomizer was also extended with two methods to generate random floats in an unbiased fashion. The Randomizer::getFloat() method uses the γ-section algorithm that was published in Drawing Random Floating-Point Numbers from an Interval. Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022.

            ', + 'dynamic_class_constant_fetch_title' => 'Dynamic class constant fetch', + 'command_line_linter_title' => 'Command line linter supports multiple files', + 'command_line_linter_description' => '

            The command line linter now accepts variadic input for filenames to lint

            ', + + 'new_classes_title' => 'New Classes, Interfaces, and Functions', + 'new_dom' => 'New DOMElement::getAttributeNames(), DOMElement::insertAdjacentElement(), DOMElement::insertAdjacentText(), DOMElement::toggleAttribute(), DOMNode::contains(), DOMNode::getRootNode(), DOMNode::isEqualNode(), DOMNameSpaceNode::contains(), and DOMParentNode::replaceChildren() methods.', + 'new_intl' => 'New IntlCalendar::setDate(), IntlCalendar::setDateTime(), IntlGregorianCalendar::createFromDate(), and IntlGregorianCalendar::createFromDateTime() methods.', + 'new_ldap' => 'New ldap_connect_wallet(), and ldap_exop_sync() functions.', + 'new_mb_str_pad' => 'New mb_str_pad() function.', + 'new_posix' => 'New posix_sysconf(), posix_pathconf(), posix_fpathconf(), and posix_eaccess() functions.', + 'new_reflection' => 'New ReflectionMethod::createFromMethodName() method.', + 'new_socket' => 'New socket_atmark() function.', + 'new_str' => 'New str_increment(), str_decrement(), and stream_context_set_options() functions.', + 'new_ziparchive' => 'New ZipArchive::getArchiveFlag() method.', + 'new_openssl_ec' => 'Support for generation EC keys with custom EC parameters in OpenSSL extension.', + 'new_ini' => 'New INI setting zend.max_allowed_stack_size to set the maximum allowed stack size.', + 'ini_fallback' => 'php.ini now supports fallback/default value syntax.', + 'anonymous_readonly' => 'Anonymous classes can now be readonly.', + + 'bc_title' => 'Deprecations and backward compatibility breaks', + 'bc_datetime' => 'More Appropriate Date/Time Exceptions.', + 'bc_arrays' => 'Assigning a negative index n to an empty array will now make sure that the next index is n + 1 instead of 0.', + 'bc_range' => 'Changes to the range() function.', + 'bc_traits' => 'Changes in re-declaration of static properties in traits.', + 'bc_umultipledecimalseparators' => 'The U_MULTIPLE_DECIMAL_SEPERATORS constant is deprecated in favor of U_MULTIPLE_DECIMAL_SEPARATORS.', + 'bc_mtrand' => 'The MT_RAND_PHP Mt19937 variant is deprecated.', + 'bc_reflection' => 'ReflectionClass::getStaticProperties() is no longer nullable.', + 'bc_ini' => 'INI settings assert.active, assert.bail, assert.callback, assert.exception, and assert.warning have been deprecated.', + 'bc_standard' => 'Calling get_class() and get_parent_class() without arguments are deprecated.', + 'bc_sqlite3' => 'SQLite3: Default error mode set to exceptions.', + + 'footer_title' => 'Better performance, better syntax, improved type safety.', + 'footer_description' => '

            For source downloads of PHP 8.3 please visit the downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog.

            +

            The migration guide is available in the PHP Manual. Please consult it for a detailed list of new features and backward-incompatible changes.

            ', +]; diff --git a/releases/8.3/languages/es.php b/releases/8.3/languages/es.php new file mode 100644 index 0000000000..56072c9470 --- /dev/null +++ b/releases/8.3/languages/es.php @@ -0,0 +1,56 @@ + 'PHP 8.3 es una actualización importante del lenguaje PHP. Contiene muchas características nuevas, como la tipificación explícita de constantes de clase, la clonación profunda de propiedades de solo lectura y adiciones a la funcionalidad de aleatoriedad. Como siempre, también incluye mejoras de rendimiento, correcciones de errores y limpieza general.', + 'documentation' => 'Documentación', + 'main_title' => '¡Lanzado!', + 'main_subtitle' => 'PHP 8.3 es una actualización importante del lenguaje PHP.
            Contiene muchas características nuevas, como la tipificación explícita de constantes de clase, la clonación profunda de propiedades de solo lectura y adiciones a la funcionalidad de aleatoriedad. Como siempre, también incluye mejoras de rendimiento, correcciones de errores y limpieza general.', + 'upgrade_now' => '¡Actualiza a PHP 8.3 ahora!', + + 'readonly_title' => 'Clonación profunda de propiedades de solo lectura', + 'readonly_description' => 'readonly las propiedades ahora pueden ser modificadas una vez dentro del método mágico __clone para permitir la clonación profunda de propiedades de solo lectura.', + 'json_validate_title' => 'Nueva función json_validate()', + 'json_validate_description' => 'json_validate() permite verificar si una cadena es JSON sintácticamente válido, siendo más eficiente que json_decode().', + 'typed_class_constants_title' => 'Constantes de clase tipificadas', + 'override_title' => 'Nuevo atributo #[\Override]', + 'override_description' => 'Al agregar el atributo #[\Override] a un método, PHP asegurará que un método con el mismo nombre exista en una clase padre o en una interfaz implementada. Agregar el atributo aclara que la sobreescritura de un método padre es intencional y simplifica la refactorización, porque la eliminación de un método padre sobreescrito será detectada.', + 'randomizer_getbytesfromstring_title' => 'Nuevo método Randomizer::getBytesFromString()', + 'randomizer_getbytesfromstring_description' => 'La Extensión Aleatoria que se agregó en PHP 8.2 se extendió con un nuevo método para generar cadenas aleatorias compuestas solo por bytes específicos. Este método permite al desarrollador generar fácilmente identificadores aleatorios, como nombres de dominio y cadenas numéricas de longitud arbitraria.', + 'randomizer_getfloat_nextfloat_title' => 'Nuevos métodos Randomizer::getFloat() y Randomizer::nextFloat()', + 'randomizer_getfloat_nextfloat_description' => '

            Debido a la precisión limitada y el redondeo implícito de los números de punto flotante, generar un flotante imparcial dentro de un intervalo específico no es trivial y las soluciones comunes de usuario pueden generar resultados sesgados o números fuera del rango solicitado.

            La Aleatorizadora también se extendió con dos métodos para generar flotantes aleatorios de manera imparcial. El método Randomizer::getFloat() usa el algoritmo de sección γ que se publicó en Drawing Random Floating-Point Numbers from an Interval. Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022.

            ', + 'dynamic_class_constant_fetch_title' => 'Búsqueda dinámica de constantes de clase', + 'command_line_linter_title' => 'El linter de línea de comandos admite múltiples archivos', + 'command_line_linter_description' => '

            El linter de línea de comandos ahora acepta entrada variada para nombres de archivos a revisar

            ', + + 'new_classes_title' => 'Nuevas Clases, Interfaces y Funciones', + 'new_dom' => 'Nuevos métodos DOMElement::getAttributeNames(), DOMElement::insertAdjacentElement(), DOMElement::insertAdjacentText(), DOMElement::toggleAttribute(), DOMNode::contains(), DOMNode::getRootNode(), DOMNode::isEqualNode(), DOMNameSpaceNode::contains(), y DOMParentNode::replaceChildren().', + 'new_intl' => 'Nuevos métodos IntlCalendar::setDate(), IntlCalendar::setDateTime(), IntlGregorianCalendar::createFromDate(), y IntlGregorianCalendar::createFromDateTime().', + 'new_ldap' => 'Nuevas funciones ldap_connect_wallet() y ldap_exop_sync().', + 'new_mb_str_pad' => 'Nueva función mb_str_pad().', + 'new_posix' => 'Nuevas funciones posix_sysconf(), posix_pathconf(), posix_fpathconf(), y posix_eaccess().', + 'new_reflection' => 'Nuevo método ReflectionMethod::createFromMethodName().', + 'new_socket' => 'Nueva función socket_atmark().', + 'new_str' => 'Nuevas funciones str_increment(), str_decrement(), y stream_context_set_options().', + 'new_ziparchive' => 'Nuevo método ZipArchive::getArchiveFlag().', + 'new_openssl_ec' => 'Soporte para la generación de claves EC con parámetros EC personalizados en la extensión OpenSSL.', + 'new_ini' => 'Nueva configuración INI zend.max_allowed_stack_size para establecer el tamaño máximo permitido de la pila.', + 'ini_fallback' => 'php.ini ahora soporta la sintaxis de valor predeterminado/de reserva.', + 'anonymous_readonly' => 'Las clases anónimas ahora pueden ser de solo lectura.', + + 'bc_title' => 'Deprecaciones y rupturas de compatibilidad hacia atrás', + 'bc_datetime' => 'Excepciones de Fecha/Hora más Apropiadas.', + 'bc_arrays' => 'Asignar un índice negativo n a un arreglo vacío ahora asegurará que el siguiente índice sea n + 1 en lugar de 0.', + 'bc_range' => 'Cambios en la función range().', + 'bc_traits' => 'Cambios en la re-declaración de propiedades estáticas en rasgos.', + 'bc_umultipledecimalseparators' => 'La constante U_MULTIPLE_DECIMAL_SEPERATORS está obsoleta en favor de U_MULTIPLE_DECIMAL_SEPARATORS.', + 'bc_mtrand' => 'La variante MT_RAND_PHP Mt19937 está obsoleta.', + 'bc_reflection' => 'ReflectionClass::getStaticProperties() ya no es nulo.', + 'bc_ini' => 'Las configuraciones INI assert.active, assert.bail, assert.callback, assert.exception, y assert.warning han sido obsoletas.', + 'bc_standard' => 'Llamar a get_class() y get_parent_class() sin argumentos está obsoleto.', + 'bc_sqlite3' => 'SQLite3: Modo de error predeterminado establecido en excepciones.', + + 'footer_title' => 'Mejor rendimiento, mejor sintaxis, mayor seguridad de tipos.', + 'footer_description' => '

            Para descargas de código fuente de PHP 8.3, por favor visita la página de descargas. Los binarios para Windows se pueden encontrar en el sitio de PHP para Windows. La lista de cambios está registrada en el Registro de Cambios.

            +

            La guía de migración está disponible en el Manual de PHP. Por favor, consúltala para obtener una lista detallada de las nuevas características y los cambios que no son compatibles con versiones anteriores.

            ', + +]; diff --git a/releases/8.3/languages/ja.php b/releases/8.3/languages/ja.php new file mode 100644 index 0000000000..3c76218cb9 --- /dev/null +++ b/releases/8.3/languages/ja.php @@ -0,0 +1,53 @@ + 'PHP8.3は、PHP言語のメジャーアップデートです。クラス定数の型付け、読み取り専用プロパティのクローン、ランダム機能追加など、多くの新機能が含まれています。さらにパフォーマンスの向上、バグフィックス、コードのクリーンナップも行われました。', + 'documentation' => 'ドキュメント', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP8.3は、PHP言語のメジャーアップデートです。
            クラス定数の型付け、読み取り専用プロパティのクローン、ランダム機能追加など、多くの新機能が含まれています。さらにパフォーマンス向上、バグフィックス、コードのクリーンナップも行われました。', + 'upgrade_now' => 'PHP8.3へのアップデートはこちら!', + 'readonly_title' => '読み取り専用プロパティのディープクローン', + 'readonly_description' => 'readonlyプロパティをクローンする際、__cloneメソッド内で一度だけプロパティを変更できるようになりました。', + 'json_validate_title' => '関数json_validate()の追加', + 'json_validate_description' => '関数json_validate()は、json_decode()よりも効率的にJSONが正しい形式かをチェックすることができます。', + 'typed_class_constants_title' => 'クラス定数の型付け', + 'override_title' => 'アトリビュート#[\Override]の追加', + 'override_description' => 'メソッドにアトリビュート#[\Override]を追加すると、親クラスもしくはインターフェイスに同じメソッドが定義されていることを確認します。これにより、メソッドを意図的にオーバーライドしていると明示することができ、また親メソッドが変更されたときに検出できます。', + 'randomizer_getbytesfromstring_title' => 'メソッドRandomizer::getBytesFromString()の追加', + 'randomizer_getbytesfromstring_description' => 'PHP8.2で実装されたRandomエクステンションに、ランダム文字列を生成する新たなメソッドを追加しました。これにより、サブドメイン名などちょっとした文字列や任意長の数値型文字列などを容易に生成可能となります。', + 'randomizer_getfloat_nextfloat_title' => 'メソッドRandomizer::getFloat()Randomizer::nextFloat()の追加', + 'randomizer_getfloat_nextfloat_description' => '

            浮動小数点演算はその精度や丸め要素により、偏りのない乱数を生成することは比較的高難度であり、よく見られるユーザランド実装は結果が偏っていたり範囲外になっていたりすることがよくあります。

            Randomizerエクステンションでは普遍的な浮動小数乱数を生成するために2つのメソッドが実装されました。Randomizer::getFloat()Drawing Random Floating-Point Numbers from an Interval. Frédéric Goualard・ACM Trans. Model. Comput. Simul.・32:3・2022.という論文で紹介されたγ-sectionというアルゴリズムで乱数を生成します。

            ', + 'dynamic_class_constant_fetch_title' => 'クラス定数の文字列指定', + 'command_line_linter_title' => 'コマンドラインLinterの複数ファイル指定', + 'command_line_linter_description' => '

            コマンドラインLinterに複数のファイルを渡せるようになりました。

            ', + + 'new_classes_title' => '新しいクラス・インターフェイス・関数', + 'new_dom' => 'DOMにDOMElement::getAttributeNames()DOMElement::insertAdjacentElement()DOMElement::insertAdjacentText()DOMElement::toggleAttribute()DOMNode::contains()DOMNode::getRootNode()DOMNode::isEqualNode()DOMNameSpaceNode::contains()DOMParentNode::replaceChildren()メソッドが追加されました。', + 'new_intl' => 'IntlにIntlCalendar::setDate()IntlCalendar::setDateTime()IntlGregorianCalendar::createFromDate()IntlGregorianCalendar::createFromDateTime()が追加されました。', + 'new_ldap' => 'LDAPにldap_connect_wallet()ldap_exop_sync()が追加されました。', + 'new_mb_str_pad' => 'マルチバイト文字列関数にmb_str_pad()が追加されました。', + 'new_posix' => 'POSIX関数にposix_sysconf()posix_pathconf()posix_fpathconf()posix_eaccess()が追加されました。', + 'new_reflection' => 'リフレクションにReflectionMethod::createFromMethodName()が追加されました。', + 'new_socket' => 'ソケットにsocket_atmark()が追加されました。', + 'new_str' => '文字列関数にstr_increment()str_decrement()stream_context_set_options()が追加されました。', + 'new_ziparchive' => 'Zip関数にZipArchive::getArchiveFlag()が追加されました。', + 'new_openssl_ec' => 'OpenSSLエクステンションがEC parameterによる鍵の生成に対応しました。', + 'new_ini' => '最大スタックサイズを設定するINI設定zend.max_allowed_stack_sizeが追加されました', + 'ini_fallback' => 'iniファイルがデフォルト値を指定する構文に対応しました。', + 'anonymous_readonly' => '無名クラスをreadonlyにすることができるようになりました。', + + 'bc_title' => '非推奨、および互換性のない変更', + 'bc_datetime' => 'Date/Timeエクステンションの改善。', + 'bc_arrays' => '配列を負数nから始めた場合、次の自動採番は0ではなくn + 1になりました。', + 'bc_range' => 'range()関数の挙動が変更になりました。', + 'bc_traits' => 'トレイトとstaticプロパティの同時使用時の挙動が変更されました。', + 'bc_umultipledecimalseparators' => '定数U_MULTIPLE_DECIMAL_SEPERATORSは非推奨になりました。U_MULTIPLE_DECIMAL_SEPARATORSを使いましょう。', + 'bc_mtrand' => '正しくないMt19937実装である定数MT_RAND_PHPは非推奨になりました。', + 'bc_reflection' => 'メソッドReflectionClass::getStaticProperties()の返り値がnull許容型ではなくなりました。', + 'bc_ini' => 'INI設定assert.activeassert.bailassert.callbackassert.exceptionassert.warningは非推奨になりました。', + 'bc_standard' => '関数get_class()get_parent_class()は引数が必須になりました。', + 'bc_sqlite3' => 'SQLite3のエラーモードのデフォルトが例外になりました。', + + 'footer_title' => 'さらなる性能向上、よりよい構文、すぐれた型安全性。', + 'footer_description' => '

            PHP8.3のダウンロードはこちら。WindowsバイナリはPHP for Windowsで見つけることができます。ChangeLogはこちらです。

            マニュアルにあるマイグレーションガイドでは、新機能や変更点についてのより詳しい情報が記載されています。

            ', +]; \ No newline at end of file diff --git a/releases/8.3/languages/pt_BR.php b/releases/8.3/languages/pt_BR.php new file mode 100644 index 0000000000..089dfe8b8e --- /dev/null +++ b/releases/8.3/languages/pt_BR.php @@ -0,0 +1,55 @@ + 'PHP 8.3 é uma atualização importante da linguagem PHP. Ela contém muitos recursos novos, como tipagem explícita de constantes de classe, clonagem profunda de propriedades somente leitura e adições à funcionalidade de aleatoriedade. Como sempre, também inclui melhorias de desempenho, correções de bugs e limpeza geral.', + 'documentation' => 'Doc', + 'main_title' => 'Lançado!', + 'main_subtitle' => 'PHP 8.3 é uma atualização importante da linguagem PHP.
            Ela contém muitos recursos novos, como tipagem explícita de constantes de classe, clonagem profunda de propriedades somente leitura e adições à funcionalidade de aleatoriedade. Como sempre, também inclui melhorias de desempenho, correções de bugs e limpeza geral.', + 'upgrade_now' => 'Atualize para PHP 8.3 agora!', + + 'readonly_title' => 'Clonagem profunda de propriedades somente leitura', + 'readonly_description' => 'Propriedades readonly agora podem ser modificadas uma vez dentro do método mágico __clone para permitir a clonagem profunda de propriedades somente leitura.', + 'json_validate_title' => 'Nova função json_validate()', + 'json_validate_description' => 'json_validate() permite verificar se uma string é sintaticamente válida em JSON, sendo mais eficiente do que json_decode().', + 'typed_class_constants_title' => 'Constantes de classe tipadas', + 'override_title' => 'Novo atributo #[\Override]', + 'override_description' => 'Ao adicionar o atributo #[\Override] a um método, o PHP garantirá que um método com o mesmo nome exista em uma classe pai ou em uma interface implementada. Adicionar o atributo torna claro que a sobreposição de um método pai é intencional e simplifica a refatoração, pois a remoção de um método pai sobreposto será detectada.', + 'randomizer_getbytesfromstring_title' => 'Novo método Randomizer::getBytesFromString()', + 'randomizer_getbytesfromstring_description' => 'A Extensão Random que foi adicionada no PHP 8.2 foi ampliada com um novo método para gerar strings aleatórias consistindo apenas de bytes específicos. Este método permite que o desenvolvedor gere facilmente identificadores aleatórios, como nomes de domínio e strings numéricas de comprimento arbitrário.', + 'randomizer_getfloat_nextfloat_title' => 'Novos métodos Randomizer::getFloat() e Randomizer::nextFloat()', + 'randomizer_getfloat_nextfloat_description' => '

            Devido à precisão limitada e ao arredondamento implícito de números de ponto flutuante, gerar um float imparcial dentro de um intervalo específico não é trivial, e as soluções comumente usadas no nível do usuário podem gerar resultados tendenciosos ou números fora do intervalo solicitado.

            O Randomizer também foi ampliado com dois métodos para gerar floats de maneira imparcial. O método Randomizer::getFloat() utiliza o algoritmo da seção γ que foi publicado em Drawing Random Floating-Point Numbers from an Interval. Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022.

            ', + 'dynamic_class_constant_fetch_title' => 'Recuperação dinâmica de constantes de classe', + 'command_line_linter_title' => 'O linter de linha de comando suporta vários arquivos', + 'command_line_linter_description' => '

            O linter da linha de comando agora aceita vários nomes de arquivos para lint

            ', + + 'new_classes_title' => 'Novas classes, interfaces e funções', + 'new_dom' => 'Novos métodos DOMElement::getAttributeNames(), DOMElement::insertAdjacentElement(), DOMElement::insertAdjacentText(), DOMElement::toggleAttribute(), DOMNode::contains(), DOMNode::getRootNode(), DOMNode::isEqualNode(), DOMNameSpaceNode::contains() e DOMParentNode::replaceChildren().', + 'new_intl' => 'Novos métodos IntlCalendar::setDate(), IntlCalendar::setDateTime(), IntlGregorianCalendar::createFromDate() e IntlGregorianCalendar::createFromDateTime().', + 'new_ldap' => 'Novas funções ldap_connect_wallet() e ldap_exop_sync().', + 'new_mb_str_pad' => 'Nova função mb_str_pad().', + 'new_posix' => 'Novas funções posix_sysconf(), posix_pathconf(), posix_fpathconf() e posix_eaccess().', + 'new_reflection' => 'Novo método ReflectionMethod::createFromMethodName().', + 'new_socket' => 'Nova função socket_atmark().', + 'new_str' => 'Nova função str_increment(), str_decrement() e stream_context_set_options().', + 'new_ziparchive' => 'Novo método ZipArchive::getArchiveFlag().', + 'new_openssl_ec' => 'Suporte para geração de chaves EC com parâmetros EC personalizados na extensão OpenSSL.', + 'new_ini' => 'Nova configuração INI zend.max_allowed_stack_size para definir o tamanho máximo permitido da pilha.', + 'ini_fallback' => 'php.ini agora suporta sintaxe de valor substituto/padrão.', + 'anonymous_readonly' => 'Classes anônimas agora podem ser somente leitura.', + + 'bc_title' => 'Alterações obsoletas e incompatibilidades com versões anteriores', + 'bc_datetime' => 'Exceções de Date/Time mais apropriadas.', + 'bc_arrays' => 'Atribuir um índice negativo n a um array vazio agora garantirá que o próximo índice seja n + 1 em vez de 0.', + 'bc_range' => 'Alterações na função range().', + 'bc_traits' => 'Alterações na redeclaração de propriedades estáticas em traits.', + 'bc_umultipledecimalseparators' => 'A constante U_MULTIPLE_DECIMAL_SEPERATORS foi obsoleta em favor de U_MULTIPLE_DECIMAL_SEPARATORS.', + 'bc_mtrand' => 'A variante MT_RAND_PHP do Mt19937 está obsoleta.', + 'bc_reflection' => 'O tipo de retorno de ReflectionClass::getStaticProperties() não será mais nulo.', + 'bc_ini' => 'As configurações INI assert.active, assert.bail, assert.callback, assert.exception e assert.warning foram obsoletas.', + 'bc_standard' => 'Chamar get_class() e get_parent_class() sem argumentos está obsoleto.', + 'bc_sqlite3' => 'SQLite3: modo de erro padrão definido como exceções.', + + 'footer_title' => 'Melhorias de desempenho, sintaxe aprimorada e maior segurança de tipos.', + 'footer_description' => '

            Para downloads do código-fonte do PHP 8.3, visite a página de downloads. Binários para Windows podem ser encontrados no site PHP for Windows. A lista de alterações está registrada no ChangeLog.

            +

            O guia de migração está disponível no Manual do PHP. Consulte-o para obter uma lista detalhada de novos recursos e alterações incompatíveis com versões anteriores.

            ', +]; diff --git a/releases/8.3/languages/ru.php b/releases/8.3/languages/ru.php new file mode 100644 index 0000000000..a090db39d2 --- /dev/null +++ b/releases/8.3/languages/ru.php @@ -0,0 +1,55 @@ + 'PHP 8.3 — большое обновление языка PHP. Оно содержит множество новых возможностей, таких как явная типизация констант классов, глубокое клонирование readonly-свойств, а также улучшения класса Randomizer. Как всегда, в нём также улучшена производительность, исправлены ошибки и многое другое.', + 'documentation' => 'Документация', + 'main_title' => 'выпущен!', + 'main_subtitle' => 'PHP 8.3 — большое обновление языка PHP.
            Оно содержит множество новых возможностей, таких как явная типизация констант классов, глубокое клонирование readonly-свойств, а также улучшения класса Randomizer. Как всегда, в нём также улучшена производительность, исправлены ошибки и многое другое.', + 'upgrade_now' => 'Переходите на PHP 8.3!', + + 'readonly_title' => 'Глубокое клонирование readonly-свойств', + 'readonly_description' => 'Свойства, доступные только для чтения (readonly) теперь могут быть изменены один раз с помощью магического метода __clone для обеспечения возможности глубокого клонирования readonly-свойств.', + 'json_validate_title' => 'Новая функция json_validate()', + 'json_validate_description' => 'Функция json_validate() позволяет проверить, является ли строка синтаксически корректным JSON, при этом она более эффективна, чем функция json_decode().', + 'typed_class_constants_title' => 'Типизированные константы классов', + 'override_title' => 'Новый атрибут #[\Override]', + 'override_description' => 'Если добавить методу атрибут #[\Override], то PHP убедится, что метод с таким же именем существует в родительском классе или в реализованном интерфейсе. Добавление атрибута даёт понять, что переопределение родительского метода является намеренным, а также упрощает рефакторинг, поскольку удаление переопределённого родительского метода будет обнаружено.', + 'randomizer_getbytesfromstring_title' => 'Новый метод Randomizer::getBytesFromString()', + 'randomizer_getbytesfromstring_description' => 'Модуль Random, добавленный в PHP 8.2, был дополнен новым методом генерации случайных строк, состоящих только из определённых байтов. Этот метод позволяет легко генерировать случайные идентификаторы, например, имена доменов и числовые строки произвольной длины.', + 'randomizer_getfloat_nextfloat_title' => 'Новые методы Randomizer::getFloat() и Randomizer::nextFloat()', + 'randomizer_getfloat_nextfloat_description' => '

            Из-за ограниченной точности и неявного округления чисел с плавающей точкой генерация несмещённого числа, лежащего в определённом интервале, является нетривиальной задачей, а пользовательские решения могут давать смещённые результаты или числа, выходящие за пределы требуемого диапазона.

            Класс Randomizer был расширен двумя методами, позволяющими генерировать случайные числа с плавающей точкой несмещённым образом. Метод Randomizer::getFloat() использует алгоритм γ-секции, который был опубликован в Drawing Random Floating-Point Numbers from an Interval. Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022.

            ', + 'dynamic_class_constant_fetch_title' => 'Динамическое получение констант класса', + 'command_line_linter_title' => 'Линтер командной строки поддерживает несколько файлов', + 'command_line_linter_description' => '

            Линтер командной строки теперь принимает несколько имён файлов для проверки.

            ', + + 'new_classes_title' => 'Новые классы, интерфейсы и функции', + 'new_dom' => 'Новые методы DOMElement::getAttributeNames(), DOMElement::insertAdjacentElement(), DOMElement::insertAdjacentText(), DOMElement::toggleAttribute(), DOMNode::contains(), DOMNode::getRootNode(), DOMNode::isEqualNode(), DOMNameSpaceNode::contains() и DOMParentNode::replaceChildren().', + 'new_intl' => 'Новые методы IntlCalendar::setDate(), IntlCalendar::setDateTime(), IntlGregorianCalendar::createFromDate() и IntlGregorianCalendar::createFromDateTime().', + 'new_ldap' => 'Новые функции ldap_connect_wallet() и ldap_exop_sync().', + 'new_mb_str_pad' => 'Новая функция mb_str_pad().', + 'new_posix' => 'Новые функции posix_sysconf(), posix_pathconf(), posix_fpathconf() и posix_eaccess().', + 'new_reflection' => 'Новый метод ReflectionMethod::createFromMethodName().', + 'new_socket' => 'Новая функция socket_atmark().', + 'new_str' => 'Новые функции str_increment(), str_decrement() и stream_context_set_options().', + 'new_ziparchive' => 'Новый метод ZipArchive::getArchiveFlag().', + 'new_openssl_ec' => 'Поддержка генерации EC-ключей с пользовательскими EC-параметрами в модуле OpenSSL.', + 'new_ini' => 'Новый параметр INI zend.max_allowed_stack_size для установки максимально допустимого размера стека.', + 'ini_fallback' => 'php.ini теперь поддерживает синтаксис резервных значений/значений по умолчанию.', + 'anonymous_readonly' => 'Анонимные классы теперь доступны только для чтения.', + + 'bc_title' => 'Устаревшая функциональность и изменения в обратной совместимости', + 'bc_datetime' => 'Более подходящие исключения в модуле Date/Time.', + 'bc_arrays' => 'Присвоение отрицательного индекса n пустому массиву теперь гарантирует, что следующим индексом будет n + 1, а не 0.', + 'bc_range' => 'Изменения в функции range().', + 'bc_traits' => 'Изменения в повторном объявлении статических свойств в трейтах.', + 'bc_umultipledecimalseparators' => 'Константа U_MULTIPLE_DECIMAL_SEPERATORS объявлена устаревшей, вместо неё рекомендуется использовать константу U_MULTIPLE_DECIMAL_SEPARATORS.', + 'bc_mtrand' => 'Вариант Mt19937 MT_RAND_PHP объявлен устаревшим.', + 'bc_reflection' => 'ReflectionClass::getStaticProperties() теперь не возвращает значение null.', + 'bc_ini' => 'Параметры INI assert.active, assert.bail, assert.callback, assert.exception и assert.warning объявлены устаревшими.', + 'bc_standard' => 'Вызов функции get_class() и get_parent_class() без аргументов объявлен устаревшим.', + 'bc_sqlite3' => 'SQLite3: режим ошибок по умолчанию установлен на исключения.', + + 'footer_title' => 'Выше производительность, лучше синтаксис, надёжнее система типов.', + 'footer_description' => '

            Для загрузки исходного кода PHP 8.3 посетите страницу Downloads. Бинарные файлы Windows находятся на сайте PHP for Windows. Список изменений перечислен на странице ChangeLog.

            +

            Руководство по миграции доступно в разделе документации. Ознакомьтесь с ним, чтобы узнать обо всех новых возможностях и изменениях, затрагивающих обратную совместимость.

            ', +]; diff --git a/releases/8.3/languages/uk.php b/releases/8.3/languages/uk.php new file mode 100644 index 0000000000..f382398bdc --- /dev/null +++ b/releases/8.3/languages/uk.php @@ -0,0 +1,55 @@ + 'PHP 8.3 — це значне оновлення мови PHP. Воно містить багато нових можливостей, таких як явна типізація констант класів, глибоке клонування readonly-властивостей і доповнення до функціоналу генерування випадкових чисел. Як завжди, воно також включає покращення продуктивності, виправлення помилок і загальний рефакторинг.', + 'documentation' => 'Документація', + 'main_title' => 'Випущено!', + 'main_subtitle' => 'PHP 8.3 — це значне оновлення мови PHP.
            Воно містить багато нових можливостей, таких як явна типізація констант класів, глибоке клонування readonly-властивостей і доповнення до функціоналу генерування випадкових чисел. Як завжди, воно також включає покращення продуктивності, виправлення помилок і загальний рефакторинг.', + 'upgrade_now' => 'Оновіться до PHP 8.3 прямо зараз!', + + 'readonly_title' => 'Глибоке клонування readonly-властивостей', + 'readonly_description' => 'Щоб забезпечити можливість глибокого клонування властивостей, доступних лише для читання, readonly властивості тепер можуть бути модифіковані один раз, за допомогою магічного методу __clone.', + 'json_validate_title' => 'Нова функція json_validate()', + 'json_validate_description' => 'Функція json_validate() дозволяє перевірити, чи є рядок синтаксично правильним JSON, при цьому є ефективнішою за функціюjson_decode().', + 'typed_class_constants_title' => 'Типізовані константи класу', + 'override_title' => 'Новий атрибут #[\Override]', + 'override_description' => 'Додавши до методу атрибут #[\Override], PHP буде впевнюватися, що метод із такою ж назвою існує у батьківському класі або реалізованому інтерфейсі. Додавання цього атрибута дає можливість зрозуміти, що перевизначення батьківського методу є навмисним і спрощує рефакторинг, оскільки видалення перевизначеного батьківського методу не залишиться непоміченим.', + 'randomizer_getbytesfromstring_title' => 'Новий метод Randomizer::getBytesFromString()', + 'randomizer_getbytesfromstring_description' => 'Модуль Random, що додано у PHP 8.2, було розширено новим методом генерування випадкових рядків, які складаються лише з певних байтів. Цей метод дозволяє розробнику легко генерувати випадкові ідентифікатори, такі як імена доменів і числові рядки довільної довжини.', + 'randomizer_getfloat_nextfloat_title' => 'Нові методи Randomizer::getFloat() і Randomizer::nextFloat()', + 'randomizer_getfloat_nextfloat_description' => '

            Через обмежену точність і неявне округлення чисел з рухомою комою, генерування незміщеного числа з рухомою комою, що лежить у межах певного інтервалу, є нетривіальним завданням, а загальноприйняті користувацькі рішення можуть генерувати зміщені результати або числа, що виходять за межі заданого діапазону.

            Клас Randomizer було розширено двома методами для неупередженого генерування випадкових чисел з рухомою комою. Метод Randomizer::getFloat() використовує алгоритм y-section, який було опубліковано у статті Drawing Random Floating-Point Numbers from an Interval. Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022.

            ', + 'dynamic_class_constant_fetch_title' => 'Динамічна вибірка констант класу', + 'command_line_linter_title' => 'Лінтер командного рядка підтримує можливість перевірки декількох файлів', + 'command_line_linter_description' => '

            Лінтер командного рядка тепер може приймати декілька імен файлів для перевірки

            ', + + 'new_classes_title' => 'Нові класи, інтерфейси та функції', + 'new_dom' => 'Нові методи DOMElement::getAttributeNames(), DOMElement::insertAdjacentElement(), DOMElement::insertAdjacentText(), DOMElement::toggleAttribute(), DOMNode::contains(), DOMNode::getRootNode(), DOMNode::isEqualNode(), DOMNameSpaceNode::contains() і DOMParentNode::replaceChildren().', + 'new_intl' => 'Нові методи IntlCalendar::setDate(), IntlCalendar::setDateTime(), IntlGregorianCalendar::createFromDate() і IntlGregorianCalendar::createFromDateTime().', + 'new_ldap' => 'Нові функції ldap_connect_wallet() і ldap_exop_sync().', + 'new_mb_str_pad' => 'Нова функція mb_str_pad().', + 'new_posix' => 'Нові функції posix_sysconf(), posix_pathconf(), posix_fpathconf() і posix_eaccess().', + 'new_reflection' => 'Новий метод ReflectionMethod::createFromMethodName().', + 'new_socket' => 'Нова функція socket_atmark().', + 'new_str' => 'Нові функції str_increment(), str_decrement() і stream_context_set_options().', + 'new_ziparchive' => 'Новий метод ZipArchive::getArchiveFlag().', + 'new_openssl_ec' => 'Підтримка генерування EC-ключів із власними EC-параметрами у модулі OpenSSL.', + 'new_ini' => 'Новий параметр INI zend.max_allowed_stack_size для встановлення максимально дозволеного розміру стека.', + 'ini_fallback' => 'php.ini тепер підтримує синтаксис запасних значень/значень за замовчуванням.', + 'anonymous_readonly' => 'Анонімні класи тепер доступні лише для читання.', + + 'bc_title' => 'Застаріла функціональність і зміни у зворотній сумісності', + 'bc_datetime' => 'Доречніші винятки у модулі Date/Time.', + 'bc_arrays' => 'Присвоєння від\'ємного індексу n до порожнього масиву тепер гарантує, що наступним індексом буде n + 1 замість 0.', + 'bc_range' => 'Внесено зміни до функціїrange().', + 'bc_traits' => 'Зміни у повторному оголошенні статичних властивостей у трейтах.', + 'bc_umultipledecimalseparators' => 'Константу U_MULTIPLE_DECIMAL_SEPERATORS оголошено застарілою, натомість рекомендується використовувати U_MULTIPLE_DECIMAL_SEPARATORS.', + 'bc_mtrand' => 'Механізм Mt19937 MT_RAND_PHP оголошено застарілим.', + 'bc_reflection' => 'ReflectionClass::getStaticProperties() тепер не повертає значення null.', + 'bc_ini' => 'Параметри INI assert.active, assert.bail, assert.callback, assert.exception і assert.warning оголошено застарілими.', + 'bc_standard' => 'Можливість виклику функції get_class() і get_parent_class() без аргументів оголошено застарілою.', + 'bc_sqlite3' => 'SQLite3: Режим помилок за замовчуванням встановлено на винятки.', + + 'footer_title' => 'Краща продуктивність, кращий синтаксис, покращена безпека типів.', + 'footer_description' => '

            Для завантаження початкового коду PHP 8.3 відвідайте сторінку downloads. Двійкові файли Windows можна знайти на сайті PHP for Windows. Перелік змін описано на сторінці ChangeLog.

            +

            Посібник з міграції знаходиться у посібнику з PHP. Будь ласка, ознайомтеся з ним, щоб отримати детальніший список нових функцій і несумісних змін.

            ', +]; diff --git a/releases/8.3/languages/zh.php b/releases/8.3/languages/zh.php new file mode 100644 index 0000000000..115e51c3bf --- /dev/null +++ b/releases/8.3/languages/zh.php @@ -0,0 +1,66 @@ + 'PHP 8.3 是 PHP 语言的一次重大更新。它包含了许多新功能,例如:类常量显式类型、只读属性深拷贝,以及对随机性功能的补充。一如既往,它还包括性能改进、错误修复和常规清理等。', + 'documentation' => '文档', + 'main_title' => '已发布!', + 'main_subtitle' => 'PHP 8.3 是 PHP 语言的一次重大更新。
            它包含了许多新功能,例如:类常量显式类型、只读属性深拷贝,以及对随机性功能的补充。一如既往,它还包括性能改进、错误修复和常规清理等。', + 'upgrade_now' => '更新到 PHP 8.3 !', + + 'readonly_title' => '只读属性深拷贝', + 'readonly_description' => 'readonly 属性现在可以在魔术方法 __clone 中被修改一次,以此实现只读属性的深拷贝', + 'json_validate_title' => '新增 json_validate() 函数', + 'json_validate_description' => 'json_validate() 可以检查一个字符串是否为语法正确的 JSON,比 json_decode() 更有效。', + 'typed_class_constants_title' => '类型化类常量', + 'override_title' => '新增 #[\Override] 属性', + 'override_description' => '通过给方法添加 #[\Override] 属性,PHP 将确保在父类或实现的接口中存在同名的方法。添加该属性表示明确说明覆盖父方法是有意为之,并且简化了重构过程,因为删除被覆盖的父方法将被检测出来。', + 'randomizer_getbytesfromstring_title' => '新增 Randomizer::getBytesFromString() 方法', + 'randomizer_getbytesfromstring_description' => '在 PHP 8.2 中新增的 Random 扩展 通过一个新方法生成由特定字节组成的随机字符串。这种方法可以使开发者更轻松的生成随机的标识符(如域名),以及任意长度的数字字符串。', + 'randomizer_getfloat_nextfloat_title' => '新增 Randomizer::getFloat()Randomizer::nextFloat() 方法', + 'randomizer_getfloat_nextfloat_description' => '

            由于浮点数的精度和隐式四舍五入的限制,在特定区间内生成无偏差的浮点数并非易事,常见的用户解决方案可能会生成有偏差的结果或超出要求范围的数字。

            Randomizer 扩展了两种方法,用于随机生成无偏差的浮点数。Randomizer::getFloat() 方法使用的是 γ-section 算法,该算法发表于 Drawing Random Floating-Point Numbers from an Interval. Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022.

            ', + 'dynamic_class_constant_fetch_title' => '动态获取类常量', + 'command_line_linter_title' => '命令行 linter 支持多个文件', + 'command_line_linter_description' => '

            命令行 linter 现在接受文件名的可变输入以进行 lint

            ', + + 'new_classes_title' => '新的类、接口和函数', + 'new_dom' => '新增 DOMElement::getAttributeNames()DOMElement::insertAdjacentElement()DOMElement::insertAdjacentText()DOMElement::toggleAttribute()DOMNode::contains()DOMNode::getRootNode()DOMNode::isEqualNode()DOMNameSpaceNode::contains()DOMParentNode::replaceChildren() 方法。', + 'new_intl' => '新增 IntlCalendar::setDate()IntlCalendar::setDateTime()IntlGregorianCalendar::createFromDate()IntlGregorianCalendar::createFromDateTime() 方法。', + 'new_ldap' => '新增 ldap_connect_wallet()ldap_exop_sync() 函数。', + 'new_mb_str_pad' => '新增 mb_str_pad() 函数。', + 'new_posix' => '新增 posix_sysconf()posix_pathconf()posix_fpathconf()posix_eaccess() 函数。', + 'new_reflection' => '新增 ReflectionMethod::createFromMethodName() 方法', + 'new_socket' => '新增 socket_atmark() 函数。', + 'new_str' => '新增 str_increment()str_decrement()stream_context_set_options() 函数。', + 'new_ziparchive' => '新增 ZipArchive::getArchiveFlag() 方法。', + 'new_openssl_ec' => '支持在 OpenSSL 扩展中使用自定义 EC 参数生成 EC 密钥。', + 'new_ini' => '新增 INI 设置 zend.max_allowed_stack_size 用于设置允许的最大堆栈大小。', + 'ini_fallback' => 'php.ini 现在支持后备/默认值语法。', + 'anonymous_readonly' => '匿名类现在可以是只读的。', + + 'bc_title' => '弃用和向后不兼容', + 'bc_datetime' => '更合适的 Date/Time 异常。', + 'bc_arrays' => '现在在空数组中获取负索引 n 时,将确保下一个索引是 n + 1 而不是 0。', + 'bc_range' => '对 range() 函数的更改。', + 'bc_traits' => '在 traits 中重新声明静态属性的更改。', + 'bc_umultipledecimalseparators' => 'U_MULTIPLE_DECIMAL_SEPERATORS 常量已被废弃,改为 U_MULTIPLE_DECIMAL_SEPARATORS。', + 'bc_mtrand' => 'MT_RAND_PHP Mt19937 变体已被废弃。', + 'bc_reflection' => 'ReflectionClass::getStaticProperties() 不再为空。', + 'bc_ini' => 'INI 配置 assert.activeassert.bailassert.callbackassert.exceptionassert.warning 已被废弃。', + 'bc_standard' => '调用 get_class()get_parent_class() 时未提供参数,已被废弃。', + 'bc_sqlite3' => 'SQLite3:默认错误模式设置为异常。', + + 'footer_title' => '更好的性能、更好的语法、改进类型安全。', + 'footer_description' => '

            + 请访问 下载 页面下载 PHP 8.3 源代码。 + 在 PHP for Windows 站点中可找到 Windows 二进制文件。 + ChangeLog 中有变更历史记录清单。 +

            +

            + PHP 手册中有 迁移指南。 + 请参考它描述的新功能详细清单、向后不兼容的变化。 +

            ', +]; diff --git a/releases/8.3/pt_BR.php b/releases/8.3/pt_BR.php new file mode 100644 index 0000000000..be7e4f4750 --- /dev/null +++ b/releases/8.3/pt_BR.php @@ -0,0 +1,5 @@ + +
            +
            +
            + +
            +
            +
            + +
            +
            +
            + +
            +
            +
            + +
            +
            +

            + + RFC +

            +
            +
            +
            PHP < 8.3
            +
            + +
            +
            +
            +
            +
            PHP 8.3
            +
            + +
            +
            +
            +
            + +
            +

            + + RFC +

            +
            +
            +
            PHP < 8.3
            +
            + +
            +
            +
            +
            +
            PHP 8.3
            +
            + +
            +
            +
            +
            + +
            +

            + + RFC +

            +
            +
            +
            PHP < 8.3
            +
            + logFile = fopen('/tmp/logfile', 'w'); + } + + protected function taerDown(): void { + fclose($this->logFile); + unlink('/tmp/logfile'); + } +} + +// The log file will never be removed, because the +// method name was mistyped (taerDown vs tearDown). +PHP + + ); ?> +
            +
            +
            +
            +
            PHP 8.3
            +
            + logFile = fopen('/tmp/logfile', 'w'); + } + + #[\Override] + protected function taerDown(): void { + fclose($this->logFile); + unlink('/tmp/logfile'); + } +} + +// Fatal error: MyTest::taerDown() has #[\Override] attribute, +// but no matching parent method exists +PHP + ); ?> +
            +
            +
            + +
            + +
            +
            + +
            +

            + + RFC +

            +
            +
            +
            PHP < 8.3
            +
            + php = clone $this->php; + } +} + +$instance = new Foo(new PHP()); +$cloned = clone $instance; + +// Fatal error: Cannot modify readonly property Foo::$php +PHP + + ); ?> +
            +
            +
            +
            +
            PHP 8.3
            +
            + php = clone $this->php; + } +} + +$instance = new Foo(new PHP()); +$cloned = clone $instance; + +$cloned->php->version = '8.3'; +PHP + ); ?> +
            +
            +
            +
            + +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.3
            +
            + +
            +
            +
            +
            +
            PHP 8.3
            +
            + +
            +
            +
            +
            + +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.3
            +
            + +
            +
            +
            +
            +
            PHP 8.3
            +
            + getBytesFromString( + 'abcdefghijklmnopqrstuvwxyz0123456789', + 16, + ), +); + +echo $randomDomain; +PHP + ); ?> +
            +
            +
            + +
            + +
            +
            + +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.3
            +
            + +
            +
            +
            +
            +
            PHP 8.3
            +
            + getFloat( + -89.2, + 56.7, + \Random\IntervalBoundary::ClosedClosed, +); + +$chanceForTrue = 0.1; +// Randomizer::nextFloat() is equivalent to +// Randomizer::getFloat(0, 1, \Random\IntervalBoundary::ClosedOpen). +// The upper bound, i.e. 1, will not be returned. +$myBoolean = $randomizer->nextFloat() < $chanceForTrue; +PHP + ); ?> +
            +
            +
            +
            + +
            + +
            + +
            +

            + + PR + +

            +
            +
            +
            PHP < 8.3
            +
            + +php -l foo.php bar.php +No syntax errors detected in foo.php + +
            +
            +
            +
            +
            PHP 8.3
            +
            + +php -l foo.php bar.php +No syntax errors detected in foo.php +No syntax errors detected in bar.php + +
            +
            +
            +
            + +
            + +
            + + +
            + +
            +
            +

            +
            +
              +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            +
            +
            + +
            +

            +
            +
              +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            +
            +
            +
            + + + + 'English', + 'fr' => 'Français', + 'ru' => 'Russian', + 'pt_BR' => 'Brazilian Portuguese', + 'nl' => 'Nederlands', + 'es' => 'Spanish', + 'tr' => 'Türkçe', + 'uk' => 'Українська', + 'zh' => '简体中文', + 'ja' => '日本語', +]; + +function common_header(string $description): void { + global $MYSITE; + + $meta_image_path = \htmlspecialchars( + \filter_var($MYSITE . 'images/php8/php_8_4_released.png', \FILTER_VALIDATE_URL)); + $meta_description = \htmlspecialchars($description); + + \site_header("PHP 8.4 Release Announcement", [ + 'current' => 'php8', + 'css' => ['php8.css'], + 'meta_tags' => << + + + + + + + + + + + + +META + ]); +} + +function language_chooser(string $currentLang): void { + // Print out the form with all the options + echo ' +
            +
            + + +
            +
            +'; +} + +function message($code, $language = 'en') +{ + $original = require __DIR__ . '/languages/en.php'; + if (($language !== 'en') && file_exists(__DIR__ . '/languages/' . $language . '.php')) { + $translation = require __DIR__ . '/languages/' . $language . '.php'; + } + + return $translation[$code] ?? $original[$code] ?? $code; +} diff --git a/releases/8.4/en.php b/releases/8.4/en.php new file mode 100644 index 0000000000..7ff380e63b --- /dev/null +++ b/releases/8.4/en.php @@ -0,0 +1,5 @@ +chooseCode("", "", $_SERVER['HTTP_ACCEPT_LANGUAGE']); + +mirror_redirect("/releases/8.4/$lang.php"); diff --git a/releases/8.4/ja.php b/releases/8.4/ja.php new file mode 100644 index 0000000000..9db1f5ca85 --- /dev/null +++ b/releases/8.4/ja.php @@ -0,0 +1,5 @@ + 'PHP 8.4 is a major update of the PHP language. It contains many new features, such as property hooks, asymmetric visibility, an updated DOM API, performance improvements, bug fixes, and general cleanup.', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.4 is a major update of the PHP language.
            It contains many new features, such as property hooks, asymmetric visibility, an updated DOM API, performance improvements, bug fixes, and general cleanup.', + 'upgrade_now' => 'Upgrade to PHP 8.4 now!', + + 'property_hooks_title' => 'Property hooks', + 'property_hooks_description' => 'Property hooks provide support for computed properties that can natively be understood by IDEs and static analysis tools, without needing to write docblock comments that might go out of sync. Furthermore, they allow reliable pre- or post-processing of values, without needing to check whether a matching getter or setter exists in the class.', + 'asymmetric_visibility_title' => 'Asymmetric Visibility', + 'asymmetric_visibility_description' => 'The scope to write to a property may now be controlled independently from the scope to read the property, reducing the need for boilerplate getter methods to expose a property’s value without allowing modification from the outside of a class.', + 'deprecated_attribute_title' => '#[\Deprecated] Attribute', + 'deprecated_attribute_description' => 'The new #[\Deprecated] attribute makes PHP’s existing deprecation mechanism available to user-defined functions, methods, and class constants.', + 'dom_additions_html5_title' => 'New ext-dom features and HTML5 support', + 'dom_additions_html5_description' => '

            New DOM API that includes standards-compliant support for parsing HTML5 documents, fixes several long-standing compliance bugs in the behavior of the DOM functionality, and adds several functions to make working with documents more convenient.

            The new DOM API is available within the Dom namespace. Documents using the new DOM API can be created using the Dom\HTMLDocument and Dom\XMLDocument classes.

            ', + 'bcmath_title' => 'Object API for BCMath', + 'bcmath_description' => '

            New BcMath\Number object enables object-oriented usage and standard mathematical operators when working with arbitrary precision numbers.

            These objects are immutable and implement the Stringable interface, so they can be used in string contexts like echo $num.

            ', + 'new_array_find_title' => 'New array_*() functions', + 'new_array_find_description' => 'New functions array_find(), array_find_key(), array_any(), and array_all() are available.', + 'pdo_driver_specific_subclasses_title' => 'PDO driver specific subclasses', + 'pdo_driver_specific_subclasses_description' => 'New subclasses Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Pgsql, and Pdo\Sqlite of PDO are available.', + 'new_without_parentheses_title' => 'new MyClass()->method() without parentheses', + 'new_without_parentheses_description' => 'Properties and methods of a newly instantiated object can now be accessed without wrapping the new expression in parentheses.', + + 'new_classes_title' => 'New Classes, Interfaces, and Functions', + 'new_lazy_objects' => 'New Lazy Objects.', + 'new_jit_implementation' => 'New JIT implementation based on IR Framework.', + 'new_core_functions' => 'New request_parse_body() function.', + 'new_bcmath_functions' => 'New bcceil(), bcdivmod(), bcfloor(), and bcround() functions.', + 'new_round_modes' => 'New RoundingMode enum for round() with 4 new rounding modes TowardsZero, AwayFromZero, NegativeInfinity, and PositiveInfinity.', + 'new_date_functions' => 'New DateTime::createFromTimestamp(), DateTime::getMicrosecond(), DateTime::setMicrosecond(), DateTimeImmutable::createFromTimestamp(), DateTimeImmutable::getMicrosecond(), and DateTimeImmutable::setMicrosecond() methods.', + 'new_mb_functions' => 'New mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), and mb_lcfirst() functions.', + 'new_pcntl_functions' => 'New pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns(), and pcntl_waitid() functions.', + 'new_reflection_functions' => 'New ReflectionClassConstant::isDeprecated(), ReflectionGenerator::isClosed(), and ReflectionProperty::isDynamic() methods.', + 'new_standard_functions' => 'New http_get_last_response_headers(), http_clear_last_response_headers(), and fpow() functions.', + 'new_xml_functions' => 'New XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(), XMLWriter::toStream(), XMLWriter::toUri(), and XMLWriter::toMemory() methods.', + 'new_grapheme_function' => 'New grapheme_str_split() function.', + + 'bc_title' => 'Deprecations and backward compatibility breaks', + 'bc_pecl' => 'The IMAP, OCI8, PDO_OCI, and pspell extensions have been unbundled and moved to PECL.', + 'bc_nullable_parameter_types' => 'Implicitly nullable parameter types are now deprecated.', + 'bc_classname' => 'Using _ as a class name is now deprecated.', + 'bc_zero_raised_to_negative_number' => 'Raising zero to the power of a negative number is now deprecated.', + 'bc_gmp' => 'GMP class is now final.', + 'bc_round' => 'Passing invalid mode to round() throws ValueError.', + 'bc_typed_constants' => 'Class constants from extensions date, intl, pdo, reflection, spl, sqlite, xmlreader are typed now.', + 'bc_mysqli_constants' => 'MYSQLI_SET_CHARSET_DIR, MYSQLI_STMT_ATTR_PREFETCH_ROWS, MYSQLI_CURSOR_TYPE_FOR_UPDATE, MYSQLI_CURSOR_TYPE_SCROLLABLE, and MYSQLI_TYPE_INTERVAL constants have been removed.', + 'bc_mysqli_functions' => 'mysqli_ping(), mysqli_kill(), mysqli_refresh() functions, mysqli::ping(), mysqli::kill(), mysqli::refresh() methods, and MYSQLI_REFRESH_* constants have been deprecated.', + 'bc_standard' => 'stream_bucket_make_writeable() and stream_bucket_new() now return an instance of StreamBucket instead of stdClass.', + 'bc_core' => 'exit() behavioral change.', + 'bc_warnings' => 'E_STRICT constant has been deprecated.', + + 'footer_title' => 'Better performance, better syntax, improved type safety.', + 'footer_description' => '

            For source downloads of PHP 8.4 please visit the downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog.

            +

            The migration guide is available in the PHP Manual. Please consult it for a detailed list of new features and backward-incompatible changes.

            ', +]; diff --git a/releases/8.4/languages/es.php b/releases/8.4/languages/es.php new file mode 100644 index 0000000000..7dcaa8258b --- /dev/null +++ b/releases/8.4/languages/es.php @@ -0,0 +1,58 @@ + 'PHP 8.4 es una actualización importante del lenguaje PHP. Contiene muchas características nuevas, como hooks para propiedades, visibilidad asimétrica, una API DOM actualizada, mejoras de rendimiento, correcciones de errores y limpieza general.', + 'documentation' => 'Documentación', + 'main_title' => '¡Lanzado!', + 'main_subtitle' => 'PHP 8.4 es una actualización importante del lenguaje PHP.
            Contiene muchas características nuevas, como hooks para propiedades, visibilidad asimétrica, una API DOM actualizada, mejoras de rendimiento, correcciones de errores y limpieza general.', + 'upgrade_now' => '¡Actualiza a PHP 8.4 ahora!', + + 'property_hooks_title' => 'Hooks para Propiedades', + 'property_hooks_description' => 'Los hooks para propiedades proporcionan soporte para propiedades calculadas que pueden ser comprendidas nativamente por los IDE y las herramientas de análisis estático, sin necesidad de escribir comentarios docblock que podrían desincronizarse. Además, permiten un preprocesamiento o postprocesamiento fiable de los valores, sin necesidad de comprobar si existe un getter o setter coincidente en la clase.', + 'asymmetric_visibility_title' => 'Visibilidad asimétrica', + 'asymmetric_visibility_description' => 'El alcance para escribir en una propiedad ahora se puede controlar independientemente del alcance para leer la propiedad, lo que reduce la necesidad de métodos getter repetitivos para exponer el valor de una propiedad sin permitir modificaciones desde fuera de una clase.', + 'deprecated_attribute_title' => 'Atributo #[\Deprecated]', + 'deprecated_attribute_description' => 'El nuevo atributo #[\Deprecated] hace que el mecanismo de obsolescencia existente de PHP esté disponible para funciones, métodos y constantes de clase definidas por el usuario.', + 'dom_additions_html5_title' => 'Nuevas características de ext-dom y soporte para HTML5', + 'dom_additions_html5_description' => '

            Nueva API DOM que incluye soporte conforme a los estándares para el análisis de documentos HTML5, corrige varios errores de cumplimiento antiguos en el comportamiento de la funcionalidad DOM, y añade varias funciones para hacer más conveniente trabajar con documentos.

            La nueva API DOM está disponible dentro del espacio de nombres Dom. Los documentos que utilizan la nueva API DOM pueden ser creados utilizando las clases Dom\HTMLDocument y Dom\XMLDocument.', + 'bcmath_title' => 'API de objetos para BCMath', + 'bcmath_description' => '

            El nuevo objeto BcMath\Number permite el uso orientado a objetos y operadores matemáticos estándar cuando se trabaja con números de precisión arbitraria.

            Estos objetos son inmutables e implementan la interfaz Stringable, por lo que se pueden usar en contextos de cadena como echo $num.

            ', + 'new_array_find_title' => 'Nuevas funciones array_*()', + 'new_array_find_description' => 'Nuevas funciones disponibles: array_find(), array_find_key(), array_any() y array_all().', + 'pdo_driver_specific_subclasses_title' => 'Subclases específicas del driver PDO', + 'pdo_driver_specific_subclasses_description' => 'Las nuevas subclases Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Pgsql y Pdo\Sqlite de PDO ahora están disponibles.', + 'new_without_parentheses_title' => 'new MyClass()->method() sin paréntesis', + 'new_without_parentheses_description' => 'Las propiedades y métodos de un objeto recién instanciado ahora se pueden acceder sin envolver la expresión new entre paréntesis.', + + 'new_classes_title' => 'Nuevas Clases, Interfaces y Funciones', + 'new_lazy_objects' => 'Nuevos Objetos Lazy.', + 'new_jit_implementation' => 'Nueva implementación JIT basada en el marco IR.', + 'new_core_functions' => 'Nueva función request_parse_body().', + 'new_bcmath_functions' => 'Nuevas funciones: bcceil(), bcdivmod(), bcfloor() y bcround().', + 'new_round_modes' => 'Nuevo enum RoundingMode para round() con 4 nuevos modos de redondeo: TowardsZero, AwayFromZero, NegativeInfinity y PositiveInfinity.', + 'new_date_functions' => 'Nuevos métodos: DateTime::createFromTimestamp(), DateTime::getMicrosecond(), DateTime::setMicrosecond(), DateTimeImmutable::createFromTimestamp(), DateTimeImmutable::getMicrosecond(), y DateTimeImmutable::setMicrosecond().', + 'new_mb_functions' => 'Nuevas funciones: mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), y mb_lcfirst().', + 'new_pcntl_functions' => 'Nuevas funciones: pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns() y pcntl_waitid().', + 'new_reflection_functions' => 'Nuevos métodos: ReflectionClassConstant::isDeprecated(), ReflectionGenerator::isClosed(), y ReflectionProperty::isDynamic().', + 'new_standard_functions' => 'Nuevas funciones: http_get_last_response_headers(), http_clear_last_response_headers() y fpow().', + 'new_xml_functions' => 'Nuevos métodos: XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(), XMLWriter::toStream(), XMLWriter::toUri() y XMLWriter::toMemory().', + 'new_grapheme_function' => 'Nueva función grapheme_str_split().', + + 'bc_title' => 'Deprecaciones y cambios en compatibilidad retroactiva', + 'bc_pecl' => 'Las extensiones IMAP, OCI8, PDO_OCI y pspell han sido desagregadas y movidas a PECL.', + 'bc_nullable_parameter_types' => 'Los tipos de parámetros implícitamente nulos ahora están en desuso.', + 'bc_classname' => 'Usar _ como nombre de clase ahora está en desuso.', + 'bc_zero_raised_to_negative_number' => 'Elevar cero a la potencia de un número negativo ahora está en desuso.', + 'bc_gmp' => 'La clase GMP ahora es final.', + 'bc_round' => 'Pasar un modo inválido a round() lanza un ValueError.', + 'bc_typed_constants' => 'Las constantes de clase de las extensiones date, intl, pdo, reflection, spl, sqlite, xmlreader ahora tienen tipos.', + 'bc_mysqli_constants' => 'Los constantes MYSQLI_SET_CHARSET_DIR, MYSQLI_STMT_ATTR_PREFETCH_ROWS, MYSQLI_CURSOR_TYPE_FOR_UPDATE, MYSQLI_CURSOR_TYPE_SCROLLABLE, y MYSQLI_TYPE_INTERVAL han sido eliminadas.', + 'bc_mysqli_functions' => 'Las funciones mysqli_ping(), mysqli_kill(), mysqli_refresh(), los métodos mysqli::ping(), mysqli::kill(), mysqli::refresh(), y los constantes MYSQLI_REFRESH_* están en desuso.', + 'bc_standard' => 'stream_bucket_make_writeable() y stream_bucket_new() ahora devuelven una instancia de StreamBucket en lugar de stdClass.', + 'bc_core' => 'Cambio en el comportamiento de exit().', + 'bc_warnings' => 'El constante E_STRICT está en desuso.', + + 'footer_title' => 'Mejor rendimiento, mejor sintaxis, mejor seguridad de tipos.', + 'footer_description' => '

            Para descargar el código fuente de PHP 8.4, por favor visita la página de descargas. Los binarios para Windows se encuentran en el sitio PHP para Windows. La lista de cambios está registrada en el ChangeLog.

            +

            La guía de migración está disponible en el Manual de PHP. Por favor, consúltala para una lista detallada de nuevas características y cambios incompatibles con versiones anteriores.

            ', +]; diff --git a/releases/8.4/languages/fr.php b/releases/8.4/languages/fr.php new file mode 100644 index 0000000000..fc6c3f238a --- /dev/null +++ b/releases/8.4/languages/fr.php @@ -0,0 +1,57 @@ + 'PHP 8.4 est une mise à jour majeure du langage PHP. Elle inclut de nombreuses nouvelles fonctionnalités, telles que les hooks de propriétés, la visibilité asymétrique, une API DOM mise à jour, des améliorations de performances, des corrections de bugs et un nettoyage général.', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.4 est une mise à jour majeure du langage PHP.
            Elle introduit de nombreuses nouvelles fonctionnalités, telles que les hooks de propriétés, la visibilité asymétrique, une API DOM mise à jour, des améliorations de performances, des corrections de bugs et un nettoyage général.', + 'upgrade_now' => 'Migrer vers PHP 8.4 maintenant!', + + 'property_hooks_title' => 'Hooks de propriété', + 'property_hooks_description' => 'Les hooks de propriété offrent un support pour les propriétés calculées, compréhensibles nativement par les IDE et les outils d\'analyse statique, sans avoir besoin d\'écrire des commentaires docblock susceptibles de devenir obsolètes. De plus, ils permettent un pré- ou post-traitement fiable des valeurs, sans avoir à vérifier l\'existence d\'un getter ou d\'un setter correspondant dans la classe.', + 'asymmetric_visibility_title' => 'Visibilité asymétrique', + 'asymmetric_visibility_description' => 'La portée d\'écriture d\'une propriété peut désormais être contrôlée indépendamment de sa portée de lecture, réduisant ainsi le besoin de méthodes getter redondantes pour exposer la valeur d\'une propriété sans permettre sa modification depuis l\'extérieur d\'une classe.', + 'deprecated_attribute_title' => 'L\'attribut #[\Deprecated]', + 'deprecated_attribute_description' => 'Le nouvel attribut #[\Deprecated] rend le mécanisme d\'obsolescence existant de PHP disponible pour les fonctions, méthodes et constantes de classe définies par l\'utilisateur.', + 'dom_additions_html5_title' => 'Nouvelles fonctionnalités de l\'extension ext-dom et prise en charge de HTML5.', + 'dom_additions_html5_description' => '

            Nouvelle API DOM offrant une prise en charge conforme aux standards pour l\'analyse des documents HTML5, corrigeant plusieurs bogues de conformité de longue date dans le comportement des fonctionnalités DOM et ajoutant plusieurs fonctions pour faciliter la manipulation des documents.

            La nouvelle API DOM est disponible dans l\'espace de noms Dom. Les documents utilisant cette API peuvent être créés à l\'aide des classes Dom\HTMLDocument et Dom\XMLDocument.

            ', + 'bcmath_title' => 'API objet pour BCMath', + 'bcmath_description' => '

            BCMath vous permet de travailler avec des nombres flottants de précision arbitraire en PHP. Avec cette version, vous pouvez bénéficier du style orienté objet et de la surcharge des opérateurs pour utiliser les nombres BCMath.

            Cela signifie que vous pouvez désormais utiliser les opérateurs standard avec les objets BcMath\Number, ainsi que toutes les fonctions bc*.

            Ces objets sont immuables et implémentent l\'interface Stringable, afin d\'être utilisés dans des chaînes de caractères tels que echo $num.

            ', + 'new_array_find_title' => 'Nouvelles fonctions array_*()', + 'new_array_find_description' => 'Les nouvelles fonctions array_find(), array_find_key(), array_any() et array_all() sont désormais disponibles.', + 'pdo_driver_specific_subclasses_title' => 'Parseurs SQL spécifiques au pilote PDO', + 'pdo_driver_specific_subclasses_description' => 'De nouvelles sous-classes Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Pgsql et Pdo\Sqlite de PDO sont désormais disponibles.', + 'new_without_parentheses_title' => 'new MyClass()->method() sans parenthèses.', + 'new_without_parentheses_description' => 'Les propriétés et méthodes d\'un objet nouvellement instancié peuvent désormais être accessibles sans entourer l\'expression new entre parenthèses.', + + 'new_classes_title' => 'Nouvelles classes, interfaces et fonctions', + 'new_lazy_objects' => 'Nouveaux objets à initialisation différée.', + 'new_jit_implementation' => 'Nouvelle implémentation JIT basée sur le framework IR.', + 'new_core_functions' => 'Nouvelle fonction request_parse_body().', + 'new_bcmath_functions' => 'Nouvelles fonctions bcceil(), bcdivmod(), bcfloor(), et bcround().', + 'new_round_modes' => 'Nouvelle énumération RoundingMode pour round() avec 4 nouveaux modes d\'arrondi TowardsZero, AwayFromZero, NegativeInfinity, et PositiveInfinity.', + 'new_date_functions' => 'Nouvelle méthodes DateTime::createFromTimestamp(), DateTime::getMicrosecond(), DateTime::setMicrosecond(), DateTimeImmutable::createFromTimestamp(), DateTimeImmutable::getMicrosecond(), et DateTimeImmutable::setMicrosecond().', + 'new_mb_functions' => 'Nouvelles fonctions mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), et mb_lcfirst().', + 'new_pcntl_functions' => 'Nouvelles fonctions pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns(), et pcntl_waitid().', + 'new_reflection_functions' => 'Nouvelles méthodes ReflectionClassConstant::isDeprecated(), ReflectionGenerator::isClosed(), et ReflectionProperty::isDynamic().', + 'new_standard_functions' => 'Nouvelles fonctions http_get_last_response_headers(), http_clear_last_response_headers(), et fpow().', + 'new_xml_functions' => 'Nouvelles méthodes XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(), XMLWriter::toStream(), XMLWriter::toUri(), et XMLWriter::toMemory().', + 'new_grapheme_function' => 'Nouvelle fonction grapheme_str_split().', + + 'bc_title' => 'Obsolescence et changements non rétrocompatibles', + 'bc_pecl' => 'Les extensions IMAP, OCI8, PDO_OCI, et pspell ont été dissociées et transférées à PECL.', + 'bc_nullable_parameter_types' => 'Les types de paramètres implicitement nullables sont désormais obsolètes.', + 'bc_classname' => 'L\'utilisation de _ comme nom de classe est désormais obsolète.', + 'bc_zero_raised_to_negative_number' => 'L\'élévation de zéro à la puissance d\'un nombre négatif est désormais obsolète.', + 'bc_gmp' => 'La classe GMP est désormais final.', + 'bc_round' => 'Le passage d\'un mode invalide à round() déclenche une ValueError.', + 'bc_typed_constants' => 'Les constantes de classe des extensions date, intl, pdo, reflection, spl, sqlite, xmlreader sont désormais typées.', + 'bc_mysqli_constants' => 'Les constantes MYSQLI_SET_CHARSET_DIR, MYSQLI_STMT_ATTR_PREFETCH_ROWS, MYSQLI_CURSOR_TYPE_FOR_UPDATE, MYSQLI_CURSOR_TYPE_SCROLLABLE, et MYSQLI_TYPE_INTERVAL ont été supprimées.', + 'bc_mysqli_functions' => 'Les fonctions mysqli_ping(), mysqli_kill(), mysqli_refresh(), méthodes mysqli::ping(), mysqli::kill(), mysqli::refresh(), et constantes MYSQLI_REFRESH_* sont désormais obsolètes.', + 'bc_standard' => 'stream_bucket_make_writeable() et stream_bucket_new() renvoient désormais une instance de StreamBucket au lieu de stdClass.', + 'bc_core' => 'Changement de comportement de la fonction exit().', + 'bc_warnings' => 'La constante E_STRICT est désormais obsolète.', + + 'footer_title' => 'Meilleures performances, meilleure syntaxe, sécurité des types améliorée.', + 'footer_description' => '

            Pour télécharger les sources de PHP 8.4, veuillez visiter la page des téléchargements. Les binaires pour Windows sont disponibles sur le site PHP for Windows. La liste des changements est enregistrée dans le ChangeLog.

            Le guide de migration est disponible dans le manuel PHP. Veuillez le consulter pour une liste détaillée des nouvelles fonctionnalités et des changements non compatibles avec les versions précédentes.

            ', +]; diff --git a/releases/8.4/languages/ja.php b/releases/8.4/languages/ja.php new file mode 100644 index 0000000000..50f745f88d --- /dev/null +++ b/releases/8.4/languages/ja.php @@ -0,0 +1,58 @@ + 'PHP 8.4 は、PHP 言語のメジャーアップデートです。 プロパティフック、非対称可視性、DOM API のアップデートなどの新機能や、パフォーマンス改善、バグ修正やコードのクリーンアップが含まれています。', + 'documentation' => 'ドキュメント', + 'main_title' => 'リリース!', + 'main_subtitle' => 'PHP 8.4 は、PHP 言語のメジャーアップデートです。
            プロパティフック、非対称可視性、新しい DOM API などの新機能や、パフォーマンス改善、バグ修正やコードのクリーンアップが含まれています。', + 'upgrade_now' => 'PHP 8.4 にアップデートしましょう!', + + 'property_hooks_title' => 'プロパティフック', + 'property_hooks_description' => 'プロパティフックは算出プロパティの機能を提供します。実態とずれやすい docblock コメントを書かずとも、IDEや静的解析ツールがネイティブに理解してくれます。さらに、対応するゲッターやセッターがそのクラスに存在するか確認することなく、確実に値の前処理・後処理を行うことができます。', + 'asymmetric_visibility_title' => '非対称可視性', + 'asymmetric_visibility_description' => 'プロパティへの書き込みのスコープが、読み込みのスコープと独立して制御できるようになります。これによって、クラス外からのプロパティの変更を防ぎ値の取得のみを行えるゲッターメソッドのボイラープレートを書く必要がなくなります。', + 'deprecated_attribute_title' => '#[\Deprecated] アトリビュート', + 'deprecated_attribute_description' => '新しい #[\Deprecated] アトリビュートを使うと、PHP の既存の非推奨機構をユーザー定義の関数、メソッド、クラス定数で利用できるようになります。', + 'dom_additions_html5_title' => 'DOM 拡張モジュールの新機能と HTML5 サポート', + 'dom_additions_html5_description' => '

            新しい DOM API では、標準に沿った HTML5 ドキュメントのパース機能が追加され、古くからある標準に準拠しない複数の DOM 機能の振る舞いに関する不具合が修正され、ドキュメントの操作がより便利になるいくつかの関数が追加されました。

            新しい DOM API は Dom 名前空間で利用できます。新しい DOM API を利用するドキュメントは Dom\HTMLDocumentDom\XMLDocument クラスを利用して作成できます。

            ', + 'bcmath_title' => 'BCMath のオブジェクト API', + 'bcmath_description' => '

            新しい BcMath\Number オブジェクトを使うと、任意精度数値をオブジェクト指向で利用したり、通常の算術演算子で計算したりできるようになります。

            このオブジェクトはイミュータブルで、 Stringable インターフェースを実装しているので echo $num のように文字列の文脈で利用可能です。

            ', + 'new_array_find_title' => '新しい array_*() 関数', + 'new_array_find_description' => '新しい関数 array_find()array_find_key()array_any()array_all() が追加されました。', + 'pdo_driver_specific_subclasses_title' => 'PDO ドライバー固有のサブクラス', + 'pdo_driver_specific_subclasses_description' => '新しい PDO のサブクラス Pdo\DblibPdo\FirebirdPdo\MySqlPdo\OdbcPdo\PgsqlPdo\Sqlite が追加されました。', + 'new_without_parentheses_title' => '括弧なしの new MyClass()->method()', + 'new_without_parentheses_description' => '新しくインスタンス化されたオブジェクトのプロパティとメソッドへのアクセスが、new 式を括弧で囲むことなくできるようになります。', + + 'new_classes_title' => '新しいクラス、インターフェイス、関数', + 'new_lazy_objects' => 'レイジーオブジェクト', + 'new_jit_implementation' => 'IR フレームワークベースの新しい JIT 実装', + 'new_core_functions' => 'request_parse_body() 関数', + 'new_bcmath_functions' => 'bcceil()bcdivmod()bcfloor()bcround() 関数', + 'new_round_modes' => 'round() 関数の新しい4つの丸めモード TowardsZeroAwayFromZeroNegativeInfinityPositiveInfinity のための RoundingMode 列挙型', + 'new_date_functions' => 'DateTime::createFromTimestamp()DateTime::getMicrosecond()DateTime::setMicrosecond()DateTimeImmutable::createFromTimestamp()DateTimeImmutable::getMicrosecond()DateTimeImmutable::setMicrosecond() メソッド', + 'new_mb_functions' => 'mb_trim()mb_ltrim()mb_rtrim()mb_ucfirst()mb_lcfirst() 関数', + 'new_pcntl_functions' => 'pcntl_getcpu()pcntl_getcpuaffinity()pcntl_getqos_class()pcntl_setns()pcntl_waitid() 関数', + 'new_reflection_functions' => 'ReflectionClassConstant::isDeprecated()ReflectionGenerator::isClosed()ReflectionProperty::isDynamic() メソッド', + 'new_standard_functions' => 'http_get_last_response_headers()http_clear_last_response_headers()fpow() 関数', + 'new_xml_functions' => 'XMLReader::fromStream()XMLReader::fromUri()XMLReader::fromString()XMLWriter::toStream()XMLWriter::toUri()XMLWriter::toMemory() メソッド', + 'new_grapheme_function' => 'grapheme_str_split() 関数', + + 'bc_title' => '非推奨、および互換性のない変更', + 'bc_pecl' => 'IMAP、OCI8、PDO_OCI、pspell 拡張モジュールが PHP 本体から削除され、PECL に移動されました。', + 'bc_nullable_parameter_types' => '暗黙の nullable 型パラメータが非推奨になりました。', + 'bc_classname' => 'クラス名として _ を使うことは非推奨になりました。', + 'bc_zero_raised_to_negative_number' => 'ゼロの負の数のべき乗は非推奨になりました。', + 'bc_gmp' => 'GMP クラスは final になりました。', + 'bc_round' => 'round() に無効なモードを渡すと ValueError がスローされます。', + 'bc_typed_constants' => 'dateintlpdoreflectionsplsqlitexmlreader 拡張モジュールのクラス定数に型宣言が追加されました。', + 'bc_mysqli_constants' => '定数 MYSQLI_SET_CHARSET_DIRMYSQLI_STMT_ATTR_PREFETCH_ROWSMYSQLI_CURSOR_TYPE_FOR_UPDATEMYSQLI_CURSOR_TYPE_SCROLLABLEMYSQLI_TYPE_INTERVAL が削除されました。', + 'bc_mysqli_functions' => 'mysqli_ping()mysqli_kill()mysqli_refresh() 関数、mysqli::ping()mysqli::kill()mysqli::refresh() メソッド、MYSQLI_REFRESH_* 定数は非推奨になりました。', + 'bc_standard' => 'stream_bucket_make_writeable()stream_bucket_new() の戻り値は stdClass ではなく StreamBucket になりました。', + 'bc_core' => 'exit() の挙動が変更されました。', + 'bc_warnings' => 'E_STRICT 定数は非推奨になりました。', + + 'footer_title' => 'さらなる性能向上、よりよい構文、すぐれた型安全性。', + 'footer_description' => '

            PHP 8.4 のソースコードのダウンロードはこちらから。Windows バイナリは PHP for Windows ページにあります。変更の一覧は ChangeLog にあります。

            +

            移行ガイドが PHP マニュアルに用意されています。新機能や互換性のない変更の詳細については、移行ガイドを参照してください。

            ', +]; diff --git a/releases/8.4/languages/nl.php b/releases/8.4/languages/nl.php new file mode 100644 index 0000000000..f2e488dced --- /dev/null +++ b/releases/8.4/languages/nl.php @@ -0,0 +1,57 @@ + 'PHP 8.4 is een omvangrijke update van de PHP programmeertaal. Het bevat veel nieuwe functionaliteit, zoals property hooks, asymmetrische zichtbaarheid, een bijgewerkte DOM API, prestatieverbeteringen, bugfixes en meer consistentie.', + 'documentation' => 'Documentatie', + 'main_title' => 'Beschikbaar!', + 'main_subtitle' => 'PHP 8.4 is een omvangrijke update van de PHP programmeertaal.
            Het bevat veel nieuwe functionaliteit, zoals property hooks, asymmetrische zichtbaarheid, een bijgewerkte DOM API, prestatieverbeteringen, bugfixes en meer consistentie.', + 'upgrade_now' => 'Upgrade nu naar PHP 8.4!', + + 'property_hooks_title' => 'Property hooks', + 'property_hooks_description' => 'Property hooks geven ondersteuning voor berekende eigenschappen. Deze worden rechtstreeks ondersteund door IDEs en statische analyseprogramma’s, zonder dat documentatie blokken nodig zijn. Bovendien laten ze toe om waarden voor- of achteraf te verwerken zonder gebruik te maken van een getter of setter in de klasse.', + 'asymmetric_visibility_title' => 'Asymmetrische zichtbaarheid', + 'asymmetric_visibility_description' => 'De scope voor het schrijven naar een eigenschap kan nu onafhankelijk gecontroleerd worden ten opzichte van de scope om de eigenschap te lezen. Dit reduceert de nood voor repetitieve getter en setter methoden om de eigenschap bloot te stellen zonder aanpassing toe te laten buiten de klasse.', + 'deprecated_attribute_title' => '#[\Deprecated] attribuut', + 'deprecated_attribute_description' => 'Het nieuwe #[\Deprecated] attribuut maakt PHP’s bestaand uitfaseringsmechanisme beschikbaar voor gebruiker gedefinieerde functies, methoden en klasseconstanten.', + 'dom_additions_html5_title' => 'Nieuwe ext-dom functies en HTML5 ondersteuning', + 'dom_additions_html5_description' => '

            Nieuwe DOM API met correcte ondersteuning voor de HTML 5 standaard, oplossingen voor verschillende lang bestaande compliance bugs in the DOM functionaliteit, en verschillende nieuwe functies om het werken met documenten eenvoudiger te maken.

            De nieuwe DOM API is beschikbaar via de Dom namespace. Documenten die de nieuwe API willen gebruiken, kunnen aangemaakt worden via de Dom\HTMLDocument en Dom\XMLDocument klassen.

            ', + 'bcmath_title' => 'Object API voor BCMath', + 'bcmath_description' => '

            De nieuwe BcMath\Number klasse laat toe om op object-georiënteerde wijze, met standaard wiskundige operaties, te werken met arbitraire precisie getallen.

            Deze objecten zijn niet muteerbaar en implementeren de Stringable interface, waardoor ze gebruikt kunnen worden in string contexten zoals echo $num.

            ', + 'new_array_find_title' => 'Nieuwe array_*() functies', + 'new_array_find_description' => 'Nieuwe functies array_find(), array_find_key(), array_any(), en array_all() zijn nu beschikbaar.', + 'pdo_driver_specific_subclasses_title' => 'PDO driver specifieke SQL parsers', + 'pdo_driver_specific_subclasses_description' => 'Nieuwe subklassen Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Pgsql, Pdo\Sqlite van PDO zijn nu beschikbaar.', + 'new_without_parentheses_title' => 'new MyClass()->method() zonder haakjes', + 'new_without_parentheses_description' => 'Eigenschappen en methoden van een nieuw geïnstantieerd object kunnen nu opgevraagd worden zonder de new expressie tussen haakjes te zetten.', + + 'new_classes_title' => 'Nieuwe klassen, interfaces en functies', + 'new_jit_implementation' => 'Nieuwe JIT implementation gebaseerd op IR Framework.', + 'new_core_functions' => 'Nieuwe request_parse_body() functie.', + 'new_bcmath_functions' => 'Nieuwe bcceil(), bcdivmod(), bcfloor(), en bcround() functies.', + 'new_round_modes' => 'Nieuwe RoundingMode enum voor round() met 4 nieuwe afrondingsmodi TowardsZero, AwayFromZero, NegativeInfinity, en PositiveInfinity.', + 'new_date_functions' => 'Nieuwe DateTime::createFromTimestamp(), DateTime::getMicrosecond(), DateTime::setMicrosecond(), DateTimeImmutable::createFromTimestamp(), DateTimeImmutable::getMicrosecond(), en DateTimeImmutable::setMicrosecond() methoden.', + 'new_mb_functions' => 'Nieuwe mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), en mb_lcfirst() functies.', + 'new_pcntl_functions' => 'Nieuwe pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns(), en pcntl_waitid() functies.', + 'new_reflection_functions' => 'Nieuwe ReflectionClassConstant::isDeprecated(), ReflectionGenerator::isClosed(), en ReflectionProperty::isDynamic() methoden.', + 'new_standard_functions' => 'Nieuwe http_get_last_response_headers(), http_clear_last_response_headers(), en fpow() functies.', + 'new_xml_functions' => 'Nieuwe XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(), XMLWriter::toStream(), XMLWriter::toUri(), en XMLWriter::toMemory() methoden.', + 'new_grapheme_function' => 'Nieuwe grapheme_str_split() functie.', + + 'bc_title' => 'Uitfaseringen en neerwaarts incompatibele aanpassingen', + 'bc_pecl' => 'De IMAP, OCI8, PDO_OCI en pspell-extensies zijn ontbundeld en verplaatst naar PECL.', + 'bc_nullable_parameter_types' => 'Impliciet parameters als null definiëren is nu uitgefaseerd.', + 'bc_classname' => 'Gebruik van _ als een klassenaam is nu uitgefaseerd.', + 'bc_zero_raised_to_negative_number' => 'Nul verheffen tot een negatieve macht is nu uitgefaseerd.', + 'bc_gmp' => 'GMP klasse is nu final.', + 'bc_round' => 'Ongeldige modus doorgeven aan round() resulteert in een ValueError.', + 'bc_typed_constants' => 'Klasseconstanten van extensies date, intl, pdo, reflection, spl, sqlite, xmlreader hebben nu types.', + 'bc_mysqli_constants' => 'MYSQLI_SET_CHARSET_DIR, MYSQLI_STMT_ATTR_PREFETCH_ROWS, MYSQLI_CURSOR_TYPE_FOR_UPDATE, MYSQLI_CURSOR_TYPE_SCROLLABLE, en MYSQLI_TYPE_INTERVAL constanten zijn verwijderd.', + 'bc_mysqli_functions' => 'mysqli_ping(), mysqli_kill(), mysqli_refresh() functies, mysqli::ping(), mysqli::kill(), mysqli::refresh() methoden, en MYSQLI_REFRESH_* constanten zijn uitgefaseerd.', + 'bc_standard' => 'stream_bucket_make_writeable() en stream_bucket_new() geven nu een instantie van StreamBucket terug in plaats van stdClass.', + 'bc_core' => 'exit() heeft ander gedrag.', + 'bc_warnings' => 'E_STRICT constante is uitgefaseerd.', + + 'footer_title' => 'Betere prestaties, betere syntaxis, verbeterd type systeem.', + 'footer_description' => '

            Ga naar de downloads pagina om de PHP 8.4 code te verkrijgen. Uitvoerbare bestanden voor Windows kan je vinden op de PHP voor Windows website. De volledige lijst met wijzigingen is vastgelegd in een ChangeLog.

            +

            De migratie gids is beschikbaar in de PHP Handleiding. Gebruik deze om een gedetailleerde lijst te krijgen van nieuwe opties en neerwaarts incompatibele aanpassingen.

            ', +]; diff --git a/releases/8.4/languages/pt_BR.php b/releases/8.4/languages/pt_BR.php new file mode 100644 index 0000000000..42f3453f74 --- /dev/null +++ b/releases/8.4/languages/pt_BR.php @@ -0,0 +1,58 @@ + 'PHP 8.4 é uma atualização importante da linguagem PHP. Ela contém muitos novos recursos, como hooks de propriedade, visibilidade assimétrica, uma API DOM atualizada, melhorias de desempenho, correções de bugs e uma limpeza geral.', + 'documentation' => 'Doc', + 'main_title' => 'Lançado!', + 'main_subtitle' => 'PHP 8.4 é uma atualização importante da linguagem PHP.
            Ela contém muitos novos recursos, como hooks de propriedade, visibilidade assimétrica, uma API DOM atualizada, melhorias de desempenho, correções de bugs e uma limpeza geral.', + 'upgrade_now' => 'Atualize para PHP 8.4 agora!', + + 'property_hooks_title' => 'Hooks de Propriedade', + 'property_hooks_description' => 'Hooks de Propriedade oferecem suporte para propriedades computadas que podem ser interpretadas nativamente por IDEs e ferramentas de análise estática, sem a necessidade de escrever comentários em docblocks que podem ficar desatualizados. Além disso, eles permitem o pré-processamento ou pós-processamento confiável de valores, sem precisar verificar se um getter ou setter correspondente existe na classe.', + 'asymmetric_visibility_title' => 'Visibilidade Assimétrica', + 'asymmetric_visibility_description' => 'O escopo para escrita em uma propriedade agora pode ser controlado independentemente do escopo para leitura da propriedade, reduzindo a necessidade de métodos getter redundantes para expor o valor de uma propriedade sem permitir sua modificação fora da classe.', + 'deprecated_attribute_title' => '#[\Deprecated] Atributo', + 'deprecated_attribute_description' => 'O novo atributo #[\Deprecated] torna o mecanismo de descontinuação existente no PHP disponível para funções, métodos e constantes de classe definidas pelo usuário.', + 'dom_additions_html5_title' => 'Novos recursos ext-dom e suporte a HTML5', + 'dom_additions_html5_description' => 'Novas classes Dom\HTMLDocument, Dom\XMLDocument e métodos DOMNode::compareDocumentPosition(), DOMXPath::registerPhpFunctionNS(), DOMXPath::quote(), XSLTProcessor::registerPHPFunctionNS() estão disponíveis.', + 'bcmath_title' => 'API de Objetos para BCMath', + 'bcmath_description' => '

            O novo objeto BcMath\Number permite o uso orientado a objetos e operadores matemáticos padrão ao trabalhar com números de precisão arbitrária.

            Esses objetos são imutáveis e implementam a interface Stringable, então podem ser usados em contextos de string como echo $num.

            ', + 'new_array_find_title' => 'Novas funções array_*()', + 'new_array_find_description' => 'Novas funções array_find(), array_find_key(), array_any() e array_all() estão disponíveis.', + 'pdo_driver_specific_subclasses_title' => 'Parsers SQL específicos para drivers PDO', + 'pdo_driver_specific_subclasses_description' => 'Novas subclasses Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Pgsql, Pdo\Sqlite de PDO estão disponíveis.', + 'new_without_parentheses_title' => 'new MyClass()->method() sem parênteses', + 'new_without_parentheses_description' => 'Propriedades e métodos de um objeto recém-instanciado agora podem ser acessados sem a necessidade de envolver a expressão new entre parênteses.', + + 'new_classes_title' => 'Novas classes, interfaces e funções', + 'new_lazy_objects' => 'Novos Objetos de Inicialização Lenta.', + 'new_jit_implementation' => 'Nova implementação JIT baseada no Framework IR.', + 'new_core_functions' => 'Nova função request_parse_body().', + 'new_bcmath_functions' => 'Novas funções bcceil(), bcdivmod(), bcfloor() e bcround().', + 'new_round_modes' => 'Novo Enum RoundingMode para round() com 4 novos modos de arredondamento: TowardsZero, AwayFromZero, NegativeInfinity e PositiveInfinity.', + 'new_date_functions' => 'Novos métodos DateTime::createFromTimestamp(), DateTime::getMicrosecond(), DateTime::setMicrosecond(), DateTimeImmutable::createFromTimestamp(), DateTimeImmutable::getMicrosecond() e DateTimeImmutable::setMicrosecond().', + 'new_mb_functions' => 'Novas funções mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst() e mb_lcfirst().', + 'new_pcntl_functions' => 'Novas funções pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns() e pcntl_waitid().', + 'new_reflection_functions' => 'Novos métodos ReflectionClassConstant::isDeprecated(), ReflectionGenerator::isClosed() e ReflectionProperty::isDynamic().', + 'new_standard_functions' => 'Novas funções http_get_last_response_headers(), http_clear_last_response_headers() e fpow().', + 'new_xml_functions' => 'Novos métodos XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(), XMLWriter::toStream(), XMLWriter::toUri() e XMLWriter::toMemory().', + 'new_grapheme_function' => 'Nova função grapheme_str_split().', + + 'bc_title' => 'Alterações obsoletas e incompatibilidades com versões anteriores', + 'bc_pecl' => 'As extensões IMAP, OCI8, PDO_OCI e pspell foram separadas e movidas para o PECL.', + 'bc_nullable_parameter_types' => 'Tipos de parâmetros implicitamente anuláveis agora estão obsoletos.', + 'bc_classname' => 'O uso de _ no nome da classe agora está obsoleto.', + 'bc_zero_raised_to_negative_number' => 'Elevar zero a um número negativo agora está obsoleto.', + 'bc_gmp' => 'A classe GMP agora é final.', + 'bc_round' => 'Passar um modo inválido para round() agora lança um ValueError.', + 'bc_typed_constants' => 'As constantes de classe das extensões date, intl, pdo, reflection, spl, sqlite, xmlreader agora são tipadas.', + 'bc_mysqli_constants' => 'As constantes MYSQLI_SET_CHARSET_DIR, MYSQLI_STMT_ATTR_PREFETCH_ROWS, MYSQLI_CURSOR_TYPE_FOR_UPDATE, MYSQLI_CURSOR_TYPE_SCROLLABLE e MYSQLI_TYPE_INTERVAL foram removidas.', + 'bc_mysqli_functions' => 'As funções mysqli_ping(), mysqli_kill(), mysqli_refresh(), os métodos mysqli::ping(), mysqli::kill(), mysqli::refresh() e as constantes MYSQLI_REFRESH_* estão obsoletas.', + 'bc_standard' => 'stream_bucket_make_writeable() e stream_bucket_new() agora retornam uma instância de StreamBucket em vez de stdClass.', + 'bc_core' => 'Alteração de comportamento no uso de exit().', + 'bc_warnings' => 'A constante E_STRICT está obsoleta.', + + 'footer_title' => 'Melhor desempenho, sintaxe aprimorada e maior segurança de tipos.', + 'footer_description' => '

            Para baixar o código-fonte do PHP 8.4, visite a página de downloads. Os binários para Windows podem ser encontrados no site PHP for Windows. A lista de alterações está registrada no ChangeLog.

            +

            O guia de migração está disponível no Manual do PHP. Consulte-o para uma lista detalhada de novos recursos e mudanças incompatíveis com versões anteriores.

            ', +]; diff --git a/releases/8.4/languages/ru.php b/releases/8.4/languages/ru.php new file mode 100644 index 0000000000..921501ccc7 --- /dev/null +++ b/releases/8.4/languages/ru.php @@ -0,0 +1,58 @@ + 'PHP 8.4 — большое обновление языка PHP. Оно содержит множество новых возможностей, таких как хуки свойств, асимметричная область видимости свойств, обновление DOM API, улучшена производительность, исправлены ошибки и многое другое.', + 'documentation' => 'Документация', + 'main_title' => 'выпущен!', + 'main_subtitle' => 'PHP 8.4 — большое обновление языка PHP.
            Оно содержит множество новых возможностей, таких как хуки свойств, асимметричная область видимости свойств, обновление DOM API, улучшена производительность, исправлены ошибки и многое другое.', + 'upgrade_now' => 'Переходите на PHP 8.4!', + + 'property_hooks_title' => 'Хуки свойств', + 'property_hooks_description' => 'Хуки свойств обеспечивают поддержку вычисляемых свойств, которые могут быть понятны IDE и инструментам статического анализа, без необходимости писать DocBlock-комментарии, которые могут не совпадать. Кроме того, они позволяют выполнять надёжную предварительную или последующую обработку значений, без необходимости проверять, существует ли в классе соответствующий геттер или сеттер.', + 'asymmetric_visibility_title' => 'Асимметричная область видимости свойств', + 'asymmetric_visibility_description' => 'Область видимости записи свойства теперь может контролироваться независимо от области видимости чтения свойства, что уменьшает необходимость использования шаблонных методов-геттеров для раскрытия значения свойства без возможности его изменения извне класса.', + 'deprecated_attribute_title' => 'Атрибут #[\Deprecated]', + 'deprecated_attribute_description' => 'Новый атрибут #[\Deprecated] расширяет существующий механизм объявления сущности устаревшей для пользовательских функций, методов и констант классов.', + 'dom_additions_html5_title' => 'Новые возможности ext-dom и поддержка HTML5', + 'dom_additions_html5_description' => '

            Новый DOM API, который поддерживает разбор HTML5-документов в соответствии со стандартами, исправляет несколько давних ошибок в поведении DOM и добавляет несколько функций, делающих работу с документами более удобной.

            Новый DOM API доступен в пространстве имён Dom. Документы, использующие новый DOM API, могут быть созданы с помощью классов Dom\HTMLDocument и Dom\XMLDocument.

            ', + 'bcmath_title' => 'Объектно-ориентированный API для BCMath', + 'bcmath_description' => '

            Новый объект BcMath\Number позволяет использовать объектно-ориентированный стиль и стандартные математические операторы при работе с числами произвольной точности.

            Эти объекты неизменяемы и реализуют интерфейс Stringable, поэтому их можно использовать в строковых контекстах, например, echo $num.

            ', + 'new_array_find_title' => 'Новые функции array_*()', + 'new_array_find_description' => 'Добавлены функции array_find(), array_find_key(), array_any() и array_all().', + 'pdo_driver_specific_subclasses_title' => 'SQL-парсеры, специфичные для драйверов PDO', + 'pdo_driver_specific_subclasses_description' => 'Добавлены дочерние классы Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Pgsql, Pdo\Sqlite драйверов, наследующие PDO.', + 'new_without_parentheses_title' => 'new MyClass()->method() без скобок', + 'new_without_parentheses_description' => 'К свойствам и методам только что инициализированного объекта теперь можно обращаться, не оборачивая выражение new в круглые скобки.', + + 'new_classes_title' => 'Новые классы, интерфейсы и функции', + 'new_lazy_objects' => 'Добавлены ленивые объекты.', + 'new_jit_implementation' => 'Новая реализация JIT на основе IR Framework.', + 'new_core_functions' => 'Добавлена функция request_parse_body().', + 'new_bcmath_functions' => 'Добавлены функции bcceil(), bcdivmod(), bcfloor() и bcround().', + 'new_round_modes' => 'Добавлено перечисление RoundingMode для функции round() с 4 режимами: TowardsZero, AwayFromZero, NegativeInfinity и PositiveInfinity.', + 'new_date_functions' => 'Добавлены методы DateTime::createFromTimestamp(), DateTime::getMicrosecond(), DateTime::setMicrosecond(), DateTimeImmutable::createFromTimestamp(), DateTimeImmutable::getMicrosecond() и DateTimeImmutable::setMicrosecond().', + 'new_mb_functions' => 'Добавлены функции mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst() и mb_lcfirst().', + 'new_pcntl_functions' => 'Добавлены функции pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns() и pcntl_waitid().', + 'new_reflection_functions' => 'Добавлены методы ReflectionClassConstant::isDeprecated(), ReflectionGenerator::isClosed() и ReflectionProperty::isDynamic().', + 'new_standard_functions' => 'Добавлены функции http_get_last_response_headers(), http_clear_last_response_headers(), fpow().', + 'new_xml_functions' => 'Добавлены методы XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(), XMLWriter::toStream(), XMLWriter::toUri() и XMLWriter::toMemory().', + 'new_grapheme_function' => 'Добавлена функция grapheme_str_split().', + + 'bc_title' => 'Устаревшая функциональность и изменения в обратной совместимости', + 'bc_pecl' => 'Модули IMAP, OCI8, PDO_OCI и pspell перенесены из ядра в PECL.', + 'bc_nullable_parameter_types' => 'Типы параметров, неявно допускающие значение null объявлены устаревшими.', + 'bc_classname' => 'Использование _ в качестве имени класса объявлено устаревшим.', + 'bc_zero_raised_to_negative_number' => 'Возведение нуля в степень отрицательного числа объявлено устаревшим.', + 'bc_gmp' => 'Класс GMP теперь является окончательным.', + 'bc_round' => 'Передача некорректного режима в функцию round() выбрасывает ошибку ValueError.', + 'bc_typed_constants' => 'Константы классов модулей date, intl, pdo, reflection, spl, sqlite и xmlreader типизированы.', + 'bc_mysqli_constants' => 'Удалены константы MYSQLI_SET_CHARSET_DIR, MYSQLI_STMT_ATTR_PREFETCH_ROWS, MYSQLI_CURSOR_TYPE_FOR_UPDATE, MYSQLI_CURSOR_TYPE_SCROLLABLE и MYSQLI_TYPE_INTERVAL.', + 'bc_mysqli_functions' => 'Функции mysqli_ping(), mysqli_kill(), mysqli_refresh(), методы mysqli::ping(), mysqli::kill(), mysqli::refresh() и константы MYSQLI_REFRESH_* объявлены устаревшими.', + 'bc_standard' => 'Функции stream_bucket_make_writeable() и stream_bucket_new() теперь возвращают экземпляр класса StreamBucket вместо stdClass.', + 'bc_core' => 'Изменение поведения языковой конструкции exit().', + 'bc_warnings' => 'Константа E_STRICT объявлена устаревшей.', + + 'footer_title' => 'Выше производительность, лучше синтаксис, надёжнее система типов.', + 'footer_description' => '

            Для загрузки исходного кода PHP 8.4 посетите страницу Downloads. Бинарные файлы Windows находятся на сайте PHP for Windows. Список изменений перечислен на странице ChangeLog.

            +

            Руководство по миграции доступно в разделе документации. Ознакомьтесь с ним, чтобы узнать обо всех новых возможностях и изменениях, затрагивающих обратную совместимость.

            ', +]; diff --git a/releases/8.4/languages/tr.php b/releases/8.4/languages/tr.php new file mode 100644 index 0000000000..4630a4b3f5 --- /dev/null +++ b/releases/8.4/languages/tr.php @@ -0,0 +1,57 @@ + 'PHP 8.4, PHP dilinin büyük bir güncellemesidir. Özellik kancaları, asimetrik görünürlük, güncellenmiş bir DOM API’si, performans iyileştirmeleri, hata düzeltmeleri ve genel temizlik gibi birçok yeni özellik içerir.', + 'documentation' => 'Dokümantasyon', + 'main_title' => 'Yayımlandı!', + 'main_subtitle' => 'PHP 8.4, PHP dilinin büyük bir güncellemesidir.
            Özellik kancaları, asimetrik görünürlük, güncellenmiş bir DOM API’si, performans iyileştirmeleri, hata düzeltmeleri ve genel temizlik gibi birçok yeni özellik içerir.', + 'upgrade_now' => 'PHP 8.4’e şimdi geçiş yapın!', + + 'property_hooks_title' => 'Özellik Kancaları', + 'property_hooks_description' => 'Özellik kancaları, hesaplanmış özelliklerin (computed properties) IDE’ler ve statik analiz araçları tarafından doğal bir şekilde anlaşılmasını sağlar, böylece zamanla geçersiz hale gelebilecek doküman açıklamaları yazmaya gerek kalmaz. Bunun yanı sıra, sınıf içinde eşleşen bir getter ya da setter kontrolüne ihtiyaç duymadan, değerlerin güvenilir bir şekilde işlenmesini (öncesinde veya sonrasında) mümkün hale getirir.', + 'asymmetric_visibility_title' => 'Asimetrik Görünürlük', + 'asymmetric_visibility_description' => 'Artık bir özelliği yazma yetkisi, o özelliği okuma yetkisinden bağımsız olarak kontrol edilebilir. Bu sayede, bir özelliğin dışarıdan değiştirilmesini engelleyerek sadece okunabilir hale getirmek için gereksiz ve tekrarlayan getter metotları yazma ihtiyacı ortadan kalkar.', + 'deprecated_attribute_title' => '#[\Deprecated] Özelliği', + 'deprecated_attribute_description' => 'Yeni #[\Deprecated] özelliği, PHP’nin mevcut kullanımdan kaldırma mekanizmasını kullanıcı tanımlı fonksiyonlar, metotlar ve sınıf sabitleri için kullanılabilir hale getirir.', + 'dom_additions_html5_title' => 'Yeni ext-dom Özellikleri ve HTML5 Desteği', + 'dom_additions_html5_description' => '

            Yeni DOM API, HTML5 dokümanlarını standartlara uygun şekilde işlemenize olanak tanır, DOM işlevselliğindeki uzun süredir devam eden uyumluluk hatalarını giderir ve dokümanlarla çalışmayı daha kolay hale getiren bir dizi yeni fonksiyon ekler.

            Yeni DOM API, Dom isim alanı içerisinde kullanılabilir. Bu API ile çalışmak için HTML ve XML içerikleri, Dom\HTMLDocument ve Dom\XMLDocument sınıfları kullanılarak oluşturulabilir.

            ', 'bcmath_title' => 'BCMath için Nesne API’si', + 'bcmath_description' => '

            Yeni BcMath\Number nesnesi, yüksek doğruluk gerektiren sayılarla çalışırken nesne yönelimli kullanım ve standart matematiksel operatörlerin desteklenmesini sağlar.

            Bu nesneler değişmezdir ve Stringable arayüzünü uygular, böylece echo $num gibi metin bağlamlarında kullanılabilirler.

            ', + 'new_array_find_title' => 'Yeni array_*() Fonksiyonları', + 'new_array_find_description' => 'Yeni fonksiyonlar: array_find(), array_find_key(), array_any() ve array_all() kullanılabilir.', + 'pdo_driver_specific_subclasses_title' => 'PDO Sürücüsüne Özel Alt Sınıflar', + 'pdo_driver_specific_subclasses_description' => 'PDO için yeni alt sınıflar: Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Pgsql ve Pdo\Sqlite mevcut.', + 'new_without_parentheses_title' => 'new MyClass()->method() Parantezsiz Kullanım', + 'new_without_parentheses_description' => 'Yeni oluşturulan bir nesnenin özelliklerine ve metotlarına, new ifadesini parantez içine almadan doğrudan erişilebilir.', + + 'new_classes_title' => 'Yeni Sınıflar, Arayüzler ve Fonksiyonlar', + 'new_lazy_objects' => 'Yeni Lazy Objects.', + 'new_jit_implementation' => 'IR Framework tabanlı yeni JIT uygulaması.', + 'new_core_functions' => 'Yeni request_parse_body() fonksiyonu.', + 'new_bcmath_functions' => 'Yeni bcceil(), bcdivmod(), bcfloor() ve bcround() fonksiyonları.', + 'new_round_modes' => 'round() için 4 yeni yuvarlama modu içeren RoundingMode enumu: TowardsZero, AwayFromZero, NegativeInfinity ve PositiveInfinity.', + 'new_date_functions' => 'Yeni metotlar: DateTime::createFromTimestamp(), DateTime::getMicrosecond(), DateTime::setMicrosecond(), DateTimeImmutable::createFromTimestamp(), DateTimeImmutable::getMicrosecond() ve DateTimeImmutable::setMicrosecond().', + 'new_mb_functions' => 'Yeni fonksiyonlar: mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst() ve mb_lcfirst().', + 'new_pcntl_functions' => 'Yeni fonksiyonlar: pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns() ve pcntl_waitid().', + 'new_reflection_functions' => 'Yeni metotlar: ReflectionClassConstant::isDeprecated(), ReflectionGenerator::isClosed() ve ReflectionProperty::isDynamic().', + 'new_standard_functions' => 'Yeni fonksiyonlar: http_get_last_response_headers(), http_clear_last_response_headers() ve fpow().', + 'new_xml_functions' => 'Yeni metotlar: XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(), XMLWriter::toStream(), XMLWriter::toUri() ve XMLWriter::toMemory().', + 'new_grapheme_function' => 'Yeni grapheme_str_split() fonksiyonu.', + + 'bc_title' => 'Kullanımdan Kaldırmalar ve Geriye Dönük Uyumluluk Kırılmaları', + 'bc_pecl' => 'IMAP, OCI8, PDO_OCI ve pspell uzantıları ayrılmış ve PECL’e taşınmıştır.', + 'bc_nullable_parameter_types' => 'Varsayılan olarak nullable olan parametre türleri artık desteklenmiyor.', + 'bc_classname' => 'Bir sınıf adı olarak _ kullanımı artık desteklenmiyor.', + 'bc_zero_raised_to_negative_number' => 'Sıfırın negatif bir sayıya üssü artık desteklenmemektedir.', + 'bc_gmp' => 'GMP sınıfı artık final olarak tanımlanmıştır.', + 'bc_round' => 'round() fonksiyonuna geçersiz bir mod gönderildiğinde artık ValueError fırlatır.', + 'bc_typed_constants' => 'date, intl, pdo, reflection, spl, sqlite ve xmlreader uzantılarındaki sınıf sabitleri artık türlendirilmiş durumda.', + 'bc_mysqli_constants' => 'MYSQLI_SET_CHARSET_DIR, MYSQLI_STMT_ATTR_PREFETCH_ROWS, MYSQLI_CURSOR_TYPE_FOR_UPDATE gibi sabitler artık kaldırılmıştır.', + 'bc_mysqli_functions' => 'mysqli_ping(), mysqli_kill(), mysqli_refresh() fonksiyonları, mysqli::ping(), mysqli::kill(), mysqli::refresh() metotları ve MYSQLI_REFRESH_* sabitleri artık kullanımdan kaldırıldı.', + 'bc_standard' => 'stream_bucket_make_writeable() ve stream_bucket_new() artık stdClass yerine bir StreamBucket objesi döndürüyor.', + 'bc_core' => 'exit() davranış değişikliği.', + 'bc_warnings' => 'E_STRICT sabiti artık kullanımdan kaldırılmıştır.', + + 'footer_title' => 'Daha iyi performans, daha temiz sözdizimi, gelişmiş tür güvenliği.', + 'footer_description' => '

            PHP 8.4 kaynak dosyalarını indirmek için indirme sayfasını ziyaret edin. Windows için çalıştırılabilir dosyaları PHP for Windows sitesinden indirebilirsiniz. Tüm değişikliklerin listesi ChangeLog içinde kayıtlıdır.

            +

            Detaylı bilgi için göç rehberine göz atabilirsiniz.

            ', +]; \ No newline at end of file diff --git a/releases/8.4/languages/uk.php b/releases/8.4/languages/uk.php new file mode 100644 index 0000000000..2fea0f7a74 --- /dev/null +++ b/releases/8.4/languages/uk.php @@ -0,0 +1,58 @@ + 'PHP 8.4 — це значне оновлення мови PHP. Воно містить багато нових можливостей, таких як хуки властивостей, асиметричну область видимості, оновлений DOM API, покращення продуктивності, виправлення помилок і загальний рефакторинг.', + 'documentation' => 'Документація', + 'main_title' => 'Випущено!', + 'main_subtitle' => 'PHP 8.4 — це значне оновлення мови PHP.
            Воно містить багато нових можливостей, таких як хуки властивостей, асиметричну область видимості, оновлений DOM API, покращення продуктивності, виправлення помилок і загальний рефакторинг.', + 'upgrade_now' => 'Оновіться до PHP 8.4 прямо зараз!', + + 'property_hooks_title' => 'Хуки властивостей', + 'property_hooks_description' => 'Хуки властивостей забезпечують підтримку обчислюваних властивостей, що можуть бути зрозумілі IDE та інструментам статичного аналізу, без необхідності зазначення DocBlock-коментарів, які можуть містити невідповідності. Крім того, вони дозволяють надійно виконувати попередню або післяобробку значень, без необхідності перевіряти, чи існує у класі відповідний геттер або сеттер.', + 'asymmetric_visibility_title' => 'Асиметрична область видимості властивостей', + 'asymmetric_visibility_description' => 'Область видимості для запису до властивості тепер може контролюватися незалежно від області видимості для читання, що зменшує потребу у шаблонних методах отримання значення властивості, не дозволяючи змінювати її ззовні класу.', + 'deprecated_attribute_title' => 'Атрибут #[\Deprecated]', + 'deprecated_attribute_description' => 'Новий атрибут #[\Deprecated] дозволяє використовувати існуючий механізм оголошення функціональності PHP застарілою для функцій, методів і констант класів, визначених користувачем.', + 'dom_additions_html5_title' => 'Нові можливості розширення ext-dom і підтримка HTML5', + 'dom_additions_html5_description' => '

            Новий DOM API, який включає підтримку стандартів для синтаксичного аналізу HTML5-документів, виправляє кілька давніх помилок сумісності у поведінці DOM та додає кілька нових функцій для зручнішої роботи з документами.

            Новий DOM API доступний у просторі імен Dom. Документи, що використовують новий DOM API, можна створювати за допомогою класів Dom\HTMLDocument і Dom\XMLDocument.

            ', + 'bcmath_title' => 'Об\'єктний API для BCMath', + 'bcmath_description' => '

            Новий об\'єкт BcMath\Number дозволяє використовувати об\'єктно-орієнтовану модель і стандартні математичні оператори під час роботи з числами довільної точності.

            Ці об\'єкти є незмінними і реалізують інтерфейс Stringable, тому їх можна використовувати у контекстах рядків, наприклад, у виразі echo $num.

            ', + 'new_array_find_title' => 'Нові функції array_*()', + 'new_array_find_description' => 'Нові функції array_find(), array_find_key(), array_any() і array_all().', + 'pdo_driver_specific_subclasses_title' => 'Специфічні аналізатори синтаксису SQL для драйверів PDO', + 'pdo_driver_specific_subclasses_description' => 'Нові підкласи Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Pgsql і Pdo\Sqlite для PDO.', + 'new_without_parentheses_title' => 'new MyClass()->method() без дужок', + 'new_without_parentheses_description' => 'До властивостей і методів нового екземпляра об\'єкта тепер можна звертатися, не беручи вираз new у круглі дужки.', + + 'new_classes_title' => 'Нові класи, інтерфейси та функції', + 'new_lazy_objects' => 'Нові ліниві об\'єкти.', + 'new_jit_implementation' => 'Нова реалізація JIT на основі IR Framework.', + 'new_core_functions' => 'Нова функція request_parse_body().', + 'new_bcmath_functions' => 'Нові функції bcceil(), bcdivmod(), bcfloor() і bcround().', + 'new_round_modes' => 'Нове перерахування RoundingMode для функції round(), що містить 4 нових режими округлення TowardsZero, AwayFromZero, NegativeInfinity і PositiveInfinity.', + 'new_date_functions' => 'Нові методи DateTime::createFromTimestamp(), DateTime::getMicrosecond(), DateTime::setMicrosecond(), DateTimeImmutable::createFromTimestamp(), DateTimeImmutable::getMicrosecond() і DateTimeImmutable::setMicrosecond().', + 'new_mb_functions' => 'Нові функції mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst() і mb_lcfirst().', + 'new_pcntl_functions' => 'Нові функції pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns() і pcntl_waitid().', + 'new_reflection_functions' => 'Нові методи ReflectionClassConstant::isDeprecated(), ReflectionGenerator::isClosed() і ReflectionProperty::isDynamic().', + 'new_standard_functions' => 'Нові функції http_get_last_response_headers(), http_clear_last_response_headers() і fpow().', + 'new_xml_functions' => 'Нові методи XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(), XMLWriter::toStream(), XMLWriter::toUri() і XMLWriter::toMemory().', + 'new_grapheme_function' => 'Нова функція grapheme_str_split().', + + 'bc_title' => 'Застаріла функціональність і зміни у зворотній сумісності', + 'bc_pecl' => 'Розширення IMAP, OCI8, PDO_OCI та pspell вилучено і перенесено до PECL.', + 'bc_nullable_parameter_types' => 'Типи параметрів, що неявно допускають значення null, оголошено застарілими.', + 'bc_classname' => 'Можливість використання символу _ у якості імені класу оголошено застарілою.', + 'bc_zero_raised_to_negative_number' => 'Можливість піднесення нуля до від\'ємного показника степеня оголошено застарілою.', + 'bc_gmp' => 'Клас GMP оголошено фінальним.', + 'bc_round' => 'Передача недійсного режиму до функції round() тепер викликає ValueError.', + 'bc_typed_constants' => 'Типізовано константи класів розширень date, intl, pdo, reflection, spl, sqlite, xmlreader.', + 'bc_mysqli_constants' => 'Константи MYSQLI_SET_CHARSET_DIR, MYSQLI_STMT_ATTR_PREFETCH_ROWS, MYSQLI_CURSOR_TYPE_FOR_UPDATE, MYSQLI_CURSOR_TYPE_SCROLLABLE і MYSQLI_TYPE_INTERVAL оголошено застарілими.', + 'bc_mysqli_functions' => 'Функції mysqli_ping(), mysqli_kill(), mysqli_refresh(), методи mysqli::ping(), mysqli::kill(), mysqli::refresh() і константу MYSQLI_REFRESH_* оголошено застарілими.', + 'bc_standard' => 'Функції stream_bucket_make_writeable() і stream_bucket_new() тепер повертають екземпляр класу StreamBucket замість stdClass.', + 'bc_core' => 'Змінено поведінку конструкції exit().', + 'bc_warnings' => 'Константу E_STRICT оголошено застарілою.', + + 'footer_title' => 'Краща продуктивність, кращий синтаксис, покращена безпека типів.', + 'footer_description' => '

            Для завантаження початкового коду PHP 8.4 відвідайте сторінку downloads. Двійкові файли Windows можна знайти на сайті PHP for Windows Перелік змін описано на сторінці ChangeLog.

            +

            Посібник з міграції знаходиться у посібнику з PHP. Будь ласка, ознайомтеся з ним, щоб отримати детальніший список нових функцій і несумісних змін.

            ', +]; diff --git a/releases/8.4/languages/zh.php b/releases/8.4/languages/zh.php new file mode 100644 index 0000000000..8200312c47 --- /dev/null +++ b/releases/8.4/languages/zh.php @@ -0,0 +1,65 @@ + 'PHP 8.4 是 PHP 语言的一次重大更新。它包含了许多新功能,例如属性钩子、不对称可见性、更新的 DOM API、性能改进、错误修复和常规清理等。', + 'documentation' => '文档', + 'main_title' => '已发布!', + 'main_subtitle' => 'PHP 8.4 是 PHP 语言的一次重大更新。
            它包含许多新功能,例如属性钩子、不对称可见性、更新的 DOM API、性能改进、错误修复和常规清理等。', + 'upgrade_now' => '更新到 PHP 8.4 !', + + 'property_hooks_title' => '属性钩子', + 'property_hooks_description' => '属性钩子提供对计算属性的支持,这些属性可以被 IDE 和静态分析工具直接理解,而无需编写可能会失效的 docblock 注释。此外,它们允许可靠地预处理或后处理值,而无需检查类中是否存在匹配的 getter 或 setter。', + 'asymmetric_visibility_title' => '不对称可见性', + 'asymmetric_visibility_description' => '现在可以独立地控制写入属性的作用域和读取属性的作用域,减少了需要编写繁琐的 getter 方法来公开属性值而不允许从类外部修改属性的需求。', + 'deprecated_attribute_title' => '#[\Deprecated] 属性', + 'deprecated_attribute_description' => '新的 #[\Deprecated] 属性使 PHP 的现有弃用机制可用于用户定义的函数、方法和类常量。', + 'dom_additions_html5_title' => '新的 ext-dom 功能和 HTML5 支持', + 'dom_additions_html5_description' => '

            新的 DOM API 包括符合标准的支持,用于解析 HTML5 文档,修复了 DOM 功能行为中的几个长期存在的规范性错误,并添加了几个函数,使处理文档更加方便。

            新的 DOM API 可以在 Dom 命名空间中使用。使用新的 DOM API 可以使用 Dom\HTMLDocumentDom\XMLDocument 类创建文档。

            ', + 'bcmath_title' => 'BCMath 的对象 API', + 'bcmath_description' => '

            新的 BcMath\Number 对象使在处理任意精度数字时可以使用面向对象的方式和标准的数学运算符。

            这些对象是不可变的,并实现了 Stringable 接口,因此可以在字符串上下文中使用,如 echo $num

            ', + 'new_array_find_title' => '新的 array_*() 函数', + 'new_array_find_description' => '新增函数 array_find()array_find_key()array_any()array_all()。', + 'pdo_driver_specific_subclasses_title' => 'PDO 驱动程序特定子类', + 'pdo_driver_specific_subclasses_description' => '新的 Pdo\DblibPdo\FirebirdPdo\MySqlPdo\OdbcPdo\PgsqlPdo\Sqlite 的子类可用。', + 'new_without_parentheses_title' => 'new MyClass()->method() 不需要括号', + 'new_without_parentheses_description' => '现在可以在不使用括号包裹 new 表达式的情况下访问新实例化对象的属性和方法。', + + 'new_classes_title' => '新的类、接口和函数', + 'new_lazy_objects' => '新的 延迟对象。', + 'new_jit_implementation' => '基于 IR 框架的新 JIT 实现。', + 'new_core_functions' => '新增 request_parse_body() 函数。', + 'new_bcmath_functions' => '新增 bcceil()bcdivmod()bcfloor()bcround() 函数。', + 'new_round_modes' => '新增 RoundingMode 枚举用于 round(),包括 4 个新的舍入模式 TowardsZeroAwayFromZeroNegativeInfinityPositiveInfinity。', + 'new_date_functions' => '新增 DateTime::createFromTimestamp()DateTime::getMicrosecond()DateTime::setMicrosecond()DateTimeImmutable::createFromTimestamp()DateTimeImmutable::getMicrosecond()DateTimeImmutable::setMicrosecond() 方法。', + 'new_mb_functions' => '新增 mb_trim()mb_ltrim()mb_rtrim()mb_ucfirst()mb_lcfirst() 函数。', + 'new_pcntl_functions' => '新增 pcntl_getcpu()pcntl_getcpuaffinity()pcntl_getqos_class()pcntl_setns()pcntl_waitid() 函数。', + 'new_reflection_functions' => '新增 ReflectionClassConstant::isDeprecated()ReflectionGenerator::isClosed()ReflectionProperty::isDynamic() 方法。', + 'new_standard_functions' => '新增 http_get_last_response_headers()http_clear_last_response_headers()fpow() 函数。', + 'new_xml_functions' => '新增 XMLReader::fromStream()XMLReader::fromUri()XMLReader::fromString()XMLWriter::toStream()XMLWriter::toUri()XMLWriter::toMemory() 方法。', + 'new_grapheme_function' => '新增 grapheme_str_split() 函数。', + + 'bc_title' => '弃用和向后不兼容', + 'bc_pecl' => 'IMAP、OCI8、PDO_OCI 和 pspell 扩展已从 PHP 中分离并移至 PECL。', + 'bc_nullable_parameter_types' => '隐式可空参数类型现已弃用。', + 'bc_classname' => '使用 _ 作为类名现已弃用。', + 'bc_zero_raised_to_negative_number' => '将零的负数次幂现已弃用。', + 'bc_gmp' => 'GMP 类现已是 final 类。', + 'bc_round' => '向 round() 传递无效模式将抛出 ValueError。', + 'bc_typed_constants' => '来自扩展 dateintlpdoreflectionsplsqlitexmlreader 的类常量现在是有类型的。', + 'bc_mysqli_constants' => '已删除 MYSQLI_SET_CHARSET_DIRMYSQLI_STMT_ATTR_PREFETCH_ROWSMYSQLI_CURSOR_TYPE_FOR_UPDATEMYSQLI_CURSOR_TYPE_SCROLLABLEMYSQLI_TYPE_INTERVAL 常量。', + 'bc_mysqli_functions' => '已弃用 mysqli_ping()mysqli_kill()mysqli_refresh() 函数,mysqli::ping()mysqli::kill()mysqli::refresh() 方法,以及 MYSQLI_REFRESH_* 常量。', + 'bc_standard' => 'stream_bucket_make_writeable()stream_bucket_new() 现在返回 StreamBucket 实例而不是 stdClass。', + 'bc_core' => 'exit() 行为变更。', + 'bc_warnings' => 'E_STRICT 常量已弃用。', + + 'footer_title' => '更好的性能、更好的语法、改进类型安全。', + 'footer_description' => '

            请访问 下载 页面下载 PHP 8.4 源代码。 + 在 PHP for Windows 站点中可找到 Windows 二进制文件。 + ChangeLog 中有变更历史记录清单。

            +

            PHP 手册中有 迁移指南。 + 请参考它描述的新功能详细清单、向后不兼容的变化。

            ', +]; diff --git a/releases/8.4/nl.php b/releases/8.4/nl.php new file mode 100644 index 0000000000..1a972eecb8 --- /dev/null +++ b/releases/8.4/nl.php @@ -0,0 +1,6 @@ + +
            +
            +
            + +
            +
            +
            + +
            +
            +
            + +
            +
            +
            + +
            +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.4
            +
            + setLanguageCode($languageCode); + $this->setCountryCode($countryCode); + } + + public function getLanguageCode(): string + { + return $this->languageCode; + } + + public function setLanguageCode(string $languageCode): void + { + $this->languageCode = $languageCode; + } + + public function getCountryCode(): string + { + return $this->countryCode; + } + + public function setCountryCode(string $countryCode): void + { + $this->countryCode = strtoupper($countryCode); + } + + public function setCombinedCode(string $combinedCode): void + { + [$languageCode, $countryCode] = explode('_', $combinedCode, 2); + + $this->setLanguageCode($languageCode); + $this->setCountryCode($countryCode); + } + + public function getCombinedCode(): string + { + return \sprintf("%s_%s", $this->languageCode, $this->countryCode); + } +} + +$brazilianPortuguese = new Locale('pt', 'br'); +var_dump($brazilianPortuguese->getCountryCode()); // BR +var_dump($brazilianPortuguese->getCombinedCode()); // pt_BR +PHP + + ); ?> +
            +
            +
            +
            +
            PHP 8.4
            +
            + countryCode = strtoupper($countryCode); + } + } + + public string $combinedCode + { + get => \sprintf("%s_%s", $this->languageCode, $this->countryCode); + set (string $value) { + [$this->languageCode, $this->countryCode] = explode('_', $value, 2); + } + } + + public function __construct(string $languageCode, string $countryCode) + { + $this->languageCode = $languageCode; + $this->countryCode = $countryCode; + } +} + +$brazilianPortuguese = new Locale('pt', 'br'); +var_dump($brazilianPortuguese->countryCode); // BR +var_dump($brazilianPortuguese->combinedCode); // pt_BR +PHP + ); ?> +
            +
            +
            +
            + +
            +
            +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.4
            +
            + version; + } + + public function increment(): void + { + [$major, $minor] = explode('.', $this->version); + $minor++; + $this->version = "{$major}.{$minor}"; + } +} +PHP + + ); ?> +
            +
            +
            +
            +
            PHP 8.4
            +
            + version); + $minor++; + $this->version = "{$major}.{$minor}"; + } +} +PHP + ); ?> +
            +
            +
            +
            + +
            +
            +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.4
            +
            + getVersion(); + } + + public function getVersion(): string + { + return '8.3'; + } +} + +$phpVersion = new PhpVersion(); +// No indication that the method is deprecated. +echo $phpVersion->getPhpVersion(); +PHP + + ); ?> +
            +
            +
            +
            +
            PHP 8.4
            +
            + getVersion(); + } + + public function getVersion(): string + { + return '8.4'; + } +} + +$phpVersion = new PhpVersion(); +// Deprecated: Method PhpVersion::getPhpVersion() is deprecated since 8.4, use PhpVersion::getVersion() instead +echo $phpVersion->getPhpVersion(); +PHP + ); ?> +
            +
            +
            +
            + +
            +
            +
            +

            + + RFC + RFC + +

            +
            +
            +
            PHP < 8.4
            +
            + loadHTML( + <<<'HTML' +
            +
            PHP 8.4 is a feature-rich release!
            + +
            + HTML, + LIBXML_NOERROR, +); + +$xpath = new DOMXPath($dom); +$node = $xpath->query(".//main/article[not(following-sibling::*)]")[0]; +$classes = explode(" ", $node->className); // Simplified +var_dump(in_array("featured", $classes)); // bool(true) +PHP + + ); ?> +
            +
            +
            +
            +
            PHP 8.4
            +
            + +
            PHP 8.4 is a feature-rich release!
            + + + HTML, + LIBXML_NOERROR, +); + +$node = $dom->querySelector('main > article:last-child'); +var_dump($node->classList->contains("featured")); // bool(true) +PHP + ); ?> +
            +
            +
            +
            + +
            +
            +
            +

            + + RFC +

            +
            +
            +
            PHP < 8.4
            +
            + 0); // false +PHP + + ); ?> +
            +
            +
            +
            +
            PHP 8.4
            +
            + $num2); // false +PHP + ); ?> +
            +
            +
            +
            + +
            +
            +
            +

            + + RFC +

            +
            +
            +
            PHP < 8.4
            +
            + +
            +
            +
            +
            +
            PHP 8.4
            +
            + str_starts_with($value, 'c'), +); + +var_dump($animal); // string(3) "cat" +PHP + ); ?> +
            +
            +
            +
            + +
            +
            +
            +

            + + RFC +

            +
            +
            +
            PHP < 8.4
            +
            + sqliteCreateFunction( + 'prepend_php', + static fn($string) => "PHP {$string}", +); + +$connection->query('SELECT prepend_php(version) FROM php'); +PHP + ); ?> +
            +
            +
            +
            +
            PHP 8.4
            +
            + createFunction( + 'prepend_php', + static fn($string) => "PHP {$string}", +); // Does not exist on a mismatching driver. + +$connection->query('SELECT prepend_php(version) FROM php'); +PHP + ); ?> +
            +
            +
            +
            + +
            +
            +
            +

            + + RFC + +

            +
            +
            +
            PHP < 8.4
            +
            + getVersion()); +PHP + + ); ?> +
            +
            +
            +
            +
            PHP 8.4
            +
            + getVersion()); +PHP + ); ?> +
            +
            +
            +
            + +
            +
            + +
            + +
            +
            +

            +
            +
              +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            +
            +
            + +
            +

            +
            +
              +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            • +
            +
            +
            +
            + + + + 'English', + 'es' => 'Español', + 'ja' => '日本語', + 'pt_BR' => 'Brazilian Portuguese', + 'ru' => 'Русский', + 'tr' => 'Türkçe', + 'uk' => 'Українська', + 'zh' => '简体中文', +]; + +function common_header(string $description): void { + global $MYSITE, $lang; + + $meta_image_path = \htmlspecialchars( + \filter_var($MYSITE . 'images/php8/php_8_5_released.png', \FILTER_VALIDATE_URL)); + $meta_description = \htmlspecialchars($description); + + $languages = []; + foreach (LANGUAGES as $code => $text) { + $languages[] = ['name' => $text, 'selected' => $lang === $code, 'url' => '/releases/8.5/' . $code . '.php']; + } + + \site_header("PHP 8.5 Release Announcement", [ + 'current' => 'php85', + 'css' => ['php85.css'], + 'language_switcher' => $languages, + 'theme_switcher' => true, + 'meta_tags' => << + + + + + + + + + + + + +META + ]); +} + +function message($code, $language = 'en', array $interpolations = []) +{ + $original = require __DIR__ . '/languages/en.php'; + if (($language !== 'en') && file_exists(__DIR__ . '/languages/' . $language . '.php')) { + $translation = require __DIR__ . '/languages/' . $language . '.php'; + } + + $message = $translation[$code] ?? $original[$code] ?? $code; + + foreach ($interpolations as $name => $value) { + $message = str_replace("{{$name}}", $value, $message); + } + + return $message; +} diff --git a/releases/8.5/en.php b/releases/8.5/en.php new file mode 100644 index 0000000000..7ff380e63b --- /dev/null +++ b/releases/8.5/en.php @@ -0,0 +1,5 @@ +chooseCode("", "", $_SERVER['HTTP_ACCEPT_LANGUAGE']); + +mirror_redirect("/releases/8.5/$lang.php"); diff --git a/releases/8.5/ja.php b/releases/8.5/ja.php new file mode 100644 index 0000000000..9db1f5ca85 --- /dev/null +++ b/releases/8.5/ja.php @@ -0,0 +1,5 @@ + 'PHP 8.5 is a major update of the PHP language, with new features including the URI Extension, Pipe Operator, and support for modifying properties while cloning.', + 'main_title' => 'Smarter, Faster, Built for Tomorrow.', + 'main_subtitle' => '

            PHP 8.5 is a major update of the PHP language, with new features including the URI extension, Pipe operator, and support for modifying properties while cloning.

            ', + + 'whats_new' => 'What\'s new in 8.5', + 'upgrade_now' => 'Upgrade to PHP 8.5', + 'old_version' => 'PHP 8.4 and older', + 'badge_new' => 'NEW', + 'documentation' => 'Doc', + 'released' => 'Released Nov 20, 2025', + 'key_features' => 'Key Features in PHP 8.5', + 'key_features_description' => '

            Faster, cleaner, and built for developers.

            ', + + 'features_pipe_operator_title' => 'Pipe Operator', + 'features_pipe_operator_description' => '

            The |> operator enables chaining callables left-to-right, passing values smoothly through multiple functions without intermediary variables.

            ', + 'features_persistent_curl_share_handles_title' => 'Persistent cURL Share Handles', + 'features_persistent_curl_share_handles_description' => '

            Handles can now be persisted across multiple PHP requests, avoiding the cost of repeated connection initialization to the same hosts.

            ', + 'features_clone_with_title' => 'Clone With', + 'features_clone_with_description' => '

            Clone objects and update properties with the new clone() syntax, making the "with-er" pattern simple for readonly classes.

            ', + 'features_uri_extension_title' => 'URI Extension', + 'features_uri_extension_description' => '

            PHP 8.5 adds a built-in URI extension to parse, normalize, and handle URLs following RFC 3986 and WHATWG URL standards.

            ', + 'features_no_discard_title' => '#[\NoDiscard] Attribute', + 'features_no_discard_description' => '

            The #[\NoDiscard] attribute warns when a return value isn’t used, helping prevent mistakes and improving overall API safety.

            ', + 'features_fcc_in_const_expr_title' => 'Closures and First-Class Callables in Constant Expressions', + 'features_fcc_in_const_expr_description' => '

            Static closures and first-class callables can now be used in constant expressions, such as attribute parameters.

            ', + + 'pipe_operator_title' => 'Pipe Operator', + 'pipe_operator_description' => '

            The pipe operator allows chaining function calls together without dealing with intermediary variables. This enables replacing many "nested calls" with a chain that can be read forwards, rather than inside-out.

            Learn more about the backstory of this feature in The PHP Foundation’s blog.

            ', + + 'array_first_last_title' => 'array_first() and array_last() functions', + 'array_first_last_description' => '

            The array_first() and array_last() functions return the first or last value of an array, respectively. If the array is empty, null is returned (making it easy to compose with the ?? operator).

            ', + + 'clone_with_title' => 'Clone With', + 'clone_with_description' => '

            It is now possible to update properties during object cloning by passing an associative array to the clone() function. This enables straightforward support of the "with-er" pattern for readonly classes.

            ', + + 'uri_extension_title' => 'URI Extension', + 'uri_extension_description' => '

            The new always-available URI extension provides APIs to securely parse and modify URIs and URLs according to the RFC 3986 and the WHATWG URL standards.

            Powered by the uriparser (RFC 3986) and Lexbor (WHATWG URL) libraries.

            Learn more about the backstory of this feature in The PHP Foundation’s blog.

            ', + + 'no_discard_title' => '#[\NoDiscard] Attribute', + 'no_discard_description' => '

            By adding the #[\NoDiscard] attribute to a function, PHP will check whether the returned value is consumed and emit a warning if it is not. This allows improving the safety of APIs where the returned value is important, but it\'s easy to forget using the return value by accident.

            The associated (void) cast can be used to indicate that a value is intentionally unused.

            ', + + 'persistent_curl_share_handles_title' => 'Persistent cURL Share Handles', + 'persistent_curl_share_handles_description' => '

            Unlike curl_share_init(), handles created by curl_share_init_persistent() will not be destroyed at the end of the PHP request. If a persistent share handle with the same set of share options is found, it will be reused, avoiding the cost of initializing cURL handles each time.

            ', + + 'fcc_in_const_expr_title' => 'Closures and First-Class Callables in Constant Expressions', + 'fcc_in_const_expr_description' => '

            Static closures and first-class callables can now be used in constant expressions. This includes attribute parameters, default values of properties and parameters, and constants.

            ', + + 'new_classes_title' => 'Additional features and improvements', + 'fatal_error_backtrace' => 'Fatal Errors (such as an exceeded maximum execution time) now include a backtrace.', + 'const_attribute_target' => 'Attributes can now target constants.', + 'override_attr_properties' => '{0} attribute can now be applied to properties.', + 'deprecated_traits_constants' => '{0} attribute can be used on traits and constants.', + 'asymmetric_static_properties' => 'Static properties now support asymmetric visibility.', + 'final_promoted_properties' => 'Properties can be marked as final using constructor property promotion.', + 'closure_getCurrent' => 'Added Closure::getCurrent() method to simplify recursion in anonymous functions.', + 'partitioned_cookies' => 'The {0} and {1} functions now support the "partitioned" key.', + 'get_set_error_handler' => 'New {0} and {1} functions are available.', + 'new_dom_element_methods' => 'New {0} and {1} methods are available.', + 'grapheme_levenshtein' => 'Added {0} function.', + 'delayed_target_validation' => 'New {0} attribute can be used to suppress compile-time errors from core and extension attributes that are used on invalid targets.', + + 'bc_title' => 'Deprecations and backward compatibility breaks', + 'bc_backtick_operator' => 'The backtick operator as an alias for {0} has been deprecated.', + 'bc_non_canonical_cast_names' => 'Non-canonical cast names (boolean), (integer), (double), and (binary) have been deprecated. Use (bool), (int), (float), and (string) instead, respectively.', + 'bc_disable_classes' => 'The {0} INI setting has been removed as it causes various engine assumptions to be broken.', + 'bc_semicolon_after_case' => 'Terminating case statements with a semicolon instead of a colon has been deprecated.', + 'bc_null_array_offset' => 'Using null as an array offset or when calling {0} is now deprecated. Use an empty string instead.', + 'bc_class_alias_names' => 'It is no longer possible to use "array" and "callable" as class alias names in {0}.', + 'bc_sleep_wakeup' => 'The {0} and {1} magic methods have been soft-deprecated. The {2} and {3} magic methods should be used instead.', + 'bc_casting_nan' => 'A warning is now emitted when casting {0} to other types.', + 'bc_non_array_destructuring' => 'Destructuring non-array values (other than null) using {0} or {1} now emits a warning.', + 'bc_casting_non_int_floats' => 'A warning is now emitted when casting floats (or strings that look like floats) to int if they cannot be represented as one.', + + 'footer_title' => 'Better syntax, improved performance and type safety.', + 'footer_description' => '

            The full list of changes is recorded in the ChangeLog.

            Please consult the migration guide for a detailed list of new features and backward-incompatible changes.

            ', +]; diff --git a/releases/8.5/languages/es.php b/releases/8.5/languages/es.php new file mode 100644 index 0000000000..c68abd01ac --- /dev/null +++ b/releases/8.5/languages/es.php @@ -0,0 +1,79 @@ + 'PHP 8.5 es una actualización importante del lenguaje PHP, con nuevas características que incluyen la Extensión URI, el Operador Pipe y soporte para modificar propiedades al clonar.', + 'main_title' => 'Más inteligente, más rápido, construido para el mañana.', + 'main_subtitle' => '

            PHP 8.5 es una actualización importante del lenguaje PHP, con nuevas características que incluyen la extensión URI, el operador Pipe y soporte para modificar propiedades al clonar.

            ', + + 'whats_new' => 'Novedades en 8.5', + 'upgrade_now' => 'Actualizar a PHP 8.5', + 'old_version' => 'PHP 8.4 y anteriores', + 'badge_new' => 'NUEVO', + 'documentation' => 'Doc', + 'released' => 'Lanzado el 20 de noviembre de 2025', + 'key_features' => 'Características clave en PHP 8.5', + 'key_features_description' => '

            Más rápido, limpio y construido para desarrolladores.

            ', + + 'features_pipe_operator_title' => 'Operador Pipe', + 'features_pipe_operator_description' => '

            El operador |> permite encadenar callables de izquierda a derecha, pasando valores suavemente a través de múltiples funciones sin variables intermedias.

            ', + 'features_persistent_curl_share_handles_title' => 'Handles cURL Persistentes Compartidos', + 'features_persistent_curl_share_handles_description' => '

            Los handles ahora pueden persistir a través de múltiples peticiones PHP, evitando el costo de inicialización repetida de conexiones a los mismos hosts.

            ', + 'features_clone_with_title' => 'Clone With', + 'features_clone_with_description' => '

            Clona objetos y actualiza propiedades con la nueva sintaxis clone(), simplificando el patrón en clases readonly.

            ', + 'features_uri_extension_title' => 'Extensión URI', + 'features_uri_extension_description' => '

            PHP 8.5 añade una extensión URI integrada para analizar, normalizar y manejar URLs siguiendo los estándares RFC 3986 y WHATWG URL.

            ', + 'features_no_discard_title' => 'Atributo #[\NoDiscard]', + 'features_no_discard_description' => '

            El atributo #[\NoDiscard] advierte cuando un valor de retorno no se usa, ayudando a prevenir errores y mejorando la seguridad.

            ', + 'features_fcc_in_const_expr_title' => 'Closures y Callables de Primera Clase en Expresiones Constantes', + 'features_fcc_in_const_expr_description' => '

            Los closures estáticos y callables de primera clase ahora pueden usarse en expresiones constantes, como parámetros de atributos.

            ', + + 'pipe_operator_title' => 'Operador Pipe', + 'pipe_operator_description' => '

            El operador pipe permite encadenar llamadas a funciones sin tener que lidiar con variables intermedias. Esto permite reemplazar muchas "llamadas anidadas" con una cadena que se puede leer hacia adelante, en lugar de hacerlo de adentro hacia afuera.

            Aprende más sobre esta característica en el artículo de The PHP Foundation.

            ', + + 'array_first_last_title' => 'Funciones array_first() y array_last()', + 'array_first_last_description' => '

            Las funciones array_first() y array_last() devuelven el primer o último valor de un array, respectivamente. Si el array está vacío, se devuelve null (facilitando su usabilidad con el operador ??).

            ', + + 'clone_with_title' => 'Clone With', + 'clone_with_description' => '

            Ahora es posible actualizar propiedades durante la clonación de objetos pasando un array asociativo a la función clone(). Esto permite un soporte directo en las clases readonly.

            ', + + 'uri_extension_title' => 'Extensión URI', + 'uri_extension_description' => '

            La nueva extensión URI proporciona APIs para analizar y modificar de forma segura URIs y URLs de acuerdo con los estándares RFC 3986 y WHATWG URL.

            Desarrollado por las librerías uriparser (RFC 3986) y Lexbor (WHATWG URL).

            Aprende más sobre esta característica en el artículo de The PHP Foundation.

            ', + + 'no_discard_title' => 'Atributo #[\NoDiscard]', + 'no_discard_description' => '

            Al agregar el atributo #[\NoDiscard] a una función, PHP verificará si el valor devuelto se consume y emitirá una advertencia si no lo es. Esto permite mejorar la seguridad de APIs donde el valor devuelto es importante, pero se podría olvidar usar el valor de retorno por accidente.

            El cast (void) puede usarse para indicar que un valor no se usa intencionalmente.

            ', + + 'persistent_curl_share_handles_title' => 'Handles cURL persistentes compartidos', + 'persistent_curl_share_handles_description' => '

            A diferencia de curl_share_init(), los handles creados por curl_share_init_persistent() no serán destruidos al final de la petición PHP. Si se encuentra un handle persistente compartido con el mismo conjunto de opciones compartidas, será reutilizado, evitando el costo de inicializar handles cURL de nuevo.

            ', + + 'fcc_in_const_expr_title' => 'Closures y Callables de Primera Clase en Expresiones Constantes', + 'fcc_in_const_expr_description' => '

            Los closures estáticos y callables de primera clase ahora pueden usarse en expresiones constantes. Esto incluye parámetros de atributos, valores predeterminados de propiedades y parámetros, y constantes.

            ', + + 'new_classes_title' => 'Características y mejoras adicionales', + 'fatal_error_backtrace' => 'Los errores fatales (como el tiempo máximo de ejecución excedido) ahora incluyen un backtrace.', + 'const_attribute_target' => 'Los atributos ahora pueden apuntar a constantes.', + 'override_attr_properties' => 'El atributo {0} ahora puede aplicarse a propiedades.', + 'deprecated_traits_constants' => 'El atributo {0} puede usarse en traits y constantes.', + 'asymmetric_static_properties' => 'Las propiedades estáticas ahora soportan visibilidad asimétrica.', + 'final_promoted_properties' => 'Las propiedades pueden marcarse como final usando la promoción de propiedades en constructores.', + 'closure_getCurrent' => 'Se agregó el método Closure::getCurrent() para simplificar la recursión en funciones anónimas.', + 'partitioned_cookies' => 'Las funciones {0} y {1} ahora soportan la clave "partitioned".', + 'get_set_error_handler' => 'Las nuevas funciones {0} y {1} están disponibles.', + 'new_dom_element_methods' => 'Los nuevos métodos {0} y {1} están disponibles.', + 'grapheme_levenshtein' => 'Se agregó la función {0}.', + 'delayed_target_validation' => 'El nuevo atributo {0} puede usarse para suprimir errores en tiempo de compilación de atributos del núcleo y extensiones que se usan en destinos inválidos.', + + 'bc_title' => 'Deprecaciones y cambios de compatibilidad hacia atrás', + 'bc_backtick_operator' => 'El operador backtick como alias de {0} ha sido deprecado.', + 'bc_non_canonical_cast_names' => 'Los nombres de cast no canónicos (boolean), (integer), (double) y (binary) han sido deprecados. Use (bool), (int), (float) y (string) en su lugar, respectivamente.', + 'bc_disable_classes' => 'La configuración INI {0} ha sido eliminada ya que causa que se rompan varias suposiciones del motor.', + 'bc_semicolon_after_case' => 'Terminar sentencias case con punto y coma en lugar de dos puntos ha sido deprecado.', + 'bc_null_array_offset' => 'Usar null como offset en un array o al llamar {0} ahora está deprecado. Use una cadena vacía en su lugar.', + 'bc_class_alias_names' => 'Ya no es posible usar "array" y "callable" como nombres de alias de clase en {0}.', + 'bc_sleep_wakeup' => 'Los métodos mágicos {0} y {1} han sido deprecados. Los métodos mágicos {2} y {3} deben usarse en su lugar.', + 'bc_casting_nan' => 'Una advertencia es emitida al convertir {0} a otros tipos.', + 'bc_non_array_destructuring' => 'La desestructuración de valores no-array (distintos de null) usando {0} o {1} ahora emite una advertencia.', + 'bc_casting_non_int_floats' => 'Una advertencia es emitida al convertir floats (o cadenas que parecen floats) a int si no pueden representarse como uno.', + + 'footer_title' => 'Mejor sintaxis, rendimiento mejorado y seguridad de tipos.', + 'footer_description' => '

            La lista completa de cambios está registrada en el ChangeLog.

            Por favor consulte la guía de migración para una lista detallada de nuevas características y cambios incompatibles hacia atrás.

            ', +]; diff --git a/releases/8.5/languages/ja.php b/releases/8.5/languages/ja.php new file mode 100644 index 0000000000..4729484e8d --- /dev/null +++ b/releases/8.5/languages/ja.php @@ -0,0 +1,79 @@ + 'PHP 8.5 は、PHP 言語のメジャーアップデートです。URI 拡張モジュール、パイプ演算子、クローン時のプロパティ変更機能などの新機能が含まれています。', + 'main_title' => 'より賢く、より速く。未来へ向けて。', + 'main_subtitle' => '

            PHP 8.5 は、PHP 言語のメジャーアップデートですURI 拡張モジュールパイプ演算子クローン時のプロパティ変更機能などの新機能が含まれています。

            ', + + 'whats_new' => '8.5 の新機能', + 'upgrade_now' => 'PHP 8.5 にアップグレード', + 'old_version' => 'PHP 8.4 以前', + 'badge_new' => 'NEW', + 'documentation' => 'Doc', + 'released' => '2025/11/20 リリース', + 'key_features' => 'PHP 8.5 の主な機能', + 'key_features_description' => '

            より速くよりクリーンに。そして開発者のために

            ', + + 'features_pipe_operator_title' => 'パイプ演算子', + 'features_pipe_operator_description' => '

            |> 演算子を使うと callable を左から右にチェインさせ、中間変数を使わずに値を複数の関数にスムーズに受け渡せます。

            ', + 'features_persistent_curl_share_handles_title' => '持続的な cURL 共有ハンドル', + 'features_persistent_curl_share_handles_description' => '

            ハンドルを複数の PHP リクエストにまたがって持続させられるようになります。同じホストへの接続初期化を繰り返すコストを避けることができます。

            ', + 'features_clone_with_title' => 'Clone With', + 'features_clone_with_description' => '

            新しい clone() 構文でオブジェクトを clone してプロパティを更新します。readonly クラスの "with-er" パターンが簡潔になります。

            ', + 'features_uri_extension_title' => 'URI 拡張モジュール', + 'features_uri_extension_description' => '

            URL のパース、正規化、処理を行う新しい組み込みの URI 拡張モジュールが PHP 8.5 で追加されました。

            ', + 'features_no_discard_title' => '#[\NoDiscard] アトリビュート', + 'features_no_discard_description' => '

            #[\NoDiscard] アトリビュートを使うと、戻り値が利用されていない場合に警告を出します。ミスを防ぎ全体の API 安全性を向上するのに役立ちます。

            ', + 'features_fcc_in_const_expr_title' => '定数式でのクロージャと第一級 callable', + 'features_fcc_in_const_expr_description' => '

            static なクロージャと第一級 callable が、アトリビュートの引数などの定数式で使えるようになります。

            ', + + 'pipe_operator_title' => 'パイプ演算子', + 'pipe_operator_description' => '

            パイプ演算子を使うと、中間変数を扱うことなく複数の関数呼び出しを繋げることができます。これによってたくさんの「入れ子呼び出し」を置き換え、中から外ではなく先に向かって読むことができるようになります。

            この機能の背景について詳しくは PHP Foundation のブログをお読みください。

            ', + + 'array_first_last_title' => 'array_first() ・ array_last() 関数', + 'array_first_last_description' => '

            array_first()array_last() 関数は、それぞれ配列の最初と最後の値を返します。空配列の場合は null を返します(そのため ?? 演算子と組み合わせやすいです)。

            ', + + 'clone_with_title' => 'Clone With', + 'clone_with_description' => '

            clone() 関数に連想配列を渡すことで、オブジェクトのクローン時にプロパティを更新することができるようになります。これによって、readonly クラスの "with-er" パターンを簡単に実装することができるようになります。

            ', + + 'uri_extension_title' => 'URI 拡張モジュール', + 'uri_extension_description' => '

            常に有効な新しい URI 拡張モジュールは、RFC 3986 と WHATWG URL 標準にしたがって URI や URL を安全にパース・編集できる API を提供します。

            uriparser (RFC 3986) と Lexbor (WHATWG URL) ライブラリを利用しています。

            この機能の背景は PHP Foundation のブログをお読みください。

            ', + + 'no_discard_title' => '#[\NoDiscard] アトリビュート', + 'no_discard_description' => '

            #[\NoDiscard] アトリビュートを関数に追加すると、戻り値が利用されたかを PHP がチェックし、されていなければ警告を出します。これにより、戻り値が重要なのにそれを利用することをうっかり忘れやすい API の安全性を高めることができます。

            関連する (void) キャストを使うと、戻り値を使っていないのが意図的であることを明示できます。

            ', + + 'persistent_curl_share_handles_title' => '持続的な cURL 共有ハンドル', + 'persistent_curl_share_handles_description' => '

            curl_share_init() と違い、curl_share_init_persistent() で作られたハンドルは PHP のリクエスト終了時に破棄されません。もし同じオプションが設定された持続的な共有ハンドルが存在すればそれが再利用されるため、cURL ハンドルを毎回初期化するコストを避けることができます。

            ', + + 'fcc_in_const_expr_title' => '定数式でのクロージャと第一級 callable', + 'fcc_in_const_expr_description' => '

            static なクロージャと第一級 callable が定数式で利用できるようになります。これはアトリビュートの引数、プロパティやパラメータのデフォルト値、定数を含みます。

            ', + + 'new_classes_title' => 'その他の新機能・改善', + 'fatal_error_backtrace' => 'Fatal エラー(実行時間の最大値の超過など)にバックトレースが含まれるようになります。', + 'const_attribute_target' => 'アトリビュートが定数を対象にすることができるようになります。', + 'override_attr_properties' => '{0} アトリビュートをプロパティに適用できるようになります。', + 'deprecated_traits_constants' => '{0} アトリビュートをトレイトと定数に使用できるようになります。', + 'asymmetric_static_properties' => 'static プロパティで非対称可視性を利用できるようになります。', + 'final_promoted_properties' => 'コンストラクタのプロモーションで、プロパティを final にすることができるようになります。', + 'closure_getCurrent' => '無名関数の再帰を簡単に行うための Closure::getCurrent() メソッドが追加されました。', + 'partitioned_cookies' => '関数 {0} と {1} で "partitioned" キーが利用できます。', + 'get_set_error_handler' => '{0} と {1} 関数が追加されました。', + 'new_dom_element_methods' => '{0} と {1} メソッドが追加されました。', + 'grapheme_levenshtein' => '{0} 関数が追加されました。', + 'delayed_target_validation' => 'PHP コアと拡張モジュールのアトリビュートを不正なターゲットに利用したときに発生するコンパイル時エラーを抑制する {0} アトリビュートが追加されました。', + + 'bc_title' => '推奨されなくなる機能・下位互換性のない変更', + 'bc_backtick_operator' => '{0} のエイリアスとして使われているバッククォート演算子は非推奨になりました。', + 'bc_non_canonical_cast_names' => '正規化されていない型名 (boolean), (integer), (double), (binary) でのキャストは非推奨になりました。 代わりにそれぞれ (bool), (int), (float), (string) を使ってください。', + 'bc_disable_classes' => 'さまざまな PHP エンジンの想定を壊してしまうため、{0} INI ディレクティブは削除されました。', + 'bc_semicolon_after_case' => 'case 文の末尾にコロンではなくセミコロンを使うことは非推奨になりました。', + 'bc_null_array_offset' => '配列のオフセットや {0} の引数に null を使うことは推奨されなくなりました。代わりに空文字列を使ってください。', + 'bc_class_alias_names' => '{0} でクラス名のエイリアスに "array" と "callable" を使うことはできなくなりました。', + 'bc_sleep_wakeup' => 'マジックメソッド {0} と {1} は soft-deprecated になりました。代わりに {2} と {3} を使ってください。', + 'bc_casting_nan' => '{0} を他の型にキャストすると警告が出るようになりました。', + 'bc_non_array_destructuring' => '配列ではない値(null を除く)を {0} や {1} で分解すると警告が出るようになりました。', + 'bc_casting_non_int_floats' => 'float(または数値形式の文字列)を int にキャストする際、その値を int として表現できない場合に警告が出るようになりました。', + + 'footer_title' => 'より良い構文、進化したパフォーマンスと型安全性。', + 'footer_description' => '

            変更点の完全な一覧はChangeLogをご覧ください。

            新機能や下位互換性のない変更の詳細については 移行ガイド を参照してください。

            ', +]; diff --git a/releases/8.5/languages/pt_BR.php b/releases/8.5/languages/pt_BR.php new file mode 100644 index 0000000000..4c0a0ddd11 --- /dev/null +++ b/releases/8.5/languages/pt_BR.php @@ -0,0 +1,79 @@ + 'PHP 8.5 é uma atualização importante da linguagem PHP, trazendo novos recursos como a extensão URI, o operador Pipe e suporte para modificar propriedades durante a clonagem.', + 'main_title' => 'Mais inteligente, mais rápido, preparado para o futuro.', + 'main_subtitle' => '

            PHP 8.5 é uma atualização importante da linguagem PHP, com novos recursos como a extensão URI, o operador Pipe e suporte para modificar propriedades durante a clonagem.

            ', + + 'whats_new' => 'Novidades no 8.5', + 'upgrade_now' => 'Atualize para PHP 8.5', + 'old_version' => 'PHP 8.4 e anteriores', + 'badge_new' => 'NOVO', + 'documentation' => 'Doc', + 'released' => 'Lançado em 20 de Novembro de 2025', + 'key_features' => 'Principais recursos do PHP 8.5', + 'key_features_description' => '

            Mais rápido, mais limpo e feito para desenvolvedores.

            ', + + 'features_pipe_operator_title' => 'Operador Pipe', + 'features_pipe_operator_description' => '

            O operador |> permite encadear funções da esquerda para a direita, passando valores entre múltiplas chamadas sem variáveis intermediárias.

            ', + 'features_persistent_curl_share_handles_title' => 'cURL Share Handles Persistentes', + 'features_persistent_curl_share_handles_description' => '

            Agora é possível manter handles compartilhados entre várias requisições PHP, evitando o custo de inicializar conexões repetidas para os mesmos hosts.

            ', + 'features_clone_with_title' => 'Clone With', + 'features_clone_with_description' => '

            Clone objetos e atualize propriedades usando a nova sintaxe clone(), facilitando o padrão “with-er” para classes readonly.

            ', + 'features_uri_extension_title' => 'Extensão URI', + 'features_uri_extension_description' => '

            O PHP 8.5 adiciona uma extensão nativa para analisar, normalizar e manipular URLs seguindo os padrões RFC 3986 e WHATWG URL.

            ', + 'features_no_discard_title' => 'Atributo #[\NoDiscard]', + 'features_no_discard_description' => '

            O atributo #[\NoDiscard] emite um aviso quando o valor de retorno não é usado, ajudando a evitar erros e aumentando a segurança de APIs.

            ', + 'features_fcc_in_const_expr_title' => 'Closures e First-Class Callables em Expressões Constantes', + 'features_fcc_in_const_expr_description' => '

            Closures estáticas e first-class callables agora podem ser usadas em expressões constantes, como parâmetros de atributos.

            ', + + 'pipe_operator_title' => 'Operador Pipe', + 'pipe_operator_description' => '

            O operador pipe permite encadear chamadas de função sem lidar com variáveis intermediárias. Isso substitui chamadas aninhadas por um fluxo mais legível de cima para baixo.

            Saiba mais sobre os bastidores desse recurso no blog da The PHP Foundation.

            ', + + 'array_first_last_title' => 'Funções array_first() e array_last()', + 'array_first_last_description' => '

            As funções array_first() e array_last() retornam, respectivamente, o primeiro ou o último valor de um array. Se o array estiver vazio, retornam null, o que facilita o uso com o operador ??.

            ', + + 'clone_with_title' => 'Clone With', + 'clone_with_description' => '

            Agora é possível modificar propriedades durante a clonagem passando um array associativo para a função clone(). Isso simplifica o padrão “with-er” para classes readonly.

            ', + + 'uri_extension_title' => 'Extensão URI', + 'uri_extension_description' => '

            A nova extensão URI, sempre disponível, fornece APIs para analisar e modificar URIs e URLs seguindo os padrões RFC 3986 e WHATWG URL.

            Baseada nas bibliotecas uriparser (RFC 3986) e Lexbor (WHATWG URL).

            Saiba mais sobre esse recurso no blog da The PHP Foundation.

            ', + + 'no_discard_title' => 'Atributo #[\NoDiscard]', + 'no_discard_description' => '

            Ao marcar uma função com #[\NoDiscard], o PHP verificará se o valor retornado foi usado e emitirá um aviso caso não seja. Isso aumenta a segurança de APIs em que o retorno é importante, mas pode ser facilmente ignorado.

            O cast (void) pode ser usado para indicar que o valor está sendo descartado intencionalmente.

            ', + + 'persistent_curl_share_handles_title' => 'cURL Share Handles Persistentes', + 'persistent_curl_share_handles_description' => '

            Diferente de curl_share_init(), handles criados com curl_share_init_persistent() não são destruídos ao final da requisição PHP. Se um handle persistente com o mesmo conjunto de opções for encontrado, ele será reutilizado, evitando o custo de inicializar o cURL a cada requisição.

            ', + + 'fcc_in_const_expr_title' => 'Closures e First-Class Callables em Expressões Constantes', + 'fcc_in_const_expr_description' => '

            Closures estáticas e first-class callables agora podem ser usadas em expressões constantes, incluindo parâmetros de atributos, valores padrão de propriedades e parâmetros, além de constantes.

            ', + + 'new_classes_title' => 'Recursos e melhorias adicionais', + 'fatal_error_backtrace' => 'Erros fatais (como tempo máximo de execução excedido) agora exibem um backtrace.', + 'const_attribute_target' => 'Atributos agora podem ter como alvo constantes.', + 'override_attr_properties' => 'Atributo {0} agora pode ser aplicado a propriedades.', + 'deprecated_traits_constants' => 'O atributo {0} pode ser usado em traits e constantes.', + 'asymmetric_static_properties' => 'Propriedades estáticas agora suportam visibilidade assimétrica.', + 'final_promoted_properties' => 'Propriedades promovidas no construtor podem ser marcadas como final.', + 'closure_getCurrent' => 'Adicionado o método Closure::getCurrent() para simplificar recursão em funções anônimas.', + 'partitioned_cookies' => 'As funções {0} e {1} agora suportam a chave "partitioned".', + 'get_set_error_handler' => 'Novas funções {0} e {1} estão disponíveis.', + 'new_dom_element_methods' => 'Novos métodos {0} e {1} estão disponíveis.', + 'grapheme_levenshtein' => 'Nova função {0}.', + 'delayed_target_validation' => 'O novo atributo {0} pode ser usado para suprimir erros de compilação de atributos do core e de extensões aplicados a alvos inválidos.', + + 'bc_title' => 'Descontinuações e quebras de compatibilidade', + 'bc_backtick_operator' => 'O operador backtick como alias de {0} foi descontinuado.', + 'bc_non_canonical_cast_names' => 'Casts não canônicos (boolean), (integer), (double) e (binary) foram descontinuados. Use (bool), (int), (float) e (string).', + 'bc_disable_classes' => 'A diretiva INI {0} foi removida por quebrar várias garantias internas do engine.', + 'bc_semicolon_after_case' => 'Finalizar declarações case com ponto e vírgula, ao invés de dois pontos, foi descontinuado.', + 'bc_null_array_offset' => 'Usar null como índice de array ou ao chamar {0} agora é descontinuado. Use string vazia.', + 'bc_class_alias_names' => 'Não é mais possível usar "array" e "callable" como nomes de alias de classe em {0}.', + 'bc_sleep_wakeup' => 'Os métodos mágicos {0} e {1} foram suavemente descontinuados. Use {2} e {3}.', + 'bc_casting_nan' => 'Agora um aviso é emitido ao converter {0} para outros tipos.', + 'bc_non_array_destructuring' => 'Desestruturar valores que não sejam arrays (exceto null) usando {0} ou {1} agora emite um aviso.', + 'bc_casting_non_int_floats' => 'Agora um aviso é emitido ao converter floats (ou strings que parecem floats) para int quando o valor não pode ser representado como inteiro.', + + 'footer_title' => 'Melhor desempenho, sintaxe aprimorada e maior segurança de tipos.', + 'footer_description' => '

            A lista completa de mudanças está registrada no ChangeLog.

            Consulte o guia de migração para uma lista detalhada de novos recursos e alterações incompatíveis.

            ', +]; diff --git a/releases/8.5/languages/ru.php b/releases/8.5/languages/ru.php new file mode 100644 index 0000000000..695ea9b579 --- /dev/null +++ b/releases/8.5/languages/ru.php @@ -0,0 +1,79 @@ + 'PHP 8.5 — большое обновление языка PHP с новыми возможностями, включая модуль URI, оператор Pipe и поддержку изменения свойств при клонировании.', + 'main_title' => 'Лучше, быстрее, надолго.', + 'main_subtitle' => '

            PHP 8.5 — большое обновление языка PHP. Оно содержит множество новых возможностей, таких как модуль URI, оператор Pipe, поддержка изменения свойств при клонировании и многое другое.

            ', + + 'whats_new' => 'Что нового в 8.5', + 'upgrade_now' => 'Переходите на PHP 8.5!', + 'old_version' => 'PHP 8.4 и ранее', + 'badge_new' => 'Новинка', + 'documentation' => 'Документация', + 'released' => 'Выпущен 20 ноября 2025', + 'key_features' => 'Основные функции PHP 8.5', + 'key_features_description' => '

            Быстрее, лучше, доступнее для разработчиков.

            ', + + 'features_pipe_operator_title' => 'Оператор Pipe', + 'features_pipe_operator_description' => '

            Оператор |> позволяет связывать вызываемые объекты слева направо, передавая значения через несколько функций без промежуточных переменных.

            ', + 'features_persistent_curl_share_handles_title' => 'Постоянные дескрипторы cURL Share', + 'features_persistent_curl_share_handles_description' => '

            Теперь дескрипторы могут сохраняться между несколькими запросами PHP, что позволяет избежать затрат на повторную инициализацию соединения с одними и теми же хостами.

            ', + 'features_clone_with_title' => 'Clone With', + 'features_clone_with_description' => '

            Клонируйте объекты и обновляйте свойства с помощью нового синтаксиса clone(), который упрощает использование шаблона «with-er» для классов readonly.

            ', + 'features_uri_extension_title' => 'Модуль URI', + 'features_uri_extension_description' => '

            В PHP 8.5 добавлен модуль URI для анализа, нормализации и обработки URL-адресов в соответствии со стандартами RFC 3986 и WHATWG URL.

            ', + 'features_no_discard_title' => 'Атрибут #[\NoDiscard]', + 'features_no_discard_description' => '

            Атрибут #[\NoDiscard] выдаёт предупреждение, если возвращаемое значение не используется, что помогает предотвратить ошибки и повысить общую безопасность API.

            ', + 'features_fcc_in_const_expr_title' => 'Замыкания и вызовы первого класса в константных выражениях', + 'features_fcc_in_const_expr_description' => '

            Статические замыкания и вызываемые объекты первого класса теперь могут использоваться в константных выражениях, таких как параметры атрибутов.

            ', + + 'pipe_operator_title' => 'Оператор Pipe', + 'pipe_operator_description' => '

            Оператор Pipe позволяет связывать вызовы функций в цепочку без использования промежуточных переменных. Позволяет заменить множество «вложенных вызовов» цепочкой.

            Узнайте больше об этой функции в блоге PHP Foundation.

            ', + + 'array_first_last_title' => 'Функции array_first() и array_last()', + 'array_first_last_description' => '

            Функции array_first() и array_last() возвращают первое или последнее значение массива, соответственно. Если массив пустой, возвращается null (что упрощает работу с оператором ??).

            ', + + 'clone_with_title' => 'Clone With', + 'clone_with_description' => '

            Теперь можно обновлять свойства во время клонирования объектов, передавая ассоциативный массив в функцию clone(). Это позволит напрямую поддерживать паттерн «with-er» для классов readonly.

            ', + + 'uri_extension_title' => 'Модуль URI', + 'uri_extension_description' => '

            Встроенный модуль URI предоставляет API для безопасного анализа и изменения URI и URL в соответствии со стандартами RFC 3986 и WHATWG URL.

            Работает на базе библиотек uriparser (RFC 3986) и Lexbor (WHATWG URL).

            Узнайте больше об этой функции в блоге PHP Foundation.

            ', + + 'no_discard_title' => 'Атрибут #[\NoDiscard]', + 'no_discard_description' => '

            Добавив атрибут #[\NoDiscard] к функции, PHP будет проверять, используется ли возвращаемое значение, и выдавать предупреждение, если это не так. Позволяет повысить безопасность API, где возвращаемое значение важно, но про него можно легко забыть.

            Связанное приведение типов (void) может использоваться для указания, что значение намеренно не используется.

            ', + + 'persistent_curl_share_handles_title' => 'Постоянные дескрипторы cURL Share', + 'persistent_curl_share_handles_description' => '

            В отличие от curl_share_init(), дескрипторы, созданные с помощью curl_share_init_persistent(), не будут уничтожены в конце запроса PHP. Если найден постоянный дескриптор с тем же набором параметров, он будет использован повторно, что позволит избежать затрат на повторную инициализацию дескрипторов cURL при каждом запросе.', + + 'fcc_in_const_expr_title' => 'Замыкания и вызовы первого класса в константных выражениях', + 'fcc_in_const_expr_description' => '

            Статические замыкания и вызываемые объекты первого класса теперь могут использоваться в константных выражениях. Сюда входят параметры атрибутов, значения по умолчанию свойств и параметров, а также константы.

            ', + + 'new_classes_title' => 'Дополнительные функции и улучшения', + 'fatal_error_backtrace' => 'Фатальные ошибки (такие как превышение максимального времени выполнения) теперь содержат обратную трассировку.', + 'const_attribute_target' => 'Атрибуты теперь можно использовать с константами.', + 'override_attr_properties' => 'Атрибут {0} теперь может использоваться со свойствами.', + 'deprecated_traits_constants' => 'Атрибут {0} теперь может использоваться с трейтами и константами.', + 'asymmetric_static_properties' => 'Статические свойства теперь поддерживают асимметричную видимость.', + 'final_promoted_properties' => 'Свойства могут быть помечены окончательными (final) с помощью свойств в конструкторе.', + 'closure_getCurrent' => 'Добавлен метод Closure::getCurrent() для упрощения рекурсии в анонимных функциях.', + 'partitioned_cookies' => 'Функции {0} и {1} теперь поддерживают ключ "partitioned".', + 'get_set_error_handler' => 'Добавлены функции {0} и {1}.', + 'new_dom_element_methods' => 'Добавлены методы {0} и {1}.', + 'grapheme_levenshtein' => 'Добавлена функция {0}.', + 'delayed_target_validation' => 'Добавлен атрибут {0}, который можно использовать для подавления ошибок компиляции атрибутов ядра и модулей, которые используются на недопустимых целях.', + + 'bc_title' => 'Устаревшая функциональность и изменения в обратной совместимости', + 'bc_backtick_operator' => 'Обратный апостроф (`) как псевдоним для {0} больше не поддерживается.', + 'bc_non_canonical_cast_names' => 'Неканонические имена типов (boolean), (integer), (double) и (binary) больше не поддерживаются. Вместо них используйте соответственно (bool), (int), (float) и (string).', + 'bc_disable_classes' => 'INI-настройка {0} была удалена, так как она приводила к нарушению различных допущений движка.', + 'bc_semicolon_after_case' => 'Завершение операторов case точкой с запятой вместо двоеточия больше не поддерживается.', + 'bc_null_array_offset' => 'Использование null в качестве смещения массива или при вызове {0} объявлено устаревшим. Вместо этого используйте пустую строку.', + 'bc_class_alias_names' => 'В {0} больше нельзя использовать массивы и замыкания в качестве псевдонимов классов.', + 'bc_sleep_wakeup' => 'Магические методы {0} и {1} были мягко объявлены устаревшими. Вместо них следует использовать магические методы {2} и {3}.', + 'bc_casting_nan' => 'Теперь при преобразовании {0} в другие типы выдаётся предупреждение.', + 'bc_non_array_destructuring' => 'Деструктуризация значений, не являющихся массивами (кроме null), с помощью {0} или {1} теперь выдаёт предупреждение.', + 'bc_casting_non_int_floats' => 'Теперь выдаётся предупреждение при преобразовании чисел с плавающей точкой (или строк, похожих на числа с плавающей точкой) в целые числа (int), если они не могут быть представлены в виде целого числа.', + + 'footer_title' => 'Выше производительность, лучше синтаксис, надёжнее система типов.', + 'footer_description' => '

            Список изменений перечислен на странице ChangeLog.

            Руководство по миграции доступно в разделе документации. Ознакомьтесь с ним, чтобы узнать обо всех новых возможностях и изменениях, затрагивающих обратную совместимость.

            ', +]; diff --git a/releases/8.5/languages/tr.php b/releases/8.5/languages/tr.php new file mode 100644 index 0000000000..7df1c908c9 --- /dev/null +++ b/releases/8.5/languages/tr.php @@ -0,0 +1,79 @@ + 'PHP 8.5, PHP dilinin büyük bir güncellemesidir ve URI Uzantısı, Pipe Operatörü ve nesne klonlama sırasında özellikleri değiştirme desteği gibi yeni özellikler içerir.', + 'main_title' => 'Daha Akıllı, Daha Hızlı, Yarına Hazır.', + 'main_subtitle' => '

            PHP 8.5, PHP dilinin büyük bir güncellemesidir, URI uzantısı, Pipe operatörü ve klonlama sırasında özellikleri değiştirme desteği gibi yeni özellikler içerir.

            ', + + 'whats_new' => '8.5\'te Neler Yeni', + 'upgrade_now' => 'PHP 8.5\'e Yükseltin', + 'old_version' => 'PHP 8.4 ve öncesi', + 'badge_new' => 'YENİ', + 'documentation' => 'Doküman', + 'released' => 'Yayınlanma: 20 Kasım 2025', + 'key_features' => 'PHP 8.5’in Temel Özellikleri', + 'key_features_description' => '

            Daha hızlı, daha temiz ve geliştiriciler için tasarlanmış.

            ', + + 'features_pipe_operator_title' => 'Pipe Operatörü', + 'features_pipe_operator_description' => '

            |> operatörü, fonksiyonları soldan sağa zincirlemenizi sağlar ve değerleri ara değişken kullanmadan sorunsuz şekilde birden fazla fonksiyona geçirir.

            ', + 'features_persistent_curl_share_handles_title' => 'Kalıcı cURL Share Handle’lar', + 'features_persistent_curl_share_handles_description' => '

            Handle’lar artık birden fazla PHP isteği boyunca kalıcı olabilir, aynı hostlara tekrar bağlantı başlatma maliyetini ortadan kaldırır.

            ', + 'features_clone_with_title' => 'Clone With', + 'features_clone_with_description' => '

            Nesneleri klonlarken özellikleri yeni clone() sözdizimi ile güncellemek mümkündür, bu da readonly sınıflar için "with-er" desenini basitleştirir.

            ', + 'features_uri_extension_title' => 'URI Uzantısı', + 'features_uri_extension_description' => '

            PHP 8.5, RFC 3986 ve WHATWG URL standartlarına uygun URL’leri ayrıştırmak, normalize etmek ve yönetmek için yerleşik bir URI uzantısı ekler.

            ', + 'features_no_discard_title' => '#[\NoDiscard] Özelliği', + 'features_no_discard_description' => '

            #[\NoDiscard] özelliği, döndürülen değer kullanılmadığında uyarı verir, böylece hataları önler ve API güvenliğini artırır.

            ', + 'features_fcc_in_const_expr_title' => 'Sabit İfadelerde Closure’lar ve Birinci Sınıf Callable’lar', + 'features_fcc_in_const_expr_description' => '

            Artık statik closure’lar ve birinci sınıf callable’lar sabit ifadelerde kullanılabilir, örneğin attribute parametrelerinde.

            ', + + 'pipe_operator_title' => 'Pipe Operatörü', + 'pipe_operator_description' => '

            Pipe operatörü, fonksiyon çağrılarını ara değişkenlerle uğraşmadan zincirlemenizi sağlar. Bu, iç içe geçmiş birçok çağrıyı ileri doğru okunabilecek bir zincir ile değiştirmenize olanak tanır.

            Bu özelliğin arka planını öğrenmek için PHP Foundation blogu’na bakabilirsiniz.

            ', + + 'array_first_last_title' => 'array_first() ve array_last() fonksiyonları', + 'array_first_last_description' => '

            array_first() ve array_last() fonksiyonları sırasıyla bir dizinin ilk veya son değerini döndürür. Eğer dizi boşsa null döner (bu, ?? operatörü ile kullanımı kolaylaştırır).

            ', + + 'clone_with_title' => 'Clone With', + 'clone_with_description' => '

            Artık nesne klonlama sırasında clone() fonksiyonuna bir ilişkisel dizi vererek özellikleri güncellemek mümkündür. Bu, readonly sınıflar için "with-er" desenini basitleştirir.

            ', + + 'uri_extension_title' => 'URI Uzantısı', + 'uri_extension_description' => '

            Yeni her zaman kullanılabilir URI uzantısı, URI ve URL’leri güvenli bir şekilde ayrıştırmak ve düzenlemek için API sağlar. RFC 3986 ve WHATWG URL standartlarına uygundur.

            uriparser (RFC 3986) ve Lexbor (WHATWG URL) kütüphaneleri tarafından desteklenmektedir.

            Bu özelliğin arka planını öğrenmek için PHP Foundation blogu’na bakabilirsiniz.

            ', + + 'no_discard_title' => '#[\NoDiscard] Özelliği', + 'no_discard_description' => '

            Bir fonksiyona #[\NoDiscard] ekleyerek PHP, döndürülen değerin kullanılıp kullanılmadığını kontrol eder ve kullanılmadığında uyarı verir. Bu, döndürülen değerin önemli olduğu API’lerde hataları önler.

            ', + + 'persistent_curl_share_handles_title' => 'Kalıcı cURL Paylaşılan Handle’lar', + 'persistent_curl_share_handles_description' => '

            curl_share_init() ile farklı olarak, curl_share_init_persistent() ile oluşturulan handle’lar PHP isteği sonunda yok edilmez. Eğer aynı paylaşılan ayarlara sahip bir persistent handle bulunursa tekrar kullanılır, cURL handle’larının her seferinde başlatılma maliyeti ortadan kalkar.

            ', + + 'fcc_in_const_expr_title' => 'Sabit İfadelerde Closure’lar ve Birinci Sınıf Callable’lar', + 'fcc_in_const_expr_description' => '

            Artık statik closure’lar ve birinci sınıf callable’lar sabit ifadelerde kullanılabilir. Bu, attribute parametreleri, özelliklerin ve parametrelerin varsayılan değerleri ve sabitler için geçerlidir.

            ', + + 'new_classes_title' => 'Ek özellikler ve iyileştirmeler', + 'fatal_error_backtrace' => 'Önemli Hatalar (ör. maksimum yürütme süresini aşmak) artık bir geri izleme içerir.', + 'const_attribute_target' => 'Öznitelikler artık sabitleri hedefleyebilir.', + 'override_attr_properties' => '{0} özniteliği artık özelliklere uygulanabilir.', + 'deprecated_traits_constants' => '{0} özniteliği trait’lerde ve sabitlerde kullanılabilir.', + 'asymmetric_static_properties' => 'Statik özellikler artık asimetrik görünürlüğü destekler.', + 'final_promoted_properties' => 'Özellikler, constructor property promotion ile final olarak işaretlenebilir.', + 'closure_getCurrent' => 'Anonim fonksiyonlarda özyinelemeyi basitleştirmek için Closure::getCurrent() metodu eklendi.', + 'partitioned_cookies' => 'Fonksiyonlar {0} ve {1} artık "partitioned" anahtarını destekliyor.', + 'get_set_error_handler' => 'Yeni {0} ve {1} fonksiyonları mevcut.', + 'new_dom_element_methods' => 'Yeni {0} ve {1} metodları mevcut.', + 'grapheme_levenshtein' => '{0} fonksiyon eklendi.', + 'delayed_target_validation' => 'Yeni {0} özniteliği, geçersiz hedefler üzerinde core ve extension özniteliklerinin derleme zamanında hata vermesini engellemek için kullanılabilir.', + + 'bc_title' => 'Kaldırılan ve geriye uyumluluk kıran değişiklikler', + 'bc_backtick_operator' => '{0} için alias olarak kullanılan backtick operatörü kaldırıldı.', + 'bc_non_canonical_cast_names' => 'Canonical olmayan cast isimleri (boolean), (integer), (double) ve (binary) artık kullanımdan kaldırıldı. Yerine sırasıyla (bool), (int), (float) ve (string) kullanılmalıdır.', + 'bc_disable_classes' => '{0} INI ayarı kaldırıldı çünkü çeşitli motor varsayımları bozulmasına neden olur.', + 'bc_semicolon_after_case' => 'case ifadelerinin noktalı virgül ile bitirilmesi artık önerilmez.', + 'bc_null_array_offset' => '{0} çağırılırken veya array offset olarak null kullanımı artık önerilmez. Bunun yerine boş string kullanın.', + 'bc_class_alias_names' => '{0} içinde "array" ve "callable" alias isimlerini artık kullanmak mümkün değil.', + 'bc_sleep_wakeup' => '{0} ve {1} sihirli metodları artık soft-deprecated. {2} ve {3} metodları yerine kullanılmalıdır.', + 'bc_casting_nan' => '{0} tür dönüşümü sırasında artık uyarı verilir.', + 'bc_non_array_destructuring' => 'Array olmayan değerleri (sadece null dışında) {0} veya {1} kullanarak ayırmak artık uyarı verir.', + 'bc_casting_non_int_floats' => 'Float’ları (veya float gibi görünen string’leri) int’e dönüştürürken artık uyarı verilir.', + + 'footer_title' => 'Daha iyi sözdizimi, geliştirilmiş performans ve tip güvenliği.', + 'footer_description' => '

            Tüm değişikliklerin tam listesi ChangeLog’da kayıtlıdır.

            Yeni özellikler ve geriye uyumsuz değişiklikler için ayrıntılı listeye göç rehberinden bakabilirsiniz.

            ', +]; diff --git a/releases/8.5/languages/uk.php b/releases/8.5/languages/uk.php new file mode 100644 index 0000000000..9553251c70 --- /dev/null +++ b/releases/8.5/languages/uk.php @@ -0,0 +1,79 @@ + 'PHP 8.5 — це значне оновлення мови PHP, яке містить нові можливості, зокрема розширення URI, оператор Pipe та підтримку модифікації властивостей під час клонування.', + 'main_title' => 'Розумніший, швидший, створений для майбутнього.', + 'main_subtitle' => '

            PHP 8.5 — це значне оновлення мови PHP, яке містить нові можливості, зокрема розширення URI, оператор Pipe та підтримку модифікації властивостей під час клонування.

            ', + + 'whats_new' => 'Що нового у версії 8.5', + 'upgrade_now' => 'Оновіться до PHP 8.5', + 'old_version' => 'PHP 8.4 і попередні версії', + 'badge_new' => 'Новинка', + 'documentation' => 'Документація', + 'released' => 'Випущено 20 листопада 2025 р.', + 'key_features' => 'Ключові можливості PHP 8.5', + 'key_features_description' => '

            Швидший, зрозуміліший, створений для розробників.

            ', + + 'features_pipe_operator_title' => 'Оператор Pipe', + 'features_pipe_operator_description' => '

            Оператор |> дозволяє об\'єднувати виклики у ланцюжок зліва направо, плавно передаючи значення через кілька функцій без проміжних змінних.

            ', + 'features_persistent_curl_share_handles_title' => 'Постійні cURL-дескриптори', + 'features_persistent_curl_share_handles_description' => '

            Дескриптори тепер можуть зберігатися між декількома PHP-запитами, що дозволяє уникнути витрат на повторну ініціалізацію з\'єднання з тими самими хостами.

            ', + 'features_clone_with_title' => 'Конструкція Clone With', + 'features_clone_with_description' => '

            Клонуйте об\'єкти та оновлюйте властивості за допомогою нової синтаксичної конструкції clone(), яка спрощує використання шаблону «with-er» для readonly класів.

            ', + 'features_uri_extension_title' => 'Розширення URI', + 'features_uri_extension_description' => '

            У PHP 8.5 додано розширення URI для аналізу, нормалізації та обробки URL-адрес відповідно до стандартів RFC 3986 і WHATWG URL.

            ', + 'features_no_discard_title' => 'Атрибут #[\NoDiscard]', + 'features_no_discard_description' => '

            Атрибут #[\NoDiscard] попереджає, коли повернене значення не використовується, допомагаючи запобігти помилкам і підвищити загальну безпеку API.

            ', + 'features_fcc_in_const_expr_title' => 'Замикання та callable-вирази першого класу в константних виразах', + 'features_fcc_in_const_expr_description' => '

            Статичні замикання та callable-вирази першого класу тепер можна використовувати в константних виразах, таких як параметри атрибутів.

            ', + + 'pipe_operator_title' => 'Оператор Pipe', + 'pipe_operator_description' => '

            Оператор Pipe дозволяє об\'єднувати виклики функцій у ланцюжок без використання проміжних змінних. Це дозволяє замінити багато «вкладених викликів» ланцюжком, який можна читати вперед, а не зсередини назовні.

            Дізнайтеся більше про історію створення цієї функції у блозі PHP Foundation.

            ', + + 'array_first_last_title' => 'Функції array_first() і array_last()', + 'array_first_last_description' => '

            Функції array_first() і array_last() повертають перше або останнє значення масиву відповідно. Якщо масив порожній, повертається null (що полегшує компонування з оператором ??).

            ', + + 'clone_with_title' => 'Конструкція Clone With', + 'clone_with_description' => '

            Тепер можна оновлювати властивості під час клонування об\'єктів, передаючи асоціативний масив до функції clone(). Це забезпечує пряму підтримку шаблону «with-er» для readonly класів.

            ', + + 'uri_extension_title' => 'Розширення URI', + 'uri_extension_description' => '

            Нове вбудоване розширення URI надає API для безпечного аналізу та зміни URI та URL згідно зі стандартами RFC 3986 і WHATWG URL.

            Працює на основі бібліотек uriparser (RFC 3986) і Lexbor (WHATWG URL).

            Дізнайтеся більше про історію створення цієї функції у блозі PHP Foundation.

            ', + + 'no_discard_title' => 'Атрибут #[\NoDiscard]', + 'no_discard_description' => '

            Після додавання атрибуту #[\NoDiscard] до функції PHP перевірятиме, чи використовується повернене значення, і викликатиме попередження, якщо ні. Це дозволяє підвищити безпеку API, де повернене значення є важливим, але його можна випадково проігнорувати.

            Відповідне приведення типу (void) може використовуватися як вказівка, що значення не використовується навмисно.

            ', + + 'persistent_curl_share_handles_title' => 'Постійні cURL-дескриптори', + 'persistent_curl_share_handles_description' => '

            На відміну від curl_share_init(), дескриптори, створені функцією curl_share_init_persistent(), не будуть знищуватися після завершення PHP-запиту. Якщо буде знайдено постійний дескриптор з тим самим набором опцій, його буде використано повторно, що дозволить уникнути витрат на ініціалізацію cURL-дескрипторів.

            ', + + 'fcc_in_const_expr_title' => 'Замикання та callable-вирази першого класу в константних виразах', + 'fcc_in_const_expr_description' => '

            Статичні замикання та callable-вирази першого класу тепер можна використовувати в константних виразах. Це стосується параметрів атрибутів, значень за замовчуванням для властивостей і параметрів, а також констант.

            ', + + 'new_classes_title' => 'Додаткові можливості та покращення', + 'fatal_error_backtrace' => 'Фатальні помилки (наприклад, перевищення максимального часу виконання) тепер містять зворотне трасування.', + 'const_attribute_target' => 'Атрибути тепер можна застосовувати до констант.', + 'override_attr_properties' => 'Атрибут {0} тепер можна застосовувати до властивостей.', + 'deprecated_traits_constants' => 'Атрибут {0} тепер можна застосовувати до трейтів і констант.', + 'asymmetric_static_properties' => 'Статичні властивості тепер підтримують асиметричну область видимості.', + 'final_promoted_properties' => 'Властивості тепер можна позначати як final, оголошуючи їх за допомогою конструктора.', + 'closure_getCurrent' => 'Додано метод Closure::getCurrent(), який спрощує використання рекурсії в анонімних функціях.', + 'partitioned_cookies' => 'Функції {0} та {1} тепер підтримують ключ "partitioned".', + 'get_set_error_handler' => 'Доступні нові функції {0} і {1}.', + 'new_dom_element_methods' => 'Доступні нові методи {0} і {1}.', + 'grapheme_levenshtein' => 'Додано функцію {0}.', + 'delayed_target_validation' => 'Новий атрибут {0} дозволяє усунути помилки компіляції, що спричинені застосуванням атрибутів ядра та розширень для цілей, для яких вони не призначені.', + + 'bc_title' => 'Застаріла функціональність і зміни у зворотній сумісності', + 'bc_backtick_operator' => 'Можливість використання зворотного апострофу як псевдоніма функції {0} оголошено застарілою.', + 'bc_non_canonical_cast_names' => 'Неканонічні імена типів (boolean), (integer), (double) та (binary) оголошено застарілими. Замість них використовуйте відповідно (bool), (int), (float) і (string).', + 'bc_disable_classes' => 'Налаштування INI {0} вилучено, оскільки його використання призводило до нестабільної роботи рушія.', + 'bc_semicolon_after_case' => 'Можливість використання крапки з комою для завершення операторів case замість двокрапки оголошено застарілою.', + 'bc_null_array_offset' => 'Можливість використання null у якості ключа масиву чи аргументу функції {0} оголошено застарілою. Натомість використовуйте порожній рядок.', + 'bc_class_alias_names' => 'Ключові слова «array» і «callable» більше не можна використовувати як псевдоніми класів у функції {0}.', + 'bc_sleep_wakeup' => 'Магічні методи {0} і {1} оголошено нерекомендованими. Натомість використувуйте магічні методи {2} та {3}.', + 'bc_casting_nan' => 'Приведення {0} до інших типів тепер викликає попередження.', + 'bc_non_array_destructuring' => 'Деструктурування значень, що не є масивами (крім null), за допомогою {0} або {1} тепер викликає попередження.', + 'bc_casting_non_int_floats' => 'Приведення чисел з плаваючою крапкою (або рядків, що їх представляють) до цілого типу тепер викликає попередження, якщо їх неможливо представити як ціле число.', + + 'footer_title' => 'Кращий синтаксис, покращена продуктивність і безпека типів.', + 'footer_description' => '

            Повний перелік змін описано на сторінці ChangeLog.

            Будь ласка, ознайомтеся з посібником з міграції, щоб отримати детальніший список нових функцій і несумісних змін.

            ', +]; diff --git a/releases/8.5/languages/zh.php b/releases/8.5/languages/zh.php new file mode 100644 index 0000000000..f37569e031 --- /dev/null +++ b/releases/8.5/languages/zh.php @@ -0,0 +1,83 @@ + 'PHP 8.5 是一次 PHP 语言的重要更新,带来了 URI 扩展、管道操作符,以及支持在克隆对象时修改属性等新功能。', + 'main_title' => '更智能、更快速,为未来而生。', + 'main_subtitle' => '

            PHP 8.5 是 PHP 语言的一次重大更新,新增了 URI 扩展管道操作符,以及对克隆时修改属性的支持。

            ', + + 'whats_new' => '8.5 中的新特性', + 'upgrade_now' => '升级到 PHP 8.5', + 'old_version' => 'PHP 8.4 及更早版本', + 'badge_new' => 'NEW', + 'documentation' => '文档', + 'released' => '发布于 2025 年 11 月 20 日', + 'key_features' => 'PHP 8.5 的主要特性', + 'key_features_description' => '

            更快更简洁为开发者而生

            ', + + 'features_pipe_operator_title' => '管道操作符', + 'features_pipe_operator_description' => '

            |> 操作符允许从左到右连接可调用项,让数值在多个函数间顺畅传递,无需中间变量。

            ', + 'features_persistent_curl_share_handles_title' => '持久化 cURL Share 句柄', + 'features_persistent_curl_share_handles_description' => '

            句柄现在可以在多个 PHP 请求之间保持,不再需要重复初始化到同一主机的连接。

            ', + 'features_clone_with_title' => 'Clone With', + 'features_clone_with_description' => '

            使用新的 clone() 语法可以克隆对象并更新属性,让 readonly 类的 "with-er" 模式变得简单。

            ', + 'features_uri_extension_title' => 'URI 扩展', + 'features_uri_extension_description' => '

            PHP 8.5 增加了内置的 URI 扩展,用于按照 RFC 3986WHATWG URL 标准解析、规范化和处理 URL。

            ', + 'features_no_discard_title' => '#[\NoDiscard] 属性', + 'features_no_discard_description' => '

            #[\NoDiscard] 属性会在返回值未被使用时发出警告,有助于避免错误,提高 API 安全性。

            ', + 'features_fcc_in_const_expr_title' => '常量表达式中的闭包和 First-class 可调用', + 'features_fcc_in_const_expr_description' => '

            静态闭包和 First-class 可调用现在可以用于常量表达式,例如属性参数。

            ', + + 'pipe_operator_title' => '管道操作符', + 'pipe_operator_description' => '

            管道操作符允许将多个函数调用串联起来,而无需处理中间变量。它可以将许多“嵌套调用”替换成从左到右可读的链式结构。

            The PHP Foundation 的博客中了解该特性的更多背景。

            ', + + 'array_first_last_title' => 'array_first() 与 array_last() 函数', + 'array_first_last_description' => '

            array_first()array_last() 分别返回数组的第一个或最后一个值。若数组为空,则返回 null(方便与 ?? 操作符组合)。

            ', + + 'clone_with_title' => 'Clone With', + 'clone_with_description' => '

            现在可以在对象克隆时通过向 clone() 传递关联数组来更新属性。这让 readonly 类的 with-er 模式变得简单明了。

            ', + + 'uri_extension_title' => 'URI 扩展', + 'uri_extension_description' => '

            全新的、始终可用的 URI 扩展提供了一组 API,可根据 RFC 3986 和 WHATWG URL 标准安全地解析和修改 URI 与 URL。

            uriparser(RFC 3986)和 Lexbor(WHATWG URL)库驱动。

            The PHP Foundation 的博客中了解更多背景。

            ', + + 'no_discard_title' => '#[\NoDiscard] 属性', + 'no_discard_description' => '

            为函数添加 #[\NoDiscard] 属性后,PHP 会检查返回值是否被使用,若未使用则发出警告。这样可以提高 API 的安全性,避免关键返回值被忽略。

            可以使用 (void) 来显式表示“我就是不使用这个结果”。

            ', + + 'persistent_curl_share_handles_title' => '持久化 cURL Share 句柄', + 'persistent_curl_share_handles_description' => '

            curl_share_init() 不同,由 curl_share_init_persistent() 创建的句柄在请求结束时不会销毁。如果发现具有相同共享选项的持久化句柄,将会复用,从而避免每次初始化 cURL 句柄的开销。

            ', + + 'fcc_in_const_expr_title' => '常量表达式中的闭包和 First-class 可调用', + 'fcc_in_const_expr_description' => '

            静态闭包和 First-class 可调用现在可以用于常量表达式,包括属性参数、属性和参数默认值以及常量等。

            ', + + 'new_classes_title' => '更多特性与改进', + 'fatal_error_backtrace' => '致命错误(如超出最大执行时间)现在会包含回溯信息。', + 'const_attribute_target' => '属性现在可以作用于常量。', + 'override_attr_properties' => '{0} 属性现在可以用于类属性。', + 'deprecated_traits_constants' => '{0} 属性现在可以用于 traits 和常量。', + 'asymmetric_static_properties' => '静态属性现在支持不对称可见性。', + 'final_promoted_properties' => '属性在构造器属性提升中可以被标记为 final。', + 'closure_getCurrent' => '新增 Closure::getCurrent() 方法,简化匿名函数的递归。', + 'partitioned_cookies' => '函数 {0} 和 {1} 现在支持 "partitioned" 键。', + 'get_set_error_handler' => '新增 {0} 与 {1} 函数。', + 'new_dom_element_methods' => '新增 {0} 与 {1} 方法。', + 'grapheme_levenshtein' => '新增 {0} 函数。', + 'delayed_target_validation' => '新增 {0} 属性,可用于抑制在无效目标上使用核心/扩展属性时的编译期错误。', + + 'bc_title' => '弃用和向后不兼容', + 'bc_backtick_operator' => '作为 {0} 别名的反引号操作符已被弃用。', + 'bc_non_canonical_cast_names' => '非标准强制转换名称 (boolean)(integer)(double)(binary) 已弃用,请改用 (bool)(int)(float)(string)。', + 'bc_disable_classes' => '{0} INI 选项已被移除,因为它会破坏引擎的一些基本假设。', + 'bc_semicolon_after_case' => '以分号而非冒号结束 case 语句已被弃用。', + 'bc_null_array_offset' => '使用 null 作为数组偏移量或调用 {0} 时已被弃用,请改用空字符串。', + 'bc_class_alias_names' => '在 {0} 中不再允许将 "array" 和 "callable" 用作类别名。', + 'bc_sleep_wakeup' => '{0} 与 {1} 魔术方法已被软弃用,请改用 {2} 与 {3}。', + 'bc_casting_nan' => '将 {0} 转换为其他类型时现在会发出警告。', + 'bc_non_array_destructuring' => '对非数组值(除 null)使用 {0} 或 {1} 进行解构现在会触发警告。', + 'bc_casting_non_int_floats' => '当浮点数(或看起来像浮点数的字符串)无法表示为 int 时,强制转换为 int 会发出警告。', + + 'footer_title' => '更好的语法、更高的性能以及更强的类型安全性。', + 'footer_description' => '

            完整的变更列表记录在 ChangeLog 中。

            如需查看详细的新特性与兼容性变更,请查阅迁移指南

            ', +]; diff --git a/releases/8.5/pt_BR.php b/releases/8.5/pt_BR.php new file mode 100644 index 0000000000..be7e4f4750 --- /dev/null +++ b/releases/8.5/pt_BR.php @@ -0,0 +1,5 @@ + + +
            + + + + + + + + + + + + + + +
            +
            + + + + +
            + + +

            + + +
            + + +
            +
            +
            + + +
            + + +
            +

            + +
            + +
            +
            +
            +
            +
            + + + + + + + +
            +
            +
            + +
            +
            +
            + + + + + + + +
            +
            +
            + +
            +
            +
            + + + + + + +
            +
            +
            + +
            +
            +
            + + + + + + + +
            +
            +
            + +
            +
            +
            + + + + + + + +
            +
            +
            + +
            +
            +
            + + + + + + + +
            +
            +
            +
            +
            +
            + + +
            +
            +

            + +
            + +
            +
            +
            +
            +
            + +
            + +
            + +
            + +
            +
            +
            + PHP 8.5 + + RFC +
            + +
            + getHost()); +// string(7) "php.net" +PHP + ); ?> +
            +
            +
            +
            + + +
            +
            +

            + +
            + +
            +
            +
            +
            +
            + +
            + +
            + +
            + +
            +
            +
            + PHP 8.5 + + RFC +
            + +
            + trim(...) + |> (fn($str) => str_replace(' ', '-', $str)) + |> (fn($str) => str_replace('.', '', $str)) + |> strtolower(...); + +var_dump($slug); +// string(15) "php-85-released" +PHP + ); ?> +
            +
            +
            +
            + + +
            +
            +

            + +
            + +
            +
            +
            +
            +
            + +
            + +
            + withAlpha(128); +PHP + ); ?> +
            + +
            +
            +
            + PHP 8.5 + + RFC +
            + +
            + $alpha, + ]); + } +} + +$blue = new Color(79, 91, 147); +$transparentBlue = $blue->withAlpha(128); +PHP + ); ?> +
            +
            +
            +
            + + +
            +
            +

            + +
            + +
            +
            +
            +
            +
            + +
            + +
            + +
            + +
            +
            +
            + PHP 8.5 + + RFC + +
            + +
            + +
            +
            +
            +
            + + +
            +
            +

            + +
            + +
            +
            +
            +
            +
            + +
            + +
            + +
            + +
            +
            +
            + PHP 8.5 + + RFC + RFC +
            + +
            + user === $post->getAuthor(); + })] + public function update( + Request $request, + Post $post, + ): Response { + // ... + } +} +PHP + ); ?> +
            +
            +
            +
            + + +
            +
            +

            + +
            + +
            +
            +
            +
            +
            + +
            + +
            + +
            + +
            +
            +
            + PHP 8.5 + + RFC + RFC + +
            + +
            + +
            +
            +
            +
            + + +
            +
            +

            + +
            + +
            +
            +
            +
            +
            + +
            + +
            + +
            + +
            +
            +
            + PHP 8.5 + + RFC +
            + +
            + +
            +
            +
            +
            + + +
            +
            +
            +
            +

            +
              +
            • +
            • +
            • #[\Override]']) ?>
            • +
            • #[\Deprecated]']) ?>
            • +
            • +
            • +
            • +
            • setcookie()', + 'setrawcookie()', + ]) ?>
            • +
            • get_error_handler()', + 'get_exception_handler()', + ]) ?>
            • +
            • Dom\Element::getElementsByClassName()', + 'Dom\Element::insertAdjacentHTML()', + ]) ?>
            • +
            • grapheme_levenshtein()']) ?>
            • +
            • #[\DelayedTargetValidation]']) ?>
            • +
            +
            +
            +

            +
              +
            • shell_exec()' + ]) ?>
            • +
            • +
            • disable_classes']) ?>
            • +
            • +
            • array_key_exists()' + ]) ?>
            • +
            • class_alias()' + ]) ?>
            • +
            • __sleep()', + '__wakeup()', + '__serialize()', + '__unserialize()', + ]) ?>
            • +
            • NAN']) ?>
            • +
            • []', 'list()']) ?>
            • +
            • +
            +
            +
            +
            +
            + + + + + + + + + + + + + + + + + + + false]); diff --git a/releases/8.5/ru.php b/releases/8.5/ru.php new file mode 100644 index 0000000000..4aefaf9a8c --- /dev/null +++ b/releases/8.5/ru.php @@ -0,0 +1,5 @@ + +

            PHP 8.0.11 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.11. This is a security release fixing CVE-2021-21706.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.11 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.12 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.12. This is a security fix release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.12 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.13 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.13. This is a security release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.13 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.14 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.14. This is a bug fix release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.14 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.15 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.15. This is a bug fix release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.15 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.16 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.16. This is a security release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.16 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.17 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.17. This is a bug fix release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.17 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.18 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.18. This is a bug fix release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.18 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.19 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.19. This is a bug fix release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.19 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.20 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.20. This is a security release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.20 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.21 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.21. This is a bug fix release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.21 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.22 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.22. This is a bug fix release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.22 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.23 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.23. This is a security release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.23 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.24 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.24. This is a security release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.24 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.25 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.25. This is a security fix release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.25 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.26 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.26. This is a bug fix release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.26 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            Please note, this is the last bug-fix release for the 8.0.x series. +Security fix support will continue until 26 Nov 2023. +For more information, please check our +Supported Versions page.

            + +

            PHP 8.0.27 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.27. This is a security release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.27 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.28 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.28. This is a security release +that addresses CVE-2023-0567, CVE-2023-0568, and CVE-2023-0662

            + +

            All PHP 8.0 users are advised to upgrade to this version.

            + +

            For source downloads of PHP 8.0.28 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.29 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.29. This is a security release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.29 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.0.30 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.0.30. This is a security release.

            + +

            All PHP 8.0 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.0.30 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.0 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.0. This release marks the latest minor release of the PHP language.

            + +

            PHP 8.1 comes with numerous improvements and new features such as:

            + + +

            For source downloads of PHP 8.1.0 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            The migration guide is available in the PHP Manual. +Please consult it for the detailed list of new features and backward incompatible changes.

            + +

            Many thanks to all the contributors and supporters!

            + + +

            PHP 8.1.1 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.1. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.1 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.10 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.10. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.10 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.11 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.11. This is a security release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.11 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.12 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.12. This is a security release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.12 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.13 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.13. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.13 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.14 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.14. This is a security release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.14 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.15 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.15. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.15 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.16 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.16. This is a security release that addresses CVE-2023-0567, CVE-2023-0568, and CVE-2023-0662.

            + +

            All PHP 8.1 users are advised to upgrade to this version.

            + +

            For source downloads of PHP 8.1.16 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.17 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.17. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.17 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.18 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.18. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.18 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.19 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.19. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.19 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.2 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.2. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.2 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.20 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.20. This is a security release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.20 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.21 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.21. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.21 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.22 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.22. This is a security release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.22 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.23 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.23. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.23 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.24 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.24. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.24 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.25 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.25. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.25 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.26 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.26. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.26 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.27 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.27. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.27 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.28 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.28. This is a security release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.28 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.29 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.29. This is a security release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.29 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.3 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.3. This is a security release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.3 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.30 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.30. This is a security release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.30 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.31 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.31. This is a security release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.31 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.32 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.32. This is a security release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.32 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.33 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.33. This is a security release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.33 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.34 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.34. This is a security release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.34 please visit our downloads page, +Windows source and binaries can also be found there. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.4 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.4. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.4 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.5 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.5. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.5 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.6 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.6. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.6 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.7 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.7. This is a security release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.7 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.8 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.8. This is a security release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.8 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.1.9 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.1.9. This is a bug fix release.

            + +

            All PHP 8.1 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.1.9 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.0 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.0. This release marks the latest minor release of the PHP language.

            + +

            PHP 8.2 comes with numerous improvements and new features such as:

            + + + +

            + For source downloads of PHP 8.2.0 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

            + +

            + The migration guide is available in the PHP Manual. + Please consult it for the detailed list of new features and backward incompatible changes. +

            + +

            Kudos to all the contributors and supporters!

            + + +

            PHP 8.2.1 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.1. This is a security release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.1 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.10 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.10. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.10 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.11 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.11. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.11 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.12 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.12. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.12 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.13 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.13. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.13 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.14 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.14. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.14 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.15 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.15. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.15 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.16 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.16. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.16 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.17 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.17. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.17 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.18 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.18. This is a security release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.18 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.19 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.19. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.19 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.2 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.2. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.2 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.20 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.20. This is a security release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.20 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.21 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.21. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.21 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.22 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.22. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.22 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.23 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.23. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.23 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.24 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.24. This is a security release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.24 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.25 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.25. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.25 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.26 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.26. This is a security release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.26 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.27 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.27. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.27 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            Please note, this is the last bug-fix release for the 8.2.x series. Security fix support will continue until 31 Dec 2026. + For more information, please check our Supported Versions page. +

            + +

            PHP 8.2.28 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.28. This is a security release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.28 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.29 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.29. This is a security release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.29 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.3 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.3. This is a security release +that addresses CVE-2023-0567, CVE-2023-0568, and CVE-2023-0662.

            + +

            All PHP 8.2 users are advised to upgrade to this version.

            + +

            For source downloads of PHP 8.2.3 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.30 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.30. This is a security release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.30 please visit our downloads page, +Windows source and binaries can also be found there. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.4 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.4. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.4 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.5 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.5. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.5 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.6 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.6. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.6 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.7 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.7. This is a security release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.7 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.8 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.8. This is a bug fix release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.2.8 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.2.9 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.2.9. This is a security release.

            + +

            All PHP 8.2 users are encouraged to upgrade to this version.

            + +

            Windows source and binaries are not synchronized and do not contain a fix for GH-11854.

            + +

            For source downloads of PHP 8.2.9 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.0 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.0. This release marks +the latest minor release of the PHP language.

            + +

            PHP 8.3 comes with numerous improvements and new features such as:

            + + + +

            For source downloads of PHP 8.3.0 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.1 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.1. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.1 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.10 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.10. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.10 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.11 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.11. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.11 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.12 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.12. This is a security release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.12 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.13 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.13. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.13 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.14 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.14. This is a security release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.14 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.15 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.15. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.15 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.16 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.16. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.16 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.17 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.17. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.17 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.19 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.19. This is a security release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.19 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.2 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.2. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.2 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.20 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.20. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.20 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.21 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.21. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.21 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.22 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.22. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.22 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.23 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.23. This is a security release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.23 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.24 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.24. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.24 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.25 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.25. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.25 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.26 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.26. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.26 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.27 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.27. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.27 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.28 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.28. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.28 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.29 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.29. This is a security release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.29 please visit our downloads page, +Windows source and binaries can also be found there. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.3 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.3. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.3 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.4 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.4. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.4 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.6 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.6. This is a security release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.6 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.7 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.7. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.7 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.8 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.8. This is a security release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.8 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.3.9 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.3.9. This is a bug fix release.

            + +

            All PHP 8.3 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.3.9 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.4.1 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.4.1. This release marks +the latest minor release of the PHP language.

            + +

            PHP 8.4 comes with numerous improvements and new features such as:

            + + + +

            For source downloads of PHP 8.4.1 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.4.10 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.4.10. This is a security release.

            + +

            Version 8.4.9 was skipped because it was tagged without including security patches.

            + +

            All PHP 8.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.4.10 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.4.11 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.4.11. This is a bug fix release.

            + +

            All PHP 8.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.4.11 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.4.12 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.4.12. This is a bug fix release.

            + +

            All PHP 8.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.4.12 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.4.13 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.4.13. This is a bug fix release.

            + +

            All PHP 8.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.4.13 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.4.14 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.4.14. This is a bug fix release.

            + +

            All PHP 8.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.4.14 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.4.15 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.4.15. This is a bug fix release.

            + +

            All PHP 8.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.4.15 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.4.16 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.4.16. This is a security release.

            + +

            All PHP 8.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.4.16 please visit our downloads page, +Windows source and binaries can also be found there. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.4.2 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.4.2. This is a bug fix release.

            + +

            All PHP 8.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.4.2 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.4.3 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.4.3. This is a bug fix release.

            + +

            All PHP 8.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.4.3 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.4.4 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.4.4. This is a bug fix release.

            + +

            All PHP 8.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.4.4 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.4.5 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.4.5. This is a security release.

            + +

            All PHP 8.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.4.5 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.4.6 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.4.6. This is a bug fix release.

            + +

            All PHP 8.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.4.6 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.4.7 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.4.7. This is a bug fix release.

            + +

            All PHP 8.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.4.7 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.4.8 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.4.8. This is a bug fix release.

            + +

            All PHP 8.4 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.4.8 please visit our downloads page, +Windows source and binaries can be found on windows.php.net/download/. +The list of changes is recorded in the ChangeLog. +

            + +

            PHP 8.5.0 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.5.0. This release marks the latest minor release of the PHP language.

            + +

            PHP 8.5 comes with numerous improvements and new features such as:

            +
              +
            • New "URI" extension
            • +
            • New pipe operator (|>)
            • +
            • Clone With
            • +
            • New #[\NoDiscard] attribute
            • +
            • Support for closures, casts, and first class callables in constant expressions
            • +
            • And much much more...
            • +
            +

            + For source downloads of PHP 8.5.0 please visit our downloads page, + Windows source and binaries can be found on windows.php.net/download/. + The list of changes is recorded in the ChangeLog. +

            +

            + The migration guide is available in the PHP Manual. + Please consult it for the detailed list of new features and backward incompatible changes. +

            +

            Kudos to all the contributors and supporters!

            + + +

            PHP 8.5.1 Release Announcement

            + +

            The PHP development team announces the immediate availability of PHP 8.5.1. This is a security release.

            + +

            All PHP 8.5 users are encouraged to upgrade to this version.

            + +

            For source downloads of PHP 8.5.1 please visit our downloads page, +Windows source and binaries can also be found there. +The list of changes is recorded in the ChangeLog. +

            +format('c') : null; +} + +$current = []; +foreach (get_all_branches() as $major => $releases) { + foreach ($releases as $branch => $release) { + $current[$branch] = [ + 'branch' => $branch, + 'latest' => ($release['version'] ?? null), + 'state' => get_branch_support_state($branch), + 'initial_release' => formatDate(get_branch_release_date($branch)), + 'active_support_end' => formatDate(get_branch_bug_eol_date($branch)), + 'security_support_end' => formatDate(get_branch_security_eol_date($branch)), + ]; + } +} + +// Sorting should already be correct based on return of get_all_branches(), +// but enforce it here anyway, just to be nice. +usort($current, fn($a, $b) => version_compare($b['branch'], $a['branch'])); + +echo json_encode($current); diff --git a/releases/feed.php b/releases/feed.php index a6116b922f..709bad633d 100644 --- a/releases/feed.php +++ b/releases/feed.php @@ -1,9 +1,10 @@ PHP.net releases @@ -18,11 +19,11 @@ XML; -/* FIX silly editor highlighting */?> $release) { $published = date(DATE_ATOM, strtotime($release["source"][0]["date"])); @@ -32,7 +33,7 @@ $id = "http://qa.php.net/#$version"; } - echo <<< XML + echo << PHP {$version} released! {$id} @@ -41,7 +42,7 @@ There is a new PHP release in town! XML; - $maxtime = array(); + $maxtime = []; foreach ($release["source"] as $source) { if (!isset($source["date"])) { continue; @@ -50,13 +51,13 @@ $released = date(DATE_ATOM, $time); echo " \n"; - foreach (array('md5', 'sha256') as $hashAlgo) { + foreach (['md5', 'sha256'] as $hashAlgo) { if (isset($source[$hashAlgo])) { echo " {$source[$hashAlgo]}\n"; } } - echo <<< XML + echo <<{$released} @@ -72,7 +73,7 @@ } } - echo <<< XML + echo <<{$updated} @@ -82,9 +83,10 @@ $FEED_UPDATED = max($maxtime, $FEED_UPDATED); } +$entries = ob_get_clean(); + $FEED_UPDATED = date(DATE_ATOM, max($FEED_UPDATED)); -echo <<< XML - {$FEED_UPDATED} - -XML; +echo " {$FEED_UPDATED}\n"; +echo $entries; +echo ""; diff --git a/releases/index.php b/releases/index.php index ca1201998a..c90c4b3b59 100644 --- a/releases/index.php +++ b/releases/index.php @@ -1,73 +1,81 @@ $release) { - if ($max <= $count) { - break; - } - - if (compare_version($versionArray, $version) == 0) { - $machineReadable[$version] = $release; - $count++; - } - } - - if (!isset($_GET['max']) && !empty($machineReadable)) { - $version = key($machineReadable); - $machineReadable = current($machineReadable); - $machineReadable["version"] = $version; - } - } - - if (empty($machineReadable)) { - $machineReadable = array("error" => "Unknown version"); - } - } else { - foreach($RELEASES as $major => $release) { - $version = key($release); - $r = current($release); - $r["version"] = $version; - $machineReadable[$major] = $r; - } - } - - if (isset($_GET["serialize"])) { - header('Content-type: text/plain'); - echo serialize($machineReadable); - } elseif (isset($_GET["json"])) { - header('Content-Type: application/json'); - echo json_encode($machineReadable); - } - return; + $RELEASES = $RELEASES + $OLDRELEASES; + + $machineReadable = []; + + $supportedVersions = []; + foreach (get_active_branches(false) as $major => $releases) { + $supportedVersions[$major] = array_keys($releases); + } + + if (isset($_GET["version"])) { + $versionArray = version_array($_GET["version"]); + $ver = $versionArray[0]; + + if (isset($RELEASES[$ver])) { + $combinedReleases = array_replace_recursive($RELEASES, $OLDRELEASES); + + $max = (int) ($_GET['max'] ?? 1); + if ($max == -1) { + $max = PHP_INT_MAX; + } + + $count = 0; + foreach ($combinedReleases[$ver] as $version => $release) { + if ($max <= $count) { + break; + } + + if (compare_version($versionArray, $version) == 0) { + if (!isset($_GET['max'])) { + $release['supported_versions'] = $supportedVersions[$ver] ?? []; + } + $machineReadable[$version] = $release; + $count++; + } + } + + if (!isset($_GET['max']) && !empty($machineReadable)) { + $version = key($machineReadable); + $machineReadable = current($machineReadable); + $machineReadable["version"] = $version; + } + } + + if (empty($machineReadable)) { + $machineReadable = ["error" => "Unknown version"]; + } + } else { + foreach ($RELEASES as $major => $release) { + $version = key($release); + $r = current($release); + $r["version"] = $version; + $r['supported_versions'] = $supportedVersions[$major] ?? []; + $machineReadable[$major] = $r; + } + } + + if (isset($_GET["serialize"])) { + header('Content-type: text/plain'); + echo serialize($machineReadable); + } elseif (isset($_GET["json"])) { + header('Content-Type: application/json'); + echo json_encode($machineReadable); + } + return; } - - // Human Readable. -site_header("Releases", array( +site_header("Releases", [ 'current' => 'downloads', 'css' => '/styles/releases.css', -)); +]); echo "

            Unsupported Historical Releases

            \n\n"; echo "

            @@ -80,28 +88,28 @@ $active_majors = array_keys($RELEASES); $latest = max($active_majors); -foreach($OLDRELEASES as $major => $a) { - echo ''; - if (!in_array($major, $active_majors)) { - echo "\n
            \n"; - echo "

            Support for PHP $major has been discontinued "; - echo "since " . current($a)['date'] . '.'; - echo "Please consider upgrading to $latest.

            \n"; - } - - $i = 0; - foreach($a as $ver => $release) { - $i++; - mk_rel( - $major, - $ver, - $release["date"], - $release["announcement"] ?? false, - $release["source"] ?? [], - $release["windows"] ?? [], - $release["museum"] ?? ($i >= 3) - ); - } +foreach ($OLDRELEASES as $major => $a) { + echo ''; + if (!in_array($major, $active_majors, false)) { + echo "\n
            \n"; + echo "

            Support for PHP $major has been discontinued "; + echo "since " . current($a)['date'] . '. '; + echo "Please consider upgrading to $latest.

            \n"; + } + + $i = 0; + foreach ($a as $ver => $release) { + $i++; + mk_rel( + $major, + $ver, + $release["date"], + $release["announcement"] ?? false, + $release["source"] ?? [], + $release["windows"] ?? [], + $release["museum"] ?? ($i >= 3), + ); + } } site_footer(['sidebar' => @@ -117,7 +125,7 @@ End of Life Dates

            The most recent branches to reach end of life status are:

            -
              ' . recentEOLBranchesHTML(2) . '
            +
              ' . recentEOLBranchesHTML() . '
          @@ -156,87 +164,89 @@
        -']); - -function recentEOLBranchesHTML(int $count): string { - $eol = array(); - foreach (get_eol_branches() as $major => $branches) { - foreach ($branches as $branch => $detail) { - $detail_date = $detail['date']; - while (isset($eol[$detail_date])) $detail_date++; - $eol[$detail_date] = sprintf('
      • %s: %s
      • ', $branch, date('j M Y', $detail_date)); - } - } - krsort($eol); - return implode('', array_slice($eol, 0, 2)); +', ]); + +function recentEOLBranchesHTML(): string { + $eol = []; + foreach (get_eol_branches() as $branches) { + foreach ($branches as $branch => $detail) { + $detail_date = $detail['date']; + while (isset($eol[$detail_date])) $detail_date++; + $eol[$detail_date] = sprintf('
      • %s: %s
      • ', $branch, date('j M Y', $detail_date)); + } + } + krsort($eol); + return implode('', array_slice($eol, 0, 2)); } +/** + * @param bool|array $announcement + */ function mk_rel(int $major, - string $ver, - string $date, - /* bool | array */ $announcement, - array $source, - array $windows, - bool $museum) { - printf("\n

        %1\$s

        \n
          \n
        • Released: %s
        • \n
        • Announcement: ", - ($pos = strpos($ver, " ")) ? substr($ver, 0, $pos) : $ver, - $date); - - if ($announcement) { - if (is_array($announcement)) { - foreach($announcement as $ann => $url) { - echo "$ann "; - } - } else { - $url = str_replace(".", "_", $ver); - echo "English"; - } - } else { - echo "None"; - } - echo "
        • \n"; - - if ($major > 3) { - echo "
        • ChangeLog
        • "; - } - echo "\n
        • \n Download:\n"; - echo "
            \n"; - - if (!$museum) { - foreach(array_merge($source, $windows) as $src) { - echo "
          • \n"; - if (isset($src['filename'])) { - download_link($src["filename"], $src["name"]); echo "
            \n"; - $linebreak = ''; - foreach (['md5', 'sha256'] as $cs) { - if (isset($src[$cs])) { - echo $linebreak; - echo "{$cs}: {$src[$cs]}\n"; - $linebreak = "
            "; - } - } - } else { - echo "{$src['name']}"; - } - echo "
          • \n"; - } - - } else { /* $museum */ - foreach($source as $src) { - if (!isset($src["filename"])) { - continue; - } - printf('
          • %s
          • ', - $major, $src["filename"], $src["name"]); - } - foreach($windows as $src) { - printf('
          • %s
          • ', - ($major == 5 ? "php5" : "win32"), $src["filename"], $src["name"]); - } - } - - echo "
          \n"; - echo "
        • \n"; - echo "
        \n"; + string $ver, + string $date, + $announcement, + array $source, + array $windows, + bool $museum): void { + printf("\n

        %1\$s

        \n
          \n
        • Released: %s
        • \n
        • Announcement: ", + ($pos = strpos($ver, " ")) ? substr($ver, 0, $pos) : $ver, + $date); + + if ($announcement) { + if (is_array($announcement)) { + foreach ($announcement as $ann => $url) { + echo "$ann "; + } + } else { + $url = str_replace(".", "_", $ver); + echo "English"; + } + } else { + echo "None"; + } + echo "
        • \n"; + + if ($major > 3) { + echo "
        • ChangeLog
        • "; + } + echo "\n
        • \n Download:\n"; + echo "
            \n"; + + if (!$museum) { + foreach (array_merge($source, $windows) as $src) { + echo "
          • \n"; + if (isset($src['filename'])) { + download_link($src["filename"], $src["name"]); echo "
            \n"; + $linebreak = ''; + foreach (['md5', 'sha256'] as $cs) { + if (isset($src[$cs])) { + echo $linebreak; + echo "{$cs}: {$src[$cs]}\n"; + $linebreak = "
            "; + } + } + } else { + echo "{$src['name']}"; + } + echo "
          • \n"; + } + + } else { /* $museum */ + foreach ($source as $src) { + if (!isset($src["filename"])) { + continue; + } + printf('
          • %s
          • ', + $major, $src["filename"], $src["name"]); + } + foreach ($windows as $src) { + printf('
          • %s
          • ', + ($major == 5 ? "php5" : "win32"), $src["filename"], $src["name"]); + } + } + + echo "
          \n"; + echo "
        • \n"; + echo "
        \n"; } - diff --git a/releases/states.php b/releases/states.php new file mode 100644 index 0000000000..3622b07399 --- /dev/null +++ b/releases/states.php @@ -0,0 +1,34 @@ +format('c') : null; +} + +foreach (get_all_branches() as $major => $releases) { + $states[$major] = []; + foreach ($releases as $branch => $release) { + $states[$major][$branch] = [ + 'state' => get_branch_support_state($branch), + 'initial_release' => formatDate(get_branch_release_date($branch)), + 'active_support_end' => formatDate(get_branch_bug_eol_date($branch)), + 'security_support_end' => formatDate(get_branch_security_eol_date($branch)), + ]; + } + krsort($states[$major]); +} + +krsort($states); + +echo json_encode($states); diff --git a/results.php b/results.php index 273e488ed5..a13f1d28b6 100644 --- a/results.php +++ b/results.php @@ -1,32 +1,20 @@ 'help', 'layout_span' => 12, - ) + ], ); echo '

        Search results

        '; -google_cse($query, $lang); +google_cse(); site_footer(); diff --git a/search.php b/search.php index 6cb23045ac..05874deaa0 100644 --- a/search.php +++ b/search.php @@ -1,4 +1,5 @@ - "search", - "type" => "application/opensearchdescription+xml", - "href" => $MYSITE . "phpnetimprovedsearch.src", - "title" => "Add PHP.net search" - ); - site_header("Search", array("link" => array($link), "current" => "help")); + $link = [ + "rel" => "search", + "type" => "application/opensearchdescription+xml", + "href" => $MYSITE . "phpnetimprovedsearch.src", + "title" => "Add PHP.net search", + ]; + site_header("Search", ["link" => [$link], "current" => "help", 'css' => 'cse-search.css']); google_cse(); site_footer(); diff --git a/security-note.php b/security-note.php index a643379345..de0c3e3efe 100644 --- a/security-note.php +++ b/security-note.php @@ -1,7 +1,7 @@ "docs")); +site_header("A Note on Security in PHP", ["current" => "docs"]); ?>

        A Note on Security in PHP

        diff --git a/security/crypt_blowfish.php b/security/crypt_blowfish.php deleted file mode 100644 index e418520dff..0000000000 --- a/security/crypt_blowfish.php +++ /dev/null @@ -1,66 +0,0 @@ - - -

        CRYPT_BLOWFISH security fix details

        -

        -The change as implemented in PHP 5.3.7+ favors security and correctness over -backwards compatibility, but it also lets users (admins of PHP app installs) -use the new $2x$ prefix on existing hashes to preserve backwards compatibility -for those and incur the associated security risk until all such passwords are -changed (using $2a$ or $2y$ for newly changed passwords). -

        - -

        -In versions of PHP older than 5.3.7, $2a$ inadvertently resulted in -system-specific behavior for passwords with non-ASCII characters in them. On -some installs (mostly on PowerPC and ARM, as well as sometimes on *BSD's and -Solaris regardless of CPU architecture), they were processed correctly. On -most installs (most Linux, many others), they were processed incorrectly most -of the time (but not always), and moreover in a way where security was -weakened. -

        - -

        -In PHP 5.3.7, $2a$ results in almost the correct behavior, but with an -additional countermeasure against security-weakened old hashes mentioned above. -$2x$ results in the buggy behavior, so if old hashes are known to be of the -buggy type, this may be used on them to keep them working, accepting the -associated security risk. -

        - -

        -$2y$ results in perfectly correct behavior (without the countermeasure), so it -may be used (if desired) when hashing newly set passwords. For practical -purposes, it does not really matter if you use $2a$ or $2y$ for newly set -passwords, as the countermeasure is only triggered on some obscure passwords -(not even valid UTF-8) that are unlikely to be seen outside of a deliberate -attack (trying to match hashes produced by buggy pre-5.3.7 code). -

        - -

        -Summary: for passwords without characters with the 8th bit set, there's no -issue, all three prefixes work exactly the same. For occasional passwords with -characters with the 8th bit set, if the app prefers security and correctness -over backwards compatibility, no action is needed - just upgrade to new PHP and -use its new behavior (with $2a$). However, if an app install admin truly -prefers backwards compatibility over security, and the problem is seen on the -specific install (which is not always the case because not all platforms/builds -were affected), then $2a$ in existing hashes in the database may be changed to -$2x$. Alternatively, a similar thing may be achieved by changing $2a$ to $2x$ -in PHP app code after database queries, and using $2y$ on newly set passwords -(such that the app's automatic change to $2x$ on queries is not triggered for -them). -

        - -

        -See also the openwall -announcement for more information. -

        - - - -
        -

        Security Center?

        -

        In an effort to make security related information more readily available, the PHP Security Response Team created a new Security Center on March 1st, 2007. The Security Center will serve as the central location where interested parties can find information about security threats, fixes and/or workarounds and any other related meterial.

        - -

        Security related books

        - - -

        Other links

        - -
        -EOT; - - -site_header("PHP Security center"); -echo "

        PHP Security Center

        \n"; - -$dbfile = $_SERVER['DOCUMENT_ROOT'] . '/security/vulndb.txt'; -$fp = @fopen($dbfile, "rt"); -if(is_resource($fp)) { - $RECORDS = array(); - $record_no = 1; - while($s = fgets($fp)) { - if($s == "\n") { - if(!isset($RECORDS[$record_no]["id"])) { - $RECORDS[$record_no]["id"] = $record_no; - } - $field = null; - $record_no++; - continue; - } - if(preg_match("/^([-\w]+):\s*(.*)/", $s, $m)) { - // new record - $field = strtolower($m[1]); - $data = $m[2]; - } else { - $data = $s; - } - if($field) { - if(isset($RECORDS[$record_no][$field])) { - $RECORDS[$record_no][$field] .= $data; - } else { - $RECORDS[$record_no][$field] = $data; - } - } - } - } - - //echo "
        ";print_r($RECORDS);
        -    $id = isset($_GET["id"]) ? (int)$_GET["id"] : 0;
        -    if(!$id || !isset($RECORDS[$id])) {
        -?>
        -

        PHP Vulnerability Disclosures

        -

        This page contains information about PHP-related security threats, patches and known workarounds.

        -

        If you believe you have discovered a security problem in PHP please inform the
        PHP Security Response Team in confidence by mailing security@php.net

        -
        -

        The following colors are used to highlight the severity of a bug:

        -
          -
        • low risk is yellow
        • -
        • medium risk is orange
        • -
        • critical is red
        • -
        -= $d) { - if($c > $d) { - return -1; - } - return 0; - } - return 1; - } - usort($RECORDS, "cmp_records"); - - $last_month = ""; - foreach($RECORDS as $record) { - if(!isset($record["summary"])) { - if(strlen($record["description"]) > 80) { - $record["summary"] = substr($record["description"], 0, 70) . "..."; - } else { - $record["summary"] = $record["description"]; - } - } - $current_month = date("Ym", strtotime($record["published"])); - if($current_month != $last_month) { - $last_month = $current_month; - $current_month = $record["affects"]; - - echo "

        ", date("F Y", strtotime($record["published"])), "

        \n"; - } -?> -
        "> - -
        -
        ">
        -
        -
        -
        - -%s (%s)\n", $RECORDS[$id]["id"], $date); - echo "
        \n"; - foreach($RECORDS[$id] as $field => $data) { - if(!$data) { - continue; - } - $title = ucfirst(strtr($field, "-", " ")); - // Turn urls into links (stolen from master/manage/user-notes.php) - $data = preg_replace( - '!((mailto:|(http|ftp|nntp|news):\/\/).*?)(\s|<|\)|"|\\|\'|$)!', - '\1\4', - $data - ); - echo <<< EOT -
        -
        $title
        -
        $data
        -
        \n -EOT; - } - echo "
        \n"; -} - -site_footer(); diff --git a/security/vulndb.txt b/security/vulndb.txt deleted file mode 100644 index 7f5bc36ec5..0000000000 --- a/security/vulndb.txt +++ /dev/null @@ -1,472 +0,0 @@ -Id: 1 -CVE: CVE-2006-0097 -Severity: -Reporter: -Published: 2006-01-06 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: Stack-based buffer overflow in the create_named_pipe function in libmysql.c in PHP 4.3.10 and 4.4.x before 4.4.3 for Windows allows attackers to execute arbitrary code via a long (1) arg_host or (2) arg_unix_socket argument, as demonstrated by a long named pipe variable in the host argument to the mysql_connect function. - -Id: 2 -CVE: CVE-2006-0200 -Severity: -Reporter: -Published: 2006-01-13 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: Format string vulnerability in the error-reporting feature in the mysqli extension in PHP 5.1.0 and 5.1.1 might allow remote attackers to execute arbitrary code via format string specifiers in MySQL error messages. - -Id: 3 -CVE: CVE-2006-0207 -Severity: -Reporter: -Published: 2006-01-13 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: Multiple HTTP response splitting vulnerabilities in PHP 5.1.1 allow remote attackers to inject arbitrary HTTP headers via a crafted Set-Cookie header, related to the (1) session extension (aka ext/session) and the (2) header function. - -Id: 4 -CVE: CVE-2006-0208 -Severity: -Reporter: -Published: 2006-01-13 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: Multiple cross-site scripting (XSS) vulnerabilities in PHP 5.1.1, when display_errors and html_errors are on, allow remote attackers to inject arbitrary web script or HTML via inputs to PHP applications that are not filtered when they are included in the resulting error message. - -Id: 5 -CVE: CVE-2006-0996 -Severity: -Reporter: -Published: 2006-04-10 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: Cross-site scripting (XSS) vulnerability in phpinfo (info.c) in PHP 5.1.2 and 4.4.2 allows remote attackers to inject arbitrary web script or HTML via long array variables, including (1) a large number of dimensions or (2) long values, which prevents HTML tags from being removed. - -Id: 6 -CVE: CVE-2006-1014 -Severity: -Reporter: -Published: 2006-03-06 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: Argument injection vulnerability in certain PHP 4.x and 5.x applications, when used with sendmail and when accepting remote input for the additional_parameters argument to the mb_send_mail function, allows context-dependent attackers to read and create arbitrary files by providing extra -C and -X arguments to sendmail. NOTE: it could be argued that this is a class of technology-specific vulnerability, instead of a particular instance; if so, then this should not be included in CVE. - -Id: 7 -CVE: CVE-2006-1015 -Severity: -Reporter: -Published: 2006-03-06 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: Argument injection vulnerability in certain PHP 3.x, 4.x, and 5.x applications, when used with sendmail and when accepting remote input for the additional_parameters argument to the mail function, allows remote attackers to read and create arbitrary files via the sendmail -C and -X arguments. NOTE: it could be argued that this is a class of technology-specific vulnerability, instead of a particular instance; if so, then this should not be included in CVE. - -Id: 8 -CVE: CVE-2006-1017 -Severity: -Reporter: -Published: 2006-03-06 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: The c-client library 2000, 2001, or 2004 for PHP before 4.4.4 and 5.x before 5.1.5 do not check the (1) safe_mode or (2) open_basedir functions, and when used in applications that accept user-controlled input for the mailbox argument to the imap_open function, allow remote attackers to obtain access to an IMAP stream data structure and conduct unauthorized IMAP actions. - -Id: 9 -CVE: CVE-2006-1490 -Severity: -Reporter: -Published: 2006-03-29 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: PHP before 5.1.3-RC1 might allow remote attackers to obtain portions of memory via crafted binary data sent to a script that processes user input in the html_entity_decode function and sends the encoded results back to the client, aka a "binary safety" issue. NOTE: this issue has been referred to as a "memory leak," but it is an information leak that discloses memory contents. - -Id: 10 -CVE: CVE-2006-1494 -Severity: -Reporter: -Published: 2006-04-10 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: Directory traversal vulnerability in file.c in PHP 4.4.2 and 5.1.2 allows local users to bypass open_basedir restrictions allows remote attackers to create files in arbitrary directories via the tempnam function. - -Id: 11 -CVE: CVE-2006-1549 -Severity: -Reporter: -Published: 2006-04-10 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: PHP 4.4.2 and 5.1.2 allows local users to cause a crash (segmentation fault) by defining and executing a recursive function. - -Id: 12 -CVE: CVE-2006-1608 -Severity: -Reporter: -Published: 2006-04-10 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: The copy function in file.c in PHP 4.4.2 and 5.1.2 allows local users to bypass safe mode and read arbitrary files via a source argument containing a compress.zlib:// URI. - -Id: 13 -CVE: CVE-2006-1990 -Severity: -Reporter: -Published: 2006-04-24 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: Integer overflow in the wordwrap function in string.c in PHP 4.4.2 and 5.1.2 might allow context-dependent attackers to execute arbitrary code via certain long arguments that cause a small buffer to be allocated, which triggers a heap-based buffer overflow in a memcpy function call, a different vulnerability than CVE-2002-1396. - -Id: 14 -CVE: CVE-2006-1991 -Severity: -Reporter: -Published: 2006-04-24 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: The substr_compare function in string.c in PHP 5.1.2 allows context-dependent attackers to cause a denial of service (memory access violation) via an out-of-bounds offset argument. - -Id: 15 -CVE: CVE-2006-2563 -Severity: -Reporter: -Published: 2006-05-29 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: The cURL library (libcurl) in PHP 4.4.2 and 5.1.4 allows attackers to bypass safe mode and read files via a file:// request containing null characters. - -Id: 16 -CVE: CVE-2006-2660 -Severity: -Reporter: -Published: 2006-06-13 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: Buffer consumption vulnerability in the tempnam function in PHP 5.1.4 and 4.x before 4.4.3 allows local users to bypass restrictions and create PHP files with fixed names in other directories via a pathname argument longer than MAXPATHLEN, which prevents a unique string from being appended to the filename. - -Id: 17 -CVE: CVE-2006-3011 -Severity: -Reporter: -Published: 2006-06-26 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: The error_log function in basic_functions.c in PHP before 4.4.4 and 5.x before 5.1.5 allows local users to bypass safe mode and open_basedir restrictions via a "php://" or other scheme in the third argument, which disables safe mode. - -Id: 18 -CVE: CVE-2006-3016 -Severity: -Reporter: -Published: 2006-06-14 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: Unspecified vulnerability in session.c in PHP before 5.1.3 has unknown impact and attack vectors, related to "certain characters in session names," including special characters that are frequently associated with CRLF injection, SQL injection, cross-site scripting (XSS), and HTTP response splitting vulnerabilities. NOTE: while the nature of the vulnerability is unspecified, it is likely that this is related to a violation of an expectation by PHP applications that the session name is alphanumeric, as implied in the PHP manual for session_name(). - -Id: 19 -CVE: CVE-2006-3017 -Severity: -Reporter: -Published: 2006-06-14 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: zend_hash_del_key_or_index in zend_hash.c in PHP before 4.4.3 and 5.x before 5.1.4 can cause zend_hash_del to delete the wrong element, which prevents a variable from being unset even when the PHP unset function is called, which might cause the variable's value to be used in security-relevant operations. - -Id: 20 -CVE: CVE-2006-3018 -Severity: -Reporter: -Published: 2006-06-14 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: Unspecified vulnerability in the session extension functionality in PHP before 5.1.3 has unkown impact and attack vectors related to heap corruption. - -Id: 21 -CVE: CVE-2006-4020 -Severity: -Reporter: -Published: 2006-08-08 -Extension: -Range: -Affects: PHP -Fixed-in: PHP -Description: scanf.c in PHP 5.1.4 and earlier, and 4.4.3 and earlier, allows context-dependent attackers to execute arbitrary code via a sscanf PHP function call that performs argument swapping, which increments an index past the end of an array and triggers a buffer over-read. - -Id: 22 -CVE: CVE-2006-4023 -Severity: -Reporter: -Published: 2006-08-08 -Extension: ext/standard -Range: -Affects: PHP -Fixed-in: PHP -Description: The ip2long function in PHP 5.1.4 and earlier may incorrectly validate an arbitrary string and return a valid network IP address, which allows remote attackers to obtain network information and facilitate other attacks, as demonstrated using SQL injection in the X-FORWARDED-FOR Header in index.php in MiniBB 2.0. NOTE: it could be argued that the ip2long behavior represents a risk for security-relevant issues in a way that is similar to strcpy's role in buffer overflows, in which case this would be a class of implementation bugs that would require separate CVE items for each PHP application that uses ip2long in a security-relevant manner. - -Id: 23 -CVE: CVE-2006-4433 -Severity: -Reporter: -Published: 2006-08-28 -Extension: ext/session -Range: -Affects: PHP -Fixed-in: PHP -Description: PHP before 4.4.3 and 5.x before 5.1.4 does not limit the character set of the session identifier (PHPSESSID) for third party session handlers, which might make it easier for remote attackers to exploit other vulnerabilities by inserting PHP code into the PHPSESSID, which is stored in the session file. NOTE: it could be argued that this not a vulnerability in PHP itself, rather a design limitation that enables certain attacks against session handlers that do not account for this limitation. - -Id: 24 -CVE: CVE-2006-4481 -Severity: -Reporter: -Published: 2006-08-31 -Extension: ext/standard & ext/imap -Range: -Affects: PHP -Fixed-in: PHP -Description: The (1) file_exists and (2) imap_reopen functions in PHP before 5.1.5 do not check for the safe_mode and open_basedir settings, which allows local users to bypass the settings. NOTE: the error_log function is covered by CVE-2006-3011, and the imap_open function is covered by CVE-2006-1017. - -Id: 25 -CVE: CVE-2006-4482 -Severity: -Reporter: -Published: 2006-08-31 -Extension: ext/standard -Range: -Affects: PHP -Fixed-in: PHP -Description: Multiple heap-based buffer overflows in the (1) str_repeat and (2) wordwrap functions in ext/standard/string.c in PHP before 5.1.5, when used on a 64-bit system, have unspecified impact and attack vectors, a different vulnerability than CVE-2006-1990. - -Id: 26 -CVE: CVE-2006-4483 -Severity: -Reporter: -Published: 2006-08-31 -Extension: ext/curl -Range: -Affects: PHP -Fixed-in: PHP -Description: The cURL extension files (1) ext/curl/interface.c and (2) ext/curl/streams.c in PHP before 5.1.5 permit the CURLOPT_FOLLOWLOCATION option when open_basedir or safe_mode is enabled, which allows attackers to perform unauthorized actions, possibly related to the realpath cache. - -Id: 27 -CVE: CVE-2006-4484 -Severity: -Reporter: -Published: 2006-08-31 -Extension: ext/gd -Range: -Affects: PHP -Fixed-in: PHP -Description: Buffer overflow in the LWZReadByte_ function in ext/gd/libgd/gd_gif_in.c in the GD extension in PHP before 5.1.5 allows remote attackers to have an unknown impact via a GIF file with input_code_size greater than MAX_LWZ_BITS, which triggers an overflow when initializing the table array. - -Id: 28 -CVE: CVE-2006-4485 -Severity: -Reporter: -Published: 2006-08-31 -Extension: ext/standard -Range: -Affects: PHP -Fixed-in: PHP -Description: The stripos function in PHP before 5.1.5 has unknown impact and attack vectors related to an out-of-bounds read. - -Id: 29 -CVE: CVE-2006-4486 -Severity: -Reporter: -Published: 2006-08-31 -Extension: core -Range: -Affects: PHP -Fixed-in: PHP -Description: Integer overflow in memory allocation routines in PHP before 5.1.6, when running on a 64-bit system, allows context-dependent attackers to bypass the memory_limit restriction. - -Id: 30 -CVE: CVE-2006-4625 -Severity: -Reporter: -Published: 2006-09-12 -Extension: ext/standard -Range: -Affects: PHP -Fixed-in: PHP -Description: PHP 4.x up to 4.4.4 and PHP 5 up to 5.1.6 allows local users to bypass certain Apache HTTP Server httpd.conf options, such as safe_mode and open_basedir, via the ini_restore function, which resets the values to their php.ini (Master Value) defaults. - -Id: 31 -CVE: CVE-2006-4812 -Severity: -Reporter: -Published: 2006-10-10 -Extension: core -Range: -Affects: PHP -Fixed-in: PHP -Description: Integer overflow in PHP 5 up to 5.1.6 and 4 before 4.3.0 allows remote attackers to execute arbitrary code via an argument to the unserialize PHP function with a large value for the number of array elements, which triggers the overflow in the Zend Engine ecalloc function (Zend/zend_alloc.c). - -Id: 32 -CVE: CVE-2006-5178 -Severity: -Reporter: -Published: 2006-10-10 -Extension: ext/standard -Range: -Affects: PHP -Fixed-in: PHP -Description: Race condition in the symlink function in PHP 5.1.6 and earlier allows local users to bypass the open_basedir restriction by using a combination of symlink, mkdir, and unlink functions to change the file path after the open_basedir check and before the file is opened by the underlying system, as demonstrated by symlinking a symlink into a subdirectory, to point to a parent directory via .. (dot dot) sequences, and then unlinking the resulting symlink. - -Id: 33 -CVE: CVE-2006-5465 -Severity: -Reporter: -Published: 2006-11-03 -Extension: ext/standard -Range: -Affects: PHP -Fixed-in: PHP -Description: Buffer overflow in PHP before 5.2.0 allows remote attackers to execute arbitrary code via crafted UTF-8 inputs to the (1) htmlentities or (2) htmlspecialchars functions. - -Id: 34 -CVE: CVE-2006-5706 -Severity: -Reporter: -Published: 2006-11-03 -Extension: ext/standard -Range: -Affects: PHP -Fixed-in: PHP -Description: Unspecified vulnerabilities in PHP, probably before 5.2.0, allow local users to bypass open_basedir restrictions and perform unspecified actions via unspecified vectors involving the (1) chdir and (2) tempnam functions. NOTE: the tempnam vector might overlap CVE-2006-1494. - -Id: 35 -CVE: CVE-2006-6383 -Severity: -Reporter: -Published: 2006-12-10 -Extension: ext/session -Range: -Affects: PHP -Fixed-in: PHP -Description: PHP 5.2.0 and 4.4 allows local users to bypass safe_mode and open_basedir restrictions via a malicious path and a null byte before a ";" in a session_save_path argument, followed by an allowed path, which causes a parsing inconsistency in which PHP validates the allowed path but sets session.save_path to the malicious path. - -Id: 36 -CVE: CVE-2007-0905 -Severity: -Reporter: unkown -Published: 2007-02-13 -Extension: ext/session -Range: -Affects: PHP 5.2.0 -Fixed-in: PHP 5.2.1 -Description: PHP before 5.2.1 allows attackers to bypass safe_mode and open_basedir restrictions via unspecified vectors in the session extension. NOTE: it is possible that this issue is a duplicate of CVE-2006-6383. - -Id: 37 -CVE: CVE-2007-0906 -Severity: -Reporter: -Published: 2007-02-13 -Extension: various -Range: -Affects: PHP 5.2.0 -Fixed-in: PHP 5.2.1 -Description: Multiple buffer overflows in PHP before 5.2.1 allow attackers to cause a denial of service and possibly execute arbitrary code via unspecified vectors in the (1) session, (2) zip, (3) imap, and (4) sqlite extensions; (5) stream filters; and the (6) str_replace, (7) mail, (8) ibase_delete_user, (9) ibase_add_user, and (10) ibase_modify_user functions. - -Id: 38 -CVE: CVE-2007-0907 -Severity: -Reporter: -Published: 2007-02-13 -Extension: core -Range: -Affects: PHP 5.2.0 -Fixed-in: PHP 5.2.1 -Description: Buffer underflow in PHP before 5.2.1 allows attackers to cause a denial of service via unspecified vectors involving the sapi_header_op function. - -Id: 39 -CVE: CVE-2007-0908 -Severity: -Reporter: -Published: 2007-02-13 -Extension: ext/wddx -Range: -Affects: PHP 5.2.0 -Fixed-in: PHP 5.2.1 -Description: The wddx extension in PHP before 5.2.1 allows remote attackers to obtain sensitive information via unspecified vectors. - -Id: 40 -CVE: CVE-2007-0909 -Severity: -Reporter: -Published: 2007-02-13 -Extension: ext/standard -Range: -Affects: PHP 5.2.0 -Fixed-in: PHP 5.2.1 -Description: Multiple format string vulnerabilities in PHP before 5.2.1 might allow attackers to execute arbitrary code via format string specifiers to (1) all of the *print functions on 64-bit systems, and (2) the odbc_result_all function. - -Id: 41 -CVE: CVE-2007-0910 -Severity: -Reporter: -Published: 2007-02-13 -Extension: core -Range: -Affects: PHP 5.2.0 -Fixed-in: PHP 5.2.1 -Description: Unspecified vulnerability PHP before 5.2.1 allows attackers to "clobber" certain super-global variables via unspecified vectors. - -Id: 42 -CVE: CVE-2007-0911 -Severity: -Reporter: -Published: 2007-02-13 -Extension: ext/standard -Range: -Affects: PHP 5.2.1 -Fixed-in: To be fixed in PHP 5.2.2 -Description: Off-by-one error in the str_ireplace function in PHP 5.2.1 might allow context-dependent attackers to cause a denial of service (crash). - -Id: 43 -CVE: CVE-2007-0988 -Severity: -Reporter: -Published: 2007-02-19 -Extension: core -Range: -Affects: PHP -Fixed-in: To be fixed in PHP 5.2.2 -Description: If unserializing untrusted data on 64-bit platforms, the zend_hash_init() function can be forced to enter an infinite loop, consuming CPU resources for a limited length of time, until the script timeout alarm aborts execution of the script. diff --git a/sitemap.php b/sitemap.php index bbb6542243..8e7831ad40 100644 --- a/sitemap.php +++ b/sitemap.php @@ -1,7 +1,7 @@ "help")); +site_header("Sitemap", ["current" => "help"]); ?>

        PHP.net Sitemap

        @@ -16,6 +16,7 @@
      • PHP 4 ChangeLog
      • PHP 5 ChangeLog
      • PHP 7 ChangeLog
      • +
      • PHP 8 ChangeLog

      Getting PHP

      @@ -29,8 +30,8 @@

      PHP Bugs

      PHP Support

      diff --git a/sites.php b/sites.php index b582fb0860..d72523522a 100644 --- a/sites.php +++ b/sites.php @@ -1,7 +1,7 @@ "help")); +site_header("A Tourist's Guide", ["current" => "help"]); ?>

      PHP.net: A Tourist's Guide

      @@ -63,15 +63,15 @@

      - news.php.net: + news-web.php.net: Mailing Lists Web and NNTP Interface

      - news.php.net is the web interface to the PHP mailing lists. If you're not + news-web.php.net is the web interface to the PHP mailing lists. If you're not subscribed to the mailing lists, but you still want to keep in touch regularly, this is your place. An infinite pile of fresh news and trends of PHP. You can - also point your news reader at the NNTP server at news.php.net to follow the + also point your news reader at the NNTP server at news server to follow the lists.

      @@ -110,39 +110,13 @@ reported the same problem!).

      -

      doc.php.net: Documentation Tools

      +

      doc.php.net: Documentation Tools

      This page provides set of useful tools for PHP Manual translators and contributors.

      -

      edit.php.net: PhD Online Editor

      - -

      - PhD O.E. is an online documentation editor. Its a great tool for users that are looking for a way to get into - contributing to PHP.net. Anonymous users can submit patches through the editor, while karma holders can approve - and commit changes directly from the editor. -

      - -

      docs.php.net: Documentation dev server

      - -

      - The documentation developmental server is a PHP mirror that contains upcoming - releases of the PHP documentation before it's pushed out to the mirrors. - Documentation changes, such as layout, is tested here (with feedback requested) - before being made official. Documentation is built here four times a day. -

      - -

      qa.php.net: Quality Assurance Team

      - -

      - The Quality Assurance team is one of the most important pieces of the PHP - project, protecting users from bugs. It is gathered around the QA mailing list, - and this site allows anyone to provide tests and experience to the release - process. -

      -

      github.com/php/: Git Repository

      @@ -160,64 +134,6 @@ interface to it. There you can browse the history (and latest versions) of the

      -

      svn.php.net: Archived SVN Repository

      - -

      - The PHP project used to be organized under the SVN revision control system, but - migrated to Git (see above) in March 2012. - The old SVN repository is archived here for posterity, however it's still used for - i.e. documentation files. -

      - - - -

      gtk.php.net: PHP-GTK

      - -

      - This web site is the home of the PHP-GTK project, which allows PHP to be - used to build graphical interfaces, with slick interface and highly - interactive content. You'll find the downloads and docs here, - and the latest news from the project. -

      - -

      gcov.php.net: Test and Code Coverage analysis

      - -

      - This site is dedicated to automatic PHP code coverage testing. On a regular - basis current Git snapshots are being build and tested on this machine. After - all tests are done the results are visualized along with a code coverage - analysis. -

      -

      wiki.php.net: The PHP Wiki

      @@ -226,22 +142,22 @@ interface to it. There you can browse the history (and latest versions) of the has a wiki section and everyone is able to apply for wiki commit access.

      -

      people.php.net: The PHP Developers Profiles

      +

      windows.php.net: PHP for Windows

      - A list of the developers behind PHP along with quick profiles for each of them. + This site is dedicated to supporting PHP on Microsoft Windows. + It also supports ports of PHP extensions or features as well as providing special builds for the various Windows architectures.

      -people.php.net: The PHP Developers Profiles -

      Archived CVS Repository

      -

      Cross Reference

      +

      + A list of the developers behind PHP along with quick profiles for each of them. +

      -*/ +Main Website

      Conference Materials

      @@ -250,20 +166,14 @@ interface to it. There you can browse the history (and latest versions) of the

      The PHP Extension Community Library

      Bug Database

      Documentation collaboration

      -

      Documentation dev server

      -

      Quality Assurance Team

      Git Repository

      -

      Archived SVN Repository

      -

      PHP-GTK

      -

      Test and Code Coverage analysis

      The PHP Wiki +

      PHP for Windows

      The PHP Developers Profiles SIDEBAR_DATA; // Print the common footer. -site_footer( - array( - 'sidebar' => $SIDEBAR - ) -); +site_footer([ + 'sidebar' => $SIDEBAR, +]); diff --git a/software.php b/software.php index 4b805c8b90..9b45306a3c 100644 --- a/software.php +++ b/software.php @@ -1,7 +1,7 @@ "help")); +site_header("PHP Software", ["current" => "help"]); ?>

      PHP Software

      diff --git a/src/I18n/Languages.php b/src/I18n/Languages.php new file mode 100644 index 0000000000..a74fc65469 --- /dev/null +++ b/src/I18n/Languages.php @@ -0,0 +1,74 @@ + 'English', + 'de' => 'German', + 'es' => 'Spanish', + 'fr' => 'French', + 'it' => 'Italian', + 'ja' => 'Japanese', + 'pl' => 'Polish', + 'pt_BR' => 'Brazilian Portuguese', + 'ro' => 'Romanian', + 'ru' => 'Russian', + 'tr' => 'Turkish', + 'uk' => 'Ukrainian', + 'zh' => 'Chinese (Simplified)', + ]; + + /** + * The following languages are inactive, which means they will not: + * - Show up via the language select box at php.net + * - Be selectable via my.php + * - Accept redirections to the translation, despite ACCEPT_LANGUAGE + * - Be listed at php.net/docs or php.net/download-docs + * However, translation status for these languages is available at: + * - https://doc.php.net/ + */ + public const INACTIVE_ONLINE_LANGUAGES = [ + 'pl' => 'Polish', + 'ro' => 'Romanian', + ]; + + public const ACTIVE_ONLINE_LANGUAGES = [ + 'en' => 'English', + 'de' => 'German', + 'es' => 'Spanish', + 'fr' => 'French', + 'it' => 'Italian', + 'ja' => 'Japanese', + 'pt_BR' => 'Brazilian Portuguese', + 'ru' => 'Russian', + 'tr' => 'Turkish', + 'uk' => 'Ukrainian', + 'zh' => 'Chinese (Simplified)', + ]; + + /** + * Convert between language codes back and forth + * + * Uses non-standard languages codes and so conversion is needed when communicating with the outside world. + * + * Fall back to English if the language is not available. + */ + public function convert(string $languageCode): string + { + return match ($languageCode) { + 'zh_cn', 'zh_CN' => 'zh', + 'pt_br', 'pt_BR' => 'pt_BR', + default => array_key_exists($languageCode, self::LANGUAGES) ? $languageCode : 'en', + }; + } +} diff --git a/src/LangChooser.php b/src/LangChooser.php new file mode 100644 index 0000000000..f889e14225 --- /dev/null +++ b/src/LangChooser.php @@ -0,0 +1,168 @@ + $availableLanguages + * @param array $inactiveLanguages + */ + public function __construct( + private readonly array $availableLanguages, + private readonly array $inactiveLanguages, + string $preferredLanguage, + string $defaultLanguage, + ) + { + $this->defaultLanguage = $this->normalize($defaultLanguage); + $this->preferredLanguage = $this->normalize($preferredLanguage); + } + + /** + * @return array{string, string} + */ + public function chooseCode( + string|array|null $langParam, + string $requestUri, + ?string $acceptLanguageHeader, + ): array + { + // Default values for languages + $explicitly_specified = ''; + + // Specified for the request (GET/POST parameter) + if (is_string($langParam)) { + $langCode = $this->normalize(htmlspecialchars($langParam, ENT_QUOTES, 'UTF-8')); + $explicitly_specified = $langCode; + if ($this->isAvailableLanguage($langCode)) { + return [$langCode, $explicitly_specified]; + } + } + + // Specified in a shortcut URL (eg. /en/echo or /pt_br/echo) + if (preg_match("!^/(\\w{2}(_\\w{2})?)/!", htmlspecialchars($requestUri,ENT_QUOTES, 'UTF-8'), $flang)) { + // Put language into preference list + $rlang = $this->normalize($flang[1]); + + // Set explicitly specified language + if (empty($explicitly_specified)) { + $explicitly_specified = $rlang; + } + + // Drop out language specification from URL, as this is already handled + $_SERVER['STRIPPED_URI'] = preg_replace( + "!^/$flang[1]/!", "/", htmlspecialchars($requestUri, ENT_QUOTES, 'UTF-8'), + ); + + if ($this->isAvailableLanguage($rlang)) { + return [$rlang, $explicitly_specified]; + } + } + + // Specified in a manual URL (eg. manual/en/ or manual/pt_br/) + if (preg_match("!^/manual/(\\w{2}(_\\w{2})?)(/|$)!", htmlspecialchars($requestUri, ENT_QUOTES, 'UTF-8'), $flang)) { + $flang = $this->normalize($flang[1]); + + // Set explicitly specified language + if (empty($explicitly_specified)) { + $explicitly_specified = $flang; + } + + if ($this->isAvailableLanguage($flang)) { + return [$flang, $explicitly_specified]; + } + } + + // Honor the users own language setting (if available) + if ($this->isAvailableLanguage($this->preferredLanguage)) { + return [$this->preferredLanguage, $explicitly_specified]; + } + + // Specified by the user via the browser's Accept Language setting + // Samples: "hu, en-us;q=0.66, en;q=0.33", "hu,en-us;q=0.5" + $browser_langs = []; + + // Check if we have $_SERVER['HTTP_ACCEPT_LANGUAGE'] set and + // it no longer breaks if you only have one language set :) + if (isset($acceptLanguageHeader)) { + $browser_accept = explode(",", $acceptLanguageHeader); + + // Go through all language preference specs + foreach ($browser_accept as $value) { + // The language part is either a code or a code with a quality + // We cannot do anything with a * code, so it is skipped + // If the quality is missing, it is assumed to be 1 according to the RFC + if (preg_match("!([a-z-]+)(;q=([0-9\\.]+))?!", strtolower(trim($value)), $found)) { + $quality = (isset($found[3]) ? (float) $found[3] : 1.0); + $browser_langs[] = [$found[1], $quality]; + } + unset($found); + } + } + + // Order the codes by quality + usort($browser_langs, fn ($a, $b) => $b[1] <=> $a[1]); + + // For all languages found in the accept-language + foreach ($browser_langs as $langdata) { + + // Translation table for accept-language codes and phpdoc codes + switch ($langdata[0]) { + case "pt-br": + $langdata[0] = 'pt_br'; + break; + case "zh-cn": + $langdata[0] = 'zh'; + break; + case "zh-hk": + $langdata[0] = 'hk'; + break; + case "zh-tw": + $langdata[0] = 'tw'; + break; + } + + // We do not support flavors of languages (except the ones above) + // This is not in conformance to the RFC, but it here for user + // convenience reasons + if (preg_match("!^(.+)-!", $langdata[0], $match)) { + $langdata[0] = $match[1]; + } + + $lang = $this->normalize($langdata[0]); + if ($this->isAvailableLanguage($lang)) { + return [$lang, $explicitly_specified]; + } + } + + // Language preferred by this mirror site + if ($this->isAvailableLanguage($this->defaultLanguage)) { + return [$this->defaultLanguage, $explicitly_specified]; + } + + // Last default language is English + return ["en", $explicitly_specified]; + } + + private function normalize(string $langCode): string + { + // Make language code lowercase, html encode special chars and remove slashes + $langCode = strtolower(htmlspecialchars($langCode)); + + // The Brazilian Portuguese code needs special attention + if ($langCode == 'pt_br') { + return 'pt_BR'; + } + return $langCode; + } + + private function isAvailableLanguage(string $langCode): bool + { + return isset($this->availableLanguages[$langCode]) && !isset($this->inactiveLanguages[$langCode]); + } +} diff --git a/src/Navigation/NavItem.php b/src/Navigation/NavItem.php new file mode 100644 index 0000000000..5642dfb29e --- /dev/null +++ b/src/Navigation/NavItem.php @@ -0,0 +1,14 @@ + 'PHP.net frontpage news', + 'releases' => 'New PHP release', + 'conferences' => 'Conference announcement', + 'cfp' => 'Call for Papers', + ]; + + public const WEBROOT = "https://www.php.net"; + + public const PHPWEB = __DIR__ . '/../../'; + + public const ARCHIVE_FILE_REL = 'archive/archive.xml'; + + public const ARCHIVE_FILE_ABS = self::PHPWEB . self::ARCHIVE_FILE_REL; + + public const ARCHIVE_ENTRIES_REL = 'archive/entries/'; + + public const ARCHIVE_ENTRIES_ABS = self::PHPWEB . self::ARCHIVE_ENTRIES_REL; + + public const IMAGE_PATH_REL = 'images/news/'; + + public const IMAGE_PATH_ABS = self::PHPWEB . self::IMAGE_PATH_REL; + + protected $title = ''; + + protected $categories = []; + + protected $conf_time = 0; + + protected $image = []; + + protected $content = ''; + + protected $id = ''; + + public function setTitle(string $title): self { + $this->title = $title; + return $this; + } + + public function setCategories(array $cats): self { + foreach ($cats as $cat) { + if (!isset(self::CATEGORIES[$cat])) { + throw new \Exception("Unknown category: $cat"); + } + } + $this->categories = $cats; + return $this; + } + + public function addCategory(string $cat): self { + if (!isset(self::CATEGORIES[$cat])) { + throw new \Exception("Unknown category: $cat"); + } + if (!in_array($cat, $this->categories, false)) { + $this->categories[] = $cat; + } + return $this; + } + + public function isConference(): bool { + return (bool)array_intersect($this->categories, ['cfp', 'conferences']); + } + + public function setConfTime(int $time): self { + $this->conf_time = $time; + return $this; + } + + public function setImage(string $path, string $title, ?string $link): self { + if (basename($path) !== $path) { + throw new \Exception('path must be a simple file name under ' . self::IMAGE_PATH_REL); + } + if (!file_exists(self::IMAGE_PATH_ABS . $path)) { + throw new \Exception('Image not found at web-php/' . self::IMAGE_PATH_REL . $path); + } + $this->image = [ + 'path' => $path, + 'title' => $title, + 'link' => $link, + ]; + return $this; + } + + public function setContent(string $content): self { + if (empty($content)) { + throw new \Exception('Content must not be empty'); + } + $this->content = $content; + return $this; + } + + public function getId(): string { + return $this->id; + } + + public function save(): self { + if (empty($this->id)) { + $this->id = self::selectNextId(); + } + + // Create the XML document. + $dom = new \DOMDocument("1.0", "utf-8"); + $dom->formatOutput = true; + $dom->preserveWhiteSpace = false; + $item = $dom->createElementNs("http://www.w3.org/2005/Atom", "entry"); + + $href = self::WEBROOT . ($this->isConference() ? '/conferences/index.php' : '/index.php'); + $archive = self::WEBROOT . "/archive/" . date('Y', $_SERVER['REQUEST_TIME']) . ".php#{$this->id}"; + $link = ($this->image['link'] ?? null) ?: $archive; + + self::ce($dom, "title", $this->title, [], $item); + self::ce($dom, "id", $archive, [], $item); + self::ce($dom, "published", date(DATE_ATOM), [], $item); + self::ce($dom, "updated", date(DATE_ATOM), [], $item); + self::ce($dom, "link", null, ['href' => "{$href}#{$this->id}", "rel" => "alternate", "type" => "text/html"], $item); + self::ce($dom, "link", null, ['href' => $link, 'rel' => 'via', 'type' => 'text/html'], $item); + + if (!empty($this->conf_time)) { + $item->appendChild($dom->createElementNs("http://php.net/ns/news", "finalTeaserDate", date("Y-m-d", $this->conf_time))); + } + + foreach ($this->categories as $cat) { + self::ce($dom, "category", null, ['term' => $cat, "label" => self::CATEGORIES[$cat]], $item); + } + + if ($this->image['path'] ?? '') { + $image = $item->appendChild($dom->createElementNs("http://php.net/ns/news", "newsImage", $this->image['path'])); + $image->setAttribute("link", $this->image['link']); + $image->setAttribute("title", $this->image['title']); + } + + $content = self::ce($dom, "content", null, [], $item); + + // Slurp content into our DOM. + $tdoc = new \DOMDocument("1.0", "utf-8"); + $tdoc->formatOutput = true; + if ($tdoc->loadXML("
      {$this->content}
      ")) { + $content->setAttribute("type", "xhtml"); + $div = $content->appendChild($dom->createElement("div")); + $div->setAttribute("xmlns", "http://www.w3.org/1999/xhtml"); + foreach ($tdoc->firstChild->childNodes as $node) { + $div->appendChild($dom->importNode($node, true)); + } + } else { + fwrite(STDERR, "There is something wrong with your xhtml, falling back to html"); + $content->setAttribute("type", "html"); + $content->nodeValue = $this->content; + } + + $dom->appendChild($item); + $dom->save(self::ARCHIVE_ENTRIES_ABS . $this->id . ".xml"); + + return $this; + } + + public function updateArchiveXML(): self { + if (empty($this->id)) { + throw new \Exception('Entry must be saved before updating archive XML'); + } + + $arch = new \DOMDocument("1.0", "utf-8"); + $arch->formatOutput = true; + $arch->preserveWhiteSpace = false; + $arch->load(self::ARCHIVE_FILE_ABS); + + $first = $arch->createElementNs("http://www.w3.org/2001/XInclude", "xi:include"); + $first->setAttribute("href", "entries/{$this->id}.xml"); + + $second = $arch->getElementsByTagNameNs("http://www.w3.org/2001/XInclude", "include")->item(0); + $arch->documentElement->insertBefore($first, $second); + $arch->save(self::ARCHIVE_FILE_ABS); + + return $this; + } + + private static function selectNextId(): string { + $filename = date("Y-m-d", $_SERVER["REQUEST_TIME"]); + $count = 0; + do { + $count++; + $id = $filename . "-" . $count; + $basename = "{$id}.xml"; + } while (file_exists(self::ARCHIVE_ENTRIES_ABS . $basename)); + + return $id; + } + + private static function ce(\DOMDocument $d, string $name, $value, array $attrs = [], ?\DOMNode $to = null) { + if ($value) { + $n = $d->createElement($name, $value); + } else { + $n = $d->createElement($name); + } + foreach ($attrs as $k => $v) { + $n->setAttribute($k, $v); + } + if ($to) { + return $to->appendChild($n); + } + return $n; + } +} + diff --git a/src/News/NewsHandler.php b/src/News/NewsHandler.php new file mode 100644 index 0000000000..a7e97f766e --- /dev/null +++ b/src/News/NewsHandler.php @@ -0,0 +1,81 @@ +getPregeneratedNews(); + if (!isset($news[0])) { + return null; + } + + return $news[0]; + } + + /** @return list */ + public function getFrontPageNews(): array + { + $frontPage = []; + foreach ($this->getPregeneratedNews() as $entry) { + foreach ($entry['category'] as $category) { + if ($category['term'] !== 'frontpage') { + continue; + } + + $frontPage[] = $entry; + if (count($frontPage) >= self::MAX_FRONT_PAGE_NEWS) { + break 2; + } + } + } + + return $frontPage; + } + + /** @return list */ + public function getConferences(): array + { + $conferences = []; + foreach ($this->getPregeneratedNews() as $entry) { + foreach ($entry['category'] as $category) { + if ($category['term'] !== 'cfp' && $category['term'] !== 'conferences') { + continue; + } + + $conferences[] = $entry; + break; + } + } + + return $conferences; + } + + /** @return list */ + public function getNewsByYear(int $year): array + { + return array_values(array_filter( + $this->getPregeneratedNews(), + static fn (array $entry): bool => (int) (new DateTimeImmutable($entry['published']))->format('Y') === $year, + )); + } + + public function getPregeneratedNews(): array + { + $NEWS_ENTRIES = null; + include __DIR__ . '/../../include/pregen-news.inc'; + + return is_array($NEWS_ENTRIES) ? $NEWS_ENTRIES : []; + } +} diff --git a/src/UserNotes/Sorter.php b/src/UserNotes/Sorter.php new file mode 100644 index 0000000000..86df8a86db --- /dev/null +++ b/src/UserNotes/Sorter.php @@ -0,0 +1,97 @@ + $notes + */ + public function sort(array &$notes):void { + // First we make a pass over the data to get the min and max values + // for data normalization. + $this->findMinMaxValues($notes); + + $this->voteFactor = $this->maxVote - $this->minVote + ? (1 - .3) / ($this->maxVote - $this->minVote) + : .5; + $this->ageFactor = $this->maxAge - $this->minAge + ? 1 / ($this->maxAge - $this->minAge) + : .5; + + $this->ageFactor *= $this->ageWeight; + + // Second we loop through to calculate sort priority using the above numbers + $prio = $this->calcSortPriority($notes); + + // Third we sort the data. + uasort($notes, function ($a, $b) use ($prio) { + return $prio[$b->id] <=> $prio[$a->id]; + }); + } + + private function calcVotePriority(UserNote $note):float { + return ($note->upvotes - $note->downvotes - $this->minVote) * $this->voteFactor + .3; + } + + private function calcRatingPriority(UserNote $note):float { + return $note->upvotes + $note->downvotes <= 2 ? 0.5 : $this->calcRating($note); + } + + private function calcRating(UserNote $note):float { + $totalVotes = $note->upvotes + $note->downvotes; + return $totalVotes > 0 ? $note->upvotes / $totalVotes : .5; + } + + /** + * @param array $notes + */ + private function calcSortPriority(array $notes): array { + $prio = []; + foreach ($notes as $note) { + $prio[$note->id] = ($this->calcVotePriority($note) * $this->voteWeight) + + ($this->calcRatingPriority($note) * $this->ratingWeight) + + (($note->ts - $this->minAge) * $this->ageFactor); + } + return $prio; + } + + /** + * @param array $notes + */ + private function findMinMaxValues(array $notes):void { + if ($notes === []) { + return; + } + + $first = array_shift($notes); + + $this->minVote = $this->maxVote = ($first->upvotes - $first->downvotes); + $this->minAge = $this->maxAge = $first->ts; + + foreach ($notes as $note) { + $this->maxVote = max($this->maxVote, ($note->upvotes - $note->downvotes)); + $this->minVote = min($this->minVote, ($note->upvotes - $note->downvotes)); + $this->maxAge = max($this->maxAge, $note->ts); + $this->minAge = min($this->minAge, $note->ts); + } + } +} diff --git a/src/UserNotes/UserNote.php b/src/UserNotes/UserNote.php new file mode 100644 index 0000000000..fbb852746f --- /dev/null +++ b/src/UserNotes/UserNote.php @@ -0,0 +1,18 @@ + + */ + public function load(string $id): array + { + $hash = substr(md5($id), 0, 16); + $notes_file = $_SERVER['DOCUMENT_ROOT'] . "/backend/notes/" . substr($hash, 0, 2) . "/$hash"; + + // Open the note file for reading and get the data (12KB) + // ..if it exists + if (!file_exists($notes_file)) { + return []; + } + $notes = []; + if ($fp = @fopen($notes_file, "r")) { + while (!feof($fp)) { + $line = chop(fgets($fp, 12288)); + if ($line == "") { continue; } + @list($id, $sect, $rate, $ts, $user, $note, $up, $down) = explode("|", $line); + $notes[$id] = new UserNote($id, $sect, $rate, $ts, $user, base64_decode($note, true), (int) $up, (int) $down); + } + fclose($fp); + } + return $notes; + } + + /** + * Print out all user notes for this manual page + * + * @param array $notes + */ + public function display($notes):void { + global $LANG; + + // Get needed values + list($filename) = $GLOBALS['PGI']['this']; + + // Drop file extension from the name + if (substr($filename, -4) == '.php') { + $filename = substr($filename, 0, -4); + } + + $sorter = new Sorter(); + $sorter->sort($notes); + + $addNote = autogen('add_a_note', $LANG); + $repo = strtolower($LANG); + // Link target to add a note to the current manual page, + // and it's extended form with a [+] image + $addnotelink = '/manual/add-note.php?sect=' . $filename . + '&repo=' . $repo . + '&redirect=' . $_SERVER['BASE_HREF']; + $addnotesnippet = make_link( + $addnotelink, + "+$addNote", + ); + + $num_notes = count($notes); + $noteCountHtml = ''; + if ($num_notes) { + $noteCountHtml = "$num_notes note" . ($num_notes == 1 ? '' : 's') . ""; + } + + $userContributedNotes = autogen('user_contributed_notes', $LANG); + echo << +
      + {$addnotesnippet} +

      $userContributedNotes {$noteCountHtml}

      +
      + END_USERNOTE_HEADER; + + // If we have no notes, then inform the user + if ($num_notes === 0) { + $noUserContributedNotes = autogen('no_user_notes', $LANG); + echo "\n
      $noUserContributedNotes
      "; + } else { + // If we have notes, print them out + echo '
      '; + foreach ($notes as $note) { + $this->displaySingle($note); + } + echo "
      \n"; + echo "
      $addnotesnippet
      \n"; + } + echo ""; + } + + /** + * Print out one user note entry + */ + public function displaySingle(UserNote $note, $voteOption = true): void + { + if ($note->user) { + $name = "\n " . htmlspecialchars($note->user) . ""; + } else { + $name = "Anonymous"; + } + $name = ($note->id ? "\n id}\" class=\"name\">$nameid}\"> ¶" : "\n $name"); + + // New date style will be relative time + $date = new \DateTime("@{$note->ts}"); + $datestr = $this->relTime($date); + $fdatestr = $date->format("Y-m-d h:i"); + $text = $this->cleanContent($note->text); + + // Calculate note rating by up/down votes + $vote = $note->upvotes - $note->downvotes; + $p = floor(($note->upvotes / (($note->upvotes + $note->downvotes) ?: 1)) * 100); + $rate = !$p && !($note->upvotes + $note->downvotes) ? "no votes..." : "$p% like this..."; + + // Vote User Notes Div + if ($voteOption) { + list($redir_filename) = $GLOBALS['PGI']['this']; + if (substr($redir_filename, -4) == '.php') { + $redir_filename = substr($redir_filename, 0, -4); + } + $rredir_filename = urlencode($redir_filename); + $votediv = << +
      + up +
      +
      + down +
      +
      + {$vote} +
      + + VOTEDIV; + } else { + $votediv = null; + } + + // If the viewer is logged in, show admin options + if (isset($_COOKIE['IS_DEV']) && $note->id) { + + $admin = "\n \n " . + + $this->makePopupLink( + 'https://main.php.net/manage/user-notes.php?action=edit+' . $note->id, + 'edit note', + 'admin', + 'scrollbars=yes,width=650,height=400', + ) . "\n " . + + $this->makePopupLink( + 'https://main.php.net/manage/user-notes.php?action=reject+' . $note->id, + 'reject note', + 'admin', + 'scrollbars=no,width=300,height=200', + ) . "\n " . + + $this->makePopupLink( + 'https://main.php.net/manage/user-notes.php?action=delete+' . $note->id, + 'delete note', + 'admin', + 'scrollbars=no,width=300,height=200', + ) . "\n "; + + } else { + $admin = ''; + } + + echo <<{$votediv}{$name}{$admin}
      {$datestr}
      +
      + {$text} +
      + + USER_NOTE_TEXT; + } + + // Clean out the content of one user note for printing to HTML + private function cleanContent(string $text): string + { + // Highlight PHP source + $text = highlight_php(trim($text), true); + + // Turn urls into links + return preg_replace( + '!((mailto:|(https?|ftp|nntp|news)://).*?)(\s|<|\)|"|\\\\|\'|$)!', + '\1\4', + $text, + ); + } + + /** + * This function takes a DateTime object and returns a formated string of the time difference relative to now + */ + private function relTime(\DateTime $date): string + { + $current = new \DateTime(); + $diff = $current->diff($date); + $units = ["year" => $diff->format("%y"), + "month" => $diff->format("%m"), + "day" => $diff->format("%d"), + "hour" => $diff->format("%h"), + "minute" => $diff->format("%i"), + "second" => $diff->format("%s"), + ]; + $out = "just now..."; + foreach ($units as $unit => $amount) { + if (empty($amount)) { + continue; + } + $out = $amount . " " . ($amount == 1 ? $unit : $unit . "s") . " ago"; + break; + } + return $out; + } + + /** + * Return a hyperlink to something, within the site, that pops up a new window + */ + private function makePopupLink(string $url, string $linktext = '', string $target = '', string $windowprops = ''): string + { + return sprintf("%s", + htmlspecialchars($url, ENT_QUOTES | ENT_IGNORE), + ($target ?: "_new"), + htmlspecialchars($url, ENT_QUOTES | ENT_IGNORE), + ($target ?: "_new"), + $windowprops, + ($linktext ?: $url), + ); + } +} diff --git a/src/UserPreferences.php b/src/UserPreferences.php new file mode 100644 index 0000000000..60e3d42362 --- /dev/null +++ b/src/UserPreferences.php @@ -0,0 +1,87 @@ +languageCode = ''; + $this->searchType = self::URL_NONE; + $this->isUserGroupTipsEnabled = false; + + if (!isset($_COOKIE['MYPHPNET']) || !is_string($_COOKIE['MYPHPNET']) || $_COOKIE['MYPHPNET'] === '') { + return; + } + + /** + * 0 - Language code + * 1 - URL search fallback + * 2 - Mirror site (removed) + * 3 - User Group tips + * 4 - Documentation developmental server (removed) + */ + $preferences = explode(",", $_COOKIE['MYPHPNET']); + $this->languageCode = $preferences[0] ?? ''; + $this->setUrlSearchType($preferences[1] ?? self::URL_NONE); + $this->isUserGroupTipsEnabled = isset($preferences[3]) && $preferences[3]; + } + + public function setUrlSearchType(mixed $type): void + { + if (!in_array($type, [self::URL_FUNC, self::URL_MANUAL, self::URL_NONE], true)) { + return; + } + + $this->searchType = $type; + } + + public function setIsUserGroupTipsEnabled(bool $enable): void { + // Show the ug tips to lucky few, depending on time. + if ($_SERVER["REQUEST_TIME"] % 10) { + $enable = true; + } + + $this->isUserGroupTipsEnabled = $enable; + } + + public function save(): void + { + /** + * 0 - Language code + * 1 - URL search fallback + * 2 - Mirror site (removed) + * 3 - User Group tips + * 4 - Documentation developmental server (removed) + */ + $preferences = [$this->languageCode, $this->searchType, '', $this->isUserGroupTipsEnabled]; + + // Set all the preferred values for a year + mirror_setcookie("MYPHPNET", join(",", $preferences), 60 * 60 * 24 * 365); + } +} diff --git a/src/autoload.php b/src/autoload.php new file mode 100644 index 0000000000..e69570a6b4 --- /dev/null +++ b/src/autoload.php @@ -0,0 +1,28 @@ + code[class*=language-], pre[class*=language-] { + background: transparent; +} + +.code-toolbar .toolbar { + opacity: 1 !important; + visibility: visible !important; + pointer-events: auto !important; +} + +div.code-toolbar > .toolbar { + position: relative; + border-top: 1px solid rgba(0, 0, 0, .15); + top: 0; + right: 0; + justify-content: space-between; + align-items: center; + display: flex; +} + +.code-toolbar { + box-shadow: 0 0 0 1px rgba(0, 0, 0, .15); +} + +.toolbar-item { + padding: 5px; +} + +pre.line-numbers { + padding-left: 2.5em !important; +} + +pre.line-numbers .line-numbers-rows { + border-right: none !important; + width: 4em !important; +} + +pre.line-numbers .line-numbers-rows > span:before { + padding-right: 1em !important; +} + +div.code-toolbar > .toolbar > .toolbar-item > a, div.code-toolbar > .toolbar > .toolbar-item > button, div.code-toolbar > .toolbar > .toolbar-item > span { + color: #000; + background: transparent; + box-shadow: none; + padding-left: 1em !important; +} + +button.copy-to-clipboard-button { + padding: 0.75em !important; + padding-right: 1em !important; + background-color: var(--dark-blue-color) !important; + color: #fff !important; + border-radius: 30px !important; +} + +button.copy-to-clipboard-button:hover { + background-color: var(--dark-magenta-color) !important; + border-color: var(--dark-magenta-color) !important; +} + +.win-build { + background: rgba(39, 40, 44, 0.05); + margin: 20px 0; + padding: 20px 20px 10px 20px; + border-top: 4px solid var(--dark-blue-color, #4F5B93); +} + +.win-build h4 { + line-height: 1.5rem; + margin-bottom: 0; +} + +.instructions .size { + background: #dcdcdc; + border-radius: 6px; + padding: 3px 7px; + font-size: 0.8rem; + font-weight: 600; +} + +.instructions .time { + color: #555; + font-size: 0.8rem; + display: block; +} + +.instructions .sha256 { + word-break: break-all; +} diff --git a/styles/cse-search.css b/styles/cse-search.css new file mode 100644 index 0000000000..45d3879b39 --- /dev/null +++ b/styles/cse-search.css @@ -0,0 +1,237 @@ +/* {{{ Search results. */ + +/* Undo a whole bunch of default styles. */ +#layout .cse .gsc-control-cse, +#layout .gsc-control-cse, +#layout .gsc-control-cse .gsc-table-result { + font-family: var(--font-family-sans-serif); + font-size: 1rem; + margin: 0; + padding: 0; + position: relative; +} + +/* Override the search box styling. */ +#layout .cse form.gsc-search-box, +#layout form.gsc-search-box { + margin: 0 0 1rem 0; + padding: 0; +} + +#layout .cse table.gsc-search-box, +#layout table.gsc-search-box { + border: solid 1px #99c; + border-radius: 2px; +} + +#layout .cse input.gsc-input, +#layout input.gsc-input { + border: 0; +} + +#layout .cse table.gsc-search-box td, +#layout table.gsc-search-box td { + padding-right: unset; +} + +#layout .cse table.gsc-search-box .gsc-search-button, +#layout table.gsc-search-box .gsc-search-button { + margin-left: unset; +} + +#layout .cse input.gsc-search-button, +#layout input.gsc-search-button { + background: #99c; + border: solid 1px #99c; + border-radius: 0; + color: rgb(238, 238, 255); +} + +#layout .cse input.gsc-search-button:hover, +#layout input.gsc-search-button:hover { + color: white; +} + +/* We don't need a clear button. */ +#layout .cse .gsc-clear-button, +#layout .gsc-clear-button { + display: none; +} + +/* Style the "tabs", and reformat them as a sidebar item. */ +#layout .cse div.gsc-results-wrapper-visible, +#layout div.gsc-results-wrapper-visible { + position: relative; + min-height: 11rem; +} + +#layout .cse .gsc-tabsArea, +#layout .gsc-tabsArea { + position: absolute; + top: 0; + left: 0; + width: 23.404%; + margin-right: 2.762%; + padding: .5rem .75rem; + border: 1px solid #e0e0e0; + background-color: #f2f2f2; + border-bottom-color: #d9d9d9; + border-radius: 2px; + margin-top: 0; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#layout .cse .gsc-tabHeader.gsc-tabhActive, +#layout .gsc-tabHeader.gsc-tabhActive, +#layout .cse .gsc-tabHeader.gsc-tabhInactive, +#layout .gsc-tabHeader.gsc-tabhInactive { + background: transparent; + color: rgb(38, 38, 38); + border: 0; + display: block; + font-size: 100%; + font-weight: normal; + border-top: dotted 1px rgb(189, 189, 189); + padding: 0; +} + +#layout .cse .gsc-tabHeader.gsc-tabhActive:first-child, +#layout .gsc-tabHeader.gsc-tabhActive:first-child, +#layout .cse .gsc-tabHeader.gsc-tabhInactive:first-child, +#layout .gsc-tabHeader.gsc-tabhInactive:first-child { + border: 0; +} + +#layout .cse .gsc-tabHeader.gsc-tabhActive, +#layout .gsc-tabHeader.gsc-tabhActive { + color: black; +} + +#layout .cse .gsc-tabHeader.gsc-tabhActive:after, +#layout .gsc-tabHeader.gsc-tabhActive:after { + content: "»"; + color: black; + float: right; + text-align: right; +} + +#layout .cse .gsc-tabHeader.gsc-tabhInactive:hover, +#layout .gsc-tabHeader.gsc-tabhInactive:hover { + color: #693; +} + +/* Format the results in the right place. */ +#layout .cse .gsc-above-wrapper-area, +#layout .gsc-above-wrapper-area { + border: 0; +} + +#layout .cse .gsc-above-wrapper-area-container, +#layout .gsc-above-wrapper-area-container { + width: 100%; +} + +#layout .cse .gsc-orderby, +#layout .gsc-orderby { + padding: 0 4px; +} + +#layout .cse .gsc-result-info-container, +#layout .gsc-result-info-container { + padding: 0; + margin: 0; + vertical-align: inherit; +} + +#layout .cse .gsc-result-info, +#layout .gsc-result-info { + color: var(--dark-grey-color); + font-size: 0.75rem; + padding: 0; + margin: 0; +} + +#layout .cse .gsc-resultsHeader, +#layout .gsc-resultsHeader { + display: none; +} + +#layout .cse .gsc-webResult.gsc-result, +#layout .gsc-webResult.gsc-result { + margin: 0 0 1rem 0; + padding: 0; + border: 0; +} + +#layout .cse .gs-webResult.gs-result a, +#layout .gs-webResult.gs-result a, +#layout .cse .gs-webResult.gs-result a b, +#layout .gs-webResult.gs-result a b { + border-bottom: solid 1px rgb(51, 102, 153); + color: rgb(51, 102, 153); + text-decoration: none; +} + +#layout .cse .gs-webResult.gs-result a:focus, +#layout .gs-webResult.gs-result a:focus, +#layout .cse .gs-webResult.gs-result a:hover, +#layout .gs-webResult.gs-result a:hover, +#layout .cse .gs-webResult.gs-result a:focus b, +#layout .gs-webResult.gs-result a:focus b, +#layout .cse .gs-webResult.gs-result a:hover b, +#layout .gs-webResult.gs-result a:hover b { + border-bottom-color: rgb(51, 102, 153); + color: rgb(102, 153, 51); +} + +#layout .gs-webResult.gs-result .gs-visibleUrl { + font-weight: normal; +} + +/* Handle no results tabs. */ +#layout .gs-no-results-result .gs-snippet { + border: 0; + background: transparent; +} + +/* Override docs table styling we don't want. */ +.docs #cse th, +.docs #cse td { + padding: 0; +} + +/* }}} */ + +@media only screen and (max-width: 760px), (min-device-width: 768px) and (max-device-width: 1024px) { + tr { + margin: 0; + display: table-row; + } + + td:before { + content: none; + } + + table { + display: table; + } + + thead { + display: table-header-group; + } + + tbody { + display: table-row-group; + } + + td:not(.gsc-clear-button), + th { + display: table-cell; + } + + .gssb_a { + padding: 5px 3px !important; + white-space: normal !important; + } +} diff --git a/styles/home.css b/styles/home.css index 20e987de36..2edf051d5f 100644 --- a/styles/home.css +++ b/styles/home.css @@ -1,75 +1,155 @@ /* Home Page */ -#intro p { - color:#fff; + +/* Hero */ + +#intro .container { + padding: 0 24px; +} + +.hero { + width: 100%; + flex: none; + display: flex; + flex-direction: column; + align-items: center; + margin: 32px 0; +} + +.hero__logo { + width: 100%; + max-width: 240px; + margin-bottom: 24px; +} + +.hero__text { + margin-top: 0; + margin-bottom: 28px; + line-height: 1.5; + text-align: center; text-rendering: optimizeLegibility; } -#intro p, -#intro ul { - text-shadow:0 1px 2px rgba(0,0,0,.5); - font-size:1.125rem; + +.hero__text strong { + font-weight: 500; } -#intro ul a { - word-spacing: 0; +.hero__actions { + width: 100%; + display: flex; + flex-direction: column; + margin-bottom: 24px; } -#intro .row .blurb p:first-child { - margin-top:1.5rem; +.hero__btn { + box-sizing: border-box; + padding: 16px 32px; + margin-bottom: 12px; + border-radius: 30px; + text-align: center; + display: inline-block; + border: none; + font-size: 20px; + transition: background-color 0.2s; } -#intro .row .blurb, -#intro .row .download { - display:table-cell; - float:none; - padding:0 1.5rem; + +.hero__btn--primary { + background-color: var(--dark-blue-color); + color: #fff !important; } -#intro h3 { - margin:1.5rem 0 0; - color:#E6E6E6; +.hero__btn--primary:hover, .hero__btn--primary:focus { + background-color: var(--dark-magenta-color); } -#intro h3:after { - display:none; + +.hero__btn--secondary { + background-color: transparent; + color: #b8c0e9 !important; + border: 1px solid #6773ad; } -#intro .row { - position:relative; - display:table-row; +.hero__btn--secondary:hover, .hero__btn--secondary:focus { + background-color: var(--dark-magenta-color); + border-color: var(--dark-magenta-color); + color: #fff !important; } -#intro ul { +.hero__versions { + margin: 0; list-style:none; - word-spacing:.25rem; - margin-left:0; + display: flex; + flex-direction: column; + flex-wrap: wrap; + align-items: center; + justify-content: center; + width: 100%; } -#intro .dot { - display: inline-block; - width: 5px; - padding: 0 5px; +.hero__version { + margin-bottom: 12px; } -#intro .download { -} -#intro .download a.notes { - font-size:.75em; +.hero__versions a.notes { + font-size:.875rem; white-space:nowrap; } -#intro .download a { - color:#ccc; + +.hero__versions a { + color: var(--background-text-color); border:0; } -#intro .download a:hover, -#intro .download a:focus { + +.hero__versions a:hover, +.hero__versions a:focus { border-bottom:1px dotted; } -#intro .download a.download-link { - color:#fff; - width: 50px; +.hero__version-link { + color:#fff !important; display: inline-block; } +@media (min-width: 540px) { + .hero__actions { + flex-direction: row; + width: auto; + } + + .hero__btn { + min-width: 188px; + } + + .hero__btn--secondary { + margin-left: 8px; + } +} + +@media (min-width: 992px) { + .hero { + margin: 60px 0; + } + + .hero__versions { + flex-direction: row; + } + + .hero__version { + font-size: 1.125rem; + padding: 0 1.5rem; + } + + .hero__version:not(:first-child) { + border-left: 1px dotted #666; + } + + .hero__text { + font-size: 18px; + } +} + + +/* Layout */ + #layout-content { border-right:.25rem solid #666; } @@ -82,42 +162,24 @@ p.archive { text-align: right; } -@media (min-width: 480px) and (max-width: 768px) { - #intro .download { - width: 35%; - } - - #intro .blurb { - width: 65%; - } -} - @media (min-width: 768px) { - .navbar-search, - #intro .download, #intro .background, aside.tips, .layout-menu { width: 25%; } - #intro .blurb, #layout-content { + #layout-content { width: 75%; } } -@media (min-width: 480px) and (max-width: 590px) { - #intro .dot { - display: none; - } -} - @media (min-width: 768px) and (max-width: 784px) { - #intro .download, aside.tips, .navbar-search { + aside.tips { width: 30%; } - #intro .blurb, #layout-content { + #layout-content { width:70%; } } @@ -132,3 +194,25 @@ aside.tips .social-media .icon-twitter { font-size: 1.5em; vertical-align: middle; } + +/* Unheroic button */ +.btn { + box-sizing: border-box; + padding: 0.5rem 1rem; + margin-bottom: 1rem; + border-radius: 2rem; + text-align: center; + display: inline-block; + border: none; + transition: background-color 0.2s; +} + +.btn-primary { + background-color: var(--dark-blue-color); + color: #fff !important; +} + +.btn-primary:hover, .hero__btn--primary:focus { + background-color: var(--dark-magenta-color) !important; + border-color: var(--dark-magenta-color) !important; +} diff --git a/styles/i-love-markdown.css b/styles/i-love-markdown.css index 644484f7d8..6d1ad3d92f 100644 --- a/styles/i-love-markdown.css +++ b/styles/i-love-markdown.css @@ -188,6 +188,6 @@ } -.brand, #mainmenu-toggle-overlay, #mainmenu-toggle, #trick { +.navbar__brand, #mainmenu-toggle-overlay, #mainmenu-toggle, #trick { display: none; } diff --git a/styles/index.php b/styles/index.php index 960d9a9642..c7f1a320c3 100644 --- a/styles/index.php +++ b/styles/index.php @@ -1,4 +1,5 @@ code[class*=language-], pre[class*=language-] { + background: transparent; +} + +code[class*=language-], pre[class*=language-] { + text-shadow: none; +} + +.language-css .token.string, .style .token.string, .token.entity, .token.operator, .token.url { + background: transparent; +} + +.js-copy-code { + +} + +.features-title h2, +.before-and-after-title-and-description h2 { + position: relative; + overflow: visible; + display: inline-block; +} + +.features-title h2 .genanchor, +.before-and-after-title-and-description h2 .genanchor { + position: absolute; + top: 4px; + left: 0; + display: none; + margin-left: -30px; + height: 30px; + width: 30px; + background: url("/https/github.com/images/php8/anchor.svg") scroll no-repeat left center / 21px 16px transparent; + text-decoration: none; + border-bottom: none; + font-size: 0; +} + +.dark .features-title h2 .genanchor, +.dark .before-and-after-title-and-description h2 .genanchor { + background: url("/https/github.com/images/php8/anchor-white.svg") scroll no-repeat left center / 21px 16px transparent; +} + +.features-title h2:hover .genanchor, +.before-and-after-title-and-description h2:hover .genanchor { + display: block; +} + +@layer properties { + @supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))) { + *, :before, :after, ::backdrop { + --tw-blur: initial; + --tw-brightness: initial; + --tw-contrast: initial; + --tw-grayscale: initial; + --tw-hue-rotate: initial; + --tw-invert: initial; + --tw-opacity: initial; + --tw-saturate: initial; + --tw-sepia: initial; + --tw-drop-shadow: initial; + --tw-drop-shadow-color: initial; + --tw-drop-shadow-alpha: 100%; + --tw-drop-shadow-size: initial; + --tw-shadow: 0 0 #0000; + --tw-shadow-color: initial; + --tw-shadow-alpha: 100%; + --tw-inset-shadow: 0 0 #0000; + --tw-inset-shadow-color: initial; + --tw-inset-shadow-alpha: 100%; + --tw-ring-color: initial; + --tw-ring-shadow: 0 0 #0000; + --tw-inset-ring-color: initial; + --tw-inset-ring-shadow: 0 0 #0000; + --tw-ring-inset: initial; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-offset-shadow: 0 0 #0000; + --tw-backdrop-blur: initial; + --tw-backdrop-brightness: initial; + --tw-backdrop-contrast: initial; + --tw-backdrop-grayscale: initial; + --tw-backdrop-hue-rotate: initial; + --tw-backdrop-invert: initial; + --tw-backdrop-opacity: initial; + --tw-backdrop-saturate: initial; + --tw-backdrop-sepia: initial; + --tw-border-style: solid; + --tw-outline-style: solid; + --tw-gradient-position: initial; + --tw-gradient-from: #0000; + --tw-gradient-via: #0000; + --tw-gradient-to: #0000; + --tw-gradient-stops: initial; + --tw-gradient-via-stops: initial; + --tw-gradient-from-position: 0%; + --tw-gradient-via-position: 50%; + --tw-gradient-to-position: 100%; + --tw-duration: initial; + --tw-ease: initial; + --tw-font-weight: initial; + --tw-leading: initial; + --tw-space-y-reverse: 0; + --tw-space-x-reverse: 0; + --tw-tracking: initial + } + } +} + +@layer theme { + :root, :host { + --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --color-red-200: oklch(88.5% .062 18.334); + --color-red-400: oklch(70.4% .191 22.216); + --color-red-900: oklch(39.6% .141 25.723); + --color-green-200: oklch(92.5% .084 155.995); + --color-green-400: oklch(79.2% .209 151.711); + --color-green-500: oklch(72.3% .219 149.579); + --color-green-900: oklch(39.3% .095 152.535); + --color-teal-300: oklch(85.5% .138 181.071); + --color-teal-400: oklch(77.7% .152 181.912); + --color-gray-100: var(--color-zinc-100); + --color-gray-200: var(--color-zinc-200); + --color-gray-300: var(--color-zinc-300); + --color-gray-400: var(--color-zinc-400); + --color-gray-500: var(--color-zinc-500); + --color-gray-600: var(--color-zinc-600); + --color-gray-700: var(--color-zinc-700); + --color-gray-800: var(--color-zinc-800); + --color-gray-900: var(--color-zinc-900); + --color-gray-950: var(--color-zinc-950); + --color-zinc-50: oklch(98.5% 0 0); + --color-zinc-100: oklch(96.7% .001 286.375); + --color-zinc-200: oklch(92% .004 286.32); + --color-zinc-300: oklch(87.1% .006 286.286); + --color-zinc-400: oklch(70.5% .015 286.067); + --color-zinc-500: oklch(55.2% .016 285.938); + --color-zinc-600: oklch(44.2% .017 285.786); + --color-zinc-700: oklch(37% .013 285.805); + --color-zinc-800: oklch(27.4% .006 286.033); + --color-zinc-900: oklch(21% .006 285.885); + --color-zinc-950: oklch(14.1% .005 285.823); + --color-black: #000; + --color-white: #fff; + --spacing: .25rem; + --container-2xl: 42rem; + --container-3xl: 48rem; + --container-4xl: 56rem; + --container-7xl: 80rem; + --text-xs: .75rem; + --text-xs--line-height: calc(1 / .75); + --text-sm: .875rem; + --text-sm--line-height: calc(1.25 / .875); + --text-base: 1rem; + --text-base--line-height: calc(1.5 / 1); + --text-lg: 1.125rem; + --text-lg--line-height: calc(1.75 / 1.125); + --text-xl: 1.25rem; + --text-xl--line-height: calc(1.75 / 1.25); + --text-2xl: 1.5rem; + --text-2xl--line-height: calc(2 / 1.5); + --text-3xl: 1.875rem; + --text-3xl--line-height: calc(2.25 / 1.875); + --text-4xl: 2.25rem; + --text-4xl--line-height: calc(2.5 / 2.25); + --text-5xl: 3rem; + --text-5xl--line-height: 1; + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --tracking-tight: -.025em; + --leading-relaxed: 1.625; + --leading-loose: 2; + --radius-md: .375rem; + --radius-lg: .5rem; + --radius-xl: .75rem; + --radius-2xl: 1rem; + --radius-3xl: 1.5rem; + --radius-4xl: 2rem; + --ease-in-out: cubic-bezier(.4, 0, .2, 1); + --blur-xs: 4px; + --blur-md: 12px; + --default-transition-duration: .15s; + --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1); + --default-font-family: var(--font-sans); + --default-mono-font-family: var(--font-mono) + } +} + +@layer base { + *, :after, :before, ::backdrop { + box-sizing: border-box; + border: 0 solid; + margin: 0; + padding: 0 + } + + ::file-selector-button { + box-sizing: border-box; + border: 0 solid; + margin: 0; + padding: 0 + } + + html, :host { + -webkit-text-size-adjust: 100%; + tab-size: 4; + line-height: 1.5; + font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); + font-feature-settings: var(--default-font-feature-settings, normal); + font-variation-settings: var(--default-font-variation-settings, normal); + -webkit-tap-highlight-color: transparent + } + + hr { + height: 0; + color: inherit; + border-top-width: 1px + } + + abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted + } + + h1, h2, h3, h4, h5, h6 { + font-size: inherit; + font-weight: inherit + } + + a { + color: inherit; + -webkit-text-decoration: inherit; + -webkit-text-decoration: inherit; + -webkit-text-decoration: inherit; + text-decoration: inherit + } + + b, strong { + font-weight: bolder + } + + code, kbd, samp, pre { + font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace); + font-feature-settings: var(--default-mono-font-feature-settings, normal); + font-variation-settings: var(--default-mono-font-variation-settings, normal); + font-size: 1em + } + + small { + font-size: 80% + } + + sub, sup { + vertical-align: baseline; + font-size: 75%; + line-height: 0; + position: relative + } + + sub { + bottom: -.25em + } + + sup { + top: -.5em + } + + table { + text-indent: 0; + border-color: inherit; + border-collapse: collapse + } + + :-moz-focusring { + outline: auto + } + + progress { + vertical-align: baseline + } + + summary { + display: list-item + } + + ol, ul, menu { + list-style: none + } + + img, svg, video, canvas, audio, iframe, embed, object { + vertical-align: middle; + display: block + } + + img, video { + max-width: 100%; + height: auto + } + + button, input, select, optgroup, textarea { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + opacity: 1; + background-color: #0000; + border-radius: 0 + } + + ::file-selector-button { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + opacity: 1; + background-color: #0000; + border-radius: 0 + } + + :where(select:is([multiple],[size])) optgroup { + font-weight: bolder + } + + :where(select:is([multiple],[size])) optgroup option { + padding-inline-start: 20px + } + + ::file-selector-button { + margin-inline-end: 4px + } + + ::placeholder { + opacity: 1 + } + + @supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px) { + ::placeholder { + color: currentColor + } + + @supports (color:color-mix(in lab, red, red)) { + ::placeholder { + color: color-mix(in oklab, currentcolor 50%, transparent) + } + } + }textarea { + resize: vertical + } + + ::-webkit-search-decoration { + -webkit-appearance: none + } + + ::-webkit-date-and-time-value { + min-height: 1lh; + text-align: inherit + } + + ::-webkit-datetime-edit { + display: inline-flex + } + + ::-webkit-datetime-edit-fields-wrapper { + padding: 0 + } + + ::-webkit-datetime-edit { + padding-block: 0 + } + + ::-webkit-datetime-edit-year-field { + padding-block: 0 + } + + ::-webkit-datetime-edit-month-field { + padding-block: 0 + } + + ::-webkit-datetime-edit-day-field { + padding-block: 0 + } + + ::-webkit-datetime-edit-hour-field { + padding-block: 0 + } + + ::-webkit-datetime-edit-minute-field { + padding-block: 0 + } + + ::-webkit-datetime-edit-second-field { + padding-block: 0 + } + + ::-webkit-datetime-edit-millisecond-field { + padding-block: 0 + } + + ::-webkit-datetime-edit-meridiem-field { + padding-block: 0 + } + + ::-webkit-calendar-picker-indicator { + line-height: 1 + } + + :-moz-ui-invalid { + box-shadow: none + } + + button, input:where([type=button],[type=reset],[type=submit]) { + appearance: button + } + + ::file-selector-button { + appearance: button + } + + ::-webkit-inner-spin-button { + height: auto + } + + ::-webkit-outer-spin-button { + height: auto + } + + [hidden]:where(:not([hidden=until-found])) { + display: none !important + } +} + +@layer components; + +@layer utilities { + .visible { + visibility: visible + } + + .sr-only { + clip-path: inset(50%); + white-space: nowrap; + border-width: 0; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + position: absolute; + overflow: hidden + } + + .static { + position: static + } + + .block { + display: block + } + + .hidden { + display: none + } + + .resize { + resize: both + } + + .opacity-0 { + opacity: 0 + } + + .opacity-25 { + opacity: .25 + } + + .opacity-40 { + opacity: .4 + } + + .filter { + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,) + } +} + +body { + background-color: var(--color-white); + font-family: var(--font-sans); + color: var(--color-gray-800); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + position: relative +} + +body:where(.dark,.dark *) { + color: var(--color-white); + background-color: #181d3a +} + +a { + text-underline-offset: 2px; + text-decoration-line: underline +} + +@media (hover: hover) { + a:hover { + text-decoration-line: none + } +} + +header { + top: calc(var(--spacing) * 0); + z-index: 50; + background-color: #fffc; + width: 100%; + position: sticky +} + +@supports (color:color-mix(in lab, red, red)) { + header { + background-color: color-mix(in oklab, var(--color-white) 80%, transparent) + } +} + +header { + padding-block: calc(var(--spacing) * 3); + --tw-shadow: 0 1px var(--tw-shadow-color, #0000000d); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-backdrop-blur: blur(var(--blur-md)); + -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,) +} + +header:where(.dark,.dark *) { + background-color: oklab(24.2643% .00402537 -.0554365/.5) +} + +header nav { + width: 100%; + max-width: var(--container-7xl); + padding-inline: calc(var(--spacing) * 6); + margin-inline: auto; + display: flex; + position: relative +} + +@media (min-width: 64rem) { + header nav { + padding-inline: calc(var(--spacing) * 8) + } +} + +.header-logo { + margin-right: calc(var(--spacing) * 6) +} + +.header-logo svg { + height: calc(var(--spacing) * 10); + color: #6b58ff; + display: inline-block +} + +.header-logo svg:where(.dark,.dark *) { + color: var(--color-white) +} + +.header-menu-container { + margin-top: calc(var(--spacing) * 16); + margin-left: calc(var(--spacing) * -26); + border-top-style: var(--tw-border-style); + border-top-width: 1px; + border-color: var(--color-gray-200); + padding-top: calc(var(--spacing) * 5); + flex-direction: column; + flex: 1; + justify-content: space-between; + align-items: center; + display: none +} + +@media (min-width: 64rem) { + .header-menu-container { + margin-top: calc(var(--spacing) * 0); + margin-left: calc(var(--spacing) * 0); + border-style: var(--tw-border-style); + padding-top: calc(var(--spacing) * 0); + border-width: 0; + flex-direction: row; + display: flex + } +} + +.header-menu-container:where(.dark,.dark *) { + border-color: #ffffff1a +} + +@supports (color:color-mix(in lab, red, red)) { + .header-menu-container:where(.dark,.dark *) { + border-color: color-mix(in oklab, var(--color-white) 10%, transparent) + } +} + +.header-menu-container .select { + width: 100% +} + +@media (min-width: 64rem) { + .header-menu-container .select { + width: calc(var(--spacing) * 16) + } +} + +.header-menu { + margin-bottom: calc(var(--spacing) * 5); + gap: calc(var(--spacing) * 6); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + flex-direction: column; + display: flex +} + +@media (min-width: 64rem) { + .header-menu { + margin-bottom: calc(var(--spacing) * 0); + flex-direction: row; + align-items: center + } +} + +.header-menu a { + text-decoration-line: none +} + +@media (hover: hover) { + .header-menu a:hover { + text-decoration-line: underline + } +} + +.header-actions { + gap: calc(var(--spacing) * 5); + padding-bottom: calc(var(--spacing) * 4); + flex-direction: column; + flex: 1; + display: flex +} + +@media (min-width: 64rem) { + .header-actions { + justify-content: flex-end; + gap: calc(var(--spacing) * 3); + padding-bottom: calc(var(--spacing) * 0); + flex-direction: row + } +} + +.header-button-search { + height: calc(var(--spacing) * 9); + cursor: pointer; + border-radius: var(--radius-xl); + background-color: #fffc; + flex-shrink: 0; + align-items: center; + display: flex +} + +@supports (color:color-mix(in lab, red, red)) { + .header-button-search { + background-color: color-mix(in oklab, var(--color-white) 80%, transparent) + } +} + +.header-button-search { + padding-inline: calc(var(--spacing) * 2.5); + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)); + white-space: nowrap; + color: var(--color-gray-500); + outline-style: var(--tw-outline-style); + outline-offset: calc(1px * -1); + outline-width: 1px; + outline-color: var(--color-gray-300) +} + +.header-button-search:focus { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: #09090b0d +} + +@supports (color:color-mix(in lab, red, red)) { + .header-button-search:focus { + --tw-ring-color: color-mix(in oklab, var(--color-gray-950) 5%, transparent) + } +} + +@media (min-width: 40rem) { + .header-button-search { + font-size: var(--text-sm); + line-height: calc(var(--spacing) * 6) + } +} + +@media (min-width: 64rem) { + .header-button-search { + width: calc(var(--spacing) * 60) + } + + @media (hover: hover) { + .header-button-search:hover { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: #09090b0d + } + + @supports (color:color-mix(in lab, red, red)) { + .header-button-search:hover { + --tw-ring-color: color-mix(in oklab, var(--color-gray-950) 5%, transparent) + } + } + } +} + +.header-button-search:where(.dark,.dark *) { + background-color: #ffffff0d +} + +@supports (color:color-mix(in lab, red, red)) { + .header-button-search:where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-white) 5%, transparent) + } +} + +.header-button-search:where(.dark,.dark *) { + color: var(--color-white); + outline-color: #ffffff1a +} + +@supports (color:color-mix(in lab, red, red)) { + .header-button-search:where(.dark,.dark *) { + outline-color: color-mix(in oklab, var(--color-white) 10%, transparent) + } +} + +.header-button-search:where(.dark,.dark *):focus { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: #ffffff0d +} + +@supports (color:color-mix(in lab, red, red)) { + .header-button-search:where(.dark,.dark *):focus { + --tw-ring-color: color-mix(in oklab, var(--color-white) 5%, transparent) + } +} + +@media (min-width: 64rem) { + @media (hover: hover) { + .header-button-search:where(.dark,.dark *):hover { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: #ffffff0d + } + + @supports (color:color-mix(in lab, red, red)) { + .header-button-search:where(.dark,.dark *):hover { + --tw-ring-color: color-mix(in oklab, var(--color-white) 5%, transparent) + } + } + } +} + +.header-button-search svg { + margin-right: calc(var(--spacing) * 2); + width: calc(var(--spacing) * 4.5); + height: calc(var(--spacing) * 4.5); + flex-shrink: 0 +} + +.header-button-search kbd { + margin-right: calc(var(--spacing) * .5); + font-family: var(--font-sans); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + color: var(--color-gray-500); + margin-left: auto +} + +.header-button-search kbd:where(.dark,.dark *) { + color: #fff6 +} + +@supports (color:color-mix(in lab, red, red)) { + .header-button-search kbd:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 40%, transparent) + } +} + +.header-languages { + grid-template-columns:repeat(1, minmax(0, 1fr)); + width: 100%; + display: inline-grid +} + +.header-languages select:first-of-type { + display: none +} + +@media (min-width: 64rem) { + .header-languages select:first-of-type { + display: block + } +} + +.header-languages select:nth-of-type(2) { + display: block +} + +@media (min-width: 64rem) { + .header-languages select:nth-of-type(2) { + display: none + } +} + +.header-light-dark-mode-button { + width: calc(var(--spacing) * 9); + height: calc(var(--spacing) * 9); + cursor: pointer; + border-radius: var(--radius-xl); + background-color: #fffc; + align-items: center; + display: flex +} + +@supports (color:color-mix(in lab, red, red)) { + .header-light-dark-mode-button { + background-color: color-mix(in oklab, var(--color-white) 80%, transparent) + } +} + +.header-light-dark-mode-button { + padding-inline: calc(var(--spacing) * 2.5); + color: var(--color-gray-500); + outline-style: var(--tw-outline-style); + outline-offset: calc(1px * -1); + outline-width: 1px; + outline-color: var(--color-gray-300) +} + +.header-light-dark-mode-button:focus { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: #09090b0d +} + +@supports (color:color-mix(in lab, red, red)) { + .header-light-dark-mode-button:focus { + --tw-ring-color: color-mix(in oklab, var(--color-gray-950) 5%, transparent) + } +} + +@media (min-width: 64rem) { + @media (hover: hover) { + .header-light-dark-mode-button:hover { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: #09090b0d + } + + @supports (color:color-mix(in lab, red, red)) { + .header-light-dark-mode-button:hover { + --tw-ring-color: color-mix(in oklab, var(--color-gray-950) 5%, transparent) + } + } + } +} + +.header-light-dark-mode-button:where(.dark,.dark *) { + background-color: #ffffff0d +} + +@supports (color:color-mix(in lab, red, red)) { + .header-light-dark-mode-button:where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-white) 5%, transparent) + } +} + +.header-light-dark-mode-button:where(.dark,.dark *) { + color: var(--color-white); + outline-color: #ffffff1a +} + +@supports (color:color-mix(in lab, red, red)) { + .header-light-dark-mode-button:where(.dark,.dark *) { + outline-color: color-mix(in oklab, var(--color-white) 10%, transparent) + } +} + +.header-light-dark-mode-button:where(.dark,.dark *):focus { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: #ffffff0d +} + +@supports (color:color-mix(in lab, red, red)) { + .header-light-dark-mode-button:where(.dark,.dark *):focus { + --tw-ring-color: color-mix(in oklab, var(--color-white) 5%, transparent) + } +} + +@media (min-width: 64rem) { + @media (hover: hover) { + .header-light-dark-mode-button:where(.dark,.dark *):hover { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: #ffffff0d + } + + @supports (color:color-mix(in lab, red, red)) { + .header-light-dark-mode-button:where(.dark,.dark *):hover { + --tw-ring-color: color-mix(in oklab, var(--color-white) 5%, transparent) + } + } + } +} + +.header-mobile-menu-button-container { + right: calc(var(--spacing) * 6); + flex-shrink: 0; + position: absolute +} + +@media (min-width: 64rem) { + .header-mobile-menu-button-container { + display: none + } +} + +#mobile-menu-button { + width: calc(var(--spacing) * 10); + height: calc(var(--spacing) * 10); + border-radius: var(--radius-xl); + padding: calc(var(--spacing) * 2); + color: var(--color-gray-900); + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: var(--color-gray-300); + background-color: #0000; + justify-content: center; + align-items: center; + display: inline-flex; + position: relative +} + +#mobile-menu-button:focus-visible { + outline-style: var(--tw-outline-style); + outline-width: 2px; + outline-color: var(--color-white) +} + +#mobile-menu-button:where(.dark,.dark *) { + color: var(--color-white); + --tw-ring-color: #ffffff26 +} + +@supports (color:color-mix(in lab, red, red)) { + #mobile-menu-button:where(.dark,.dark *) { + --tw-ring-color: color-mix(in oklab, var(--color-white) 15%, transparent) + } +} + +#mobile-menu-button svg { + width: calc(var(--spacing) * 6); + height: calc(var(--spacing) * 6) +} + +.hero { + position: relative; + isolation: isolate; + z-index: 10; + margin-top: calc(var(--spacing) * -4); + display: flex; + height: calc(var(--spacing) * 160); + align-items: center; + justify-content: center; + overflow: hidden; + @media (width >= 64rem) { + margin-top: calc(var(--spacing) * -16); + } + @media (width >= 64rem) { + padding-top: calc(var(--spacing) * 16); + } +} + +.hero-pattern { + pointer-events: none; + top: calc(var(--spacing) * .5); + z-index: calc(10 * -1); + width: 100%; + height: 100%; + height: calc(var(--spacing) * 150); + stroke: #18181b1a; + position: absolute; + -webkit-mask-image: linear-gradient(#ffffffad, #0000); + mask-image: linear-gradient(#ffffffad, #0000) +} + +@supports (color:color-mix(in lab, red, red)) { + .hero-pattern { + stroke: color-mix(in oklab, var(--color-gray-900) 10%, transparent) + } +} + +.hero-pattern:where(.dark,.dark *) { + stroke: #ffffff1a +} + +@supports (color:color-mix(in lab, red, red)) { + .hero-pattern:where(.dark,.dark *) { + stroke: color-mix(in oklab, var(--color-white) 10%, transparent) + } +} + +.hero-content { + max-width: var(--container-4xl); + --tw-gradient-position: at 50% 50%; + background-image: radial-gradient(var(--tw-gradient-stops, at 50% 50%)); + --tw-gradient-from: var(--color-white); + --tw-gradient-to: transparent; + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + --tw-gradient-to-position: 65%; + padding-inline: calc(var(--spacing) * 4); + text-align: center; + margin-inline: auto +} + +@media (min-width: 40rem) { + .hero-content { + padding-inline: calc(var(--spacing) * 6) + } +} + +@media (min-width: 64rem) { + .hero-content { + padding-inline: calc(var(--spacing) * 8) + } +} + +.hero-content:where(.dark,.dark *) { + --tw-gradient-from: #181d3a; + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)) +} + +.hero .hero-bg { + pointer-events: none; + top: calc(var(--spacing) * 0); + z-index: calc(10 * -1); + object-fit: cover; + width: 100%; + height: 100%; + transition-property: opacity; + opacity: .35; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: .5s; + --tw-ease: var(--ease-in-out); + transition-duration: .5s; + transition-timing-function: var(--ease-in-out); + -webkit-user-select: none; + user-select: none; + position: absolute +} + +.hero-badge { + margin-bottom: calc(var(--spacing) * 6); + background-color: #ffffffa6; + border-radius: calc(infinity * 1px); + align-items: center; + display: inline-flex +} + +@supports (color:color-mix(in lab, red, red)) { + .hero-badge { + background-color: color-mix(in oklab, var(--color-white) 65%, transparent) + } +} + +.hero-badge { + padding-inline: calc(var(--spacing) * 4); + padding-block: calc(var(--spacing) * 1); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + color: var(--color-gray-600); + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: #0000000d +} + +@supports (color:color-mix(in lab, red, red)) { + .hero-badge { + --tw-ring-color: color-mix(in oklab, var(--color-black) 5%, transparent) + } +} + +.hero-badge:where(.dark,.dark *) { + background-color: #0003 +} + +@supports (color:color-mix(in lab, red, red)) { + .hero-badge:where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-black) 20%, transparent) + } +} + +.hero-badge:where(.dark,.dark *) { + color: var(--color-gray-200); + --tw-ring-color: #ffffff1a +} + +@supports (color:color-mix(in lab, red, red)) { + .hero-badge:where(.dark,.dark *) { + --tw-ring-color: color-mix(in oklab, var(--color-white) 10%, transparent) + } +} + +.hero-badge svg { + margin-right: calc(var(--spacing) * 1.5); + margin-left: calc(var(--spacing) * -1); + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + color: var(--color-teal-400) +} + +.hero-badge svg:where(.dark,.dark *) { + color: var(--color-teal-300) +} + +.hero-php-logo { + margin-inline: auto; + margin-bottom: calc(var(--spacing) * 6); + height: calc(var(--spacing) * 12); + color: var(--color-gray-800) +} + +@media (min-width: 64rem) { + .hero-php-logo { + height: calc(var(--spacing) * 22) + } +} + +.hero-php-logo:where(.dark,.dark *) { + color: var(--color-white) +} + +.hero h1 { + margin-bottom: calc(var(--spacing) * 5); + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold); + text-wrap: balance +} + +@media (min-width: 40rem) { + .hero h1 { + font-size: var(--text-5xl); + line-height: var(--tw-leading, var(--text-5xl--line-height)) + } +} + +.hero h1:where(.dark,.dark *) { + color: var(--color-white) +} + +.hero p { + margin-inline: auto; + margin-bottom: calc(var(--spacing) * 8); + max-width: var(--container-2xl); + --tw-leading: var(--leading-relaxed); + line-height: var(--leading-relaxed); + color: var(--color-gray-500) +} + +@media (min-width: 64rem) { + .hero p { + margin-bottom: calc(var(--spacing) * 10) + } +} + +.hero p:where(.dark,.dark *) { + color: #fffc +} + +@supports (color:color-mix(in lab, red, red)) { + .hero p:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 80%, transparent) + } +} + +.hero p strong { + color: var(--color-gray-900) +} + +.hero p strong:where(.dark,.dark *) { + color: var(--color-white) +} + +.hero-actions { + justify-content: center; + align-items: center; + gap: calc(var(--spacing) * 4); + flex-direction: column; + display: flex +} + +@media (min-width: 64rem) { + .hero-actions { + flex-direction: row + } +} + +.hero-logos { + margin-inline: auto; + margin-top: calc(var(--spacing) * 10); + max-width: var(--container-7xl); + padding-inline: calc(var(--spacing) * 6) +} + +@media (min-width: 64rem) { + .hero-logos { + margin-top: calc(var(--spacing) * 24); + padding-inline: calc(var(--spacing) * 8) + } +} + +.hero-logos h2 { + text-align: center; + text-wrap: balance; + color: var(--color-gray-600) +} + +.hero-logos h2:where(.dark,.dark *) { + color: #fffc +} + +@supports (color:color-mix(in lab, red, red)) { + .hero-logos h2:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 80%, transparent) + } +} + +.hero-logos-container { + margin-top: calc(var(--spacing) * 8); + justify-content: center; + align-items: center; + column-gap: calc(var(--spacing) * 4); + row-gap: calc(var(--spacing) * 8); + color: var(--color-gray-800); + grid-template-columns:repeat(3, minmax(0, 1fr)); + display: grid +} + +@media (min-width: 64rem) { + .hero-logos-container { + gap: calc(var(--spacing) * 14); + display: flex + } +} + +.hero-logos-container:where(.dark,.dark *) { + color: #ffffffe6 +} + +@supports (color:color-mix(in lab, red, red)) { + .hero-logos-container:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 90%, transparent) + } +} + +.hero-logos-container svg { + flex-shrink: 0; + margin-inline: auto +} + +.hero-logos-container svg:first-of-type { + height: calc(var(--spacing) * 5) +} + +@media (min-width: 64rem) { + .hero-logos-container svg:first-of-type { + height: calc(var(--spacing) * 7) + } +} + +.hero-logos-container svg:nth-of-type(2) { + height: calc(var(--spacing) * 4) +} + +@media (min-width: 64rem) { + .hero-logos-container svg:nth-of-type(2) { + height: calc(var(--spacing) * 4.5) + } +} + +.hero-logos-container svg:nth-of-type(3) { + height: calc(var(--spacing) * 5) +} + +@media (min-width: 64rem) { + .hero-logos-container svg:nth-of-type(3) { + height: calc(var(--spacing) * 6.5) + } +} + +.hero-logos-container svg:nth-of-type(4) { + height: calc(var(--spacing) * 5) +} + +@media (min-width: 64rem) { + .hero-logos-container svg:nth-of-type(4) { + height: calc(var(--spacing) * 6) + } +} + +.hero-logos-container svg:nth-of-type(5) { + height: calc(var(--spacing) * 5) +} + +@media (min-width: 64rem) { + .hero-logos-container svg:nth-of-type(5) { + height: calc(var(--spacing) * 6.5) + } +} + +.hero-logos-container svg:nth-of-type(6) { + height: calc(var(--spacing) * 5) +} + +@media (min-width: 64rem) { + .hero-logos-container svg:nth-of-type(6) { + height: calc(var(--spacing) * 7) + } +} + +.features { + isolation: isolate; + z-index: 10; + border-block-style: var(--tw-border-style); + border-block-width: 1px; + border-color: #e4e4e780; + position: relative +} + +@supports (color:color-mix(in lab, red, red)) { + .features { + border-color: color-mix(in oklab, var(--color-gray-200) 50%, transparent) + } +} + +.features { + background-color: var(--color-white); + padding-block: calc(var(--spacing) * 20) +} + +@media (min-width: 64rem) { + .features { + padding-block: calc(var(--spacing) * 28) + } +} + +.features:where(.dark,.dark *) { + border-color: #00000040 +} + +@supports (color:color-mix(in lab, red, red)) { + .features:where(.dark,.dark *) { + border-color: color-mix(in oklab, var(--color-black) 25%, transparent) + } +} + +.features:where(.dark,.dark *) { + background-color: oklab(39.0688% .00431919 -.103547/.4) +} + +.features-pattern { + pointer-events: none; + top: calc(var(--spacing) * 0); + color: #09090b26; + width: 100%; + height: 100%; + position: absolute +} + +@supports (color:color-mix(in lab, red, red)) { + .features-pattern { + color: color-mix(in oklab, var(--color-gray-950) 15%, transparent) + } +} + +.features-pattern:where(.dark,.dark *) { + color: #ffffff1a +} + +@supports (color:color-mix(in lab, red, red)) { + .features-pattern:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 10%, transparent) + } +} + +.features-title { + max-width: var(--container-7xl); + justify-content: center; + align-items: center; + gap: calc(var(--spacing) * 3); + padding-inline: calc(var(--spacing) * 4); + text-align: center; + text-wrap: balance; + flex-direction: column; + margin-inline: auto; + display: flex +} + +@media (min-width: 64rem) { + .features-title { + gap: calc(var(--spacing) * 6); + padding-inline: calc(var(--spacing) * 8); + flex-direction: row + } +} + +.features-title h2 { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold) +} + +@media (min-width: 64rem) { + .features-title h2 { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)) + } +} + +.features-title p { + color: var(--color-gray-600) +} + +@media (min-width: 64rem) { + .features-title p { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)) + } +} + +.features-title p:where(.dark,.dark *) { + color: #fffc +} + +@supports (color:color-mix(in lab, red, red)) { + .features-title p:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 80%, transparent) + } +} + +.features-title strong { + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + color: var(--color-gray-900) +} + +.features-title strong:where(.dark,.dark *) { + color: var(--color-white) +} + +.features-grid-container { + margin-inline: auto; + margin-top: calc(var(--spacing) * 8); + max-width: var(--container-7xl); + padding-inline: calc(var(--spacing) * 4) +} + +@media (min-width: 40rem) { + .features-grid-container { + margin-top: calc(var(--spacing) * 12) + } +} + +@media (min-width: 64rem) { + .features-grid-container { + padding-inline: calc(var(--spacing) * 8) + } +} + +.features-grid { + gap: calc(var(--spacing) * 4); + display: grid +} + +@media (min-width: 64rem) { + .features-grid { + grid-template-rows:repeat(2, minmax(0, 1fr)); + grid-template-columns:repeat(3, minmax(0, 1fr)) + } +} + +.features-col { + border-radius: var(--radius-xl); + background-color: #00000003; + position: relative +} + +@supports (color:color-mix(in lab, red, red)) { + .features-col { + background-color: color-mix(in oklab, var(--color-black) 1%, transparent) + } +} + +.features-col { + --tw-shadow: 0 1px var(--tw-shadow-color, #0000000d); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + outline-style: var(--tw-outline-style); + outline-width: 1px; + outline-color: #0000000d +} + +@supports (color:color-mix(in lab, red, red)) { + .features-col { + outline-color: color-mix(in oklab, var(--color-black) 5%, transparent) + } +} + +.features-col { + --tw-backdrop-blur: blur(var(--blur-xs)); + -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,) +} + +@media (hover: hover) { + .features-col:hover { + background-color: #18181b08 + } + + @supports (color:color-mix(in lab, red, red)) { + .features-col:hover { + background-color: color-mix(in oklab, var(--color-gray-900) 3%, transparent) + } + } +} + +.features-col:where(.dark,.dark *) { + background-color: #ffffff14 +} + +@supports (color:color-mix(in lab, red, red)) { + .features-col:where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-white) 8%, transparent) + } +} + +@media (hover: hover) { + .features-col:where(.dark,.dark *):hover { + background-color: #ffffff1a + } + + @supports (color:color-mix(in lab, red, red)) { + .features-col:where(.dark,.dark *):hover { + background-color: color-mix(in oklab, var(--color-white) 10%, transparent) + } + } +} + +.features-first-col { + border-top-left-radius: var(--radius-4xl); + border-top-right-radius: var(--radius-4xl); + border-bottom-right-radius: var(--radius-xl); + border-bottom-left-radius: var(--radius-xl) +} + +@media (min-width: 64rem) { + .features-first-col { + border-radius: var(--radius-xl); + border-top-left-radius: var(--radius-4xl) + } + + .features-third-col { + border-top-right-radius: var(--radius-4xl) + } + + .features-fourth-col { + border-bottom-left-radius: var(--radius-4xl) + } +} + +.features-sixth-col { + border-top-left-radius: var(--radius-xl); + border-top-right-radius: var(--radius-xl); + border-bottom-right-radius: var(--radius-4xl); + border-bottom-left-radius: var(--radius-4xl) +} + +@media (min-width: 64rem) { + .features-sixth-col { + border-bottom-right-radius: var(--radius-4xl); + border-bottom-left-radius: var(--radius-xl) + } +} + +.features-col-container { + flex-direction: column; + height: 100%; + display: flex; + position: relative +} + +.features-col-spacing { + padding: calc(var(--spacing) * 8) +} + +@media (min-width: 40rem) { + .features-col-spacing { + padding: calc(var(--spacing) * 10) + } +} + +.features-col svg { + margin-bottom: calc(var(--spacing) * 4); + width: calc(var(--spacing) * 7); + height: calc(var(--spacing) * 7); + color: #6b58ff +} + +.features-col svg:where(.dark,.dark *) { + color: #7b75ff +} + +.features-col a { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)); + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + color: var(--color-gray-950); + text-decoration-line: none !important +} + +.features-col a:where(.dark,.dark *) { + color: var(--color-white) +} + +.features-col a span { + inset: calc(var(--spacing) * 0); + position: absolute +} + +.features-col p { + margin-top: calc(var(--spacing) * 4); + font-size: var(--text-sm); + line-height: calc(var(--spacing) * 6); + color: var(--color-gray-600) +} + +.features-col p:where(.dark,.dark *) { + color: #fffc +} + +@supports (color:color-mix(in lab, red, red)) { + .features-col p:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 80%, transparent) + } +} + +.features-col code { + border-radius: var(--radius-md); + background-color: #e4e4e780 +} + +@supports (color:color-mix(in lab, red, red)) { + .features-col code { + background-color: color-mix(in oklab, var(--color-gray-200) 50%, transparent) + } +} + +.features-col code { + padding-inline: calc(var(--spacing) * 1); + padding-block: calc(var(--spacing) * .5); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)) +} + +.features-col code:where(.dark,.dark *) { + background-color: #0003 +} + +@supports (color:color-mix(in lab, red, red)) { + .features-col code:where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-black) 20%, transparent) + } +} + +.before-and-after-container { + z-index: 10; + padding-top: calc(var(--spacing) * 18); + position: relative +} + +@media (min-width: 64rem) { + .before-and-after-container { + padding-top: calc(var(--spacing) * 28) + } +} + +.before-and-after-container:where(.dark,.dark *) { + background-color: oklab(39.0688% .00431919 -.103547/.3) +} + +.before-and-after-container.last { + padding-bottom: calc(var(--spacing) * 20) +} + +@media (min-width: 64rem) { + .before-and-after-container.last { + padding-bottom: calc(var(--spacing) * 28) + } +} + +.before-and-after-code-container { + margin-inline: auto; + margin-top: calc(var(--spacing) * 8); + max-width: var(--container-7xl); + padding-inline: calc(var(--spacing) * 4) +} + +@media (min-width: 40rem) { + .before-and-after-code-container { + margin-top: calc(var(--spacing) * 12) + } +} + +@media (min-width: 64rem) { + .before-and-after-code-container { + padding-inline: calc(var(--spacing) * 8) + } +} + +.before-and-after-code { + gap: calc(var(--spacing) * 2); + border-radius: var(--radius-3xl); + background-color: var(--color-white); + padding: calc(var(--spacing) * 2); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + outline-style: var(--tw-outline-style); + outline-width: 1px; + outline-color: var(--color-gray-200); + display: grid +} + +@media (min-width: 64rem) { + .before-and-after-code { + gap: calc(var(--spacing) * 5); + padding: calc(var(--spacing) * 5); + grid-template-columns:repeat(2, minmax(0, 1fr)) + } +} + +.before-and-after-code:where(.dark,.dark *) { + background-color: #ffffff0d +} + +@supports (color:color-mix(in lab, red, red)) { + .before-and-after-code:where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-white) 5%, transparent) + } +} + +.before-and-after-code:where(.dark,.dark *) { + outline-color: #0000000d +} + +@supports (color:color-mix(in lab, red, red)) { + .before-and-after-code:where(.dark,.dark *) { + outline-color: color-mix(in oklab, var(--color-black) 5%, transparent) + } +} + +.before-and-after-title-and-description { + max-width: var(--container-3xl); + margin-inline: auto +} + +:where(.before-and-after-title-and-description>:not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))) +} + +.before-and-after-title-and-description { + padding-inline: calc(var(--spacing) * 4); + text-align: center +} + +@media (min-width: 64rem) { + .before-and-after-title-and-description { + padding-inline: calc(var(--spacing) * 8) + } +} + +.before-and-after-title-and-description h2 { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold) +} + +@media (min-width: 64rem) { + .before-and-after-title-and-description h2 { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)) + } +} + +.before-and-after-title-and-description p { + color: var(--color-gray-600); + text-align: left; +} + +@media (min-width: 64rem) { + .before-and-after-title-and-description p { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)) + } +} + +.before-and-after-title-and-description p:where(.dark,.dark *) { + color: #fffc +} + +@supports (color:color-mix(in lab, red, red)) { + .before-and-after-title-and-description p:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 80%, transparent) + } +} + +.before-and-after-title-and-description code { + border-radius: var(--radius-md); + background-color: #e4e4e780 +} + +@supports (color:color-mix(in lab, red, red)) { + .before-and-after-title-and-description code { + background-color: color-mix(in oklab, var(--color-gray-200) 50%, transparent) + } +} + +.before-and-after-title-and-description code { + padding-inline: calc(var(--spacing) * 1); + padding-block: calc(var(--spacing) * .5); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)) +} + +.before-and-after-title-and-description code:where(.dark,.dark *) { + background-color: #0003 +} + +@supports (color:color-mix(in lab, red, red)) { + .before-and-after-title-and-description code:where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-black) 20%, transparent) + } +} + +.code-container { + border-radius: var(--radius-2xl); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-gray-200); + background-color: var(--color-white); + position: relative; + overflow: hidden +} + +.code-container:where(.dark,.dark *) { + border-color: #0000001a +} + +@supports (color:color-mix(in lab, red, red)) { + .code-container:where(.dark,.dark *) { + border-color: color-mix(in oklab, var(--color-black) 10%, transparent) + } +} + +.code-container:where(.dark,.dark *) { + background-color: #09090b40 +} + +@supports (color:color-mix(in lab, red, red)) { + .code-container:where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-gray-950) 25%, transparent) + } +} + +.code-container .header { + justify-content: space-between; + align-items: center; + display: flex +} + +:where(.code-container .header>:not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse))) +} + +.code-container .header { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + border-color: var(--color-gray-200); + padding-inline: calc(var(--spacing) * 3); + padding-block: calc(var(--spacing) * 2); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold) +} + +.code-container .header:where(.dark,.dark *) { + border-color: #ffffff0d +} + +@supports (color:color-mix(in lab, red, red)) { + .code-container .header:where(.dark,.dark *) { + border-color: color-mix(in oklab, var(--color-white) 5%, transparent) + } +} + +.code-container .header div { + align-items: center; + display: flex +} + +:where(.code-container .header div>:not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 3) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-x-reverse))) +} + +.code-container .header a { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + color: var(--color-gray-600); + text-decoration-line: underline +} + +@media (hover: hover) { + .code-container .header a:hover { + text-decoration-line: none + } +} + +.code-container .header a:where(.dark,.dark *) { + color: var(--color-gray-400) +} + +.code-container button { + cursor: pointer; + border-radius: var(--radius-lg); + padding: calc(var(--spacing) * 2) +} + +@media (hover: hover) { + .code-container button:hover { + background-color: var(--color-gray-100) + } + + .code-container button:where(.dark,.dark *):hover { + background-color: #ffffff0d + } + + @supports (color:color-mix(in lab, red, red)) { + .code-container button:where(.dark,.dark *):hover { + background-color: color-mix(in oklab, var(--color-white) 5%, transparent) + } + } +} + +.code-container button svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4) +} + +.code-container pre { + min-height: 100%; + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + --tw-leading: var(--leading-loose); + line-height: var(--leading-loose); + white-space: pre-wrap; + display: flex +} + +@media (min-width: 40rem) { + .code-container pre { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)) + } +} + +.code-container code { + height: 100%; + padding: var(--spacing); + color: var(--color-gray-400); + flex: 1; + overflow: auto +} + +.release-notes { + isolation: isolate; + z-index: 10; + border-block-style: var(--tw-border-style); + border-block-width: 1px; + border-color: #e4e4e780; + position: relative +} + +@supports (color:color-mix(in lab, red, red)) { + .release-notes { + border-color: color-mix(in oklab, var(--color-gray-200) 50%, transparent) + } +} + +.release-notes { + background-color: var(--color-white); + padding-block: calc(var(--spacing) * 20) +} + +@media (min-width: 64rem) { + .release-notes { + padding-block: calc(var(--spacing) * 28) + } +} + +.release-notes:where(.dark,.dark *) { + border-color: #00000040 +} + +@supports (color:color-mix(in lab, red, red)) { + .release-notes:where(.dark,.dark *) { + border-color: color-mix(in oklab, var(--color-black) 25%, transparent) + } +} + +.release-notes:where(.dark,.dark *) { + background-color: oklab(39.0688% .00431919 -.103547/.1) +} + +.release-notes h2 { + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + --tw-tracking: var(--tracking-tight); + letter-spacing: var(--tracking-tight); + text-wrap: pretty; + color: var(--color-gray-900) +} + +@media (min-width: 40rem) { + .release-notes h2 { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)) + } +} + +.release-notes h2:where(.dark,.dark *) { + color: var(--color-white) +} + +.release-notes svg { + pointer-events: none; + top: calc(var(--spacing) * 0); + color: #09090b26; + width: 100%; + height: 100%; + position: absolute +} + +@supports (color:color-mix(in lab, red, red)) { + .release-notes svg { + color: color-mix(in oklab, var(--color-gray-950) 15%, transparent) + } +} + +.release-notes svg:where(.dark,.dark *) { + color: #ffffff1a +} + +@supports (color:color-mix(in lab, red, red)) { + .release-notes svg:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 10%, transparent) + } +} + +.release-notes ul { + margin-top: calc(var(--spacing) * 6); + margin-left: calc(var(--spacing) * 4); + list-style-type: disc +} + +:where(.release-notes ul>:not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))) +} + +.release-notes ul { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + overflow-wrap: break-word +} + +@media (min-width: 64rem) { + .release-notes ul { + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)) + } +} + +.release-notes code { + border-radius: var(--radius-md); + background-color: #e4e4e780 +} + +@supports (color:color-mix(in lab, red, red)) { + .release-notes code { + background-color: color-mix(in oklab, var(--color-gray-200) 50%, transparent) + } +} + +.release-notes code { + padding-inline: calc(var(--spacing) * 1); + padding-block: calc(var(--spacing) * .5) +} + +.release-notes code:where(.dark,.dark *) { + background-color: #0003 +} + +@supports (color:color-mix(in lab, red, red)) { + .release-notes code:where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-black) 20%, transparent) + } +} + +.release-notes .new ::marker { + color: var(--color-green-500) +} + +.release-notes .new::marker { + color: var(--color-green-500) +} + +.release-notes .new ::-webkit-details-marker { + color: var(--color-green-500) +} + +.release-notes .new::-webkit-details-marker { + color: var(--color-green-500) +} + +.release-notes .old ::marker { + color: var(--color-red-400) +} + +.release-notes .old::marker { + color: var(--color-red-400) +} + +.release-notes .old ::-webkit-details-marker { + color: var(--color-red-400) +} + +.release-notes .old::-webkit-details-marker { + color: var(--color-red-400) +} + +.release-notes-grid-container { + margin-inline: auto; + margin-top: calc(var(--spacing) * -2); + max-width: var(--container-7xl); + padding-inline: calc(var(--spacing) * 4) +} + +@media (min-width: 64rem) { + .release-notes-grid-container { + padding-inline: calc(var(--spacing) * 8) + } + + .release-notes-grid { + gap: calc(var(--spacing) * 5); + grid-template-columns:repeat(12, minmax(0, 1fr)); + display: grid + } +} + +.release-notes-grid div { + border-radius: var(--radius-3xl); + background-color: #00000008 +} + +@supports (color:color-mix(in lab, red, red)) { + .release-notes-grid div { + background-color: color-mix(in oklab, var(--color-black) 3%, transparent) + } +} + +.release-notes-grid div { + padding: calc(var(--spacing) * 6) +} + +@media (min-width: 48rem) { + .release-notes-grid div { + padding: calc(var(--spacing) * 10) + } +} + +.release-notes-grid div:where(.dark,.dark *) { + background-color: #ffffff08 +} + +@supports (color:color-mix(in lab, red, red)) { + .release-notes-grid div:where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-white) 3%, transparent) + } +} + +@media (min-width: 64rem) { + .release-notes-grid div:first-of-type { + grid-column: span 6/span 6 + } +} + +.release-notes-grid div:nth-of-type(2) { + margin-top: calc(var(--spacing) * 10) +} + +@media (min-width: 64rem) { + .release-notes-grid div:nth-of-type(2) { + margin-top: calc(var(--spacing) * 0); + grid-column: span 6/span 6 + } +} + +.cta-footer { + isolation: isolate; + z-index: 10; + padding-block: calc(var(--spacing) * 20); + position: relative +} + +@media (min-width: 64rem) { + .cta-footer { + padding-block: calc(var(--spacing) * 28) + } +} + +.cta-footer:where(.dark,.dark *) { + background-color: oklab(39.0688% .00431919 -.103547/.2) +} + +.cta-footer > svg { + pointer-events: none; + inset: calc(var(--spacing) * 0); + z-index: 2; + stroke: #18181b14; + width: 100%; + height: 100%; + position: absolute; + -webkit-mask-image: linear-gradient(#0000, #ffffffad); + mask-image: linear-gradient(#0000, #ffffffad) +} + +@supports (color:color-mix(in lab, red, red)) { + .cta-footer > svg { + stroke: color-mix(in oklab, var(--color-gray-900) 8%, transparent) + } +} + +.cta-footer > svg:where(.dark,.dark *) { + stroke: #ffffff14 +} + +@supports (color:color-mix(in lab, red, red)) { + .cta-footer > svg:where(.dark,.dark *) { + stroke: color-mix(in oklab, var(--color-white) 8%, transparent) + } +} + +.cta-footer-content { + max-width: var(--container-4xl); + padding-inline: calc(var(--spacing) * 4); + text-align: center; + margin-inline: auto +} + +@media (min-width: 64rem) { + .cta-footer-content { + padding-inline: calc(var(--spacing) * 8) + } +} + +.cta-footer-content svg { + width: calc(var(--spacing) * 16); + height: calc(var(--spacing) * 16); + color: var(--color-gray-800); + margin-inline: auto +} + +.cta-footer-content svg:where(.dark,.dark *) { + color: var(--color-gray-100) +} + +.cta-footer-content h2 { + margin-block: calc(var(--spacing) * 10); + font-family: var(--font-sans); + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + text-wrap: balance; + color: var(--color-gray-900) +} + +@media (min-width: 40rem) { + .cta-footer-content h2 { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)) + } +} + +.cta-footer-content h2:where(.dark,.dark *) { + color: var(--color-white) +} + +.cta-footer-button-container { + margin-bottom: calc(var(--spacing) * 10); + justify-content: center; + align-items: center; + display: flex +} + +:where(.cta-footer-button-container>:not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse))) +} + +.cta-footer-content p { + max-width: var(--container-2xl); + --tw-leading: var(--leading-relaxed); + line-height: var(--leading-relaxed); + color: #18181bcc; + margin-inline: auto +} + +@supports (color:color-mix(in lab, red, red)) { + .cta-footer-content p { + color: color-mix(in oklab, var(--color-gray-900) 80%, transparent) + } +} + +.cta-footer-content p:where(.dark,.dark *) { + color: #fffc +} + +@supports (color:color-mix(in lab, red, red)) { + .cta-footer-content p:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 80%, transparent) + } +} + +.cta-footer-content .first-paragraph { + margin-bottom: calc(var(--spacing) * 6) +} + +.docs-bg:where(.dark,.dark *) { + background-color: oklab(39.0688% .00431919 -.103547/.3) +} + +.docs-container { + z-index: 10; + max-width: var(--container-7xl); + margin-inline: auto; + position: relative +} + +.docs-container nav a { + text-decoration-line: none +} + +.docs-sidebar a[aria-current=page] { + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-gray-950) +} + +.docs-sidebar a:where(.dark,.dark *)[aria-current=page] { + color: var(--color-white) +} + +.docs-grid { + gap: calc(var(--spacing) * 4); + padding-inline: calc(var(--spacing) * 6); + padding-top: calc(var(--spacing) * 10); + grid-template-columns:repeat(12, minmax(0, 1fr)); + display: grid +} + +@media (min-width: 64rem) { + .docs-grid { + gap: calc(var(--spacing) * 6); + padding-inline: calc(var(--spacing) * 0) + } +} + +@media (min-width: 80rem) { + .docs-grid { + column-gap: calc(var(--spacing) * 10) + } +} + +.docs-left-sidebar-container { + border-right-style: var(--tw-border-style); + border-color: #09090b1a; + border-right-width: 1px; + grid-column: span 3/span 3; + position: relative +} + +@supports (color:color-mix(in lab, red, red)) { + .docs-left-sidebar-container { + border-color: color-mix(in oklab, var(--color-gray-950) 10%, transparent) + } +} + +@media (min-width: 64rem) { + .docs-left-sidebar-container { + padding-bottom: calc(var(--spacing) * 6) + } +} + +.docs-left-sidebar-container:where(.dark,.dark *) { + border-color: #ffffff1a +} + +@supports (color:color-mix(in lab, red, red)) { + .docs-left-sidebar-container:where(.dark,.dark *) { + border-color: color-mix(in oklab, var(--color-white) 10%, transparent) + } +} + +.docs-left-sidebar-sub-container { + top: calc(var(--spacing) * 22); + bottom: calc(var(--spacing) * 0); + left: calc(var(--spacing) * 0); + z-index: 20; + display: none; + position: sticky +} + +@media (min-width: 64rem) { + .docs-left-sidebar-sub-container { + display: block + } +} + +.docs-left-sidebar { + overflow-y: auto +} + +.docs-left-sidebar:is(:where(.group)[data-sidebar-collapsed] *) { + display: none +} + +@media not all and (min-width: 80rem) { + .docs-left-sidebar { + display: none + } +} + +.docs-left-sidebar nav { + padding-inline: calc(var(--spacing) * 6) +} + +@media (min-width: 64rem) { + .docs-left-sidebar nav { + padding-inline: calc(var(--spacing) * 8) + } +} + +:where(.docs-left-sidebar-spacing>:not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse))) +} + +@media not all and (min-width: 80rem) { + .docs-left-sidebar-spacing { + display: none + } +} + +.docs-left-sidebar h2 { + font-size: var(--text-base); + line-height: calc(var(--spacing) * 7); + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + text-wrap: pretty; + color: var(--color-gray-950) +} + +@media (min-width: 40rem) { + .docs-left-sidebar h2 { + font-size: var(--text-sm); + line-height: calc(var(--spacing) * 6) + } +} + +.docs-left-sidebar h2:where(.dark,.dark *) { + color: var(--color-white) +} + +.docs-left-sidebar ul { + margin-top: calc(var(--spacing) * 4); + gap: calc(var(--spacing) * 4); + border-left-style: var(--tw-border-style); + border-color: #09090b1a; + border-left-width: 1px; + flex-direction: column; + display: flex +} + +@supports (color:color-mix(in lab, red, red)) { + .docs-left-sidebar ul { + border-color: color-mix(in oklab, var(--color-gray-950) 10%, transparent) + } +} + +.docs-left-sidebar ul { + font-size: var(--text-base); + line-height: calc(var(--spacing) * 7); + color: var(--color-gray-700) +} + +@media (min-width: 40rem) { + .docs-left-sidebar ul { + margin-top: calc(var(--spacing) * 3); + gap: calc(var(--spacing) * 3); + font-size: var(--text-sm); + line-height: calc(var(--spacing) * 6) + } +} + +.docs-left-sidebar ul:where(.dark,.dark *) { + border-color: #ffffff1a +} + +@supports (color:color-mix(in lab, red, red)) { + .docs-left-sidebar ul:where(.dark,.dark *) { + border-color: color-mix(in oklab, var(--color-white) 10%, transparent) + } +} + +.docs-left-sidebar ul:where(.dark,.dark *) { + color: #ffffffb3 +} + +@supports (color:color-mix(in lab, red, red)) { + .docs-left-sidebar ul:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 70%, transparent) + } +} + +.docs-left-sidebar li { + border-left-style: var(--tw-border-style); + padding-left: calc(var(--spacing) * 4); + border-color: #0000; + border-left-width: 1px; + margin-left: -1px; + display: flex +} + +@media (hover: hover) { + .docs-left-sidebar li:hover { + color: var(--color-gray-950) + } + + .docs-left-sidebar li:hover:not(:has([aria-current=page])) { + border-color: var(--color-gray-400) + } +} + +.docs-left-sidebar li:has([aria-current=page]) { + border-left-style: var(--tw-border-style); + border-color: #6b58ff; + border-left-width: 2px +} + +@media (hover: hover) { + .docs-left-sidebar li:where(.dark,.dark *):hover { + color: var(--color-white) + } +} + +.docs-right-sidebar-container { + border-left-style: var(--tw-border-style); + border-color: #09090b1a; + border-left-width: 1px; + grid-column: span 12/span 12; + display: none; + position: relative +} + +@supports (color:color-mix(in lab, red, red)) { + .docs-right-sidebar-container { + border-color: color-mix(in oklab, var(--color-gray-950) 10%, transparent) + } +} + +.docs-right-sidebar-container:is(:where(.group)[data-sidebar-collapsed] *) { + display: none +} + +@media not all and (min-width: 80rem) { + .docs-right-sidebar-container { + display: none + } +} + +@media (min-width: 64rem) { + .docs-right-sidebar-container { + padding-bottom: calc(var(--spacing) * 10); + grid-column: 4/span 9 + } +} + +@media (min-width: 80rem) { + .docs-right-sidebar-container { + grid-column: auto/span 3; + display: block + } +} + +.docs-right-sidebar-container:where(.dark,.dark *) { + border-color: #ffffff1a +} + +@supports (color:color-mix(in lab, red, red)) { + .docs-right-sidebar-container:where(.dark,.dark *) { + border-color: color-mix(in oklab, var(--color-white) 10%, transparent) + } +} + +.docs-right-sidebar-sub-container { + padding-left: calc(var(--spacing) * 10); + position: relative +} + +@media (min-width: 64rem) { + .docs-right-sidebar-sub-container { + top: calc(var(--spacing) * 28); + position: sticky + } +} + +.docs-right-sidebar-container nav { + width: calc(var(--spacing) * 56) +} + +.docs-right-sidebar-container h2 { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + color: var(--color-gray-900) +} + +.docs-right-sidebar-container h2:where(.dark,.dark *) { + color: var(--color-white) +} + +.docs-right-sidebar-container ol { + margin-top: calc(var(--spacing) * 4) +} + +:where(.docs-right-sidebar-container ol>:not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse))) +} + +.docs-right-sidebar-container ol { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)) +} + +.docs-right-sidebar-container ol ol { + margin-top: calc(var(--spacing) * 2); + margin-bottom: calc(var(--spacing) * 4) +} + +:where(.docs-right-sidebar-container ol ol>:not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse))) +} + +.docs-right-sidebar-container ol ol { + padding-left: calc(var(--spacing) * 5); + color: var(--color-gray-500) +} + +.docs-right-sidebar-container ol ol:where(.dark,.dark *) { + color: #ffffffb3 +} + +@supports (color:color-mix(in lab, red, red)) { + .docs-right-sidebar-container ol ol:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 70%, transparent) + } +} + +.docs-right-sidebar-container a { + --tw-font-weight: var(--font-weight-normal); + font-weight: var(--font-weight-normal); + color: var(--color-gray-500) +} + +@media (hover: hover) { + .docs-right-sidebar-container a:hover { + color: var(--color-gray-700) + } +} + +.docs-right-sidebar-container a[aria-current=page] { + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: #6b58ff +} + +.docs-right-sidebar-container a:where(.dark,.dark *) { + color: #ffffffb3 +} + +@supports (color:color-mix(in lab, red, red)) { + .docs-right-sidebar-container a:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 70%, transparent) + } +} + +@media (hover: hover) { + .docs-right-sidebar-container a:where(.dark,.dark *):hover { + color: #ffffffe6 + } + + @supports (color:color-mix(in lab, red, red)) { + .docs-right-sidebar-container a:where(.dark,.dark *):hover { + color: color-mix(in oklab, var(--color-white) 90%, transparent) + } + } +} + +.docs-right-sidebar-container a:where(.dark,.dark *)[aria-current=page] { + color: #7b75ff +} + +.docs-content { + grid-column: span 12/span 12 +} + +@media (min-width: 64rem) { + .docs-content { + grid-column: span 9/span 9 + } +} + +@media (min-width: 80rem) { + .docs-content { + grid-column: span 6/span 6 + } +} + +.docs-content .code-container { + margin-bottom: calc(var(--spacing) * 6) +} + +.docs-content .code-container:where(.dark,.dark *) { + border-color: #ffffff0d +} + +@supports (color:color-mix(in lab, red, red)) { + .docs-content .code-container:where(.dark,.dark *) { + border-color: color-mix(in oklab, var(--color-white) 5%, transparent) + } +} + +.docs-content .code-container:where(.dark,.dark *) { + background-color: #ffffff14 +} + +@supports (color:color-mix(in lab, red, red)) { + .docs-content .code-container:where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-white) 8%, transparent) + } +} + +.docs-content .code-container .header { + top: calc(var(--spacing) * 0); + right: calc(var(--spacing) * 0); + border-style: var(--tw-border-style); + border-width: 0; + justify-content: flex-end; + position: absolute +} + +.docs-content h1 { + margin-top: 0; + margin-bottom: 1.5rem; + padding-bottom: .75rem; + font-size: 2rem; + font-weight: 700; + line-height: 1.2 +} + +.docs-content h2 { + margin-top: 2.5rem; + margin-bottom: 1.25rem; + padding-bottom: .5rem; + font-size: 1.75rem; + font-weight: 600; + line-height: 1.3 +} + +.docs-content h3 { + margin-top: 2rem; + margin-bottom: 1rem; + font-size: 1.5rem; + font-weight: 600; + line-height: 1.4 +} + +.docs-content h4 { + margin-top: 1.5rem; + margin-bottom: .75rem; + font-size: 1.25rem; + font-weight: 600; + line-height: 1.4 +} + +.docs-content h5 { + margin-top: 1.25rem; + margin-bottom: .5rem; + font-size: 1.1rem; + font-weight: 600; + line-height: 1.4 +} + +.docs-content h6 { + margin-top: 1rem; + margin-bottom: .5rem; + font-size: 1rem; + font-weight: 600; + line-height: 1.4 +} + +.docs-content p { + margin-bottom: 1.25rem; + font-size: 1rem; + line-height: 1.75 +} + +.docs-content a { + color: #6b58ff; + text-decoration-line: none +} + +.docs-content a:where(.dark,.dark *) { + color: #7b75ff +} + +.docs-content a:hover { + text-decoration: underline +} + +.docs-content ol, .docs-content ul { + color: #4a5568; + margin-bottom: 1.25rem; + padding-left: 2rem +} + +.docs-content li { + margin-bottom: .5rem; + line-height: 1.75 +} + +.docs-content ul li { + list-style-type: disc +} + +.docs-content ol li { + list-style-type: decimal +} + +.docs-content p code, .docs-content blockquote code { + border-radius: var(--radius-md); + background-color: #e4e4e780 +} + +@supports (color:color-mix(in lab, red, red)) { + .docs-content p code, .docs-content blockquote code { + background-color: color-mix(in oklab, var(--color-gray-200) 50%, transparent) + } +} + +.docs-content p code, .docs-content blockquote code { + padding-inline: calc(var(--spacing) * 1); + padding-block: calc(var(--spacing) * .5); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)) +} + +:is(.docs-content p code,.docs-content blockquote code):where(.dark,.dark *) { + background-color: #ffffff1a +} + +@supports (color:color-mix(in lab, red, red)) { + :is(.docs-content p code,.docs-content blockquote code):where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-white) 10%, transparent) + } +} + +.docs-content table { + border-collapse: collapse; + border: 1px solid #6b58ff; + border-radius: 8px; + width: 100%; + margin-bottom: 1.5rem; + overflow: hidden +} + +.docs-content thead { + background-color: #f7fafc +} + +.docs-content th { + text-align: left; + border-bottom: 2px solid #6b58ff; + padding: 1rem; + font-weight: 600 +} + +.docs-content td { + border-bottom: 1px solid #6b58ff; + padding: 1rem +} + +.docs-content tbody tr:last-child td { + border-bottom: none +} + +.docs-content tbody tr:hover { + background-color: #f7fafc +} + +.docs-content blockquote { + margin-bottom: calc(var(--spacing) * 6); + border-radius: var(--radius-2xl); + border-style: var(--tw-border-style); + background-color: var(--color-white); + padding-inline: calc(var(--spacing) * 4); + padding-block: calc(var(--spacing) * 3); + border-width: 2px; + border-color: #6b58ff +} + +.docs-content blockquote:where(.dark,.dark *) { + background-color: #ffffff1a +} + +@supports (color:color-mix(in lab, red, red)) { + .docs-content blockquote:where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-white) 10%, transparent) + } +} + +.docs-content blockquote p { + margin-bottom: calc(var(--spacing) * 2) +} + +.docs-content em { + font-style: italic +} + +.docs-content hr { + border: none; + border-top: 1px solid #6b58ff; + margin: 2rem 0 +} + +footer { + isolation: isolate; + z-index: 10; + border-top-style: var(--tw-border-style); + border-color: #0000000d; + border-top-width: 1px; + position: relative +} + +@supports (color:color-mix(in lab, red, red)) { + footer { + border-color: color-mix(in oklab, var(--color-black) 5%, transparent) + } +} + +footer:where(.dark,.dark *) { + border-color: #ffffff08 +} + +@supports (color:color-mix(in lab, red, red)) { + footer:where(.dark,.dark *) { + border-color: color-mix(in oklab, var(--color-white) 3%, transparent) + } +} + +footer:where(.dark,.dark *) { + background-color: oklab(39.0688% .00431919 -.103547/.3) +} + +footer p { + font-size: var(--text-sm); + line-height: calc(var(--spacing) * 6); + text-wrap: balance; + color: var(--color-gray-600) +} + +footer p:where(.dark,.dark *) { + color: #fffc +} + +@supports (color:color-mix(in lab, red, red)) { + footer p:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 80%, transparent) + } +} + +.social-icons { + column-gap: calc(var(--spacing) * 6); + display: flex +} + +.social-icons a { + color: var(--color-gray-600) +} + +@media (hover: hover) { + .social-icons a:hover { + color: var(--color-gray-800) + } +} + +.social-icons a:where(.dark,.dark *) { + color: #fffc +} + +@supports (color:color-mix(in lab, red, red)) { + .social-icons a:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 80%, transparent) + } +} + +@media (hover: hover) { + .social-icons a:where(.dark,.dark *):hover { + color: var(--color-white) + } +} + +.social-icons svg { + width: calc(var(--spacing) * 6); + height: calc(var(--spacing) * 6) +} + +.footer-logo { + height: calc(var(--spacing) * 10); + display: inline-block +} + +.footer-logo svg { + height: calc(var(--spacing) * 10); + color: var(--color-gray-800); + display: inline-block +} + +.footer-logo svg:where(.dark,.dark *) { + color: var(--color-white) +} + +.footer-container { + max-width: var(--container-7xl); + padding-inline: calc(var(--spacing) * 4); + padding-top: calc(var(--spacing) * 16); + padding-bottom: calc(var(--spacing) * 8); + margin-inline: auto +} + +@media (min-width: 40rem) { + .footer-container { + padding-top: calc(var(--spacing) * 24) + } +} + +@media (min-width: 64rem) { + .footer-container { + padding-inline: calc(var(--spacing) * 8); + padding-top: calc(var(--spacing) * 28) + } +} + +@media (min-width: 80rem) { + .footer-grid { + gap: calc(var(--spacing) * 8); + grid-template-columns:repeat(3, minmax(0, 1fr)); + display: grid + } +} + +:where(.footer-grid>div>:not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse))) +} + +.footer-links-container { + margin-top: calc(var(--spacing) * 16); + gap: calc(var(--spacing) * 8); + grid-template-columns:repeat(2, minmax(0, 1fr)); + display: grid +} + +@media (min-width: 80rem) { + .footer-links-container { + margin-top: calc(var(--spacing) * 0); + grid-column: span 2/span 2 + } +} + +@media (min-width: 48rem) { + .footer-links-grid { + gap: calc(var(--spacing) * 8); + grid-template-columns:repeat(2, minmax(0, 1fr)); + display: grid + } +} + +.footer-links-grid h3 { + font-size: var(--text-sm); + line-height: calc(var(--spacing) * 6); + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + color: var(--color-gray-900) +} + +.footer-links-grid h3:where(.dark,.dark *) { + color: var(--color-white) +} + +.footer-links-grid ul { + margin-top: calc(var(--spacing) * 6) +} + +:where(.footer-links-grid ul>:not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))) +} + +.footer-links-grid a { + font-size: var(--text-sm); + line-height: calc(var(--spacing) * 6); + color: var(--color-gray-600) +} + +@media (hover: hover) { + .footer-links-grid a:hover { + color: var(--color-gray-900) + } +} + +.footer-links-grid a:where(.dark,.dark *) { + color: #fffc +} + +@supports (color:color-mix(in lab, red, red)) { + .footer-links-grid a:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 80%, transparent) + } +} + +@media (hover: hover) { + .footer-links-grid a:where(.dark,.dark *):hover { + color: var(--color-white) + } +} + +.footer-links-grid div:first-of-type { + margin-bottom: calc(var(--spacing) * 10) +} + +@media (min-width: 48rem) { + .footer-links-grid div:first-of-type { + margin-bottom: calc(var(--spacing) * 0) + } +} + +.footer-credits { + margin-top: calc(var(--spacing) * 0); + border-top-style: var(--tw-border-style); + border-color: #18181b1a; + border-top-width: 1px +} + +@supports (color:color-mix(in lab, red, red)) { + .footer-credits { + border-color: color-mix(in oklab, var(--color-gray-900) 10%, transparent) + } +} + +.footer-credits { + padding-top: calc(var(--spacing) * 8) +} + +@media (min-width: 40rem) { + .footer-credits { + margin-top: calc(var(--spacing) * 20) + } +} + +@media (min-width: 64rem) { + .footer-credits { + margin-top: calc(var(--spacing) * 24) + } +} + +.footer-credits:where(.dark,.dark *) { + border-color: #ffffff1a +} + +@supports (color:color-mix(in lab, red, red)) { + .footer-credits:where(.dark,.dark *) { + border-color: color-mix(in oklab, var(--color-white) 10%, transparent) + } +} + +.footer-credits p { + font-size: var(--text-sm); + line-height: calc(var(--spacing) * 6); + color: var(--color-gray-600) +} + +.footer-credits p:where(.dark,.dark *) { + color: #fffc +} + +@supports (color:color-mix(in lab, red, red)) { + .footer-credits p:where(.dark,.dark *) { + color: color-mix(in oklab, var(--color-white) 80%, transparent) + } +} + +.noise { + pointer-events: none; + top: calc(var(--spacing) * 0); + opacity: .08; + width: 100%; + height: 100%; + position: absolute +} + +.noise:where(.dark,.dark *) { + opacity: .4 +} + +.badge-green { + border-radius: var(--radius-md); + background-color: var(--color-green-200); + padding-inline: calc(var(--spacing) * 1.5); + padding-block: calc(var(--spacing) * .5); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-green-900); + align-items: center; + display: inline-flex +} + +.badge-green:where(.dark,.dark *) { + background-color: #05df721a +} + +@supports (color:color-mix(in lab, red, red)) { + .badge-green:where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-green-400) 10%, transparent) + } +} + +.badge-green:where(.dark,.dark *) { + color: var(--color-green-400) +} + +.badge-red { + border-radius: var(--radius-md); + background-color: var(--color-red-200); + padding-inline: calc(var(--spacing) * 1.5); + padding-block: calc(var(--spacing) * .5); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-red-900); + align-items: center; + display: inline-flex +} + +.badge-red:where(.dark,.dark *) { + background-color: #ff65681a +} + +@supports (color:color-mix(in lab, red, red)) { + .badge-red:where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-red-400) 10%, transparent) + } +} + +.badge-red:where(.dark,.dark *) { + color: var(--color-red-400) +} + +.select { + grid-template-columns:repeat(1, minmax(0, 1fr)); + display: inline-grid +} + +.select select { + height: calc(var(--spacing) * 9); + appearance: none; + border-radius: var(--radius-xl); + background-color: #fffc; + grid-row-start: 1; + grid-column-start: 1; + width: 100% +} + +@supports (color:color-mix(in lab, red, red)) { + .select select { + background-color: color-mix(in oklab, var(--color-white) 80%, transparent) + } +} + +.select select { + padding-right: calc(var(--spacing) * 6); + padding-left: calc(var(--spacing) * 3); + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)); + color: var(--color-gray-900); + outline-style: var(--tw-outline-style); + outline-offset: calc(1px * -1); + outline-width: 1px; + outline-color: var(--color-gray-300) +} + +.select select:focus { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: #09090b0d +} + +@supports (color:color-mix(in lab, red, red)) { + .select select:focus { + --tw-ring-color: color-mix(in oklab, var(--color-gray-950) 5%, transparent) + } +} + +@media (min-width: 40rem) { + .select select { + font-size: var(--text-sm); + line-height: calc(var(--spacing) * 6) + } +} + +@media (min-width: 64rem) { + @media (hover: hover) { + .select select:hover { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: #09090b0d + } + + @supports (color:color-mix(in lab, red, red)) { + .select select:hover { + --tw-ring-color: color-mix(in oklab, var(--color-gray-950) 5%, transparent) + } + } + } +} + +.select select:where(.dark,.dark *) { + background-color: #ffffff0d +} + +@supports (color:color-mix(in lab, red, red)) { + .select select:where(.dark,.dark *) { + background-color: color-mix(in oklab, var(--color-white) 5%, transparent) + } +} + +.select select:where(.dark,.dark *) { + color: var(--color-white); + outline-color: #ffffff1a +} + +@supports (color:color-mix(in lab, red, red)) { + .select select:where(.dark,.dark *) { + outline-color: color-mix(in oklab, var(--color-white) 10%, transparent) + } +} + +:is(.select select:where(.dark,.dark *)>*) { + background-color: var(--color-gray-800) +} + +.select select:where(.dark,.dark *):focus { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: #ffffff0d +} + +@supports (color:color-mix(in lab, red, red)) { + .select select:where(.dark,.dark *):focus { + --tw-ring-color: color-mix(in oklab, var(--color-white) 5%, transparent) + } +} + +@media (min-width: 64rem) { + @media (hover: hover) { + .select select:where(.dark,.dark *):hover { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: #ffffff0d + } + + @supports (color:color-mix(in lab, red, red)) { + .select select:where(.dark,.dark *):hover { + --tw-ring-color: color-mix(in oklab, var(--color-white) 5%, transparent) + } + } + } +} + +.select svg { + pointer-events: none; + margin-right: calc(var(--spacing) * 2); + width: calc(var(--spacing) * 5); + height: calc(var(--spacing) * 5); + color: var(--color-gray-500); + grid-row-start: 1; + grid-column-start: 1; + place-self: center flex-end +} + +@media (min-width: 40rem) { + .select svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4) + } +} + +.select svg:where(.dark,.dark *) { + color: var(--color-gray-400) +} + +.php85 .phpcode { + padding: 1em; +} + +.dark .php85 .phpcode::selection { + background-color: #333; +} + +.php85 .phpcode span.comment { + color: #708090; + background-color: transparent; + font-style: italic; +} + +.php85 .phpcode span.default { + color: rgb(213, 51, 84); + background-color: transparent; +} + +.php85 .phpcode span.variable { + color: #7d55ba; + background-color: transparent; +} + +.php85 .phpcode span.keyword { + color: #07a; + background-color: transparent; +} + +.php85 .phpcode span.string { + color: rgb(80, 119, 0); + background-color: transparent; +} + +.dark .php85 .phpcode span.comment { + color: #8b949e; + background-color: transparent; + font-style: italic; +} + +.dark .php85 .phpcode span.default { + color: #d2a8ff; + background-color: transparent; +} + +.dark .php85 .phpcode span.variable { + color: #a5d6ff; + background-color: transparent; +} + +.dark .php85 .phpcode span.keyword { + color: #ff7b72; + background-color: transparent; +} + +.dark .php85 .phpcode span.string { + color: #80b83c; + background-color: transparent; +} + +.php85 #layout-content a.button-primary { + min-height: calc(var(--spacing) * 10); + cursor: pointer; + width: 100%; + padding-inline: calc(var(--spacing) * 5); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + color: var(--color-white); + background-color: #6b58ff; + border-radius: calc(infinity * 1px); + justify-content: center; + align-items: center; + text-decoration-line: none; + display: inline-flex; + position: relative; + overflow: hidden +} + +@media (hover: hover) { + .php85 #layout-content a.button-primary:hover { + background-color: oklab(57.9656% .0459944 -.232052/.9) + } +} + +.php85 #layout-content a.button-primary:focus-visible { + outline-style: var(--tw-outline-style); + outline-offset: 2px; + outline-width: 2px; + outline-color: var(--color-gray-800) +} + +.php85 #layout-content a.button-primary:disabled { + pointer-events: none; + opacity: .9 +} + +@media (min-width: 40rem) { + .php85 #layout-content a.button-primary { + width: auto + } +} + +.php85 #layout-content a.button-secondary { + min-height: calc(var(--spacing) * 10); + cursor: pointer; + background-color: var(--color-white); + width: 100%; + padding-inline: calc(var(--spacing) * 5); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + color: var(--color-gray-900); + --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, #0000000d); + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: color-mix(in oklab, var(--color-gray-200) 50%, transparent); + border-radius: calc(infinity * 1px); + justify-content: center; + align-items: center; + text-decoration-line: none; + display: inline-flex; + position: relative; + overflow: hidden +} + +@media (hover: hover) { + .php85 #layout-content a.button-secondary:hover { + background-color: #f4f4f5f2 + } + + @supports (color:color-mix(in lab, red, red)) { + .php85 #layout-content a.button-secondary:hover { + background-color: color-mix(in oklab, var(--color-gray-100) 95%, transparent) + } + } +} + +.php85 #layout-content a.button-secondary:focus-visible { + outline-style: var(--tw-outline-style); + outline-offset: 2px; + outline-width: 2px; + outline-color: var(--color-gray-800) +} + +.php85 #layout-content a.button-secondary:disabled { + pointer-events: none; + opacity: .9 +} + +@media (min-width: 40rem) { + .php85 #layout-content a.button-secondary { + width: auto + } +} + +.php85 #layout-content a.button-secondary:where(.dark,.dark *) { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow) +} + +@property --tw-blur { + syntax: "*"; + inherits: false +} + +@property --tw-brightness { + syntax: "*"; + inherits: false +} + +@property --tw-contrast { + syntax: "*"; + inherits: false +} + +@property --tw-grayscale { + syntax: "*"; + inherits: false +} + +@property --tw-hue-rotate { + syntax: "*"; + inherits: false +} + +@property --tw-invert { + syntax: "*"; + inherits: false +} + +@property --tw-opacity { + syntax: "*"; + inherits: false +} + +@property --tw-saturate { + syntax: "*"; + inherits: false +} + +@property --tw-sepia { + syntax: "*"; + inherits: false +} + +@property --tw-drop-shadow { + syntax: "*"; + inherits: false +} + +@property --tw-drop-shadow-color { + syntax: "*"; + inherits: false +} + +@property --tw-drop-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100% +} + +@property --tw-drop-shadow-size { + syntax: "*"; + inherits: false +} + +@property --tw-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000 +} + +@property --tw-shadow-color { + syntax: "*"; + inherits: false +} + +@property --tw-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100% +} + +@property --tw-inset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000 +} + +@property --tw-inset-shadow-color { + syntax: "*"; + inherits: false +} + +@property --tw-inset-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100% +} + +@property --tw-ring-color { + syntax: "*"; + inherits: false +} + +@property --tw-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000 +} + +@property --tw-inset-ring-color { + syntax: "*"; + inherits: false +} + +@property --tw-inset-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000 +} + +@property --tw-ring-inset { + syntax: "*"; + inherits: false +} + +@property --tw-ring-offset-width { + syntax: ""; + inherits: false; + initial-value: 0 +} + +@property --tw-ring-offset-color { + syntax: "*"; + inherits: false; + initial-value: #fff +} + +@property --tw-ring-offset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000 +} + +@property --tw-backdrop-blur { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-brightness { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-contrast { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-grayscale { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-hue-rotate { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-invert { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-opacity { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-saturate { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-sepia { + syntax: "*"; + inherits: false +} + +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid +} + +@property --tw-outline-style { + syntax: "*"; + inherits: false; + initial-value: solid +} + +@property --tw-gradient-position { + syntax: "*"; + inherits: false +} + +@property --tw-gradient-from { + syntax: ""; + inherits: false; + initial-value: #0000 +} + +@property --tw-gradient-via { + syntax: ""; + inherits: false; + initial-value: #0000 +} + +@property --tw-gradient-to { + syntax: ""; + inherits: false; + initial-value: #0000 +} + +@property --tw-gradient-stops { + syntax: "*"; + inherits: false +} + +@property --tw-gradient-via-stops { + syntax: "*"; + inherits: false +} + +@property --tw-gradient-from-position { + syntax: ""; + inherits: false; + initial-value: 0% +} + +@property --tw-gradient-via-position { + syntax: ""; + inherits: false; + initial-value: 50% +} + +@property --tw-gradient-to-position { + syntax: ""; + inherits: false; + initial-value: 100% +} + +@property --tw-duration { + syntax: "*"; + inherits: false +} + +@property --tw-ease { + syntax: "*"; + inherits: false +} + +@property --tw-font-weight { + syntax: "*"; + inherits: false +} + +@property --tw-leading { + syntax: "*"; + inherits: false +} + +@property --tw-space-y-reverse { + syntax: "*"; + inherits: false; + initial-value: 0 +} + +@property --tw-space-x-reverse { + syntax: "*"; + inherits: false; + initial-value: 0 +} + +@property --tw-tracking { + syntax: "*"; + inherits: false +} diff --git a/styles/prism.css b/styles/prism.css new file mode 100644 index 0000000000..186d885340 --- /dev/null +++ b/styles/prism.css @@ -0,0 +1,5 @@ +/* PrismJS 1.30.0 +https://prismjs.com/download#themes=prism&languages=markup+bash+markup-templating+php+powershell&plugins=line-numbers+show-language+remove-initial-line-feed+toolbar+copy-to-clipboard */ +code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help} +pre[class*=language-].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right} +div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;z-index:10;top:.3em;right:.2em;transition:opacity .3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar:focus-within>.toolbar{opacity:1}div.code-toolbar>.toolbar>.toolbar-item{display:inline-block}div.code-toolbar>.toolbar>.toolbar-item>a{cursor:pointer}div.code-toolbar>.toolbar>.toolbar-item>button{background:0 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}div.code-toolbar>.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar>.toolbar-item>span{color:#bbb;font-size:.8em;padding:0 .5em;background:#f5f2f0;background:rgba(224,224,224,.2);box-shadow:0 2px 0 0 rgba(0,0,0,.2);border-radius:.5em}div.code-toolbar>.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar>.toolbar-item>button:focus,div.code-toolbar>.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar>.toolbar-item>span:focus,div.code-toolbar>.toolbar>.toolbar-item>span:hover{color:inherit;text-decoration:none} diff --git a/styles/supported-versions.css b/styles/supported-versions.css index f152bcc94c..c424dc4e0b 100644 --- a/styles/supported-versions.css +++ b/styles/supported-versions.css @@ -19,11 +19,11 @@ table.standard tr.stable td:first-child { } table.standard td.collapse-phone { - padding: 0; + display: none; } - table.standard td.collapse-phone * { - display: none; + table.standard:nth-of-type(2) td::before { + content: unset; } } diff --git a/styles/theme-base.css b/styles/theme-base.css index fead11a7d9..e35c0e9edc 100644 --- a/styles/theme-base.css +++ b/styles/theme-base.css @@ -1,4 +1,3 @@ -/* vim: set et ts=4 sw=4 fdm=marker nocin: : */ /*! * Bootstrap v2.3.2 * @@ -9,6 +8,19 @@ * Designed and built with all the love in the world @twitter by @mdo and @fat. */ +:root { + --font-family-sans-serif: "Fira Sans", "Source Sans Pro", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-family-mono: "Fira Mono", "Source Code Pro", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --dark-grey-color: #333; + --dark-blue-color: #4F5B93; + --medium-blue-color: #7A86B8; + --light-blue-color: #E2E4EF; + --dark-magenta-color: #793862; + --medium-magenta-color: #AE508D; + --light-magenta-color: #CF82B1; + scroll-padding-top: 4rem; +} + .clearfix { *zoom: 1; } @@ -60,7 +72,7 @@ a { border-bottom:1px solid; } a:focus { - outline: thin dotted #333; + outline: thin dotted var(--dark-grey-color); outline-offset: -2px; } a:hover, @@ -169,53 +181,6 @@ textarea { } } -.navbar .brand { - margin-right:.75rem; - float: left; - display: block; - height: 1.5rem; - padding: .75rem .75rem .75rem 1.5rem; -} -.navbar .brand:hover, -.navbar .brand:focus { - text-decoration: none; -} -.navbar-search { - position: relative; - float: left; - margin-top: .770rem; - margin-bottom: 0; - width:100%; - -moz-box-sizing:border-box; - box-sizing:border-box; -} -.navbar-search .search-query { - margin-bottom: 0; - padding: .125rem .5rem; - -moz-box-sizing: border-box; - box-sizing:border-box; - width:100%; -} -.navbar-fixed-top .navbar-inner { - margin:0 auto; -} -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} -.navbar .nav > li { - float: left; -} -.navbar .nav > li > a { - float: none; - padding: .75rem; -} -.navbar .nav > li > a > img { - vertical-align: middle; -} @-ms-viewport { width: device-width; } @@ -285,15 +250,15 @@ textarea { } body, input, textarea { - font-family: "Fira Sans", "Source Sans Pro", Helvetica, Arial, sans-serif; + font-family: var(--font-family-sans-serif); font-weight: 400; } code, pre.info, .docs .classsynopsis, .docs .classsynopsis code { - font: normal 0.875rem/1.5rem "Fira Mono", "Source Code Pro", monospace; - word-wrap: break-word; + font: normal 0.875rem/1.5rem var(--font-family-mono); + overflow-x: auto; } p code, li code, @@ -375,9 +340,9 @@ blockquote { } abbr { - border-bottom:1px dotted; cursor: help; } + a { text-decoration:none; } @@ -389,33 +354,25 @@ hr { border-top:.25rem solid #99c; } -.navbar .brand img { - padding:0; - opacity:.75; - border: 0; -} -.navbar a { - border:0; -} - -.navbar { - border-bottom:.25rem solid; - overflow: visible; - *position: relative; - *z-index: 2; -} - .page-tools { text-align: right; } - -.page-tools #changelang-langs, -.page-tools .edit-bug { +.page-tools #changelang-langs { font-size:.75rem; } -.page-tools .edit-bug a { + +.contribute { + border: 1px solid #888; + border-width: 1px 0; + margin: 0px -24px 0px -24px; + padding: 0 24px 5px 24px; + background-color: #E2E2E2; +} +.contribute .edit-bug a { border: 0; - margin-left: 1rem; +} +.contribute h3.title { + margin-bottom: 10px; } /** @@ -540,6 +497,10 @@ dl dd { padding:0 1.5rem; } +.php8-code.phpcode{ + overflow-x: auto; +} + .phpcode, div.classsynopsis { text-align: left; } @@ -547,6 +508,27 @@ div.classsynopsisinfo_comment { margin-top:1.5rem; } +.instructions { + margin-bottom: 2rem; +} + +.instructions p { + margin: 1rem 0; +} + +.instructions-form { + display: flex; + flex-direction: column; + gap: .75rem; + margin-bottom: 2rem; +} + +.instructions-label { + display: flex; + align-items: center; + gap: 8px; +} + .warn { padding: .75rem 1rem; margin: 1.5rem 0 1.5rem 1.5rem; @@ -555,8 +537,7 @@ div.classsynopsisinfo_comment { pre.info { border: 1px solid; - margin: 1rem 2rem 1.3rem; - margin-right: 0.8rem; + margin: 1rem 0.8rem 1.3rem 2rem; } #langform { @@ -573,6 +554,10 @@ pre.info { padding:.75rem 1.5rem 1.5rem; -moz-box-sizing:border-box; box-sizing:border-box; + position: sticky; + top: 3rem; + max-height: calc(100vh - 3rem); + overflow: auto; } #layout-content { padding:1.5rem; @@ -652,6 +637,10 @@ body > footer a { display:inline-block; border-bottom:0; } +body > footer a:hover, +body > footer a:focus { + color:var(--light-magenta-color); +} /* {{{ ElePHPants photo stream */ @@ -686,7 +675,6 @@ table td { table.standard { border-collapse: collapse; - border-style: hidden; border:1px solid #d9d9d9; } @@ -727,210 +715,6 @@ table.standard th.subr { text-align: right; } -/* {{{ Search results. */ - -/* Undo a whole bunch of default styles. */ -#layout .cse .gsc-control-cse, -#layout .gsc-control-cse, -#layout .gsc-control-cse .gsc-table-result { - font-family: "Fira Sans", "Source Sans Pro", Helvetica, Arial, sans-serif; - font-size: 1rem; - margin: 0; - padding: 0; - position: relative; -} - -/* Override the search box styling. */ -#layout .cse form.gsc-search-box, -#layout form.gsc-search-box { - margin: 0 0 1rem 0; - padding: 0; -} - -#layout .cse table.gsc-search-box, -#layout table.gsc-search-box { - border: solid 1px #99c; - border-radius: 2px; -} - -#layout .cse input.gsc-input, -#layout input.gsc-input { - border: 0; -} - -#layout .cse table.gsc-search-box td, -#layout table.gsc-search-box td { - padding: 0; -} - -#layout .cse input.gsc-search-button, -#layout input.gsc-search-button { - background: #99c; - border: solid 1px #99c; - border-radius: 0; - color: rgb(238, 238, 255); -} - -#layout .cse input.gsc-search-button:hover, -#layout input.gsc-search-button:hover { - color: white; -} - -/* We don't need a clear button. */ -#layout .cse .gsc-clear-button, -#layout .gsc-clear-button { - display: none; -} - -/* Style the "tabs", and reformat them as a sidebar item. */ -#layout .cse div.gsc-results-wrapper-visible, -#layout div.gsc-results-wrapper-visible { - position: relative; - min-height: 11rem; -} - -#layout .cse .gsc-tabsArea, -#layout .gsc-tabsArea { - position: absolute; - top: 0; - left: 0; - width: 23.404%; - margin-right: 2.762%; - padding:.5rem .75rem; - border: 1px solid; - background-color:#f2f2f2; - border-color: #e0e0e0; - border-bottom-color:#d9d9d9; - border-radius:2px; - margin-top: 0; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -#layout .cse .gsc-tabHeader.gsc-tabhActive, -#layout .gsc-tabHeader.gsc-tabhActive, -#layout .cse .gsc-tabHeader.gsc-tabhInactive, -#layout .gsc-tabHeader.gsc-tabhInactive { - background: transparent; - color: rgb(38, 38, 38); - border: 0; - display: block; - font-size: 100%; - font-weight: normal; - border-top: dotted 1px rgb(189, 189, 189); - padding: 0; -} - -#layout .cse .gsc-tabHeader.gsc-tabhActive:first-child, -#layout .gsc-tabHeader.gsc-tabhActive:first-child, -#layout .cse .gsc-tabHeader.gsc-tabhInactive:first-child, -#layout .gsc-tabHeader.gsc-tabhInactive:first-child { - border: 0; -} - -#layout .cse .gsc-tabHeader.gsc-tabhActive, -#layout .gsc-tabHeader.gsc-tabhActive { - color: black; -} - -#layout .cse .gsc-tabHeader.gsc-tabhActive:after, -#layout .gsc-tabHeader.gsc-tabhActive:after { - content: "»"; - color: black; - float: right; - text-align: right; -} - -#layout .cse .gsc-tabHeader.gsc-tabhInactive:hover, -#layout .gsc-tabHeader.gsc-tabhInactive:hover { - color: #693; -} - -/* Format the results in the right place. */ -#layout .cse .gsc-above-wrapper-area, -#layout .gsc-above-wrapper-area { - border: 0; - margin: 0; - padding: 0 0 1rem 26.166%; - width: 73.834%; -} - -#layout .cse .gsc-above-wrapper-area-container, -#layout .gsc-above-wrapper-area-container { - width: auto; -} - -#layout .cse .gsc-result-info-container, -#layout .gsc-result-info-container { - padding: 0; - margin: 0; -} - -#layout .cse .gsc-result-info, -#layout .gsc-result-info { - color: #333; - font-size: 0.75rem; - padding: 0; - margin: 0; -} - -#layout .cse .gsc-results, -#layout .gsc-results { - margin: 0; - padding: 0 0 0 26.166%; - width: 73.834%; -} - -#layout .cse .gsc-resultsHeader, -#layout .gsc-resultsHeader { - display: none; -} - -#layout .cse .gsc-webResult.gsc-result, -#layout .gsc-webResult.gsc-result { - margin: 0 0 1rem 0; - padding: 0; - border: 0; -} - -#layout .cse .gs-webResult.gs-result a, -#layout .gs-webResult.gs-result a, -#layout .cse .gs-webResult.gs-result a b, -#layout .gs-webResult.gs-result a b { - border-bottom: solid 1px rgb(51, 102, 153); - color: rgb(51, 102, 153); - text-decoration: none; -} - -#layout .cse .gs-webResult.gs-result a:focus, -#layout .gs-webResult.gs-result a:focus, -#layout .cse .gs-webResult.gs-result a:hover, -#layout .gs-webResult.gs-result a:hover, -#layout .cse .gs-webResult.gs-result a:focus b, -#layout .gs-webResult.gs-result a:focus b, -#layout .cse .gs-webResult.gs-result a:hover b, -#layout .gs-webResult.gs-result a:hover b { - border-bottom-color: rgb(51, 102, 153); - color: rgb(102, 153, 51); -} - -#layout .gs-webResult.gs-result .gs-visibleUrl { - font-weight: normal; -} - -/* Handle no results tabs. */ -#layout .gs-no-results-result .gs-snippet { - border: 0; - background: transparent; -} - -/* Override docs table styling we don't want. */ -.docs #cse th, -.docs #cse td { - padding: 0; -} -/* }}} */ - div.informalexample { margin: .75rem 0; } @@ -988,147 +772,6 @@ fieldset { padding:0; border:0; } -.navbar ul { - list-style:none; -} -.navbar a { - display:inline-block; -} - -/* {{{ Typeahead search results */ -.twitter-typeahead { - width: 100%; -} - -.navbar .navbar-search .tt-hint.search-query { - color: silver; -} - -.search-query { - z-index: 2 !important; -} - -.tt-dropdown-menu { - background: none repeat scroll 0 0 #E2E4EF; - border-bottom: 1px solid #C4C9DF; - border-radius: 0 0 2px 2px; - box-shadow: 1px 0 1px -1px #C4C9DF inset, -1px 0 1px -1px #C4C9DF inset, 0 0 1px #4F5B93; - color: #333333; - padding-top: 3px; - margin-top: -3px; - min-width: 100%; -} - -.tt-dropdown-menu .result-heading { - font-size:1.1rem; - border-bottom: 2px solid #4F5B93; - color: #E2E4EF; - text-shadow:0 -1px 0 rgba(0,0,0,.25); - word-spacing:6px; - margin: 0; - padding: 0.1rem 0.3rem; - line-height: 2.5rem; - background-color: rgb(136, 146, 191); -} - -.tt-dropdown-menu .result-heading .collapsible { - background: url(../images/search-sprites.png) no-repeat left center; - background-position: 0 -15px; - width: 30px; - height: 13px; - display: inline-block; -} - -.tt-dropdown-menu .result-heading .collapsible:hover { - cursor: pointer; -} - -.tt-dropdown-menu .result-heading .collapsible.closed { - background-position: 0 -2px; -} - -.tt-dropdown-menu .result-heading::after { - border-bottom: none; -} - -.tt-dropdown-menu .result-count { - display: inline-block; - float: right; - opacity: 0.6; - text-align: right; -} - -.tt-suggestions { - color: #555; - overflow-y: auto; - overflow-x: hidden; - max-height: 210px; -} - -.tt-dropdown-menu .search { - border: none; - color: white; - display: block; - padding: 0.3rem; - background: rgb(136, 146, 191); -} - -.tt-suggestion { - margin: 0; - padding: 3px; - background: rgb(226, 228, 239); - border-bottom: 1px solid rgb(79, 91, 147); -} - -.tt-suggestion h4 { - color: #333; - margin: 0; - overflow: hidden; - text-overflow: ellipsis; - font-size: 11pt; - line-height: 2rem; - font-weight: normal; -} - -/* Class and other matches descriptions tend to be useless. */ -.tt-suggestion .description { - display: block; - font-size: 0.75rem; - line-height: 1rem; - overflow: hidden; - text-overflow: ellipsis; -} - - -/* Selected items. */ -.tt-suggestion.tt-is-under-cursor { - background-color: #4F5B93; -} - -.tt-suggestion.tt-is-under-cursor h4 { - color: #FFF; -} - -.tt-suggestion.tt-is-under-cursor .description { - color: #FFF; -} - -/* We need to crunch down the dropdown on smaller displays. Firstly we'll drop - * the descriptions, then classes (since they're two clicks away if you have - * matching functions). */ -@media screen and (max-height: 480px) { - .tt-suggestion .description { - display: none; - } -} - -@media screen and (max-height: 400px) { - .tt-dataset-1 { - /* Overriding an unfortunate element style. */ - display: none !important; - } -} -/* }}} */ .downloads .content-box { margin:0 0 2.25rem; @@ -1143,14 +786,16 @@ fieldset { .content-box .md5sum, .content-box .sha256 { display: block; font: normal 0.875rem/1.5rem "Fira Mono", "Source Code Pro", monospace; + overflow: hidden; + text-overflow: ellipsis; } .content-box .md5sum:before { content: "md5: "; - font-family: "Fira Sans", "Source Sans Pro", Helvetica, Arial, sans-serif; + font-family: var(--font-family-sans-serif); } .content-box .sha256:before { content: "sha256: "; - font-family: "Fira Sans", "Source Sans Pro", Helvetica, Arial, sans-serif; + font-family: var(--font-family-sans-serif); } .content-box .releasedate { float: right; @@ -1159,7 +804,7 @@ fieldset { .content-box pre { background: white; border: solid 1px rgb(214, 214, 214); - margin: 0px; + margin: 0; padding: 0.75rem; overflow: auto; font: normal 0.875rem/1.5rem "Source Code Pro", monospace; @@ -1203,9 +848,6 @@ header.title { /* {{{ General styles (p, parameters, initializers, ...) */ -.refsect1 .parameter { - cursor:pointer; -} .refsect1 dt { height:1.5rem; } @@ -1295,11 +937,20 @@ div.tip p:first-child { } .docs .example-contents pre { margin:0; + overflow-x:auto; + white-space:pre; } -.docs .example-contents > [class$="code"], + +.docs .example-contents > [class$="code"]:not(.phpcode), .docs .example-contents.screen, .informalexample .literallayout { padding: .75rem; + overflow-x: auto; +} + +.docs .example-contents > .phpcode > pre > code, +.docs .example-contents > .phpcode > code { + padding: .75rem; } .docs .classsynopsis, @@ -1310,8 +961,13 @@ div.tip p:first-child { margin-bottom: 1.5rem; } -.docs .phpcode code { +.phpcode pre { + margin: 0; +} +.phpcode code { display: block; + overflow-x: auto; + white-space: pre-wrap; } .docs .qandaentry dt .phpcode * { @@ -1483,8 +1139,8 @@ div.soft-deprecation-notice { } div.soft-deprecation-notice blockquote.sidebar { padding: 10px; - margin: 0px; - border: 0px solid; + margin: 0; + border: 0 solid; } #breadcrumbs { @@ -1516,32 +1172,27 @@ div.soft-deprecation-notice blockquote.sidebar { #breadcrumbs a:visited { border-width:0; } +#breadcrumbs a:hover, +#breadcrumbs a:focus { + color:var(--light-magenta-color); +} #breadcrumbs .next, #breadcrumbs .prev { float:right; } @media (min-width: 768px) { - - .navbar-fixed-top { - top: 0; - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - transform: translateZ(0); - } - body { - margin:3.25rem 0 0; - } - /* add a top-margin to all elements which get referenced by anchor-urls, so they are not covered by the fixed header */ - [id] { - scroll-margin-top: 3.25rem; - } - #breadcrumbs { display:block; + position: sticky; + top: 0px; + background: var(--dark-grey-color); + z-index: 1; + } + .doctable thead th { + position: sticky; + top: 3rem; } - .navbar-search, - #intro .download, #intro .background, aside.tips, .layout-menu { @@ -1549,34 +1200,25 @@ div.soft-deprecation-notice blockquote.sidebar { float: left; } - #intro .blurb, #layout-content { - float:left; - width:75%; - } - .navbar-fixed-top { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; + #layout-content { + float: left; + width: 75%; } } - - @media (min-width: 768px) and (max-width: 979px) { - #intro .download, aside.tips, .navbar-search { + aside.tips { width: 30% !important; } - #intro .blurb, #layout-content { + #layout-content:not(:only-child) { width: 70% !important; } } @media (min-width: 1200px) { #intro .container, - .navbar-inner, + .navbar__inner, #breadcrumbs-inner, #goto div, #trick div, @@ -1587,7 +1229,7 @@ div.soft-deprecation-notice blockquote.sidebar { } @media (min-width: 1500px) { #intro .container, - .navbar-inner, + .navbar__inner, #breadcrumbs-inner, #goto div, #trick div, @@ -1603,27 +1245,12 @@ div.soft-deprecation-notice blockquote.sidebar { @media (max-width:767px) { - .navbar-fixed-top .container { - width:auto; - } - - .navbar-search { - float:left; - clear: both; - margin-top: 0; - padding: 0px 10px 10px 10px; - } - - .navbar .nav { - margin-right: 0; - } - #intro .download-php { margin: 0 !important; } #mainmenu-toggle-overlay { - background: #4F5B93 url(/https/github.com/images/mobile-menu.png) no-repeat center center; + background: var(--dark-blue-color) url(/https/github.com/images/mobile-menu.png) no-repeat center center; float: right; display: block; height: 32px; @@ -1645,65 +1272,19 @@ div.soft-deprecation-notice blockquote.sidebar { opacity: 0; } - .navbar .brand { - float: left; - margin-bottom: 0.5rem; - } - - .navbar-search { - margin-top: 0; - padding: 0px 10px 10px; - } - - .navbar .brand img { - display: block; - margin-left: 12px; - } - - .navbar .nav { - clear: both; - float: none; - max-height: 0; - overflow: hidden; - -moz-transition: max-height 400ms; - -webkit-transition: max-height 400ms; - -o-transition: max-height 400ms; - -ms-transition: max-height 400ms; - transition: max-height 400ms; - } - - .navbar .nav > li, .footmenu > li { - float: none; - display: block; - text-align: center; - - } - - .navbar .nav > li a, .footmenu > li > a { - width: 100%; - display: block; - padding-left: 0; - } - #mainmenu-toggle:checked + .nav { /* This just has to be big enough to cover whatever's in .nav. */ max-height: 50rem; } #flash-message { - margin-top: 0px !important; + margin-top: 0 !important; top: 0; } } @media (min-width:768px) { - #topsearch { - float:right; - } - .navbar-search .search-query { - width:100%; - } #intro .container { position:relative; } @@ -1726,17 +1307,17 @@ div.soft-deprecation-notice blockquote.sidebar { #goto { display: none; - background-color: #333; + background-color: var(--dark-grey-color); height: 100%; width: 100%; opacity: 0.9; position: fixed; - top: 50px; + top: 64px; z-index: 5000; color: #E6E6E6; } #goto .search .results { - text-shadow: 0px 2px 3px #555; + text-shadow: 0 2px 3px #555; font-size: 2rem; line-height: 1; } @@ -1746,7 +1327,7 @@ div.soft-deprecation-notice blockquote.sidebar { } #goto .search .text { color: #222; - text-shadow: 0px 2px 3px #555; + text-shadow: 0 2px 3px #555; font-size: 10rem; line-height: .7; } @@ -1756,7 +1337,7 @@ div.soft-deprecation-notice blockquote.sidebar { height: 100%; width: 100%; position: fixed; - top: 50px; + top: 64px; z-index: 5000; } #goto div, @@ -1814,7 +1395,6 @@ aside.tips div.inner { /* {{{ Flash message */ #flash-message { height: auto; - margin-top: 4px; position: fixed; width: 100%; z-index: 95; @@ -1837,7 +1417,8 @@ aside.tips div.inner { /* }}} */ /* {{{ News */ -.newsentry header h2 { +.newsentry header h2, +.newsItem header h2 { margin:0; } .newsentry { @@ -1851,7 +1432,8 @@ aside.tips div.inner { float: right; opacity: 0.8; } -.newsentry header time { +.newsentry header time, +.newsItem header time { float:right; line-height:3rem; } @@ -1860,11 +1442,17 @@ aside.tips div.inner { line-height: 1.7rem; } -.newsentry .newsimage a { +.newsentry .newsimage a, +.newsItem .newsImage a { float: right; border: 0; padding: 10px; } + +.newsentry .newsimage img, +.newsItem .newsImage img { + max-width: 350px; +} /* }}} */ /* {{{ Logo Downloads */ @@ -1875,5 +1463,58 @@ aside.tips div.inner { /* }}} */ +.caption { + font-size: 0.85rem; +} + +/** +* Table overlapping fix +*/ +.table { + width: 100%; + margin: 1% !important; + border-spacing: 20px; + table-layout: fixed; +} + +td { + word-wrap: break-word; +} + +@media only screen and (max-width: 760px), (min-device-width: 768px) and (max-device-width: 1024px) { + /* Make table elements block for stacking */ + table, thead, tbody, th, td, tr { + display: block; + } + + /* Hide the table headers */ + thead tr { + position: absolute; + top: -9999px; + left: -9999px; + } -/* vim: set ts=2 sw=2 et: */ + tr { + margin: 0 0 1rem 0; + } + + td { + border: none; + border-bottom: 1px solid #eee; + position: relative; + } + td:before { + left: -.50rem; + top: -0.3rem; + padding: .25rem .5rem; + width: 100%; + font-weight: bold; + border: none; + background-color: #C4C9DF; + border-bottom: 1px solid #eee; + position: relative; + display: block; + unicode-bidi: isolate; + content: attr(data-label); + } +} diff --git a/styles/theme-medium.css b/styles/theme-medium.css index 3c8b1da577..1f1b9d142f 100644 --- a/styles/theme-medium.css +++ b/styles/theme-medium.css @@ -1,36 +1,28 @@ -/** - * - * COLORS: | HEX | - * ---------------+---------+ - * light-blue | #E2E4EF | - * ---------------+---------+ - * medium-blue | #8892BF | - * ---------------+---------+ - * dark-blue | #4F5B93 | - * ---------------+---------+ - * - */ - +:root { + --background-color: var(--dark-grey-color); + --background-text-color: #CCC; + --content-background-color: #F2F2F2; + --content-text-color: var(--dark-grey-color); +} html { - background: #333 url('/https/github.com/images/bg-texture-00.svg'); - color: #CCC; + background-color: var(--background-color); + background-image: url('/https/github.com/images/bg-texture-00.svg'); + color: var(--background-text-color); + scrollbar-color: hsl(0, 0%, 67%) transparent; } + #layout-content { - background:#F2F2F2; - color:#333; + background: var(--content-background-color); + color: var(--content-text-color); } #layout-content:not(:only-child) { border-right:.25rem solid #666; } -abbr { - border-color: #8892BF; -} - h1, h2, h3, h4, h5, h6 { font-weight: 500; - color:#333 + color: var(--content-text-color) } header.title, h1:after, @@ -50,7 +42,7 @@ h3:after { a:link, a:visited { - color: #ccc; + color: var(--background-text-color); } #layout-content a:link, #layout-content a:visited { @@ -60,8 +52,8 @@ a:hover, a:focus, #layout-content a:hover, #layout-content a:focus { - color: #AE508D; - border-color: #AE508D; + color: var(--medium-magenta-color); + border-color: var(--medium-magenta-color); outline:0; } @@ -79,21 +71,23 @@ dl.qandaentry { } h1.refname { - color: #793862; + color: var(--dark-magenta-color); } .interfacename a, .fieldsynopsis .type, .methodsynopsis .type, -.constructorsynopsis .type { +.constructorsynopsis .type, +.destructorsynopsis .type { color:#693; } .classsynopsisinfo .modifier, .fieldsynopsis .modifier, .methodsynopsis .modifier, -.constructorsynopsis .modifier { +.constructorsynopsis .modifier, +.destructorsynopsis .modifier { color: #936; } @@ -107,10 +101,10 @@ h1.refname { .title a, .title { - color: #793862; + color: var(--dark-magenta-color); } .title time { - color: #333; + color: var(--content-text-color); } .methodname b, @@ -144,7 +138,7 @@ div.tip { } blockquote.note { background-color: #E6E6E6; - border-color: #ccc; + border-color: var(--background-text-color); } div.caution { background: #fcfce9; @@ -189,81 +183,578 @@ div.warning a:focus { } /* }}} */ +/* {{{ 2024 Navbar */ +.navbar { + /* Ensure the navbar shadow is rendered above the main content */ + position: relative; + z-index: 1000; + background-color: var(--dark-blue-color); + box-shadow: 0 2px 4px 0px rgba(0, 0, 0, 0.2); +} -/* {{{ Navbar */ -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - color: #333333; +.navbar * { + box-sizing: border-box; } -.navbar .nav > .active > a { - box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + +.navbar *:focus-visible { + outline: 2px solid var(--light-magenta-color); + outline-offset: 2px; } -.navbar .brand, -.navbar .nav > li > a { - color: #E2E4EF; - border:0; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + +.navbar__inner { + display: flex; + height: 64px; + padding: 0px 16px; + margin: 0 auto; } -.navbar .brand:hover, -.navbar .nav > li > a:hover, -.navbar .brand:focus, -.navbar .nav > li > a:focus { - color: #fff; + +.navbar__brand { + display: flex; + align-items: center; + border: none; +} + +.navbar__brand img { + height: 40px; +} + +.navbar__nav { + display: flex; + margin: 0; + margin-left: 24px; +} + +.navbar__item { + display: block; + list-style: none; +} + +.navbar [hidden] { + display: none; +} + +.navbar__link { + display: flex; + + align-items: center; + + height: 100%; + padding: 0px 12px; + + font-size: 16px; + color: #ffffff; + text-decoration: none; + + border-bottom: none; + + transition: color 0.25s ease-out; +} + +/* TODO: Convert to BEM modifier */ +.navbar__link--active { + background-color: rgba(0, 0, 0, 0.1); } -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { + +.navbar__link, +.navbar__link:link, +.navbar__link:visited { + color: hsl(231, 100%, 93%); +} + +.navbar__link--active, +.navbar__link:hover, +.navbar__link:link:hover, +.navbar__link:visited:hover { + color: white; +} + +.navbar__offcanvas { + display: flex; +} + +.navbar__search-form, +.navbar__search-button { + display: none; + + flex-grow: 1; + + max-width: 300px; + padding: 8px 8px; + + background-color: #404f82; + border: 1px solid #6a78be; + border-radius: 8px; +} + +.navbar__search-form label { + display: flex; + align-items: center; +} + +.navbar__search-form svg, +.navbar__search-button svg { + width: 24px; + height: 24px; + margin-right: 8px; + color: hsl(225, 41%, 69%); +} + +.navbar__search-form:focus-within, +.navbar__search-button:hover { + border-color: #94a3ed; + border-width: 1px; + outline: none; +} + +.navbar__search-input { + width: 100%; + padding: 0; + + color: white; + background-color: transparent; - color: #fff; + border: none; } -.navbar .nav .active > a, -.navbar .nav .active > a:hover, -.navbar .nav .active > a:focus { - color: #fff; - background-color: #4F5B93; + +.navbar__search-input:focus-visible { + outline: none; } -.navbar .navbar-search .search-query { - background-color: #fff; - color: #333; - text-shadow: 0 1px 0 #fff; - border:0; - border-radius:2px; - box-shadow: inset 0 1px 2px rgba(0,0,0,.2); + +.navbar__search-input::placeholder, +.navbar__search-button { + color: hsla(230, 72%, 84%); + opacity: 1; +} + +.navbar__right { + display: flex; + flex-grow: 1; + justify-content: end; + padding: 12px 0px; +} + +.navbar_icon-item--visually-aligned { + margin-right: -8px; } -.navbar .navbar-search .search-query:focus { - box-shadow: inset 0 1px 2px rgba(0,0,0,.2); + +.navbar__backdrop { + position: fixed; + top: 0; + left: 0; + /* Ensure to render above other non static elements */ + z-index: 1010; + + display: none; + + width: 100vw; + height: 100vh; + + background-color: #000; + opacity: 0.25; } -.navbar .navbar-search .search-query:-moz-placeholder { - color: #999; + +.navbar__icon-item, +.navbar__icon-item:link, +.navbar__icon-item:visited { + padding: 8px; + + color: hsl(222, 80%, 87%); + + cursor: pointer; + + background-color: transparent; + border: 0; + outline: 0; + + transition: color 0.25s ease-out; } -.navbar .navbar-search .search-query:-ms-input-placeholder { - color: #999; + +.navbar__icon-item:hover { + color: white; + opacity: 1; } -.navbar .navbar-search .search-query::-webkit-input-placeholder { - color: #999; + +.navbar__icon-item svg { + display: block; } -.navbar { - border-color:#4F5B93; - background:#8892BF; - box-shadow: 0 .25em .25em rgba(0,0,0,.1); + +.navbar__close-button { + position: absolute; + top: 13px; + right: 16px; } -.navbar .brand { - color: #fff; + +.navbar__release img { + height: 22px; +} + +/* We use a desktop-first approach for the offcanvas navigation styles */ +@media (max-width: 992px) { + .navbar__offcanvas { + position: fixed; + top: 0; + right: 0; + bottom: 0; + z-index: 1020; + + flex-grow: 1; + flex-direction: column; + + width: 240px; + max-width: 100%; + padding: 24px 0px; + + visibility: hidden; + + background-color: var(--dark-blue-color); + box-shadow: 0 16px 48px rgba(0, 0, 0, 0.175); + + transition: transform 0.3s ease; + transform: translateX(100%); + } + + .navbar__offcanvas.show { + display: flex; + transform: translateX(0); + } + + .navbar__nav { + flex-direction: column; + order: 1; + margin-top: 40px; + margin-left: 0; + } + + .navbar__link { + padding: 16px 24px; + font-size: 18px; + } + + .navbar__search-button { + display: none; + } + + /* TODO: Convert to BEM modifier */ + .navbar__backdrop.show { + display: block; + } +} + +@media (min-width: 992px) { + .navbar__icon-item { + display: none; + } + + .navbar__search-form, + .navbar__search-button { + display: flex; + align-items: center; + text-align: left; + } +} + +@media (min-width: 1200px) { + .navbar__link { + padding: 8px 16px; + } +} +/* }}} */ + +/* {{{ Search modal */ +.search-modal__backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; + + justify-content: center; + + visibility: hidden; + + background-color: rgba(0, 0, 0, 0.5); + opacity: 0; + + transition: opacity 0.1s ease-out; +} + +.search-modal__backdrop.showing, +.search-modal__backdrop.show { + visibility: visible; + opacity: 1; +} + +.search-modal__backdrop.hiding { + visibility: visible; + opacity: 0; +} + +.search-modal, +.search-modal * { + box-sizing: border-box; +} + +.search-modal { + display: flex; + + flex-direction: column; + + width: 100%; + height: 100%; + margin: 0; + + background-color: var(--dark-grey-color); +} + +.search-modal *:focus-visible { + outline: 2px solid var(--light-magenta-color); + outline-offset: 2px; +} + +.search-modal__header { + display: flex; + align-items: center; + padding: 10px 16px; +} + +.search-modal__form { + display: flex; + + flex-grow: 1; + + align-items: center; + + min-width: 0; + padding-left: 12px; + + background-color: hsl(0, 0%, 25%); + border-radius: 8px; +} + +.search-modal__input-icon { + display: block; + flex-shrink: 0; + width: 24px; +} + +.search-modal__input-icon svg { + display: block; + color: hsl(0, 0%, 54%); +} + +.search-modal__input { + flex-grow: 1; + + min-width: 0; + height: 44px; + padding-left: 12px; + + color: white; + + background-color: transparent; + border: none; +} + +.search-modal__input:focus { + border-width: 1px; + outline: none; +} + +.search-modal__input::placeholder { + color: rgba(255, 255, 255, 0.56); + opacity: 1; +} + +/* TODO: The icon button styles were copied from the navbar. */ +/* We should refactor this into a shared component when possible. */ +.search-modal__close { + padding: 8px; + margin-right: -8px; /* Compensate for button padding */ + margin-left: 8px; + + color: #e8e8e8; + + cursor: pointer; + + background-color: transparent; + border: 0; + outline: 0; + opacity: 0.65; + + transition: opacity 0.15s ease-out; +} + +.search-modal__close svg { + display: block; + width: 24px; + fill: currentColor; +} + +.search-modal__close:hover, +.search-modal__close:focus { + color: white; + opacity: 1; +} + +.search-modal__results { + height: 100%; + padding: 0 16px; + overflow-y: scroll; + + scrollbar-color: hsl(0, 0%, 67%) transparent; + scrollbar-width: thin; +} + +.search-modal__result { + display: flex; + + align-items: center; + + padding: 10px; + padding-left: 14px; + + line-height: 1.2; + + border: none; + border-radius: 0.5rem; +} + +.search-modal__result:hover { + /* Simulates 33% opacity by blending --dark-blue-color with --dark-grey-color. + * TODO: Use rgb(var(--dark-blue-color) / 33%) once widely supported. + * More info: https://caniuse.com/mdn-css_types_color_rgb_relative_syntax */ + background-color: #3c4053; +} + +.search-modal__result[aria-selected="true"] { + background-color: var(--dark-blue-color); +} + +.search-modal__result-content { + flex-grow: 1; + min-width: 0; /* Allow text truncation */ +} + +.search-modal__result-name { + margin-bottom: 6px; + overflow: hidden; + + color: #e6e6e6; + text-overflow: ellipsis; + white-space: nowrap; +} + +.search-modal__result:hover .search-modal__result-name { + color: white; +} + +.search-modal__result-description { + overflow: hidden; + + font-size: 14px; + color: var(--background-text-color); + text-overflow: ellipsis; + white-space: nowrap; +} + +.search-modal__result:hover .search-modal__result-description { + color: white; + opacity: 0.6; +} + +.search-modal__result-icon { + margin-right: 12px; +} + +.search-modal__result-icon svg { + display: block; + width: 24px; + fill: hsla(0, 0%, 100%, 0.3); +} + +.search-modal__helper-text { + display: none; + padding: 10px 16px; + font-size: 14px; +} + +@media (min-width: 992px) { + .search-modal { + max-width: 560px; + height: calc(100% - 1rem * 2); + margin: 1rem auto; + border-radius: 16px; + } + + .search-modal__header { + padding: 18px 20px; + } + + .search-modal__input { + height: 52px; + font-size: 18px; + } + + .search-modal__close { + margin-right: -10px; /* Compensate for button padding */ + } + + .search-modal__results { + padding: 0 20px; + } + + .search-modal__helper-text { + display: block; + padding: 18px 20px; + } + + .search-modal__helper-text kbd { + display: inline-block; + + padding: 0px 4px; + + font-family: inherit; + + background-color: rgba(255, 255, 255, 0.1); + border-radius: 4px; + } +} +/* }}} */ + +/* {{{ Lookup form */ + +.lookup-form { + max-width: 540px; } -.navbar a { - text-shadow: 0 1px 0 #fff; + +.lookup-form *:focus-visible { + outline: 2px solid var(--light-magenta-color); } /* }}} */ +/* {{{ Menu */ + +.menu .menu__item ~ .menu__item { + margin-top: 16px; +} + +.menu__link { + font-size: 1.25rem; + border: none; +} + +/* }}} */ /* {{{ User notes */ #usernotes .count { - background-color: #793862; + background-color: var(--dark-magenta-color); color: #fff; border-radius: 4px; } #usernotes .note .name { - color: #333; + color: var(--content-text-color); } #usernotes .note .date { color: #666; @@ -275,7 +766,7 @@ div.warning a:focus { transition: opacity 0.4s; } #usernotes .note .votes .tally { - color: #333; + color: var(--content-text-color); } #usernotes .note .votes a { transition: border 0.4s; @@ -286,13 +777,13 @@ div.warning a:focus { /* {{{ Tables */ .doctable, .segmentedlist { - border-color: #ccc; + border-color: var(--background-text-color); } .doctable thead tr, .segmentedlist thead tr { border-color: #C4C9DF; - border-bottom-color: #8892BF; - color: #333; + border-bottom-color: var(--medium-blue-color); + color: var(--content-text-color); } .doctable th, .segmentedlist th { @@ -300,7 +791,7 @@ div.warning a:focus { } .doctable tr, .segmentedlist tr { - border-color: #ccc + border-color: var(--background-text-color) } .doctable tbody tr:nth-child(odd), .segmentedlist tbody tr:nth-child(odd) { @@ -338,10 +829,10 @@ div.warning a:focus { background-color: transparent; } .phpcode span.comment { - color: #4F5B93; + color: var(--dark-blue-color); background-color: transparent; } -div.phpcode span.default { +div.phpcode span.default, div.phpcode span.variable { color: #369; background-color: transparent; } @@ -355,11 +846,13 @@ div.phpcode span.string { } .para var, -.simpara var +.simpara var, +.para .computeroutput, +.simpara .computeroutput { background-color: #E6E6E6; border-radius: 2px; - color: #333; + color: var(--content-text-color); padding: 2px 4px; white-space: nowrap; font-style: normal; @@ -384,14 +877,14 @@ var.reset } #layout-content a.genanchor:hover, #layout-content a.genanchor:focus { - color: #333; + color: var(--content-text-color); border-bottom: none; } /* }}} */ .warn { - border-color: #4F5B93; + border-color: var(--dark-blue-color); background-color: #fff; border-radius: 0 0 2px 2px; } @@ -407,8 +900,12 @@ aside.tips div.border { aside.tips h3 { color:#E6E6E6; } +aside.tips li { + line-height: 1.2rem; /* avoid gaps in wrapped links */ + margin-bottom: 0.5rem; /* seperate each link item a little bit from eachother */ +} aside.tips a { - color:#ccc; + color: var(--background-text-color); border-bottom:1px dotted #666; } aside.tips .panel > a:after, @@ -422,16 +919,16 @@ aside.tips .panel > a { border-bottom: none; } aside.tips .panel > a:hover:after { - border-color:#AE508D; + border-color:var(--medium-magenta-color); } aside.tips a:hover, aside.tips a:focus { - color:#AE508D; - border-color:#AE508D; + color:var(--light-magenta-color); + border-color:var(--light-magenta-color); } .soft-deprecation-notice { - color: #333; + color: var(--dark-grey-color); border-color: #eecdde; background-color: #f9ecf2; } @@ -456,8 +953,12 @@ aside.tips a:focus { border-top-color:#666; } .layout-menu ul.child-menu-list li.current a { - color:#AE508D; - border-bottom-color:#AE508D; + color:var(--light-magenta-color); + border-bottom-color:var(--light-magenta-color); +} +.layout-menu ul.parent-menu-list li a:hover, +.layout-menu ul.child-menu-list li a:hover { + color:var(--light-magenta-color); } .layout-menu ul.child-menu-list a { border-color: #666; @@ -487,13 +988,13 @@ div.elephpants img:focus { .mirror { position: relative; - border: 1px solid #ccc; + border: 1px solid var(--background-text-color); padding: 20px; margin: 5px; } .mirror .title img { position: absolute; - right: 0px; + right: 0; } .mirror .title { font-size: 1.4em; @@ -501,10 +1002,11 @@ div.elephpants img:focus { } .headsup { + position: relative; padding:.25rem 0; height:1.5rem; - border-bottom:.125rem solid #696; - background-color: #9c9; + box-shadow: 0 2px 4px 0px rgba(0,0,0,.2); + background-color: var(--dark-magenta-color); color:#fff; } @@ -515,4 +1017,140 @@ div.elephpants img:focus { color: #fff; } -/* vim: set ts=2 sw=2 et: */ +.thanks-list { + list-style: none; + padding: 0; + margin: 0 0 2rem 0; + display: grid; + grid-template-columns: 1fr; + gap: 1rem; +} +@media (min-width: 980px) { + .thanks-list { + grid-template-columns: 1fr 1fr; + gap: 1.5rem; + } +} + +.thanks { + display: flex; + flex-direction: column; + align-items: start; + gap: 1rem; + break-inside: avoid; + box-shadow: #dddddd 0 .125rem .5rem; + border-radius: .25rem; + padding: 1rem; + background: #F9F9F9; +} +@media (min-width: 425px) { + .thanks { + flex-direction: row; + } +} + +.thanks__logo { + border: 0; + background: #F9F9F9; + border-radius: .25rem; + padding: .5rem; + flex: 0 0 7.5rem; + min-width: 5rem; + min-height: 5rem; + max-height: 5rem; + margin: 0; + display: flex; + align-items: center; + align-self: center; + overflow: hidden; +} +.thanks__logo--white { + background: #FFFFFF; + border: 1px solid #f0f0f0; +} +.thanks__logo--dark { + background: #152536; +} +.thanks__logo--osu { + background: #bc450c; +} +.thanks__logo--redpill { + background: #b73e40; +} +@media (min-width: 425px) { + .thanks__logo { + align-self: start; + } +} + +.thanks__logo img { + width: 100%; + max-height: 100%; + transition: transform 300ms ease-in-out; +} +.thanks__logo:hover img { + transform: scale(1.1); +} + +.thanks__heading { + display: block; + font-size: 1.15rem; + padding: 0 0 1rem 0; + text-align: center; +} +@media (min-width: 425px) { + .thanks__heading { + text-align: left; + padding: 0 0 .25rem 0; + } +} + +.thanks__description { + margin: 0 +} + +.replaceable { + font-style: italic; +} + +.navbar__languages { + border: 1px solid #6a78be; + outline: none; + color: hsla(230, 72%, 84%); + opacity: 1; + max-width: 300px; + padding: 8px 8px; + background-color: rgba(64, 79, 130, 0.7); + border-radius: 8px; + margin-right: 12px; +} + +.navbar__languages:hover { + border-color: #94a3ed; +} + +.navbar__languages select { + color: hsla(230, 72%, 84%); +} + +.navbar__languages option { + color: rgba(39, 40, 44, 0.7); +} + +.navbar__theme { + margin-left: 12px; + border: 1px solid #6a78be; + color: hsla(230, 72%, 84%); + background-color: #404f82; + border-radius: 8px; + margin-right: 12px; + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; +} + +.navbar__theme:hover { + border-color: #94a3ed; +} diff --git a/styles/workarounds.ie7.css b/styles/workarounds.ie7.css deleted file mode 100644 index 21e6163c8c..0000000000 --- a/styles/workarounds.ie7.css +++ /dev/null @@ -1,14 +0,0 @@ -#layout { - background: white; - width: 1170px; - margin: 0 auto 1.5em; -} -.docs code.parameter { - font-size: 1em; -} -code, pre.info, .docs .classsynopsis, .docs .classsynopsis code { - font-size: 0.875em; -} -.refentry, #allnotes { - margin: 1.5em; -} diff --git a/styles/workarounds.ie9.css b/styles/workarounds.ie9.css deleted file mode 100644 index ba84cb8f00..0000000000 --- a/styles/workarounds.ie9.css +++ /dev/null @@ -1,6 +0,0 @@ -#confTeaser td { - /* No version of IE currently available (including IE 9) supports setting - * the display on td elements to anything other than table-cell. The float - * masks the problem without really fixing it. */ - float: left; -} diff --git a/submit-event.php b/submit-event.php index 055c694d6d..7b5fdabed6 100644 --- a/submit-event.php +++ b/submit-event.php @@ -3,29 +3,29 @@ include_once __DIR__ . '/include/prepend.inc'; include_once __DIR__ . '/include/posttohost.inc'; include_once __DIR__ . '/include/email-validation.inc'; -site_header("Submit an Event", array("current" => "community")); +site_header("Submit an Event", ["current" => "community"]); // No errors, processing depends on POST data -$errors = array(); -$process = (boolean) count($_POST); +$errors = []; +$process = [] !== $_POST; // Avoid E_NOTICE errors on incoming vars if not set -$vars = array( +$vars = [ 'sday', 'smonth', 'syear', 'eday', - 'emonth', 'eyear', 'recur', 'recur_day' -); + 'emonth', 'eyear', 'recur', 'recur_day', +]; foreach ($vars as $varname) { - if (!isset($_POST[$varname]) || empty($_POST[$varname])) { + if (empty($_POST[$varname])) { $_POST[$varname] = 0; } } -$vars = array( - 'type', 'country', 'category', 'email', 'url', 'ldesc', 'sdesc' -); -foreach($vars as $varname) { - if (!isset($_POST[$varname])) { - $_POST[$varname] = ""; - } +$vars = [ + 'type', 'country', 'category', 'email', 'url', 'ldesc', 'sdesc', +]; +foreach ($vars as $varname) { + if (!isset($_POST[$varname])) { + $_POST[$varname] = ""; + } } // We need to process some form data @@ -41,7 +41,7 @@ * Add, edit, or remove blacklisted users or domains * in include/email-validation.inc :: blacklisted(). */ - $uemail = isset($_POST['email']) ? strtolower($_POST['email']) : ''; + $uemail = isset($_POST['email']) ? strtolower($_POST['email']) : ''; if (blacklisted($uemail)) { $errors[] = 'An expected error has been encountered. Please don\'t try again later.'; } @@ -60,7 +60,7 @@ $errors[] = "This does not look like a 'PHP' event"; } - $valid_schemes = array('http','https','ftp'); + $valid_schemes = ['http', 'https', 'ftp']; $_POST['url'] = trim($_POST['url']); $pu = parse_url($_POST['url']); @@ -69,7 +69,7 @@ if (!$_POST['url']) { $errors[] = "You must supply a URL with more information about the event."; } - elseif (empty($pu['host']) || !in_array($pu['scheme'], $valid_schemes)) { + elseif (empty($pu['host']) || !in_array($pu['scheme'], $valid_schemes, false)) { $errors[] = "The URL you supplied was invalid."; } @@ -110,13 +110,13 @@ } // Spam question - if ($_POST["sane"] != 4) { + if ($_POST["sane"] != 3) { $errors[] = "It's OK. I'm not real either"; } if (isset($_POST['action']) && $_POST['action'] === 'Submit' && empty($errors)) { // Submit to main.php.net - $result = posttohost("http://main.php.net/entry/event.php", $_POST); + $result = posttohost("https://main.php.net/entry/event.php", $_POST); if ($result) { $errors[] = "There was an error processing your submission: $result"; } @@ -159,15 +159,15 @@ } // Possibilities to recur -$re = array( - 1 => 'First', - 2 => 'Second', - 3 => 'Third', - 4 => 'Fourth', +$re = [ + 1 => 'First', + 2 => 'Second', + 3 => 'Third', + 4 => 'Fourth', -1 => 'Last', -2 => '2nd Last', - -3 => '3rd Last' -); + -3 => '3rd Last', +]; // If we have data, display preview if ($process && count($errors) === 0) { @@ -230,7 +230,7 @@
    @@ -257,7 +257,7 @@
    Are you real?
    @@ -265,7 +265,7 @@ site_footer(); // Display an option list with one selected -function display_options($options, $current) +function display_options($options, $current): void { foreach ($options as $k => $v) { echo '

    Table of Contents
    @@ -21,9 +19,9 @@ site_header( 'Getting Help', - array( + [ 'current' => 'help', - ) + ], ); ?> @@ -36,75 +34,71 @@ href="/https/github.com/docs.php">documentation section.

    -

    Mailing Lists

    +

    Community Support

    - There are a number of mailing lists devoted to talking about PHP and related - projects. This list describes them all, has - links to searchable archives for all of the lists, and explains how to - subscribe to the lists. + For day-to-day help and troubleshooting, the broader PHP community is very active in a few places:

    - -

    Newsgroups

    +
      +
    • +

      Reddit: r/PHP — look for the Weekly help threads that are pinned to the top for beginner and general questions.

      +
    • +
    • +

      Stack Overflow: browse or ask questions using the php tag.

      +
    • +
    • + Discord: there are many community-ran servers for chat-based help and discussion. Here are a couple of popular ones: + +
    • +
    • + IRC: real-time chat at Libera.Chat in #phpc. + This channel is also bridged with Discord via phpc.chat. +
    • +
    + +

    User Groups & Events

    - The PHP language newsgroup is comp.lang.php, available on any - news server around the globe. In addition to this many of our mailing - lists are also reflected onto the news server at - news://news.php.net/. The - server also has a read only web interface at - http://news.php.net/. + Connect with local and regional PHP User Groups and find upcoming meetups, conferences, and training sessions:

    +
      +
    • Find a user group near you on PHP.ug.
    • +
    • Browse upcoming events on the event calendar.
    • +
    • Want to list an event? Submit it here.
    • +
    -

    - Mailing list messages are transfered to newsgroup posts and - newsgroup posts are sent to the mailing lists. Please note - that these newsgroups are only available on this server. -

    - -

    User Groups

    +

    Archive (Legacy Resources)

    +

    Mailing Lists

    - Chances are that there is a User Group in your neighborhood, which are generally - a great resource both for beginners and experienced PHP users. - Check out the User Group listing on PHP.ug to see if there - is one close by. + Historically, a number of mailing lists were devoted to talking about PHP and related projects. While + many are no longer active, you can still find their descriptions and archives on this page.

    -

    Events & Training

    - +

    Newsgroups

    - A list of upcoming events (such as user group meetings and PHP training - sessions) is included in the right-hand column of the front page, and - on the event calendar page. If you want to list - an upcoming event, just fill out the form on this page. + There was a PHP language NNTP newsgroup at comp.lang.php, and many of our support mailing + lists are also reflected onto our news server at news://news.php.net/. + The server also has a read only web interface at + https://news-web.php.net/.

    - -

    Internet Relay Chat

    -

    - Otherwise known as IRC. Here you can usually find experienced PHP people - sitting around doing nothing on various channels with php in their names. - Note that there is no official IRC channel. Check - Libera.Chat or any other major network - (EFNet, - QuakeNet, - IRCNet, - IrCQNet, - DALNet and - OFTC). + Please note that these are legacy resources and primarily useful for historical reference.

    PHP.net webmasters

    If you have a problem or suggestion in connection with the PHP.net - website or mirror sites, please - contact the webmasters. If you have problems setting up PHP - or using some functionality, please ask your question on a support - channel detailed above, the webmasters will not answer any such - questions. + website, please contact the webmasters. +

    +

    + If you have problems setting up PHP or using some functionality, + please ask your question on a support channel detailed above, + the webmasters will not answer any such questions.

    - $SIDEBAR_DATA)); ?> + $SIDEBAR_DATA]); ?> diff --git a/supported-versions.php b/supported-versions.php index 8608886d2d..265630a1d3 100644 --- a/supported-versions.php +++ b/supported-versions.php @@ -4,13 +4,17 @@ include_once __DIR__ . '/include/prepend.inc'; include_once __DIR__ . '/include/branches.inc'; -site_header('Supported Versions', array('css' => array('supported-versions.css'))); +site_header('Supported Versions', ['css' => ['supported-versions.css']]); // Version notes: if you need to make a note about a version having an unusual // support lifetime, add it under a heading with an anchor, and add the anchor // and branch names to the array below ('x.y' => '#anchor-name'). -$VERSION_NOTES = array( -); +$VERSION_NOTES = [ + '8.5' => 'https://www.php.net/manual/migration85.php', + '8.4' => 'https://www.php.net/manual/migration84.php', + '8.3' => 'https://www.php.net/manual/migration83.php', + '8.2' => 'https://www.php.net/manual/migration82.php', +]; ?>

    Supported Versions

    @@ -23,13 +27,13 @@

    After this two year period of active support, each branch is then supported - for an additional year for critical security issues only. Releases during + for two additional years for critical security issues only. Releases during this period are made on an as-needed basis: there may be multiple point releases, or none, depending on the number of reports.

    - Once the three years of support are completed, the branch reaches its end of + Once the four years of support are completed, the branch reaches its end of life and is no longer supported. A table of end of life branches is available.

    @@ -43,6 +47,7 @@ Initial Release Active Support Until Security Support Until + Notes @@ -50,24 +55,31 @@ $release): ?> + $state = get_branch_support_state($branch); + $initial = get_branch_release_date($branch); + $until = get_branch_bug_eol_date($branch); + $eol = get_branch_security_eol_date($branch); + $now = new DateTime('now'); + ?> - - - * - + format('j M Y')) ?> - + format('j M Y')) ?> - + format('j M Y')) ?> - + + + + + Migration guide for PHP + + + — + + diff --git a/tests/EndToEnd/DisabledJavascriptTest.spec.ts b/tests/EndToEnd/DisabledJavascriptTest.spec.ts new file mode 100644 index 0000000000..f5947f71a8 --- /dev/null +++ b/tests/EndToEnd/DisabledJavascriptTest.spec.ts @@ -0,0 +1,51 @@ +import { test, expect, devices } from '@playwright/test'; + +const httpHost = process.env.HTTP_HOST + +if (typeof httpHost !== 'string') { + throw new Error('Environment variable "HTTP_HOST" is not set.') +} + +test.use({ javaScriptEnabled: false }); + +test('search should fallback when javascript is disabled', async ({ page }) => { + await page.goto(httpHost); + let searchInput = await page.getByRole('searchbox', { name: 'Search docs' }); + await searchInput.fill('strpos'); + await searchInput.press('Enter'); + await expect(page).toHaveURL(`http://${httpHost}/manual/en/function.strpos.php`); + + searchInput = await page.getByRole('searchbox', { name: 'Search docs' }); + await searchInput.fill('php basics'); + await searchInput.press('Enter'); + await expect(page).toHaveURL(`http://${httpHost}/manual-lookup.php?pattern=php+basics&scope=quickref`); +}); + +test('search should fallback when javascript is disabled on mobile', async ({ browser }) => { + const context = await browser.newContext({ + ...devices['iPhone SE'] + }); + const page = await context.newPage(); + await page.goto(httpHost); + await page + .getByRole('link', { name: 'Search docs' }) + .click(); + await expect(page).toHaveURL(`http://${httpHost}/lookup-form.php`); + + const searchInput = await page.getByRole('searchbox', { name: 'Lookup docs' }); + await searchInput.fill('strpos'); + await searchInput.press('Enter'); + await expect(page).toHaveURL(`http://${httpHost}/manual/en/function.strpos.php`); +}); + +test('menu should fallback when javascript is disabled on mobile', async ({ browser }) => { + const context = await browser.newContext({ + ...devices['iPhone SE'] + }); + const page = await context.newPage(); + await page.goto(httpHost); + await page + .getByRole('link', { name: 'Menu' }) + .click(); + await expect(page).toHaveURL(`http://${httpHost}/menu.php`); +}); diff --git a/tests/EndToEnd/SearchModalTest.spec.ts b/tests/EndToEnd/SearchModalTest.spec.ts new file mode 100644 index 0000000000..5a762e4b1d --- /dev/null +++ b/tests/EndToEnd/SearchModalTest.spec.ts @@ -0,0 +1,125 @@ +import { test, expect } from '@playwright/test'; + +const httpHost = process.env.HTTP_HOST + +if (typeof httpHost !== 'string') { + throw new Error('Environment variable "HTTP_HOST" is not set.') +} + +test.beforeEach(async ({ page }) => { + await page.goto(httpHost); +}); + +const openSearchModal = async (page) => { + await page.getByRole('button', {name: 'Search'}).click(); + const modal = await page.getByRole('dialog', { name: 'Search modal' }); + + // Wait for the modal animation to finish + await expect(page.locator('#search-modal__backdrop.show')).not.toHaveClass('showing'); + + expect(modal).toBeVisible(); + return modal; +} + +const expectModalToBeHidden = async (page, modal) => { + await expect(page.locator('#search-modal__backdrop')).not.toHaveClass(['show', 'hiding']); + await expect(modal).toBeHidden(); +} + +const expectOption = async (modal, name) => { + await expect(modal.getByRole('option', { name })).toBeVisible(); +} + +const expectSelectedOption = async (modal, name) => { + await expect(modal.getByRole('option', { name, selected: true })).toBeVisible(); +} + +test('should open search modal when search button is clicked', async ({ page }) => { + const searchModal = await openSearchModal(page); + await expect(searchModal).toBeVisible(); +}); + +test('should disable window scroll when search modal is open', async ({ page }) => { + await openSearchModal(page); + await page.mouse.wheel(0, 100); + await page.waitForTimeout(100); + const currentScrollY = await page.evaluate(() => window.scrollY); + expect(currentScrollY).toBe(0); +}); + +test('should focus on search input when modal is opened', async ({ page }) => { + const modal = await openSearchModal(page); + const searchInput = modal.getByRole('searchbox', { name: 'Search docs' }); + await expect(searchInput).toBeFocused(); + await expect(searchInput).toHaveValue(''); +}); + +test('should close search modal when close button is clicked', async ({ page }) => { + const modal = await openSearchModal(page); + await modal.getByRole('button', { name: 'Close' }).click(); + await expectModalToBeHidden(page, modal); +}); + +test('should re-enable window scroll when search modal is closed', async ({ page }) => { + const modal = await openSearchModal(page); + await modal.getByRole('button', { name: 'Close' }).click(); + await expectModalToBeHidden(page, modal); + await page.mouse.wheel(0, 100); + await page.waitForTimeout(100); // wait for scroll event to be processed + const currentScrollY = await page.evaluate(() => window.scrollY); + expect(currentScrollY).toBe(100); +}); + +test('should close search modal when Escape key is pressed', async ({ page }) => { + const modal = await openSearchModal(page); + await page.keyboard.press('Escape'); + await expectModalToBeHidden(page, modal); +}); + +test('should close search modal when clicking outside of it', async ({ page }) => { + const modal = await openSearchModal(page); + await page.click('#search-modal__backdrop', { position: { x: 10, y: 10 } }); + await expectModalToBeHidden(page, modal); +}); + +test('should perform search and display results', async ({ page }) => { + const modal = await openSearchModal(page); + await modal.getByRole('searchbox').fill('array'); + await expect( + await modal.getByRole('listbox', { name: 'Search results' }).getByRole('option') + ).toHaveCount(30); +}); + +test('should navigate through search results with arrow keys', async ({ page }) => { + const modal = await openSearchModal(page); + await modal.getByRole('searchbox').fill('strlen'); + await expectOption(modal, /^strlen$/); + + await page.keyboard.press('ArrowDown'); + await expectSelectedOption(modal, /^strlen$/); + + await page.keyboard.press('ArrowDown'); + await page.keyboard.press('ArrowDown'); + await page.keyboard.press('ArrowDown'); + await expectSelectedOption(modal, /^mb_strlen$/); + + await page.keyboard.press('ArrowUp'); + await expectSelectedOption(modal, /^iconv_strlen$/); +}); + +test('should navigate to selected result page when Enter is pressed', async ({ page }) => { + const modal = await openSearchModal(page); + await modal.getByRole('searchbox').fill('strpos'); + await expectOption(modal, /^strpos$/); + + await page.keyboard.press('ArrowDown'); + await page.keyboard.press('Enter'); + await expect(page).toHaveURL(`http://${httpHost}/manual/en/function.strpos.php`); +}); + +test('should navigate to search page when Enter is pressed with no selection', async ({ page }) => { + const modal = await openSearchModal(page); + await modal.getByRole('searchbox').fill('php basics'); + await page.keyboard.press('Enter'); + await expect(page).toHaveURL(`http://${httpHost}/search.php?lang=en&q=php%20basics`); +}); diff --git a/tests/EndToEnd/SmokeTest.php b/tests/EndToEnd/SmokeTest.php new file mode 100644 index 0000000000..a902df6adc --- /dev/null +++ b/tests/EndToEnd/SmokeTest.php @@ -0,0 +1,80 @@ + true, + CURLOPT_URL => $url, + ]; + + curl_setopt_array($handle, $options); + + curl_exec($handle); + + $httpStatusCode = curl_getinfo($handle, CURLINFO_HTTP_CODE); + + self::assertTrue(in_array($httpStatusCode, $successfulHttpStatusCodes, true), sprintf( + 'Failed asserting that the URL "%s" returns a successful HTTP response status code, got "%d" instead.', + $url, + $httpStatusCode, + )); + } + + /** + * @return \Generator + */ + public static function provideUrl(): \Generator + { + $httpHost = getenv('HTTP_HOST'); + + if (!is_string($httpHost)) { + throw new \RuntimeException('Environment variable "HTTP_HOST" is not set.'); + } + + $pathToRoot = realpath(__DIR__ . '/../..'); + + $patterns = [ + $pathToRoot . '/*.php', + $pathToRoot . '/archive/*.php', + $pathToRoot . '/conferences/*.php', + $pathToRoot . '/license/*.php', + $pathToRoot . '/manual/*.php', + $pathToRoot . '/manual/en/*.php', + $pathToRoot . '/releases/*.php', + $pathToRoot . '/releases/*/*.php', + $pathToRoot . '/releases/*/*/*.php', + ]; + + foreach ($patterns as $pattern) { + $pathsToFiles = glob($pattern); + + $paths = str_replace($pathToRoot, '', $pathsToFiles); + + foreach ($paths as $path) { + $url = sprintf( + 'http://%s%s', + $httpHost, + $path, + ); + + yield $url => [ + $url, + ]; + } + } + } +} diff --git a/tests/Unit/CleanAntiSpamTest.php b/tests/Unit/CleanAntiSpamTest.php new file mode 100644 index 0000000000..8d16fed9f1 --- /dev/null +++ b/tests/Unit/CleanAntiSpamTest.php @@ -0,0 +1,54 @@ + + */ + public static function provideEmailAndExpectedEmail(): \Generator + { + $values = [ + 'asasasd324324@php.net' => 'asasasd324324@php.net', + 'jcastagnetto-delete-this-@yahoo.com' => 'jcastagnetto@yahoo.com', + 'jcastagnetto-i-hate-spam@NOSPAMyahoo.com' => 'jcastagnetto@yahoo.com', + 'jcastagnetto-NO-SPAM@yahoo.com' => 'jcastagnetto@yahoo.com', + 'jcastagnetto@NoSpam-yahoo.com' => 'jcastagnetto@yahoo.com', + 'jesusmc@scripps.edu' => 'jesusmc@scripps.edu', + 'jmcastagnetto@chek2.com' => 'jmcastagnetto@chek2.com', + 'jmcastagnetto@yahoo.com' => 'jmcastagnetto@yahoo.com', + 'some-wrong@asdas.com' => 'some-wrong@asdas.com', + 'wrong-address-with@@@@-remove_me-and-some-i-hate_SPAM-stuff' => 'wrong-address-with@@@@and-somestuff', + 'wrong-email-address@lists.php.net' => 'wrong-email-address@lists.php.net', + ]; + + foreach ($values as $email => $expectedEmail) { + yield $email => [ + $email, + $expectedEmail, + ]; + } + } +} diff --git a/tests/Unit/GenChallengeTest.php b/tests/Unit/GenChallengeTest.php new file mode 100644 index 0000000000..a22e861312 --- /dev/null +++ b/tests/Unit/GenChallengeTest.php @@ -0,0 +1,160 @@ + $function, + 'argumentOne' => $argumentOne, + 'argumentTwo' => $argumentTwo, + 'question' => $question, + ]; + }, range(1, 20)); + + $expected = [ + [ + 'function' => 'min', + 'argumentOne' => 'two', + 'argumentTwo' => 'one', + 'question' => 'min(two, one)', + ], + [ + 'function' => 'minus', + 'argumentOne' => 'five', + 'argumentTwo' => 'five', + 'question' => 'five minus five', + ], + [ + 'function' => 'minus', + 'argumentOne' => 'four', + 'argumentTwo' => 'four', + 'question' => 'four minus four', + ], + [ + 'function' => 'min', + 'argumentOne' => 'nine', + 'argumentTwo' => 'seven', + 'question' => 'min(nine, seven)', + ], + [ + 'function' => 'minus', + 'argumentOne' => 'seven', + 'argumentTwo' => 'six', + 'question' => 'seven minus six', + ], + [ + 'function' => 'max', + 'argumentOne' => 'three', + 'argumentTwo' => 'six', + 'question' => 'max(three, six)', + ], + [ + 'function' => 'max', + 'argumentOne' => 'six', + 'argumentTwo' => 'five', + 'question' => 'max(six, five)', + ], + [ + 'function' => 'max', + 'argumentOne' => 'four', + 'argumentTwo' => 'three', + 'question' => 'max(four, three)', + ], + [ + 'function' => 'min', + 'argumentOne' => 'two', + 'argumentTwo' => 'nine', + 'question' => 'min(two, nine)', + ], + [ + 'function' => 'plus', + 'argumentOne' => 'eight', + 'argumentTwo' => 'one', + 'question' => 'eight plus one', + ], + [ + 'function' => 'plus', + 'argumentOne' => 'three', + 'argumentTwo' => 'five', + 'question' => 'three plus five', + ], + [ + 'function' => 'min', + 'argumentOne' => 'eight', + 'argumentTwo' => 'three', + 'question' => 'min(eight, three)', + ], + [ + 'function' => 'max', + 'argumentOne' => 'zero', + 'argumentTwo' => 'nine', + 'question' => 'max(zero, nine)', + ], + [ + 'function' => 'min', + 'argumentOne' => 'five', + 'argumentTwo' => 'nine', + 'question' => 'min(five, nine)', + ], + [ + 'function' => 'minus', + 'argumentOne' => 'six', + 'argumentTwo' => 'four', + 'question' => 'six minus four', + ], + [ + 'function' => 'max', + 'argumentOne' => 'one', + 'argumentTwo' => 'one', + 'question' => 'max(one, one)', + ], + [ + 'function' => 'plus', + 'argumentOne' => 'five', + 'argumentTwo' => 'zero', + 'question' => 'five plus zero', + ], + [ + 'function' => 'minus', + 'argumentOne' => 'nine', + 'argumentTwo' => 'eight', + 'question' => 'nine minus eight', + ], + [ + 'function' => 'minus', + 'argumentOne' => 'three', + 'argumentTwo' => 'one', + 'question' => 'three minus one', + ], + [ + 'function' => 'min', + 'argumentOne' => 'three', + 'argumentTwo' => 'one', + 'question' => 'min(three, one)', + ], + ]; + + self::assertSame($expected, $challenges); + } +} diff --git a/tests/Unit/I18n/LanguagesTest.php b/tests/Unit/I18n/LanguagesTest.php new file mode 100644 index 0000000000..c1eeacd728 --- /dev/null +++ b/tests/Unit/I18n/LanguagesTest.php @@ -0,0 +1,63 @@ +convert($languageCode)); + } + + public static function languageCodeProvider(): iterable + { + yield ['en', 'en']; + yield ['de', 'de']; + yield ['es', 'es']; + yield ['fr', 'fr']; + yield ['it', 'it']; + yield ['ja', 'ja']; + yield ['pl', 'pl']; + yield ['pt_br', 'pt_BR']; + yield ['pt_BR', 'pt_BR']; + yield ['ro', 'ro']; + yield ['ru', 'ru']; + yield ['tr', 'tr']; + yield ['uk', 'uk']; + yield ['zh', 'zh']; + yield ['zh_cn', 'zh']; + yield ['zh_CN', 'zh']; + yield ['unknown', 'en']; + yield ['', 'en']; + } + + public function testConstantsDifference(): void + { + self::assertSame( + array_diff(Languages::LANGUAGES, Languages::INACTIVE_ONLINE_LANGUAGES), + Languages::ACTIVE_ONLINE_LANGUAGES, + ); + } + + public function testLanguagesIncGlobalVariables(): void + { + global $LANGUAGES, $INACTIVE_ONLINE_LANGUAGES, $ACTIVE_ONLINE_LANGUAGES; + + include __DIR__ . '/../../../include/languages.inc'; + + self::assertSame(Languages::LANGUAGES, $LANGUAGES); + self::assertSame(Languages::INACTIVE_ONLINE_LANGUAGES, $INACTIVE_ONLINE_LANGUAGES); + self::assertSame(Languages::ACTIVE_ONLINE_LANGUAGES, $ACTIVE_ONLINE_LANGUAGES); + } +} diff --git a/tests/Unit/IsEmailableAddressTest.php b/tests/Unit/IsEmailableAddressTest.php new file mode 100644 index 0000000000..acad65e4c1 --- /dev/null +++ b/tests/Unit/IsEmailableAddressTest.php @@ -0,0 +1,73 @@ + + */ + public static function provideInvalidEmail(): \Generator + { + $values = [ + 'jcastagnetto-i-hate-spam@NOSPAMyahoo.test', + 'jcastagnetto@NoSpam-yahoo.com', + 'jmcastagnetto@chek2.com', + 'wrong-address-with@@@@-remove_me-and-some-i-hate_SPAM-stuff', + 'wrong-email-address@lists.php.net', + ]; + + foreach ($values as $value) { + yield $value => [ + $value, + ]; + } + } + + #[Framework\Attributes\DataProvider('provideValidEmail')] + public function testIsEmailableAddressReturnsTrueWhenEmailIsValid(string $email): void + { + $isEmailableAddress = is_emailable_address($email); + + self::assertTrue($isEmailableAddress); + } + + /** + * @return \Generator + */ + public static function provideValidEmail(): \Generator + { + $values = [ + 'asasasd324324@php.net', + 'jcastagnetto-delete-this-@yahoo.com', + 'jcastagnetto-NO-SPAM@yahoo.com', + 'jesusmc@scripps.edu', + 'jmcastagnetto@yahoo.com', + 'not-exists@thephp.foundation', + ]; + + foreach ($values as $value) { + yield $value => [ + $value, + ]; + } + } +} diff --git a/tests/Unit/LangChooserTest.php b/tests/Unit/LangChooserTest.php new file mode 100644 index 0000000000..8c8d3a60c2 --- /dev/null +++ b/tests/Unit/LangChooserTest.php @@ -0,0 +1,130 @@ + 'English', + 'de' => 'German', + 'ja' => 'Japanese', + 'pt_BR' => 'Brazilian Portuguese', + 'zh' => 'Chinese (Simplified)', + ]; + + public function testChooseCodeWithLangParameter(): void + { + $langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', '', 'en'); + $result = $langChooser->chooseCode('de', '/', null); + + self::assertSame(['de', 'de'], $result); + } + + public function testChooseCodeWithShortcutPath(): void + { + $langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'en'); + $result = $langChooser->chooseCode('', '/de/echo', null); + + self::assertSame(['de', 'de'], $result); + } + + #[Framework\Attributes\TestWith(['de', 'de'])] + #[Framework\Attributes\TestWith(['pt_BR', 'pt_BR'])] + public function testChooseCodeWithManualPath(string $pathLang, string $expected): void + { + $langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'en'); + $result = $langChooser->chooseCode('', "/manual/$pathLang", null); + + self::assertSame([$expected, $expected], $result); + } + + public function testChooseCodeWithUserPreference(): void + { + $langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], 'de', 'en'); + $result = $langChooser->chooseCode('', '/', null); + + self::assertSame(['de', ''], $result); + } + + public function testChooseCodeWithAcceptLanguage(): void + { + $langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'en'); + $result = $langChooser->chooseCode('', '/', 'de,ja,en'); + + self::assertSame(['de', ''], $result); + } + + public function testChooseCodeWithAcceptLanguageQuality(): void + { + $langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'en'); + $result = $langChooser->chooseCode('', '/', 'de;q=0.8,ja,en'); + + self::assertSame(['ja', ''], $result); + } + + #[Framework\Attributes\TestWith(['de-at', 'de'])] + #[Framework\Attributes\TestWith(['pt-br', 'pt_BR'])] + #[Framework\Attributes\TestWith(['zh-cn', 'zh'])] + #[Framework\Attributes\TestWith(['zh-tw', 'en'])] + public function testChooseCodeWithAcceptLanguageFollowedByCountryCode(string $acceptLanguage, string $expected): void + { + $langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'en'); + $result = $langChooser->chooseCode('', '/', $acceptLanguage); + + self::assertSame([$expected, ''], $result); + } + + public function testChooseCodeWithMirrorDefaultLanguage(): void + { + $langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'de'); + $result = $langChooser->chooseCode('', '/', null); + + self::assertSame(['de', ''], $result); + } + + public function testChooseCodeWithDefaultLanguage(): void + { + $langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'fr'); + $result = $langChooser->chooseCode('', '/', null); + + self::assertSame(['en', ''], $result); + } + + public function testChooseCodeWithLangParameterAndManualPath(): void + { + $langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'en'); + $result = $langChooser->chooseCode('de', '/manual/en', null); + + self::assertSame(['de', 'de'], $result); + } + + public function testChooseCodeWithManualPathAndUserPreference(): void + { + $langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], 'en', 'en'); + $result = $langChooser->chooseCode('', '/manual/de', null); + + self::assertSame(['de', 'de'], $result); + } + + public function testChooseCodeWithManualPathAndAcceptLanguage(): void + { + $langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'en'); + $result = $langChooser->chooseCode('', '/manual/de', 'en'); + + self::assertSame(['de', 'de'], $result); + } + + public function testChooseCodeInactiveLanguageIsNotChosen(): void + { + $langChooser = new LangChooser(['en' => 'English', 'de' => 'German', 'pl' => 'Polish'], ['pl' => 'Polish'], '', ''); + $result = $langChooser->chooseCode('pl', '/manual/pl', 'pl'); + + self::assertSame(['en', 'pl'], $result); + } +} diff --git a/tests/Unit/News/NewsHandlerTest.php b/tests/Unit/News/NewsHandlerTest.php new file mode 100644 index 0000000000..25df5f7e77 --- /dev/null +++ b/tests/Unit/News/NewsHandlerTest.php @@ -0,0 +1,57 @@ +getPregeneratedNews(); + self::assertArrayHasKey(0, $news); + self::assertSame($news[0], $newsHandler->getLastestNews()); + } + + public function testGetConferences(): void + { + $conferences = (new NewsHandler())->getConferences(); + self::assertNotEmpty($conferences); + foreach ($conferences as $conference) { + $isConference = false; + foreach ($conference['category'] as $category) { + if ($category['term'] === 'cfp' || $category['term'] === 'conferences') { + $isConference = true; + break; + } + } + + self::assertTrue($isConference); + } + } + + public function testGetNewsByYear(): void + { + $news = (new NewsHandler())->getNewsByYear(2018); + self::assertNotEmpty($news); + foreach ($news as $entry) { + self::assertSame('2018', (new DateTimeImmutable($entry['published']))->format('Y')); + } + } + + public function testGetFrontPageNews(): void + { + $frontPage = (new NewsHandler())->getFrontPageNews(); + self::assertCount(25, $frontPage); + foreach ($frontPage as $news) { + self::assertContains(['term' => 'frontpage', 'label' => 'PHP.net frontpage news'], $news['category']); + } + } +} diff --git a/tests/Unit/TestAnswerTest.php b/tests/Unit/TestAnswerTest.php new file mode 100644 index 0000000000..a2ae710d63 --- /dev/null +++ b/tests/Unit/TestAnswerTest.php @@ -0,0 +1,101 @@ + + */ + public static function provideFunctionArgumentsAnswerAndExpectedIsValid(): array + { + return [ + [ + 'function' => 'max', + 'argumentOne' => 'two', + 'argumentTwo' => 'one', + 'answer' => 'two', + 'expectedIsValid' => true, + ], + [ + 'function' => 'min', + 'argumentOne' => 'two', + 'argumentTwo' => 'one', + 'answer' => 'one', + 'expectedIsValid' => true, + ], + [ + 'function' => 'minus', + 'argumentOne' => 'five', + 'argumentTwo' => 'five', + 'answer' => 'zero', + 'expectedIsValid' => true, + ], + [ + 'function' => 'plus', + 'argumentOne' => 'eight', + 'argumentTwo' => 'one', + 'answer' => 'nine', + 'expectedIsValid' => true, + ], + [ + 'function' => 'max', + 'argumentOne' => 'three', + 'argumentTwo' => 'six', + 'answer' => 'nine', + 'expectedIsValid' => false, + ], + [ + 'function' => 'min', + 'argumentOne' => 'two', + 'argumentTwo' => 'nine', + 'answer' => 'seven', + 'expectedIsValid' => false, + ], + [ + 'function' => 'minus', + 'argumentOne' => 'seven', + 'argumentTwo' => 'six', + 'answer' => 'four', + 'expectedIsValid' => false, + ], + [ + 'function' => 'plus', + 'argumentOne' => 'eight', + 'argumentTwo' => 'one', + 'answer' => 'seven', + 'expectedIsValid' => false, + ], + ]; + } +} diff --git a/tests/Unit/UserNotes/SorterTest.php b/tests/Unit/UserNotes/SorterTest.php new file mode 100644 index 0000000000..16d3f60aa9 --- /dev/null +++ b/tests/Unit/UserNotes/SorterTest.php @@ -0,0 +1,409 @@ +sort($notes); + + self::assertSame([], $notes); + } + + public function testSortSortsSingleNoteWithNoVotes(): void + { + $notes = [ + new UserNote('1', '', '', '1613487094', '', '', 0, 0), + ]; + + $sorter = new Sorter(); + + $sorter->sort($notes); + + $normalized = array_map(static function (UserNote $note): array { + return self::normalize($note); + }, $notes); + + $expected = [ + 0 => [ + 'downvotes' => 0, + 'id' => '1', + 'ts' => '1613487094', + 'upvotes' => 0, + ], + ]; + + self::assertSame($expected, $normalized); + } + + public function testSortSortsSomeNotes(): void + { + $notes = [ + new UserNote('1', '', '', '1613487094', '', '', 0, 2), + new UserNote('2', '', '', '1508180150', '', '', 0, 0), + new UserNote('3', '', '', '1508179844', '', '', 14, 3), + new UserNote('4', '', '', '1508179844', '', '', 14, 3), + ]; + + $sorter = new Sorter(); + + $sorter->sort($notes); + + $normalized = array_map(static function (UserNote $note): array { + return self::normalize($note); + }, $notes); + + $expected = [ + 2 => [ + 'downvotes' => 3, + 'id' => '3', + 'ts' => '1508179844', + 'upvotes' => 14, + ], + 3 => [ + 'downvotes' => 3, + 'id' => '4', + 'ts' => '1508179844', + 'upvotes' => 14, + ], + 1 => [ + 'downvotes' => 0, + 'id' => '2', + 'ts' => '1508180150', + 'upvotes' => 0, + ], + 0 => [ + 'downvotes' => 2, + 'id' => '1', + 'ts' => '1613487094', + 'upvotes' => 0, + ], + ]; + + self::assertSame($expected, $normalized); + } + + public function testSortSortsFullNotes(): void + { + $file = file(__DIR__ . '/../../../backend/notes/d7/d7742c269d23ea86'); + + $notes = []; + + foreach ($file as $line) { + @list($id, $sect, $rate, $ts, $user, $note, $up, $down) = explode('|', $line); + $notes[$id] = new UserNote($id, $sect, $rate, $ts, $user, base64_decode($note, true), (int) $up, (int) $down); + } + + $sorter = new Sorter(); + + $sorter->sort($notes); + + $normalized = array_map(static function (UserNote $note): array { + return self::normalize($note); + }, $notes); + + $expected = [ + 110464 => [ + 'downvotes' => 2, + 'id' => '110464', + 'ts' => '1351105628', + 'upvotes' => 10, + ], + 93816 => [ + 'downvotes' => 1, + 'id' => '93816', + 'ts' => '1254343074', + 'upvotes' => 4, + ], + 92849 => [ + 'downvotes' => 1, + 'id' => '92849', + 'ts' => '1249997359', + 'upvotes' => 4, + ], + 70394 => [ + 'downvotes' => 3, + 'id' => '70394', + 'ts' => '1160823504', + 'upvotes' => 7, + ], + 106407 => [ + 'downvotes' => 2, + 'id' => '106407', + 'ts' => '1320695958', + 'upvotes' => 5, + ], + 87868 => [ + 'downvotes' => 2, + 'id' => '87868', + 'ts' => '1230396484', + 'upvotes' => 5, + ], + 82229 => [ + 'downvotes' => 1, + 'id' => '82229', + 'ts' => '1207066654', + 'upvotes' => 3, + ], + 80363 => [ + 'downvotes' => 1, + 'id' => '80363', + 'ts' => '1200066332', + 'upvotes' => 3, + ], + 75146 => [ + 'downvotes' => 1, + 'id' => '75146', + 'ts' => '1179195708', + 'upvotes' => 3, + ], + 102773 => [ + 'downvotes' => 3, + 'id' => '102773', + 'ts' => '1299300266', + 'upvotes' => 6, + ], + 111422 => [ + 'downvotes' => 2, + 'id' => '111422', + 'ts' => '1361224553', + 'upvotes' => 4, + ], + 94469 => [ + 'downvotes' => 2, + 'id' => '94469', + 'ts' => '1257516214', + 'upvotes' => 4, + ], + 99476 => [ + 'downvotes' => 1, + 'id' => '99476', + 'ts' => '1282186230', + 'upvotes' => 2, + ], + 99332 => [ + 'downvotes' => 1, + 'id' => '99332', + 'ts' => '1281503061', + 'upvotes' => 2, + ], + 96926 => [ + 'downvotes' => 1, + 'id' => '96926', + 'ts' => '1269330508', + 'upvotes' => 2, + ], + 93887 => [ + 'downvotes' => 1, + 'id' => '93887', + 'ts' => '1254733546', + 'upvotes' => 2, + ], + 87061 => [ + 'downvotes' => 1, + 'id' => '87061', + 'ts' => '1226944352', + 'upvotes' => 2, + ], + 85835 => [ + 'downvotes' => 1, + 'id' => '85835', + 'ts' => '1221823065', + 'upvotes' => 2, + ], + 72466 => [ + 'downvotes' => 1, + 'id' => '72466', + 'ts' => '1169208947', + 'upvotes' => 2, + ], + 69927 => [ + 'downvotes' => 1, + 'id' => '69927', + 'ts' => '1159299208', + 'upvotes' => 2, + ], + 41762 => [ + 'downvotes' => 1, + 'id' => '41762', + 'ts' => '1082561916', + 'upvotes' => 2, + ], + 107678 => [ + 'downvotes' => 2, + 'id' => '107678', + 'ts' => '1330185500', + 'upvotes' => 3, + ], + 89788 => [ + 'downvotes' => 2, + 'id' => '89788', + 'ts' => '1237801686', + 'upvotes' => 3, + ], + 74286 => [ + 'downvotes' => 2, + 'id' => '74286', + 'ts' => '1175594279', + 'upvotes' => 3, + ], + 58688 => [ + 'downvotes' => 2, + 'id' => '58688', + 'ts' => '1131719326', + 'upvotes' => 3, + ], + 45088 => [ + 'downvotes' => 2, + 'id' => '45088', + 'ts' => '1093449145', + 'upvotes' => 3, + ], + 49739 => [ + 'downvotes' => 0, + 'id' => '49739', + 'ts' => '1107758025', + 'upvotes' => 2, + ], + 108426 => [ + 'downvotes' => 2, + 'id' => '108426', + 'ts' => '1335372412', + 'upvotes' => 2, + ], + 107240 => [ + 'downvotes' => 2, + 'id' => '107240', + 'ts' => '1327390683', + 'upvotes' => 2, + ], + 105984 => [ + 'downvotes' => 2, + 'id' => '105984', + 'ts' => '1317340435', + 'upvotes' => 2, + ], + 99440 => [ + 'downvotes' => 4, + 'id' => '99440', + 'ts' => '1282058725', + 'upvotes' => 4, + ], + 93566 => [ + 'downvotes' => 2, + 'id' => '93566', + 'ts' => '1253094436', + 'upvotes' => 2, + ], + 88798 => [ + 'downvotes' => 1, + 'id' => '88798', + 'ts' => '1234090865', + 'upvotes' => 1, + ], + 84910 => [ + 'downvotes' => 2, + 'id' => '84910', + 'ts' => '1217938595', + 'upvotes' => 2, + ], + 83914 => [ + 'downvotes' => 1, + 'id' => '83914', + 'ts' => '1213760931', + 'upvotes' => 1, + ], + 78483 => [ + 'downvotes' => 1, + 'id' => '78483', + 'ts' => '1192337362', + 'upvotes' => 1, + ], + 74763 => [ + 'downvotes' => 1, + 'id' => '74763', + 'ts' => '1177577911', + 'upvotes' => 1, + ], + 74432 => [ + 'downvotes' => 1, + 'id' => '74432', + 'ts' => '1176269720', + 'upvotes' => 1, + ], + 47879 => [ + 'downvotes' => 1, + 'id' => '47879', + 'ts' => '1102066114', + 'upvotes' => 1, + ], + 40617 => [ + 'downvotes' => 0, + 'id' => '40617', + 'ts' => '1078853206', + 'upvotes' => 0, + ], + 38375 => [ + 'downvotes' => 1, + 'id' => '38375', + 'ts' => '1071743640', + 'upvotes' => 1, + ], + 106295 => [ + 'downvotes' => 3, + 'id' => '106295', + 'ts' => '1319574977', + 'upvotes' => 2, + ], + 95875 => [ + 'downvotes' => 3, + 'id' => '95875', + 'ts' => '1264517173', + 'upvotes' => 2, + ], + 102336 => [ + 'downvotes' => 2, + 'id' => '102336', + 'ts' => '1297217360', + 'upvotes' => 1, + ], + 93781 => [ + 'downvotes' => 2, + 'id' => '93781', + 'ts' => '1254189367', + 'upvotes' => 1, + ], + 90065 => [ + 'downvotes' => 2, + 'id' => '90065', + 'ts' => '1238827503', + 'upvotes' => 1, + ], + ]; + + self::assertSame($expected, $normalized); + } + + private static function normalize(UserNote $note): array + { + return [ + 'downvotes' => $note->downvotes, + 'id' => $note->id, + 'ts' => $note->ts, + 'upvotes' => $note->upvotes, + ]; + } +} diff --git a/tests/Unit/UserPreferencesTest.php b/tests/Unit/UserPreferencesTest.php new file mode 100644 index 0000000000..f1df981bee --- /dev/null +++ b/tests/Unit/UserPreferencesTest.php @@ -0,0 +1,94 @@ + $cookie */ + #[DataProvider('loadCookiesProvider')] + public function testLoad( + array $cookie, + string $languageCode, + string|false $searchType, + bool $isUserGroupTipsEnabled, + ): void { + $_COOKIE = $cookie; + + $userPreferences = new UserPreferences(); + $userPreferences->load(); + + self::assertSame($languageCode, $userPreferences->languageCode); + self::assertSame($searchType, $userPreferences->searchType); + self::assertSame($isUserGroupTipsEnabled, $userPreferences->isUserGroupTipsEnabled); + } + + /** @return array, string, string|false, bool}> */ + public static function loadCookiesProvider(): array + { + return [ + [[], '', UserPreferences::URL_NONE, false], + [['MYPHPNET' => ['en,manual,,1']], '', UserPreferences::URL_NONE, false], + [['MYPHPNET' => ''], '', UserPreferences::URL_NONE, false], + [['MYPHPNET' => ',,,'], '', UserPreferences::URL_NONE, false], + [['MYPHPNET' => ',,,0'], '', UserPreferences::URL_NONE, false], + [['MYPHPNET' => ',,ignored,,ignored'], '', UserPreferences::URL_NONE, false], + [['MYPHPNET' => 'en,,,'], 'en', UserPreferences::URL_NONE, false], + [['MYPHPNET' => ',manual,,'], '', UserPreferences::URL_MANUAL, false], + [['MYPHPNET' => ',quickref,,'], '', UserPreferences::URL_FUNC, false], + [['MYPHPNET' => ',invalid,,'], '', UserPreferences::URL_NONE, false], + [['MYPHPNET' => ',,,1'], '', UserPreferences::URL_NONE, true], + [['MYPHPNET' => 'en,manual,,1'], 'en', UserPreferences::URL_MANUAL, true], + ]; + } + + #[DataProvider('urlSearchTypeProvider')] + public function testSetUrlSearchType(mixed $type, string|false $expected): void + { + $userPreferences = new UserPreferences(searchType: UserPreferences::URL_NONE); + $userPreferences->setUrlSearchType($type); + self::assertSame($expected, $userPreferences->searchType); + } + + /** @return array */ + public static function urlSearchTypeProvider(): array + { + return [ + ['manual', UserPreferences::URL_MANUAL], + ['quickref', UserPreferences::URL_FUNC], + [false, UserPreferences::URL_NONE], + ['', UserPreferences::URL_NONE], + ['invalid', UserPreferences::URL_NONE], + [['manual'], UserPreferences::URL_NONE], + ]; + } + + public function testSetIsUserGroupTipsEnabled(): void + { + $timeBackup = $_SERVER['REQUEST_TIME']; + $_SERVER['REQUEST_TIME'] = 1726600070; + + $userPreferences = new UserPreferences(isUserGroupTipsEnabled: false); + $userPreferences->setIsUserGroupTipsEnabled(true); + self::assertTrue($userPreferences->isUserGroupTipsEnabled); + + $userPreferences = new UserPreferences(isUserGroupTipsEnabled: true); + $userPreferences->setIsUserGroupTipsEnabled(false); + self::assertFalse($userPreferences->isUserGroupTipsEnabled); + + $_SERVER['REQUEST_TIME'] = 1726600066; + + $userPreferences = new UserPreferences(isUserGroupTipsEnabled: false); + $userPreferences->setIsUserGroupTipsEnabled(false); + self::assertTrue($userPreferences->isUserGroupTipsEnabled); + + $_SERVER['REQUEST_TIME'] = $timeBackup; + } +} diff --git a/tests/Visual/SearchModal.css b/tests/Visual/SearchModal.css new file mode 100644 index 0000000000..fa3a03bc6f --- /dev/null +++ b/tests/Visual/SearchModal.css @@ -0,0 +1,3 @@ +.hero__versions { + visibility: hidden !important; +} diff --git a/tests/Visual/SearchModal.spec.ts b/tests/Visual/SearchModal.spec.ts new file mode 100644 index 0000000000..4a753c9f0a --- /dev/null +++ b/tests/Visual/SearchModal.spec.ts @@ -0,0 +1,35 @@ +import { test, expect } from "@playwright/test"; +import path from "path"; + +const httpHost = process.env.HTTP_HOST; + +if (typeof httpHost !== "string") { + throw new Error('Environment variable "HTTP_HOST" is not set.'); +} + +test.beforeEach(async ({ page }) => { + await page.goto(httpHost); +}); + +const openSearchModal = async (page) => { + await page.getByRole("button", { name: "Search" }).click(); + const modal = await page.getByRole("dialog", { name: "Search modal" }); + + // Wait for the modal animation to finish + await expect(page.locator("#search-modal__backdrop.show")).not.toHaveClass( + "showing", + ); + + expect(modal).toBeVisible(); + return modal; +}; + +test("should match search modal visual snapshot", async ({ page }) => { + const modal = await openSearchModal(page); + await modal.getByRole("searchbox").fill("array"); + await expect(page).toHaveScreenshot(`tests/screenshots/search-modal.png`, { + // Cannot use mask as it ignores z-index + // See https://github.com/microsoft/playwright/issues/19002 + stylePath: path.join(__dirname, "SearchModal.css"), + }); +}); diff --git a/tests/Visual/SearchModal.spec.ts-snapshots/tests-screenshots-search-modal-chromium-linux.png b/tests/Visual/SearchModal.spec.ts-snapshots/tests-screenshots-search-modal-chromium-linux.png new file mode 100644 index 0000000000..016d1e269d Binary files /dev/null and b/tests/Visual/SearchModal.spec.ts-snapshots/tests-screenshots-search-modal-chromium-linux.png differ diff --git a/tests/Visual/SmokeTest.spec.ts b/tests/Visual/SmokeTest.spec.ts new file mode 100644 index 0000000000..7d8979edcc --- /dev/null +++ b/tests/Visual/SmokeTest.spec.ts @@ -0,0 +1,76 @@ +import {expect, test} from '@playwright/test'; + +export type TestPageOptions = { + path: string + options?: object + evaluate?: () => any + mask?: string[] +} + +const items: TestPageOptions[] = [ + { + path: 'index.php', + evaluate: () => { + const selector = document.querySelector('.elephpants'); + selector.remove() + }, + options: { + fullPage: true, + timeout: 10000, + }, + mask: ['.hero__versions'], + }, + { + path: 'archive/1998.php', + evaluate: () => { + const selector = document.querySelector('.elephpants'); + selector.remove() + } + }, + {path: 'releases/8_3_6.php'}, + {path: 'releases/8.0/index.php'}, + {path: 'releases/8.1/index.php'}, + {path: 'releases/8.2/index.php'}, + {path: 'releases/8.3/index.php'}, + {path: 'manual/index.php'}, + {path: 'manual/php5.php'}, + { + path: 'conferences/index.php', + options: { + fullPage: false, + } + }, +] + +for (const item of items) { + test(`testing with ${item.path}`, async ({page}, testInfo) => { + testInfo.snapshotSuffix = ''; + + const httpHost = process.env.HTTP_HOST + + if (typeof httpHost !== 'string') { + throw new Error('Environment variable "HTTP_HOST" is not set.') + } + + await page.goto(`${httpHost}/${item.path}`) + + if (typeof item.evaluate === 'function') { + await page.evaluate(item.evaluate) + } + + if (typeof item.mask === 'object') { + item.options = { + ...item.options, + mask: item.mask.map((selector) => page.locator(selector)) + } + } + + await expect(page).toHaveScreenshot( + `tests/screenshots/${item.path}.png`, + item.options ?? { + fullPage: true, + timeout: 10000, + } + ) + }) +} diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-archive-1998-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-archive-1998-php-chromium.png new file mode 100644 index 0000000000..14affc7315 Binary files /dev/null and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-archive-1998-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-conferences-index-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-conferences-index-php-chromium.png new file mode 100644 index 0000000000..ad673ed55e Binary files /dev/null and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-conferences-index-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-index-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-index-php-chromium.png new file mode 100644 index 0000000000..5af7a45700 Binary files /dev/null and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-index-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-index-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-index-php-chromium.png new file mode 100644 index 0000000000..63a3836d1f Binary files /dev/null and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-index-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-php5-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-php5-php-chromium.png new file mode 100644 index 0000000000..a8c4bd5063 Binary files /dev/null and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-php5-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-0-index-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-0-index-php-chromium.png new file mode 100644 index 0000000000..3cde37e348 Binary files /dev/null and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-0-index-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-1-index-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-1-index-php-chromium.png new file mode 100644 index 0000000000..1386a26edd Binary files /dev/null and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-1-index-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-2-index-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-2-index-php-chromium.png new file mode 100644 index 0000000000..f9aa7efe52 Binary files /dev/null and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-2-index-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-6-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-6-php-chromium.png new file mode 100644 index 0000000000..24a4d9a94d Binary files /dev/null and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-6-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-index-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-index-php-chromium.png new file mode 100644 index 0000000000..452e5caa82 Binary files /dev/null and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-index-php-chromium.png differ diff --git a/tests/php.ini b/tests/php.ini new file mode 100644 index 0000000000..8c327d0001 --- /dev/null +++ b/tests/php.ini @@ -0,0 +1,3 @@ +[PHP] + +display_errors = Off diff --git a/tests/phpunit.xml b/tests/phpunit.xml new file mode 100644 index 0000000000..5e81e856f0 --- /dev/null +++ b/tests/phpunit.xml @@ -0,0 +1,43 @@ + + + + + + ../manual/ + ../include/ + ../src/ + + + + + EndToEnd/ + + + Unit/ + + + diff --git a/tests/server b/tests/server new file mode 100755 index 0000000000..6cae14553d --- /dev/null +++ b/tests/server @@ -0,0 +1,173 @@ +#!/bin/bash + +# https://github.com/cubny/php-built-in-server-manager/blob/9a5cbeaad50a108d6058b882b83ba23fbd7722a9/server + +# default hostname +HOST=localhost +# default port number +PORT=8080 +# script name +NAME=${0##*/} + +usage () { + cat < [:] + + Available commands: + + start Starts PHP built-in web server server on specified hostname:port, default is localhost:$PORT + stop Stops the PHP built-in web server + restart Stops and Starts on previously specified hostname:port + status Status of "$NAME" process + log Show the PHP built-in web server logs. Use the -f option for a live update + + + report bugs to me@cubny.com + $NAME homepage: + +EOF +return 0 +} + +setup_colors() { + +if which tput >/dev/null 2>&1; then + ncolors=$(tput colors) + fi + if [ -t 1 ] && [ -n "$ncolors" ] && [ "$ncolors" -ge 8 ]; then + RED="$(tput setaf 1)" + GREEN="$(tput setaf 2)" + YELLOW="$(tput setaf 3)" + BLUE="$(tput setaf 4)" + BOLD="$(tput bold)" + NORMAL="$(tput sgr0)" + else + RED="" + GREEN="" + YELLOW="" + BLUE="" + BOLD="" + NORMAL="" + fi +} + +# if no command specified exit and show usage +if [[ $# < 1 ]]; then + echo $NAME: no command specified + usage + exit 1 +fi + +# if hostname:port specified override defaults +if [[ $# > 1 ]]; then + IFS=':' read -r -a hostport <<< "$2" + if [[ ! -z "${hostport[0]}" ]]; then + HOST=${hostport[0]} + fi + if [[ ! -z "${hostport[1]}" ]]; then + PORT=${hostport[1]} + fi +fi + +# pidfile contents would be hostname:port:pid +PIDFILE=.build/server/server.pid +LOGFILE=.build/server/server.log + +validate_server () { + which php &> /dev/null + if [[ $? -eq 1 ]]; then + printf "${YELLOW}Error: PHP not found. ${NORMAL}Please install PHP version 5.4 or greater!\n" + return 1 + fi + + php -h | grep -q -- '-S' + if [[ $? -eq 1 ]]; then + printf "${YELLOW}Error: PHP version must be 5.4 or greater!${NORMAL}\n" + return 1 + fi + + return 0 +} + +start_server () { + validate_server + + if [[ $? -eq 1 ]]; then + return 1 + fi + + if [[ -e "$PIDFILE" ]]; then + printf "${YELLOW}Server seems to be running!${NORMAL}\n" + echo + echo if not, there is probably a zombie "$PIDFILE" in this directory. + echo if you are sure no server is running just remove "$PIDFILE" manually and start again + return 1 + else + printf "${GREEN}"$NAME" started on $HOST:$PORT${NORMAL}\n" + mkdir -p $(dirname "$LOGFILE") + php -S "$HOST":"$PORT" -c tests/php.ini >> "$LOGFILE" 2>&1 & + mkdir -p $(dirname "$PIDFILE") + echo "$HOST":"$PORT":$! > $PIDFILE + return 0 + fi +} + +read_pidfile() { + if [[ -e "$PIDFILE" ]]; then + PIDFILECONTENT=`cat "$PIDFILE"` + IFS=: read HOST PORT PID <<< "$PIDFILECONTENT:" + return 0 + else + return 1 + fi +} + +stop_server () { + if read_pidfile; then + kill -9 "$PID" + rm -f "$PIDFILE" + printf "${GREEN}"$NAME" stopped!${NORMAL}\n" + return 0 + else + printf "${YELLOW}"$NAME" is not running!${NORMAL}\n" + return 1 + fi +} + +status_server() { + if read_pidfile && kill -0 "$PID" ; then + printf "${BLUE}"$NAME" is running on ${HOST}:${PORT}${NORMAL}\n" + else + printf "${YELLOW}"$NAME" is not running!${NORMAL}\n" + fi +} + + +log_server() { + if read_pidfile && kill -0 "$PID" ; then + if [[ "$1" = "-f" ]]; then + TAIL_OPTS="-f" + fi + tail $TAIL_OPTS "$LOGFILE" + else + printf "${YELLOW}"$NAME" is not running!${NORMAL}\n" + fi +} + + +setup_colors + +case $1 in + start) start_server;; + stop) stop_server;; + restart) stop_server; start_server ;; + status) status_server;; + log) log_server $2;; + -h) usage ;; + --help) usage ;; + *) usage;; +esac diff --git a/thanks.php b/thanks.php index 5d7d4035ed..3f915a9514 100644 --- a/thanks.php +++ b/thanks.php @@ -2,146 +2,222 @@ $_SERVER['BASE_PAGE'] = 'thanks.php'; include_once __DIR__ . '/include/prepend.inc'; include_once __DIR__ . '/include/historical_mirrors.inc'; -site_header("Thanks", array("current" => "community")); +site_header("Thanks", ["current" => "community"]); ?>

    Thanks

    -
      -
    • - easyDNS - provides DNS services for the PHP domains. -
    • - -
    • - DDoS protection by Myra Security, along with hosting - www.php.net and git.php.net for us. -
    • - -
    • - SinnerG - provides servers and bandwidth for svn.php.net, gtk.php.net, people.php.net - and europe.rsync.php.net. -
    • - -
    • - Directi provides - IP address to country lookup information. -
    • - -
    • - DigitalOcean provides - VMs for a number of PHP services. -
    • - -
    • - pair Networks - provides the servers and bandwidth for PEAR, PECL and mailing list services. -
    • - -
    • - Rackspace provides - the server and bandwidth for various php.net services. -
    • - -
    • - Server Central provides - a box and connection which runs various services and sites for php.net -
    • - -
    • - Spry VPS Hosting provides a server and - bandwidth for various php.net services. -
    • - -
    • - OSU Open Source Lab provides a server and - bandwidth for various php.net services. -
    • - -
    • - NEXCESS.NET provides a server and bandwidth - for various php.net services. -
    • - -
    • - EUKhost provides a server and bandwidth - for various php.net services. -
    • - -
    • - Duocast provides the - servers and bandwidth used for buildbot testing and various windows based servers. -
    • - -
    • - Redpill Linpro provides managed servers and bandwidth for various php.net services. -
    • - -
    • - Krystal.uk provides a server and bandwidth - for the ci.qa.php.net build and quality assurance infrastructure. -
    • - -
    • - ServerGrove provides managed servers and bandwidth for various php.net services. -
    • - -
    • - Bauer + Kirch GmbH provides us with SSL certificates and - a server and bandwidth for the php.net monitoring infrastructure. -
    • - -
    • - AppVeyor provides continuous integration for Windows builds of PHP. -
    • - -
    • - Travis CI provides continuous integration for builds of PHP. -
    • - +
        +
      • + +
        + easyDNS +

        Provides DNS services for the PHP domains.

        +
        +
      • + +
      • + +
        + Myra Security +

        DDoS protection, along with hosting www.php.net and git.php.net for us.

        +
        +
      • + +
      • + +
        + SinnerG +

        + Provides servers and bandwidth for svn.php.net, gtk.php.net, people.php.net and europe.rsync.php.net. +

        +
        +
      • + +
      • + +
        + Directi +

        + Provides IP address to country lookup information. +

        +
        +
      • + +
      • + +
        + DigitalOcean +

        + Provides VMs for a number of PHP services. +

        +
        +
      • + +
      • + +
        + Deft +

        + Provides a server and bandwidth for rsync.php.net. +

        +
        +
      • + +
      • + +
        + EUKhost +

        + Provides a server and bandwidth for various php.net services. +

        +
        +
      • + +
      • + +
        + Duocast +

        + Provides the servers and bandwidth used for buildbot testing and various Windows based servers. +

        +
        +
      • + +
      • + +
        + Bauer + Kirch GmbH +

        + Provides us with SSL certificates and a server and bandwidth for the php.net monitoring infrastructure. +

        +
        +
      • + +
      • + +
        + AppVeyor +

        + Provides continuous integration for Windows builds of PHP. +

        +
        +
      • + +
      • + +
        + Travis CI +

        + Provides continuous integration for builds of PHP. +

        +
        +

      Thanks Emeritus

      - Special 'legacy' thanks go to the people and companies who have helped - us in our past. + Special 'legacy' thanks go to the people and companies who have helped + us in our past.

        -
      • - Yahoo! Inc. provided us with many many - terabytes of bandwidth and hosting for www.php.net, and svn.php.net and git.php.net - for many years. -
      • - -
      • - Synacor provided us with many - terabytes of bandwidth and hosting for www.php.net and others for - many years. -
      • - -
      • - VA Software Corp. helped us - by donating a server and resources to enable us to build manuals - and distribute our content via rsync. -
      • +
      • + Yahoo! Inc. provided us with many many + terabytes of bandwidth and hosting for www.php.net, and svn.php.net and git.php.net + for many years. +
      • + +
      • + Synacor provided us with many + terabytes of bandwidth and hosting for www.php.net and others for + many years. +
      • + +
      • + VA Software Corp. helped us + by donating a server and resources to enable us to build manuals + and distribute our content via rsync. +
      • + +
      • + Krystal.uk provided a server and + bandwidth for the ci.qa.php.net build and quality assurance + infrastructure. +
      • + +
      • + NEXCESS.NET provided servers and + resources for various php.net services. +
      • + +
      • + Oregon State University Open Source Lab + provided servers and resources for various php.net services. +
      • + +
      • + pair Networks + provided servers and resources for hosting PEAR, PECL, and the mailing lists. +
      • + +
      • + Rackspace provided servers and + resources for various php.net services. +
      • + +
      • + Redpill Linpro provided servers and + resources for various php.net services. +
      • + +
      • + ServerGrove provided managed + servers and resources for various php.net services. +
      • + +
      • + Spry VPS Hosting provided servers + and resources for various php.net services. +

      - And special thanks to all the companies who donated server space and - bandwidth to host our historical international array of mirror sites. + And special thanks to all the companies who donated server space and + bandwidth to host our historical international array of mirror sites.

        - -
      • :
      • - + +
      • :
      • +

      PHP.net is very grateful for all their support.

      diff --git a/unsub.php b/unsub.php index f76211904a..0e2b1f2d23 100644 --- a/unsub.php +++ b/unsub.php @@ -6,12 +6,11 @@

      Unsubscribe from the PEAR - lists, the PECL - lists, and the PHP-GTK + lists and the PECL lists on their own pages. -

      +

      '; -site_header("Unsubscribing", array("current" => "community")); +site_header("Unsubscribing", ["current" => "community"]); ?>

      Unsubscribing From a Mailing List

      @@ -40,15 +39,15 @@

      To unsubscribe from one of those mailing lists, all you usually need to - do is send an email to listname-unsubscribe@lists.php.net + do is send an email to listname+unsubscribe@lists.php.net (substituting the name of the list for listname - — for example, php-general-unsubscribe@lists.php.net). + — for example, php-general+unsubscribe@lists.php.net).

      If you are subscribed to the digest version of the mailing list, you need to send an email to - listname-digest-unsubscribe@lists.php.net. + listname+unsubscribe-digest@lists.php.net.

      @@ -159,22 +158,6 @@ - -

      Unsubscribe with a different email address

      - -

      - To unsubscribe an address like this that is different from what the - mailing list software recognizes as your own address, you need to send mail to - listname-unsubscribe-joecool=example.com@lists.php.net - (or -unsubscribe-digest-, if the address is subscribed to the - digest format of the list). -

      - -

      - Once you have done that, you will receive a message at that email address - with instructions on how to complete your unsubscription request. -

      -

      Still need help?

      diff --git a/urlhowto.php b/urlhowto.php index 196be2bec5..64ceab1ec3 100644 --- a/urlhowto.php +++ b/urlhowto.php @@ -2,18 +2,18 @@ $_SERVER['BASE_PAGE'] = 'urlhowto.php'; include_once __DIR__ . '/include/prepend.inc'; -$SIDEBAR_DATA=' +$SIDEBAR_DATA = '

      URL examples

      We have many kind of URL shortcuts. Here are some examples you can try out:

      My PHP.net

      @@ -24,10 +24,10 @@

      '; -site_header("URL Howto", array("current" => "help")); -function a($href) { +site_header("URL Howto", ["current" => "help"]); +function a($href): void { global $MYSITE; - echo '' . $MYSITE . $href . ''; + echo '' . $MYSITE . $href . ''; } ?> @@ -45,7 +45,7 @@ function a($href) { sites, not just at the main site. If you find that some of these shortcuts are not working on your mirror site, please report them as a "PHP.net Website Problem" at - http://bugs.php.net/. + https://bugs.php.net/.

      @@ -75,7 +75,7 @@ function a($href) {

    • Reference pages (e.g. )
    • Function pages (e.g. )
    • Class pages (e.g. )
    • -
    • Feature pages (e.g. )
    • +
    • Feature pages (e.g. )
    • Control structure pages (e.g. )
    • Other language pages (e.g. )
    @@ -132,8 +132,8 @@ function a($href) { always override this setting by explicitly providing the language you want to get to. You can embed the language in the URL before the manual search term. - hu/sort will bring up - the Hungarian manual page for sort() for example. + fr/sort will bring up + the French manual page for sort() for example.

    Search shortcuts

    diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..1f195cd592 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,41 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@playwright/test@^1.44.0": + version "1.44.0" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.44.0.tgz#ac7a764b5ee6a80558bdc0fcbc525fcb81f83465" + integrity sha512-rNX5lbNidamSUorBhB4XZ9SQTjAqfe5M+p37Z8ic0jPFBMo5iCtQz1kRWkEMg+rYOKSlVycpQmpqjSFq7LXOfg== + dependencies: + playwright "1.44.0" + +"@types/node@^20.12.11": + version "20.12.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.11.tgz#c4ef00d3507000d17690643278a60dc55a9dc9be" + integrity sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw== + dependencies: + undici-types "~5.26.4" + +fsevents@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +playwright-core@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.44.0.tgz#316c4f0bca0551ffb88b6eb1c97bc0d2d861b0d5" + integrity sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ== + +playwright@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.44.0.tgz#22894e9b69087f6beb639249323d80fe2b5087ff" + integrity sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ== + dependencies: + playwright-core "1.44.0" + optionalDependencies: + fsevents "2.3.2" + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==