├── .devcontainer └── devcontainer.json ├── .github └── workflows │ ├── deploy-site.yml │ ├── issue-roundup.yml │ ├── junie.yml │ └── netlify.yml ├── .gitignore ├── .markdownlint.yaml ├── README.md ├── app ├── SculpinKernel.php ├── config │ ├── sculpin_kernel.yml │ ├── sculpin_site.yml │ └── sculpin_site_prod.yml └── src │ ├── Bundles │ ├── AtomFeedGeneratorBundle │ │ ├── AtomFeedGenerator.php │ │ ├── DependencyInjection │ │ │ ├── Configuration.php │ │ │ └── SculpinAtomFeedGeneratorExtension.php │ │ ├── Resources │ │ │ └── config │ │ │ │ └── services.xml │ │ └── SculpinAtomFeedGeneratorBundle.php │ ├── MermaidBundle │ │ ├── DependencyInjection │ │ │ ├── Configuration.php │ │ │ └── SculpinMermaidExtension.php │ │ ├── MermaidConverter.php │ │ ├── Resources │ │ │ └── config │ │ │ │ └── services.xml │ │ └── SculpinMermaidBundle.php │ ├── PhpFoundationBundle │ │ ├── DependencyInjection │ │ │ ├── Configuration.php │ │ │ └── PhpFoundationExtension.php │ │ ├── Extensions │ │ │ └── PhpFoundation.php │ │ ├── PhpFoundationBundle.php │ │ └── Resources │ │ │ └── config │ │ │ └── services.xml │ ├── RedirectBundle │ │ ├── DependencyInjection │ │ │ ├── Configuration.php │ │ │ └── SculpinRedirectExtension.php │ │ ├── RedirectGenerator.php │ │ ├── Resources │ │ │ └── config │ │ │ │ └── services.xml │ │ └── SculpinRedirectBundle.php │ └── SharingImageGeneratorBundle │ │ ├── DependencyInjection │ │ ├── Configuration.php │ │ └── SculpinSharingImageGeneratorExtension.php │ │ ├── Resources │ │ └── config │ │ │ └── services.xml │ │ ├── SculpinSharingImageGeneratorBundle.php │ │ ├── SharingImageGenerator.php │ │ └── TwigSharingImageGeneratorExtension.php │ ├── Seo │ └── SharingImageGenerator.php │ └── Sitemap │ ├── Author.php │ ├── Entry.php │ └── SitemapGenerator.php ├── assets ├── css │ ├── .gitignore │ └── app.css ├── fonts │ ├── Arial.ttf │ └── ArialBold.ttf └── img │ ├── logo.png │ └── logo_inverse.png ├── composer.json ├── composer.lock ├── package-lock.json ├── package.json ├── postcss.config.js ├── source ├── 404.html ├── _layouts │ ├── default.html │ ├── minimal.html │ ├── newsletter.html │ ├── presentations-item.html │ ├── quote.html │ ├── redirect.html │ ├── sponsorship-tiers.html │ └── structure-item.html ├── _pages │ ├── branding.html │ ├── code-of-conduct.md │ ├── contact.md │ ├── foundation.md │ ├── get-involved.md │ ├── privacy-policy.md │ ├── sponsor.md │ └── structure.html ├── _partials │ └── sponsors.html ├── _posts │ ├── 2022-01-21-the-php-foundation-update-january-2022.md │ ├── 2022-03-31-the-php-foundation-update-march-2022.md │ ├── 2022-04-28-php-roundup-1.md │ ├── 2022-05-02-the-php-foundation-update-april-2022.md │ ├── 2022-05-06-interview-with-core-developers.md │ ├── 2022-05-30-php-core-roundup-2.md │ ├── 2022-06-01-php-foundation-update-may-2022.md │ ├── 2022-06-30-php-core-roundup-3.md │ ├── 2022-07-04-php-foundation-update-june-2022.md │ ├── 2022-07-28-php-core-roundup-4.md │ ├── 2022-08-04-php-foundation-update-july-2022.md │ ├── 2022-08-30-php-core-roundup-5.md │ ├── 2022-09-30-php-core-roundup-6.md │ ├── 2022-11-05-php-core-roundup-7.md │ ├── 2022-11-22-transparency-and-impact-report-2022.md │ ├── 2022-11-30-php-core-roundup-8.md │ ├── 2023-01-30-php-core-roundup-9.md │ ├── 2023-03-01-php-core-roundup-10.md │ ├── 2023-03-31-php-foundation-update-march-2023.md │ ├── 2023-04-01-php-core-roundup-11.md │ ├── 2023-05-02-php-core-roundup-12.md │ ├── 2023-06-06-php-core-roundup-13.md │ ├── 2023-07-01-php-core-roundup-14.md │ ├── 2023-08-01-php-core-roundup-15.md │ ├── 2023-09-01-php-core-roundup-16.md │ ├── 2023-09-06-application-form-2023.md │ ├── 2023-10-01-php-core-roundup-17.md │ ├── 2023-11-01-php-core-roundup-18.md │ ├── 2023-11-23-php-83.md │ ├── 2023-11-27-php-foundation-update-november-2023.md │ ├── 2024-01-03-the-php-foundation-team-update-2024.md │ ├── 2024-02-26-transparency-and-impact-report-2023.md │ ├── 2024-04-02-open-source-community-cra-compliance-initiative.md │ ├── 2024-08-19-state-of-generics-and-collections.md │ ├── 2024-09-12-php-foundation-update-september-2024.md │ ├── 2024-09-17-application-form-2025.md │ ├── 2024-09-30-call-fo-sponsors.md │ ├── 2024-10-02-php-core-roundup-19.md │ ├── 2024-10-08-open-source-pledge.md │ ├── 2024-10-21-web-services-tool-for-php-fpm.md │ ├── 2024-11-01-how-hooks-happened.md │ ├── 2024-11-19-pie-pre-release.md │ ├── 2024-11-21-php-core-roundup-20-php84.md │ ├── 2024-11-22-php-foundation-turns-three.md │ ├── 2024-12-23-happy-holidays-from-the-php-foundation.md │ ├── 2025-01-31-laracons.md │ ├── 2025-03-31-transparency-and-impact-report-2024.md │ ├── 2025-04-03-welcoming-passbolt-to-the-php-foundation.md │ ├── 2025-04-10-php-core-security-audit-results.md │ ├── 2025-05-09-manychat-powered-by-php.md │ └── 2025-05-15-frankenphp.md ├── _views │ ├── page-wide.html │ ├── page.html │ └── post.html ├── assets │ ├── branding │ │ ├── php_foundation.png │ │ └── php_foundation.svg │ ├── files │ │ └── 24-07-1730-REP-V1.4_temp.pdf │ ├── icons │ │ ├── digital_ocean.svg │ │ ├── logo_slack.svg │ │ ├── mailcoach.svg │ │ ├── php_foundation.svg │ │ ├── share.png │ │ └── stickermule.png │ ├── images │ │ └── slides_img_join.png │ ├── post-images │ │ ├── 2022 │ │ │ ├── report-2022 │ │ │ │ ├── commits_chart.png │ │ │ │ ├── commits_chart.svg │ │ │ │ ├── expenses.png │ │ │ │ ├── financial_contributions.png │ │ │ │ ├── php-foundation-timeline-2022.png │ │ │ │ ├── php-foundation-timeline-2022.svg │ │ │ │ ├── reviews_chart.png │ │ │ │ └── reviews_chart.svg │ │ │ ├── roundup-6 │ │ │ │ └── tweet-gbp-php-doc-en-issues.png │ │ │ └── roundup-7 │ │ │ │ └── tweet-thephpf-status.png │ │ ├── 2023 │ │ │ ├── 3v4l-property-hooks.png │ │ │ ├── php83 │ │ │ │ └── php83-fireworks.svg │ │ │ └── roundup-18 │ │ │ │ └── supported_versions_php.png │ │ ├── 2024 │ │ │ ├── php84 │ │ │ │ ├── php-icon-new.png │ │ │ │ └── php-icon-old.png │ │ │ └── report-2023 │ │ │ │ ├── ben_marks.jpg │ │ │ │ ├── brandon_kelly.jpg │ │ │ │ ├── budget.png │ │ │ │ ├── commits.png │ │ │ │ ├── expenses.png │ │ │ │ ├── kevin_dunglas.png │ │ │ │ ├── matt_mullenweg.jpg │ │ │ │ ├── mwop.jpg │ │ │ │ ├── rasmus_lerdorf.jpg │ │ │ │ └── reviews.png │ │ └── 2025 │ │ │ ├── 2025-05-15-frankenphp.png │ │ │ └── report-2024 │ │ │ ├── artemy.png │ │ │ ├── chad.jpeg │ │ │ ├── commits.svg │ │ │ ├── courtney.jpeg │ │ │ ├── eu_cra_wg.png │ │ │ ├── gina_openuk.png │ │ │ ├── nils.png │ │ │ ├── open-source-pledge-logo-sticker.svg │ │ │ ├── reviews.svg │ │ │ ├── sta.png │ │ │ └── taylor.png │ └── sponsors │ │ ├── STA-Logo-Default-Black-RGB.svg │ │ ├── aternos-gmbh.png │ │ ├── automattic.png │ │ ├── craftcms.png │ │ ├── cybozu.jpg │ │ ├── godaddy.png │ │ ├── jetbrains.png │ │ ├── laravel-logo.svg │ │ ├── les-tilleuls.png │ │ ├── manychat.svg │ │ ├── mercari.png │ │ ├── passbolt.png │ │ ├── pixiv-inc.jpg │ │ ├── private-packagist.png │ │ ├── sentry.png │ │ ├── stickermule_logo_transparent.png │ │ ├── symfony-corp.png │ │ ├── tideways.jpg │ │ └── zend-by-perforce.png ├── atom.xml ├── blog.html ├── blog │ └── tag │ │ └── tag.html ├── index.html ├── presentations.html ├── robots.txt └── sitemap.xml └── tailwind.config.js /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "PHP", 3 | "image": "mcr.microsoft.com/devcontainers/php:8.4", 4 | "postCreateCommand": "", 5 | "features": { 6 | "ghcr.io/devcontainers/features/node:1": {"version": "latest"}, 7 | "ghcr.io/opencodeco/devcontainers/install-php-extensions:latest": { 8 | "extensions": "gd" 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.github/workflows/deploy-site.yml: -------------------------------------------------------------------------------- 1 | name: Deploy website 2 | 3 | on: 4 | push: 5 | branches: 6 | - "main" 7 | 8 | jobs: 9 | deploy: 10 | name: Deploy website 11 | runs-on: "ubuntu-22.04" 12 | steps: 13 | - name: Checkout 14 | uses: actions/checkout@main 15 | 16 | - name: Setup Node 17 | uses: actions/setup-node@v4 18 | with: 19 | node-version: 20 20 | 21 | - name: Install asset deps 22 | run: npm install 23 | 24 | - name: Build production assets 25 | run: npx tailwind -i assets/css/app.css -o source/assets/css/app.css --minify 26 | 27 | - name: Setup PHP 28 | uses: shivammathur/setup-php@v2 29 | with: 30 | php-version: 8.3 31 | extensions: mbstring, intl, readline 32 | tools: composer:v2 33 | 34 | - name: Install PHP deps 35 | uses: ramsey/composer-install@v2 36 | 37 | - name: Build production site 38 | run: ./vendor/bin/sculpin generate --env=prod 39 | 40 | - name: Deploy 41 | uses: peaceiris/actions-gh-pages@v4 42 | if: ${{ github.ref == 'refs/heads/main' }} 43 | with: 44 | github_token: ${{ secrets.GITHUB_TOKEN }} 45 | publish_dir: ./output_prod 46 | cname: thephp.foundation 47 | -------------------------------------------------------------------------------- /.github/workflows/issue-roundup.yml: -------------------------------------------------------------------------------- 1 | name: PHP Core Roundup 2 | on: 3 | schedule: 4 | - cron: 0 10 25 * * 5 | 6 | jobs: 7 | create_issue: 8 | name: Create an issue with roundup checklist 9 | runs-on: "ubuntu-22.04" 10 | permissions: 11 | issues: write 12 | steps: 13 | - name: Create issue 14 | uses: imjohnbo/issue-bot@v3.4.3 15 | with: 16 | assignees: "Ayesh, saundefined, pronskiy" 17 | labels: "roundup" 18 | title: "Roundup next" 19 | body: | 20 | - [ ] Prepare draft PR 21 | - [ ] Send to #general for review 22 | - [ ] Prepare tweet text 23 | - [ ] Publish blog post 24 | - [ ] Post announcements 25 | - [ ] Twitter 26 | - [ ] LinkedIn 27 | - [ ] Mastodon 28 | - [ ] Send out email newsletter 29 | 30 | pinned: false 31 | close-previous: false 32 | env: 33 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 34 | -------------------------------------------------------------------------------- /.github/workflows/junie.yml: -------------------------------------------------------------------------------- 1 | name: Junie 2 | run-name: Junie run ${{ inputs.run_id }} 3 | 4 | permissions: 5 | contents: write 6 | pull-requests: write 7 | packages: read 8 | 9 | on: 10 | workflow_dispatch: 11 | inputs: 12 | run_id: 13 | description: "id of workflow process" 14 | required: true 15 | workflow_params: 16 | description: "stringified params" 17 | required: true 18 | 19 | jobs: 20 | call-workflow-passing-data: 21 | uses: jetbrains-junie/junie-workflows/.github/workflows/ej-issue.yml@main 22 | with: 23 | workflow_params: ${{ inputs.workflow_params }} 24 | -------------------------------------------------------------------------------- /.github/workflows/netlify.yml: -------------------------------------------------------------------------------- 1 | name: Build and Deploy to Netlify 2 | on: 3 | pull_request_target: 4 | jobs: 5 | build: 6 | runs-on: "ubuntu-22.04" 7 | if: github.repository_owner == 'ThePHPF' 8 | steps: 9 | - uses: actions/checkout@v4 10 | with: 11 | ref: "refs/pull/${{ github.event.number }}/merge" 12 | 13 | - name: Setup Node 14 | uses: actions/setup-node@v4 15 | with: 16 | node-version: 20 17 | 18 | - name: Update Image Version in the related HelmChart values.yaml 19 | uses: fjogeleit/yaml-update-action@main 20 | with: 21 | valueFile: 'app/config/sculpin_site_prod.yml' 22 | propertyPath: 'url' 23 | value: https://deploy-pr-${{ github.event.number }}--thephpfoundation.netlify.app 24 | commitChange: false 25 | updateFile: true 26 | 27 | - name: Install asset deps 28 | run: npm install 29 | 30 | - name: Build production assets 31 | run: npx tailwind -i assets/css/app.css -o source/assets/css/app.css --minify 32 | 33 | - name: Setup PHP 34 | uses: shivammathur/setup-php@v2 35 | with: 36 | php-version: '8.3' 37 | extensions: mbstring, intl, readline 38 | tools: composer:v2 39 | 40 | - name: Install PHP deps 41 | uses: ramsey/composer-install@v2 42 | 43 | - name: Build production site 44 | run: ./vendor/bin/sculpin generate --env=prod 45 | 46 | - name: Deploy to Netlify 47 | uses: nwtgck/actions-netlify@v1.2 48 | with: 49 | production-deploy: false 50 | publish-dir: './output_prod' 51 | github-token: ${{ secrets.GITHUB_TOKEN }} 52 | deploy-message: "Deploy from GitHub Actions" 53 | enable-pull-request-comment: true 54 | overwrites-pull-request-comment: true 55 | enable-commit-comment: false 56 | alias: deploy-pr-${{ github.event.number }} 57 | env: 58 | NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} 59 | NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} 60 | timeout-minutes: 1 61 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.sculpin/ 2 | /app/cache/* 3 | /app/config/sculpin_kernel_*.yml 4 | /app/logs/* 5 | /output_*/ 6 | /node_modules/ 7 | /source/assets/css/ 8 | /vendor/ 9 | /.env 10 | -------------------------------------------------------------------------------- /.markdownlint.yaml: -------------------------------------------------------------------------------- 1 | default: true 2 | MD033: false 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # thephp.foundation website 2 | 3 | This is the source code for the website of [thephp.foundation](https://thephp.foundation). 4 | It is built using the PHP static-site generator [Sculpin](https://sculpin.io), and uses [Tailwind CSS](https://tailwindcss.com) for design and layout. 5 | 6 | ## Submitting blog posts 7 | 8 | To submit a blog post, create a pull request, adding a new file under `source/_posts/` in the format `{4-digit Year}-{2-digit Month}-{2-digit Day}-{dash-separated title}.md`. 9 | All posts are written using Markdown with frontmatter YAML, and should have the following general format: 10 | 11 | ```markdown 12 | --- 13 | title: Title for the post 14 | layout: post 15 | tags: 16 | - update 17 | author: 18 | name: Your name 19 | url: A URL with information on you 20 | --- 21 | Markdown content starts here 22 | ``` 23 | 24 | ## Developing/maintaining the site 25 | 26 | The site 27 | 28 | ### Requirements 29 | 30 | To develop the website, you will need: 31 | 32 | - PHP 8.3 or later 33 | - Composer 34 | - Node 20 with NPM 35 | 36 | ### Installing dependencies 37 | 38 | Install PHP dependencies using Composer: 39 | 40 | ```bash 41 | $ composer install 42 | ``` 43 | 44 | Install CSS dependencies using NPM: 45 | 46 | ```bash 47 | $ npm install 48 | ``` 49 | 50 | ### Build the CSS 51 | 52 | The site CSS is intentionally omitted from the source tree, as it is built using Tailwind from HTML classes. 53 | As such, you will need to build the CSS before initial testing: 54 | 55 | ```bash 56 | $ npx tailwind -i assets/css/app.css -o source/assets/css/app.css 57 | ``` 58 | 59 | ### Testing the site 60 | 61 | ### Content changes 62 | 63 | You can start the Sculpin development server using the following within a terminal: 64 | 65 | ```bash 66 | $ ./vendor/bin/sculpin generate --watch --server 67 | ``` 68 | 69 | This will launch the server at https://localhost:8000 70 | 71 | As you make content changes and save them, the server will regenerate pages automatically, allowing you to preview in your browser. 72 | 73 | When done, press `Ctrl-C`. 74 | 75 | ### CSS/Design changes 76 | 77 | If you are making any design changes, including adding HTML class attributes, you should run the Tailwind watcher; this ensures a page refresh will pick up any CSS changes. 78 | Invoke the watcher in a terminal as follows: 79 | 80 | ```bash 81 | $ npx tailwind -i assets/css/app.css -o source/assets/css/app.css --watch 82 | ``` 83 | 84 | When done, press `Ctrl-C`. 85 | 86 | The primary CSS file is kept in `assets/css/app.css`, and contains a number of overrides for common HTML tags; this is done so that rendered Markdown can remain styled. 87 | All other styles are derived from CSS classes; see the [Tailwind CSS documentation](https://tailwindcss.com/docs/installation) for details on what classes you can compose to achieve different design goals. 88 | 89 | ### Content Types 90 | 91 | This site has two Sculpin content types: 92 | 93 | - pages (under `source/_pages/`) 94 | - posts (under `source/_posts/`) 95 | 96 | Pages are one-off pages with a static permalink. 97 | 98 | Posts are blog posts, and will show up on the `/blog` page as well as in the site feed. 99 | 100 | ### Top-level pages 101 | 102 | The site defines two top-level pages: 103 | 104 | - `index.html`: The site landing page. 105 | - `blog.html`: The blog landing page. 106 | 107 | ## Deployment 108 | 109 | The [deployment workflow](.github/workflows/deploy-site.yml) auto-deploys to gh-pages on a push to the main branch. 110 | -------------------------------------------------------------------------------- /app/SculpinKernel.php: -------------------------------------------------------------------------------- 1 | configuration = $configuration; 22 | } 23 | 24 | public static function getSubscribedEvents(): array 25 | { 26 | return [ 27 | Sculpin::EVENT_AFTER_RUN => 'afterRun', 28 | ]; 29 | } 30 | 31 | public function afterRun(SourceSetEvent $sourceSetEvent): void 32 | { 33 | $sourceSet = $sourceSetEvent->sourceSet(); 34 | 35 | $env = $this->configuration->get('env') ?? 'dev'; 36 | 37 | $filesystem = new Filesystem(); 38 | if (!$filesystem->exists("output_$env/rss/")) { 39 | $filesystem->mkdir("output_$env/rss/"); 40 | } 41 | 42 | $entries = []; 43 | 44 | /** @var FileSource $source */ 45 | foreach ($sourceSet->allSources() as $source) { 46 | if ($source->isGenerated()) { 47 | continue; 48 | } 49 | 50 | $data = $source->data(); 51 | 52 | if ($source->file()->getExtension() !== 'md') { 53 | continue; 54 | } 55 | 56 | if (!$data->get('author')) { 57 | continue; 58 | } 59 | 60 | $authors = []; 61 | if ($name = $data->get('author.name')) { 62 | $authors[] = new Author($name, $data->get('author.url')); 63 | } else { 64 | foreach ($data->get('author') as $author) { 65 | $authors[] = new Author($author['name'], $author['url']); 66 | } 67 | } 68 | 69 | foreach ($authors as $author) { 70 | $slug = $this->slug($author->name); 71 | $entries["output_$env/rss/$slug.xml"][] = $this->fetchEntry($data, $authors); 72 | } 73 | } 74 | 75 | $this->generateFeed($entries); 76 | } 77 | 78 | /** 79 | * @param Author[] $entries 80 | */ 81 | protected function fetchEntry(Configuration $data, array $authors): Entry 82 | { 83 | $baseUrl = $this->configuration->get('url') ?? 'http://localhost'; 84 | 85 | return new Entry( 86 | $data->get('title'), 87 | $baseUrl . $data->get('url'), 88 | $authors, 89 | $data->get('blocks.content') ?? '', 90 | new \DateTimeImmutable($data->get('published_at')), 91 | ); 92 | } 93 | 94 | protected function slug(string $author): string 95 | { 96 | return mb_strtolower(preg_replace('/\W/', '_', $author)); 97 | } 98 | 99 | protected function generateFeed(array $entries = []): void 100 | { 101 | foreach ($entries as $filePath => $posts) { 102 | $rss = new SitemapGenerator(); 103 | if ($title = $this->configuration->get('title')) { 104 | $rss->setTitle($title); 105 | } 106 | if ($subtitle = $this->configuration->get('subtitle')) { 107 | $rss->setDescription($subtitle); 108 | } 109 | 110 | foreach ($posts as $post) { 111 | $rss->addEntry($post); 112 | } 113 | 114 | $rss->saveFeed($filePath); 115 | } 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /app/src/Bundles/AtomFeedGeneratorBundle/DependencyInjection/Configuration.php: -------------------------------------------------------------------------------- 1 | load('services.xml'); 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/Bundles/AtomFeedGeneratorBundle/Resources/config/services.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/Bundles/AtomFeedGeneratorBundle/SculpinAtomFeedGeneratorBundle.php: -------------------------------------------------------------------------------- 1 | load('services.xml'); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/Bundles/MermaidBundle/MermaidConverter.php: -------------------------------------------------------------------------------- 1 | configuration = $configuration; 20 | } 21 | 22 | public static function getSubscribedEvents(): array 23 | { 24 | return [ 25 | Sculpin::EVENT_BEFORE_CONVERT => 'beforeConvert', 26 | ]; 27 | } 28 | 29 | public function beforeConvert(ConvertEvent $event): void 30 | { 31 | $env = $this->configuration->get('env') ?? 'dev'; 32 | 33 | $source = $event->source(); 34 | 35 | if (!$source->hasChanged()) { 36 | return; 37 | } 38 | 39 | $original_file = file_get_contents($source->file()->getRealPath()); 40 | $original_content = $source->content(); 41 | if (is_null($original_content) || !str_contains($original_content, '```mermaid')) { 42 | return; 43 | } 44 | 45 | $year = date('Y', $source->data()->get('date')); 46 | $slug = basename($source->data()->get('url')); 47 | $filesystem = new Filesystem(); 48 | $assets_path = "/assets/post-images/{$year}/{$slug}/"; 49 | $image_path = "output_$env{$assets_path}"; 50 | if (!$filesystem->exists($image_path)) { 51 | $filesystem->mkdir($image_path); 52 | } 53 | 54 | $process = new Process([ 55 | 'npx', '-p', '@mermaid-js/mermaid-cli', 56 | 'mmdc', '-i', $source->file()->getRealPath(), 57 | // '-o', $source->file()->getRealPath(), 58 | ]); 59 | echo "\n"; 60 | $process->run(function($type, $buffer) { echo($buffer); }); 61 | 62 | $finder = new Finder(); 63 | $finder->files()->in(dirname($source->file()->getRealPath()))->name('*.svg')->sortByName(true); 64 | 65 | $mermaid_block_regex = '/```mermaid([^\S\n]*\r?\n([\s\S]*?))```/'; 66 | 67 | $diagrams = []; 68 | foreach ($finder as $file) { 69 | $filesystem->copy($file->getRealPath(), $image_path . $file->getFilename()); 70 | $diagrams[] = $assets_path . $file->getFilename(); 71 | $filesystem->remove($file->getRealPath()); 72 | } 73 | 74 | $new_content = $original_content; 75 | $i = 0; 76 | $new_content = preg_replace_callback( 77 | $mermaid_block_regex, 78 | function ($matches) use ($diagrams, &$i) { 79 | return sprintf("![Diagram %d](%s)", $i, $diagrams[$i++]); 80 | }, 81 | $new_content 82 | ); 83 | 84 | $source->setContent($new_content); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /app/src/Bundles/MermaidBundle/Resources/config/services.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/Bundles/MermaidBundle/SculpinMermaidBundle.php: -------------------------------------------------------------------------------- 1 | load('services.xml'); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/Bundles/PhpFoundationBundle/PhpFoundationBundle.php: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/Bundles/RedirectBundle/DependencyInjection/Configuration.php: -------------------------------------------------------------------------------- 1 | 21 | */ 22 | class Configuration implements ConfigurationInterface 23 | { 24 | /** 25 | * {@inheritdoc} 26 | */ 27 | public function getConfigTreeBuilder() 28 | { 29 | return new TreeBuilder('sculpin_redirect'); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/Bundles/RedirectBundle/DependencyInjection/SculpinRedirectExtension.php: -------------------------------------------------------------------------------- 1 | 23 | */ 24 | class SculpinRedirectExtension extends Extension 25 | { 26 | /** 27 | * {@inheritdoc} 28 | */ 29 | public function load(array $configs, ContainerBuilder $container) 30 | { 31 | $configuration = new Configuration; 32 | $config = $this->processConfiguration($configuration, $configs); 33 | 34 | $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); 35 | $loader->load('services.xml'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/Bundles/RedirectBundle/RedirectGenerator.php: -------------------------------------------------------------------------------- 1 | 13 | * @author Beau Simensen 14 | */ 15 | class RedirectGenerator implements EventSubscriberInterface 16 | { 17 | public static function getSubscribedEvents() 18 | { 19 | return [ 20 | Sculpin::EVENT_BEFORE_RUN => 'beforeRun', 21 | ]; 22 | } 23 | 24 | public function beforeRun(SourceSetEvent $sourceSetEvent) 25 | { 26 | $sourceSet = $sourceSetEvent->sourceSet(); 27 | 28 | foreach ($sourceSet->updatedSources() as $source) { 29 | if ($source->isGenerated()) { 30 | continue; 31 | } 32 | 33 | if (!$source->data()->get('redirect')) { 34 | continue; 35 | } 36 | 37 | foreach ($source->data()->get('redirect') as $key => $redirect) { 38 | $generatedSource = $source->duplicate($source->sourceId() . ':' . $redirect); 39 | $generatedSource->data()->set('destination', $source); 40 | $generatedSource->data()->set('permalink', $redirect); 41 | $generatedSource->data()->set('layout', 'redirect'); 42 | $generatedSource->setIsGenerated(); 43 | $sourceSet->mergeSource($generatedSource); 44 | } 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/Bundles/RedirectBundle/Resources/config/services.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | App\Bundles\RedirectBundle\RedirectGenerator 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/Bundles/RedirectBundle/SculpinRedirectBundle.php: -------------------------------------------------------------------------------- 1 | 20 | */ 21 | class SculpinRedirectBundle extends Bundle 22 | { 23 | } 24 | -------------------------------------------------------------------------------- /app/src/Bundles/SharingImageGeneratorBundle/DependencyInjection/Configuration.php: -------------------------------------------------------------------------------- 1 | load('services.xml'); 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/Bundles/SharingImageGeneratorBundle/Resources/config/services.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/Bundles/SharingImageGeneratorBundle/SculpinSharingImageGeneratorBundle.php: -------------------------------------------------------------------------------- 1 | configuration = $configuration; 19 | } 20 | 21 | public static function getSubscribedEvents(): array 22 | { 23 | return [ 24 | Sculpin::EVENT_BEFORE_RUN => 'beforeRun', 25 | ]; 26 | } 27 | 28 | public function beforeRun(SourceSetEvent $sourceSetEvent): void 29 | { 30 | $sourceSet = $sourceSetEvent->sourceSet(); 31 | 32 | $env = $this->configuration->get('env') ?? 'dev'; 33 | 34 | $filesystem = new Filesystem(); 35 | if (!$filesystem->exists("output_$env/assets/share/")) { 36 | $filesystem->mkdir("output_$env/assets/share/"); 37 | } 38 | 39 | /** @var FileSource $source */ 40 | foreach ($sourceSet->allSources() as $source) { 41 | if ($source->isGenerated()) { 42 | continue; 43 | } 44 | 45 | if ($source->file()->getExtension() !== 'md') { 46 | continue; 47 | } 48 | 49 | $data = $source->data(); 50 | 51 | if (!$data->get('title')) { 52 | continue; 53 | } 54 | 55 | $filename = str_replace('.md', '.png', $source->file()->getFilename()); 56 | 57 | $image = new \App\Seo\SharingImageGenerator(); 58 | if ($title = $data->get('title')) { 59 | $image->setTitle($title); 60 | } 61 | 62 | if ($name = $data->get('author.name')) { 63 | $image->setAuthor("by $name"); 64 | } elseif (!empty($data->get('author'))) { 65 | $image->setAuthor('by ' . implode(', ', array_column($data->get('author'), 'name'))); 66 | } 67 | 68 | $image->save("output_$env/assets/share/$filename"); 69 | } 70 | } 71 | } -------------------------------------------------------------------------------- /app/src/Bundles/SharingImageGeneratorBundle/TwigSharingImageGeneratorExtension.php: -------------------------------------------------------------------------------- 1 | configuration = $configuration; 17 | } 18 | 19 | public function getName(): string 20 | { 21 | return 'sharing_image_generator'; 22 | } 23 | 24 | public function getFunctions(): array 25 | { 26 | return [ 27 | new TwigFunction('sharing_image', [$this, 'getSharingImage']), 28 | ]; 29 | } 30 | 31 | public function getSharingImage(string $filename): string 32 | { 33 | $filesystem = new Filesystem(); 34 | 35 | $env = $this->configuration->get('env') ?? 'dev'; 36 | $filename = str_replace('.md', '.png', $filename); 37 | if ($filesystem->exists("output_$env/assets/share/$filename")) { 38 | return "/assets/share/$filename"; 39 | } 40 | 41 | return '/assets/icons/share.png'; 42 | } 43 | } -------------------------------------------------------------------------------- /app/src/Seo/SharingImageGenerator.php: -------------------------------------------------------------------------------- 1 | title = html_entity_decode($title); 28 | 29 | return $this; 30 | } 31 | 32 | public function setAuthor(?string $author): self 33 | { 34 | $this->author = $author; 35 | 36 | return $this; 37 | } 38 | 39 | public function setInverse(bool $inverse): self 40 | { 41 | $this->inverse = $inverse; 42 | 43 | return $this; 44 | } 45 | 46 | public function output(): void 47 | { 48 | $image = $this->prepare(); 49 | 50 | header('Content-type: image/png'); 51 | imagepng($image); 52 | imagedestroy($image); 53 | } 54 | 55 | public function save(string $path): void 56 | { 57 | $image = $this->prepare(); 58 | 59 | imagepng($image, $path); 60 | imagedestroy($image); 61 | } 62 | 63 | private function prepare(): GdImage 64 | { 65 | $image = imagecreate(self::IMAGE_WIDTH, self::IMAGE_HEIGHT); 66 | 67 | if ($this->inverse) { 68 | imagecolorallocate($image, 39, 40, 44); 69 | } else { 70 | imagecolorallocate($image, 107, 87, 255); 71 | } 72 | 73 | $whiteColor = imagecolorallocate($image, 255, 255, 255); 74 | 75 | $title = wordwrap($this->title, 27); 76 | $titleBounds = imagettfbbox( 77 | self::TITLE_FONT_SIZE, 78 | 0, 79 | __DIR__.'/../../../assets/fonts/ArialBold.ttf', 80 | $title 81 | ); 82 | $titleHeight = $titleBounds[1] - $titleBounds[7]; 83 | 84 | imagettftext( 85 | $image, 86 | self::TITLE_FONT_SIZE, 87 | 0, 88 | self::IMAGE_MARGINS, 89 | self::IMAGE_MARGINS * 3, 90 | $whiteColor, 91 | __DIR__.'/../../../assets/fonts/ArialBold.ttf', 92 | $title 93 | ); 94 | 95 | if ($this->author !== null) { 96 | $author = wordwrap($this->author, 40); 97 | 98 | imagettftext( 99 | $image, 100 | self::AUTHOR_FONT_SIZE, 101 | 0, 102 | self::IMAGE_MARGINS, 103 | self::IMAGE_MARGINS * 3 + $titleHeight + self::AUTHOR_FONT_SIZE, 104 | $whiteColor, 105 | __DIR__.'/../../../assets/fonts/Arial.ttf', 106 | $author 107 | ); 108 | } 109 | 110 | if ($this->inverse) { 111 | $logo = imagecreatefrompng(__DIR__.'/../../../assets/img/logo.png'); 112 | } else { 113 | $logo = imagecreatefrompng(__DIR__.'/../../../assets/img/logo_inverse.png'); 114 | } 115 | 116 | $src_height = 100; 117 | imagecopy($image, $logo, self::IMAGE_MARGINS, self::IMAGE_HEIGHT-self::IMAGE_MARGINS-$src_height, 0, 0, 100, $src_height); 118 | 119 | return $image; 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /app/src/Sitemap/Author.php: -------------------------------------------------------------------------------- 1 | title = $title; 19 | 20 | return $this; 21 | } 22 | 23 | public function setDescription(string $description): self 24 | { 25 | $this->description = $description; 26 | 27 | return $this; 28 | } 29 | 30 | public function addEntry(Entry $entry): void 31 | { 32 | $this->entries[] = $entry; 33 | } 34 | 35 | public function saveFeed(string $path): void 36 | { 37 | $dom = new DOMDocument('1.0', 'utf-8'); 38 | $feed = $dom->createElement('feed'); 39 | $feed->setAttribute('xmlns', 'http://www.w3.org/2005/Atom'); 40 | 41 | $title = $dom->createElement('title'); 42 | $title->appendChild($dom->createCDATASection($this->title)); 43 | 44 | $description = $dom->createElement('description'); 45 | $description->appendChild($dom->createCDATASection($this->description)); 46 | $feed->append($title, $description); 47 | 48 | $feed->append($dom->createElement('updated', date('c'))); 49 | 50 | foreach ($this->entries as $entry) { 51 | $element = $dom->createElement('entry'); 52 | 53 | $title = $dom->createElement('title'); 54 | $title->setAttribute('type', 'html'); 55 | $title->appendChild($dom->createCDATASection($entry->title)); 56 | 57 | $content = $dom->createElement('content'); 58 | $content->setAttribute('type', 'html'); 59 | $content->appendChild($dom->createCDATASection($entry->description)); 60 | 61 | $link = $dom->createElement('link'); 62 | $link->setAttribute('href', $entry->link); 63 | 64 | $id = $dom->createElement('id', $entry->link); 65 | 66 | foreach ($entry->authors as $authorEntity) { 67 | $author = $dom->createElement('author'); 68 | $author->appendChild($dom->createElement('name', $authorEntity->name)); 69 | $author->appendChild($dom->createElement('uri', $authorEntity->url)); 70 | 71 | $element->append($author); 72 | } 73 | 74 | $updated = $dom->createElement('updated', $entry->published_at->format(DATE_RSS)); 75 | 76 | $element->append($title, $content, $link, $id, $updated); 77 | 78 | $feed->append($element); 79 | } 80 | 81 | $dom->append($feed); 82 | 83 | file_put_contents($path, $dom->saveXML()); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /assets/css/.gitignore: -------------------------------------------------------------------------------- 1 | # These are some examples of commonly ignored file patterns. 2 | # You should customize this list as applicable to your project. 3 | # Learn more about .gitignore: 4 | # https://www.atlassian.com/git/tutorials/saving-changes/gitignore 5 | 6 | # Node artifact files 7 | node_modules/ 8 | dist/ 9 | 10 | # Compiled Java class files 11 | *.class 12 | 13 | # Compiled Python bytecode 14 | *.py[cod] 15 | 16 | # Log files 17 | *.log 18 | 19 | # Package files 20 | *.jar 21 | 22 | # Maven 23 | target/ 24 | dist/ 25 | 26 | # JetBrains IDE 27 | .idea/ 28 | 29 | # Unit test reports 30 | TEST*.xml 31 | 32 | # Generated by MacOS 33 | .DS_Store 34 | 35 | # Generated by Windows 36 | Thumbs.db 37 | 38 | # Applications 39 | *.app 40 | *.exe 41 | *.war 42 | 43 | # Large media files 44 | *.mp4 45 | *.tiff 46 | *.avi 47 | *.flv 48 | *.mov 49 | *.wmv 50 | 51 | -------------------------------------------------------------------------------- /assets/css/app.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | [x-cloak] { 6 | display: none !important; 7 | } 8 | 9 | @layer base { 10 | body { 11 | @apply font-sans text-zinc-600 box-border; 12 | } 13 | 14 | html { 15 | @apply min-h-screen; 16 | } 17 | 18 | h1, h2, h3, h4 { 19 | @apply mb-6 mt-12 text-zinc-800; 20 | } 21 | 22 | h1 { 23 | @apply leading-tight font-bold text-4xl; 24 | } 25 | 26 | h2 { 27 | @apply font-bold text-3xl; 28 | } 29 | 30 | h3 { 31 | @apply font-bold text-2xl; 32 | } 33 | 34 | h4 { 35 | @apply font-bold text-xl; 36 | } 37 | 38 | p, ol, ul, code, blockquote { 39 | @apply mb-5; 40 | } 41 | 42 | p, li { 43 | @apply font-normal text-zinc-800 text-base leading-relaxed; 44 | } 45 | 46 | ul { 47 | @apply list-disc list-outside mb-5 ml-5; 48 | } 49 | 50 | li > ul { 51 | @apply mb-0; 52 | } 53 | 54 | ol { 55 | @apply list-decimal list-outside mb-4 ml-5; 56 | } 57 | 58 | blockquote { 59 | @apply bg-yellow-50 ; 60 | } 61 | 62 | blockquote p { 63 | @apply p-4 pl-8; 64 | } 65 | 66 | a { 67 | @apply text-blue-600 underline 68 | } 69 | 70 | a:hover, a:visited:hover { 71 | @apply text-zinc-400; 72 | } 73 | } 74 | 75 | @layer components { 76 | .btn-foundation { 77 | @apply lg:pl-[calc(25% + 16px)]; 78 | } 79 | 80 | .form-inp, .form-btn { 81 | @apply border border-slate-300 hover:border-indigo-300; 82 | } 83 | 84 | .form-btn { 85 | @apply pl-4 pr-4 rounded; 86 | } 87 | 88 | 89 | .li-item { 90 | @apply mr-8 last:mr-0; 91 | } 92 | 93 | .group-link { 94 | @apply text-slate-700/70; 95 | } 96 | 97 | .group-link:hover { 98 | @apply text-slate-700; 99 | } 100 | 101 | .btn { 102 | @apply text-slate-900/70 text-base tracking-tighter leading-6; 103 | } 104 | 105 | .nav-org { 106 | @apply text-slate-900/70 hover:text-slate-900 hover:border-b hover:border-solid hover:border-slate-900 hover:no-underline after:content-["\2197"] after:mx-0.5 after:duration-300 hover:after:text-slate-900 hover:after:ml-1 hover:after:mr-0; 107 | } 108 | 109 | .footer-li { 110 | @apply after:border-r after:border-solid after:border-white/50 after:content-[""] after:inline-block after:h-3 after:my-0 after:mx-4 after:w-0 last-of-type:after:hidden; 111 | } 112 | 113 | .index-module { 114 | @apply relative rounded-lg overflow-hidden md:rounded-2xl; 115 | } 116 | 117 | .button-prev { 118 | @apply absolute right-9 rounded; 119 | } 120 | 121 | .button-prev:hover { 122 | @apply bg-slate-900 opacity-10 text-slate-900 123 | } 124 | 125 | .button-next { 126 | @apply absolute right-0 rounded-lg; 127 | } 128 | 129 | .button-next:hover { 130 | @apply bg-slate-900 opacity-10 text-slate-900 131 | } 132 | } 133 | 134 | :target { 135 | scroll-margin-top: 64px; 136 | } 137 | 138 | :target::before { 139 | content: ""; 140 | display: block; 141 | margin-top: -64px; 142 | height: 64px; 143 | width: 1px; 144 | } 145 | 146 | .footer-link { 147 | background-image: linear-gradient(180deg, #fff 100%, transparent 0); 148 | background-size: auto 0; 149 | background-repeat: repeat-x; 150 | transition: background-size .3s, color .3s; 151 | } 152 | 153 | .footer-link:hover { 154 | background-size: auto calc(100% + 4px); 155 | } 156 | 157 | footer > ul, footer > p { 158 | padding: 0; 159 | } 160 | 161 | code { 162 | font-family: Consolas, "PT Mono", "Liberation Mono", Courier, monospace; 163 | line-height: normal; 164 | background: rgba(135, 131, 120, 0.15); 165 | color: #EB5757; 166 | border-radius: 3px; 167 | font-size: 85%; 168 | padding: 0.2em 0.4em; 169 | } 170 | 171 | .alert { 172 | @apply bg-red-100 border border-red-400 px-4 py-3 pt-4 pb-4 mb-8 text-xl; 173 | } 174 | 175 | .button-link { 176 | @apply inline-block py-2 no-underline px-6 !text-white bg-[#6858f6] rounded-3xl hover:bg-[rgba(104,88,246,.8)]; 177 | } 178 | 179 | .button-link-border { 180 | @apply inline-block py-2 no-underline px-6 hover:text-white text-[#6858f6] bg-white border-2 border-[#6858f6] rounded-3xl hover:bg-[#6858f6]; 181 | } 182 | 183 | table tr th { 184 | @apply text-center font-bold; 185 | } 186 | 187 | table tr td, table tr th { 188 | @apply border-solid border border-gray-300 p-1.5; 189 | } 190 | 191 | table tr, td { 192 | @apply text-base; 193 | } 194 | -------------------------------------------------------------------------------- /assets/fonts/Arial.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/assets/fonts/Arial.ttf -------------------------------------------------------------------------------- /assets/fonts/ArialBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/assets/fonts/ArialBold.ttf -------------------------------------------------------------------------------- /assets/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/assets/img/logo.png -------------------------------------------------------------------------------- /assets/img/logo_inverse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/assets/img/logo_inverse.png -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "thephpf/thephp.foundation", 3 | "description": "A website thephp.foundation", 4 | "type": "project", 5 | "license": "MIT", 6 | "authors": [ 7 | { 8 | "name": "PHP Foundation", 9 | "email": "contact@thephp.foundation", 10 | "homepage": "https://thephp.foundation" 11 | } 12 | ], 13 | "require": { 14 | "php": "^8.3", 15 | "ext-gd": "*", 16 | "ext-dom": "*", 17 | "sculpin/sculpin": "dev-main", 18 | "symfony/process": "^6.4|^7.0" 19 | }, 20 | "require-dev": { 21 | "roave/security-advisories": "dev-latest" 22 | }, 23 | "scripts": { 24 | "sculpin-watch": [ 25 | "Composer\\Config::disableProcessTimeout", 26 | "sculpin generate --watch --server" 27 | ], 28 | "npx-watch": [ 29 | "Composer\\Config::disableProcessTimeout", 30 | "npx tailwind -i assets/css/app.css -o source/assets/css/app.css --watch" 31 | ] 32 | }, 33 | "config": { 34 | "allow-plugins": { 35 | "sculpin/sculpin-theme-composer-plugin": true 36 | } 37 | }, 38 | "autoload": { 39 | "psr-4": { 40 | "App\\": "app/src" 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "the-php-foundation", 3 | "version": "1.0.0", 4 | "description": "Asset toolchain for thephp.foundation website", 5 | "main": "tailwind.config.js", 6 | "devDependencies": { 7 | "@mermaid-js/mermaid-cli": "^11.4.2", 8 | "autoprefixer": "^10.4.21", 9 | "postcss": "^8.5.3", 10 | "postcss-import": "^16.1.0", 11 | "tailwindcss": "^3.4.17" 12 | }, 13 | "scripts": { 14 | "test": "echo \"Error: no test specified\" && exit 1", 15 | "start": "tailwindcss -i ./assets/css/app.css -o ./source/assets/css/app.css --watch", 16 | "build": "tailwindcss -i ./assets/css/app.css -o ./source/assets/css/app.css --minify" 17 | }, 18 | "repository": { 19 | "type": "git", 20 | "url": "git+ssh://git@github.com/thephpf/thephp.foundation.git" 21 | }, 22 | "author": "", 23 | "license": "ISC", 24 | "bugs": { 25 | "url": "https://github.com/thephpf/thephp.foundation/issues" 26 | }, 27 | "homepage": "https://github.com/thephpf/thephp.foundation" 28 | } 29 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | // postcss.config.js 2 | module.exports = { 3 | plugins: { 4 | tailwindcss: {}, 5 | autoprefixer: {}, 6 | cssnano: {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /source/404.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | permalink: none 4 | title: Four o four 5 | --- 6 | 7 |
8 |
9 |
404
10 |

Page not found

11 |
Sorry, we couldn't find the page you're looking for.
12 |
13 | Go 15 | back home 16 |
17 |
18 |
19 | -------------------------------------------------------------------------------- /source/_layouts/minimal.html: -------------------------------------------------------------------------------- 1 | {% extends "default.html" %} 2 | 3 | {%block content_wrapper %} 4 |
5 |
6 |

{{ page.title }}

7 |
8 | {% block content %}{% endblock %} 9 |
10 | {% endblock %} 11 | -------------------------------------------------------------------------------- /source/_layouts/newsletter.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | Subscribe to The PHP Foundation newsletter 6 |
7 |
10 |
11 | 12 | 15 | 19 |
20 |
21 | No spam. We only send 1–2 emails per month. 22 |
23 |
24 |
25 |
26 |
27 | -------------------------------------------------------------------------------- /source/_layouts/presentations-item.html: -------------------------------------------------------------------------------- 1 |
3 |
4 | 9 |
10 |
11 |
12 |
{{ date }}
13 |
{{ place }}
14 |
{{ conference}}
15 |
16 |
17 |

18 | {{ title }} 19 |

20 |
21 | {{ description }} 22 |
23 |
24 |
25 | {% for user in team %} 26 |
27 | {{ user.name }} 29 |
30 | {{ user.name }} 32 |
{{ user.job }}
33 |
34 |
35 | {% endfor %} 36 |
37 |
38 |
39 | -------------------------------------------------------------------------------- /source/_layouts/quote.html: -------------------------------------------------------------------------------- 1 |
2 | 5 |
6 |

“{{ quote | striptags | raw | nl2br }}”

7 |
8 |
9 | profile picture 10 |
11 | {{ name }}, 12 | {{ title | raw }} 13 |
14 |
15 |
16 | -------------------------------------------------------------------------------- /source/_layouts/redirect.html: -------------------------------------------------------------------------------- 1 | 2 | {% apply spaceless %} 3 | 4 | 5 | 6 | 7 | 8 | 9 | {% endapply %} 10 | -------------------------------------------------------------------------------- /source/_layouts/structure-item.html: -------------------------------------------------------------------------------- 1 |
2 | {{ name }} 5 |
6 |
{{ name }}
7 | {% if company %} 8 |
{{ company }}
9 | {% endif %} 10 |
{{ job }}
11 | 52 |
53 |
54 | -------------------------------------------------------------------------------- /source/_pages/branding.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Branding 3 | permalink: branding 4 | layout: minimal 5 | --- 6 |

The PHP Foundation Logo

7 | 8 | Logo 9 |
Download logo: 10 | SVG 12 | | 13 | PNG 15 |
16 |

Colors

17 |
18 |
19 |
20 |
22 |
#6758F5
23 |
24 | 25 |
26 |
28 |
#FFFFFF
29 |
30 | 31 |
32 |
34 |
#FE4D7F
35 |
36 | 37 |
38 |
40 |
#F5AB00
41 |
42 | 43 |
44 |
46 |
#2A2C24
47 |
48 |
49 |
50 | -------------------------------------------------------------------------------- /source/_pages/code-of-conduct.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Code of Conduct 3 | description: The PHP Foundation Code of Conduct 4 | permalink: code-of-conduct 5 | layout: page 6 | --- 7 | 8 | ### Our Pledge 9 | 10 | We as members, contributors, and leaders pledge to make participation in our 11 | community a harassment-free experience for everyone, regardless of age, body 12 | size, visible or invisible disability, ethnicity, sex characteristics, gender 13 | identity and expression, level of experience, education, socio-economic status, 14 | nationality, personal appearance, race, caste, color, religion, or sexual 15 | identity and orientation. 16 | 17 | We pledge to act and interact in ways that contribute to an open, welcoming, 18 | diverse, inclusive, and healthy community. 19 | 20 | ### Our Standards 21 | 22 | Examples of behavior that contributes to creating a positive environment 23 | include: 24 | 25 | - Demonstrating empathy and kindness toward other people 26 | - Being respectful of differing opinions, viewpoints, and experiences 27 | - Giving and gracefully accepting constructive feedback 28 | - Accepting responsibility and apologizing to those affected by our mistakes, 29 | and learning from the experience 30 | - Focusing on what is best not just for us as individuals, but for the overall 31 | community 32 | 33 | Examples of unacceptable behavior include: 34 | 35 | - The use of sexualized language or imagery, and sexual attention or advances of 36 | any kind 37 | - Trolling, insulting or derogatory comments, and personal or political attacks 38 | - Public or private harassment 39 | - Publishing others’ private information, such as a physical or email address, 40 | without their explicit permission 41 | - Other conduct which could reasonably be considered inappropriate in a 42 | professional setting 43 | 44 | ### Our Responsibilities 45 | 46 | CoC Active Response Ensurers (CARE) team members 47 | are responsible for clarifying and enforcing our standards of acceptable 48 | behavior **within the scope of PHP Foundation activities and spaces**. 49 | They are not responsible for adjudicating disputes or behaviors occurring in external communities or organizations, unless those actions directly affect the Foundation’s activities or its community spaces. 50 | 51 | CARE team members have the right and responsibility to remove, edit, or reject 52 | comments, commits, code, wiki edits, issues, and other contributions that are 53 | not aligned to this Code of Conduct, and will communicate reasons for moderation 54 | decisions when appropriate. 55 | 56 | ### Scope 57 | 58 | This Code of Conduct applies within all PHP Foundation-managed spaces (e.g., events, repositories, communication channels) and to all individuals officially representing the Foundation in those contexts. 59 | 60 | It does not extend to actions or disputes occurring solely within third-party communities or companies unless those actions directly and substantially affect Foundation operations or participants in our spaces. 61 | 62 | ### Sponsorship and Membership 63 | 64 | Sponsorship of the PHP Foundation is a financial contribution that supports our mission. Sponsorship does not imply governance rights, or endorsement of the sponsor’s actions, products, or policies. 65 | 66 | Members of the Foundation (e.g., Staff, Board and Advisory Board participants) are expected to uphold the Code of Conduct in all Foundation-related contexts. However, the Foundation does not assume responsibility for the actions of these individuals or their companies outside the scope of Foundation activities, unless those actions materially impact the Foundation’s work or violate this Code in our official spaces. 67 | 68 | ### Neutrality 69 | 70 | The PHP Foundation maintains a position of neutrality in disputes between companies, communities, and individuals within the broader PHP ecosystem. We focus on supporting PHP’s development and growth. The Foundation will not intervene in external disputes unless directly required to protect its contributors, events, or resources. 71 | 72 | ### Enforcement 73 | 74 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 75 | reported by contacting the CARE team members. All complaints will be reviewed 76 | and investigated promptly and fairly. 77 | 78 | CARE team members are obligated to respect the privacy and security of the 79 | reporter of any incident. 80 | 81 | ### Enforcement Guidelines 82 | 83 | The CARE team members will follow these Community Impact Guidelines in 84 | determining the consequences for any action they deem in violation of this Code 85 | of Conduct: 86 | 87 | #### 1. Correction 88 | 89 | **Community Impact:** Use of inappropriate language or other behavior deemed 90 | unprofessional or unwelcome in the community. 91 | 92 | **Consequence:** A private, written warning from a CARE team member, 93 | providing clarity around the nature of the violation and an 94 | explanation of why the behavior was inappropriate. A public apology 95 | may be requested. 96 | 97 | #### 2. Warning 98 | 99 | **Community Impact:** A violation through a single incident or series of actions. 100 | 101 | **Consequence:** A warning with consequences for continued behavior. No interaction 102 | with the people involved, including unsolicited interaction with those enforcing 103 | the Code of Conduct, for a specified period of time. This includes avoiding 104 | interactions in community spaces as well as external channels like social media. 105 | Violating these terms may lead to a temporary or permanent ban. 106 | 107 | #### 3. Temporary Ban 108 | 109 | **Community Impact:** A serious violation of community standards, including 110 | sustained inappropriate behavior. 111 | 112 | **Consequence:** A temporary ban from any sort of interaction or public 113 | communication with the community for a specified period of time. No public or 114 | private interaction with the people involved, including unsolicited interaction 115 | with those enforcing the Code of Conduct, is allowed during this period. 116 | Violating these terms may lead to a permanent ban. 117 | 118 | #### 4. Permanent Ban 119 | 120 | **Community Impact:** Demonstrating a pattern of violation of community standards, 121 | including sustained inappropriate behavior, harassment of an individual, or 122 | aggression toward or disparagement of classes of individuals. 123 | 124 | **Consequence:** A permanent ban from any sort of public interaction within the 125 | community. 126 | 127 | ### Attribution 128 | 129 | This Code of Conduct is adapted from the Contributor Covenant, version 2.1, 130 | available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html 131 | 132 | Community Impact Guidelines were inspired by Mozilla’s code of conduct enforcement ladder. 133 | 134 | ### Related Documents 135 | 136 | - [Contributor Covenant](https://www.contributor-covenant.org) 137 | - [Mozilla’s code of conduct enforcement ladder](https://github.com/mozilla/diversity) 138 | 139 | -------------------------------------------------------------------------------- /source/_pages/contact.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Contact The PHP Foundation 3 | permalink: contact 4 | layout: page 5 | --- 6 | 7 | Please email our team with general inquiries at [contact@thephp.foundation](mailto:contact@thephp.foundation). 8 | 9 | We will get back to you as soon as possible. 10 | 11 | Follow us on social media: 12 | 13 | - [Twitter](https://twitter.com/thephpf) 14 | - [LinkedIn](https://www.linkedin.com/company/phpfoundation/) 15 | - [Mastodon](https://phpc.social/@thephpf) 16 | 17 | {% include "newsletter.html" %} 18 | -------------------------------------------------------------------------------- /source/_pages/foundation.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: What we do 3 | permalink: foundation 4 | layout: page 5 | --- 6 | 7 | ## Governance 8 | 9 | The current group collective administration focuses on maintaining the continuity of the PHP project, 10 | in particular on hiring, supporting, and guiding PHP project developers. 11 | The Administration also encourages other Financial Contributors and explores strategic partnerships and needs for the PHP project. 12 | 13 | The Administration consists of veteran PHP core developers, PHP community leaders, 14 | representatives of the founding companies, and other key stakeholders. 15 | In 2022, this is an invitation-only group, while we’re working to get our processes solidified. 16 | 17 | To promote transparency, we operate as a [collective on the Open Collective platform](https://opencollective.com/phpfoundation), 18 | through which we ensure certain activities, such as selection and financing of PHP core developers contributing 19 | to the development of the PHP language. The decisions about these activities are taken by 20 | consensus by the administration members, which meet regularly, and are executed by the 21 | collective administrators. 22 | 23 | All administration members of the PHP Foundation as well as contributors and PHP developers are 24 | expected to abide by the [Code of Conduct](/code-of-conduct) and follow our collective expectations 25 | guidelines and [Terms of Service](https://opencollective.com/tos) of the platform operated by Open Collective Inc. 26 | 27 | ## Foundation Activities 28 | 29 | The primary task of the PHP Foundation is to fund developers to work on PHP. Funds collected 30 | through the Open Collective platform may be used in the first place to engage the services of 31 | PHP developers to further advance the development and maintenance of the language. 32 | 33 | The current Request for Comments (RFC) is not affiliated to the PHP Foundation, and the language 34 | decisions are the matter of the PHP Internals community. 35 | 36 | ## Team Timeline 37 | 38 | We established the following timeline for team review. 39 | 40 | * January 2024: Developers start work according to the new contracts. 41 | * May 2024: Evaluate new developers, contracts are extended, expanded, or terminated after the first 6 months. 42 | * September 2024: Open applications for new developers, evaluate performance of the current group of developers. 43 | * October 2024: Evaluate applications, work out updates to compensation, decide on a budget. 44 | * November 2024: Renew contracts with existing developers, potentially sign contracts with new developers. 45 | 46 | And in 2025 we start the cycle again. 47 | -------------------------------------------------------------------------------- /source/_pages/get-involved.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Get Involved 3 | permalink: get-involved 4 | layout: page 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /source/_pages/privacy-policy.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Privacy Policy 3 | permalink: privacy-policy 4 | layout: page 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /source/_pages/sponsor.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Sponsor The PHP Foundation 3 | permalink: sponsor 4 | layout: page-wide 5 | redirect: 6 | - join 7 | - donate 8 | --- 9 | 10 | _Shape the future of the language ecosystem and help make PHP sustainable._ 11 | 12 | There are many ways you can support the development of the PHP language through The PHP Foundation: 13 | 14 | * [Credit Card](https://opencollective.com/phpfoundation/contribute) 15 | * [PayPal](https://opencollective.com/phpfoundation/contribute) 16 | * [Bank Transfer (ACH direct debit or wire transfer)](https://opencollective.com/phpfoundation/contribute) 17 | * [GitHub Sponsors](https://github.com/sponsors/ThePHPF) 18 | 19 | All financial contributions that we receive and our expenses are [public and fully transparent](https://opencollective.com/phpfoundation#category-BUDGET). 20 | 21 | ## Become a Company Member of The PHP Foundation 22 | 23 | Are you looking to sponsor The PHP Foundation as a company? Become a member and earn additional benefits at the Silver, Gold, or Platinum levels. 24 | 25 | Contact [contact@thephp.foundation](mailto:contact@thephp.foundation) to discuss your membership. 26 | Or [sponsor directly](https://opencollective.com/phpfoundation) to become a member. 27 | 28 | {% include "sponsorship-tiers.html" %} 29 | 30 | ## Yearly and Monthly Sponsorships for The PHP Foundation 31 | 32 | You can achieve Silver, Gold, or Platinum status by making financial contributions throughout the year. Contributions can be made annually, quarterly, or monthly. 33 | 34 | - Once your contributions exceed a certain sponsorship level threshold, either through a one-time donation or cumulative monthly contributions, you immediately become a sponsor at that level. 35 | 36 | - Sponsors are removed from the list at the end of each calendar year if their total contributions for that year do not meet the threshold for their level. 37 | 38 | For example, if you contribute $1,500 monthly in 2024, your total contribution by September will be $12,000, qualifying you as a Silver member for the rest of 2024 and all of 2025. 39 | 40 |
41 |
42 |

Want to learn more?

43 | 44 | See our presentation with the latest information
45 | and insights about The PHP Foundation. 46 | 47 |
48 | Sponsorship Deck 49 |
50 |
51 |
52 | 53 |
54 |
55 | 56 | ## Official Info & Docs 57 | 58 | The PHP Foundation operates under the umbrella of [OpenSourceCollective](https://www.oscollective.org/), and we rely on [OpenCollective](https://opencollective.com/phpfoundation) to receive and distribute funds. 59 | 60 | Banking, taxes, legals: 61 | [https://docs.oscollective.org/about/official-info-and-docs](https://docs.oscollective.org/about/official-info-and-docs) 62 | 63 | * [Tax ID & W9](https://docs.oscollective.org/about/official-info-and-docs#tax-id-and-w9) 64 | * [Address & Contact Info](https://docs.oscollective.org/about/official-info-and-docs#address-and-contact-info) 65 | 66 | If you're experiencing any difficulties, require additional information, or would like to support the foundation in any other way, please don't hesitate to contact us at: [contact@thephp.foundation](mailto:contact@thephp.foundation). 67 | 68 | -------------------------------------------------------------------------------- /source/_partials/sponsors.html: -------------------------------------------------------------------------------- 1 | {% set sponsors = fetch_sponsors() %} 2 | {% if sponsors['Platinum']|length > 0 %} 3 |

Platinum Sponsors

4 |
5 | {% for sponsor in sponsors['Platinum'] %} 6 |
7 | 9 |
10 | {{ sponsor.name }} 12 |
13 |
16 | 17 |
18 | {% endfor %} 19 |
20 | {% endif %} 21 | 22 | {% if sponsors['Gold']|length > 0 %} 23 |

Gold Sponsors

24 |
25 | {% for sponsor in sponsors['Gold'] %} 26 |
27 | 29 |
30 | {{ sponsor.name }} 32 |
33 |
36 | 37 |
38 | {% endfor %} 39 |
40 | {% endif %} 41 | 42 | {% if sponsors['Silver']|length > 0 %} 43 |

Silver Sponsors

44 |
45 | {% for sponsor in sponsors['Silver'] | filter(sponsor => sponsor.name) %} 46 |
47 | 49 |
50 | {{ sponsor.name }} 52 |
53 |
56 | 57 |
58 | {% endfor %} 59 |
60 | {% endif %} 61 | 62 |

Past Sponsors

63 |
64 | {{ sponsors['Past'] | map((sponsor) => 65 | "#{sponsor.name}") 66 | | join(', ') | raw }}. 67 |
68 | -------------------------------------------------------------------------------- /source/_posts/2022-01-21-the-php-foundation-update-january-2022.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The PHP Foundation Update, January 2022 3 | description: Monthly updates to the PHP Foundation, January 2022 4 | layout: post 5 | tags: 6 | - update 7 | author: 8 | name: Roman Pronskiy 9 | url: https://twitter.com/pronskiy 10 | published_at: 21 January 2022 11 | --- 12 | ``` We've created an official LinkedIn page: [linkedin.com/company/phpfoundation](https://www.linkedin.com/company/phpfoundation/). 16 | > Subscribe to it and follow us on Twitter [@ThePHPF](https://twitter.com/thePHPF). 17 | 18 | ## PHP Core Roundup 19 | 20 | Here's a summary of what the foundation's developers have been working on lately: 21 | 22 | * [Arnaud Le Blanc](https://github.com/arnaud-lb) revised the RFC and implementation of multi-statement short closures. The proposal is now on vote. Arnaud has also finished the improvements to ini quantity parsing. 23 | 24 | * [Derick Rethans](https://github.com/derickr) continues to fix bugs in DateTime to make working with dates in PHP as reliable as possible. 25 | 26 | * [Gina P. Banyard](https://github.com/Girgias) has made several improvements to the type system: true, null, and false standalaone types have been added, and Disjunctive Normal Form Types put on vote. Gina also made a few fixes in SPL. 27 | 28 | * [Ilija Tovilo](https://github.com/iluuu1994) implemented multiple improvements for enums and put a couple on vote. He also made many fixes, like for instance fixed line numbers in backtrace of multi-line (fluent) function calls. 29 | 30 | * [Jakub Zelenka](https://github.com/bukka) made various fixes and improvements to PHP-FPM and OpenSSL extension. 31 | 32 | * [Máté Kocsis](https://github.com/kocsismate) makes improvements to stubs and other fixes. 33 | 34 | All developers devote significant time to maintenance, including fixing bugs, reducing technical debt, and making life easier for everyone working on PHP. 35 | 36 | In the **[PHP Roundup #3](https://thephp.foundation/blog/2022/06/30/php-core-roundup-3/)** post by Ayesh, you can find a detailed log of what's been done and discussed regarding the PHP engine during the past month. 37 | 38 | This time the list of changes is very long! Applause to all the PHP contributors and release managers. 39 | 40 | Tweet at us: [@ThePHPF](https://twitter.com/thephpf), [@Ayeshlive](https://twitter.com/Ayeshlive), [@pronskiy](https://twitter.com/pronskiy). 41 | 42 | ## Thank you to our sponsors 43 | 44 | This month we are glad to welcome a new major sponsor who joined the PHP Foundation’s sponsors herd: **[Mollie](https://www.mollie.com/en)**. Thank you, folks! 45 | 46 | By the way, we have updated the **[Sponsors section](https://thephp.foundation/#sponsors)** on our [website](https://thephp.foundation/). It now shows all major contributors sorted by the amount of donation. Kudos to [Sergei Panteleev](https://twitter.com/s_panteleev) for this tweak. 47 | 48 | Shout-out to everyone for your continued support – the PHP Foundation is all of us! 49 | 50 | ## Other ways to contribute 51 | 52 | We are receiving many offers of help from every corner of the community. We are grateful for the offers. There are essentially two kinds of offers being made: 53 | 54 | 1. An offer of development time 55 | 2. An offer of expertise 56 | 57 | ### How to contribute development time? 58 | 59 | The Foundation has limited resources to manage the developers we contract to work on PHP. For this reason, it is not sensible to assume the management of external developers. 60 | 61 | Any external developer who is compensated for their time spent on PHP is, of course, welcome to make use of our public communication channels: 62 | 63 | 1. Email as: [contact@thephp.foundation](mailto:contact@thephp.foundation) 64 | 2. Communicate via issues on GitHub repos: [github.com/php/php-src](https://github.com/php/php-src), [github.com/php/web-php](https://github.com/php/web-php), etc. 65 | 66 | ### How to contribute expertise? 67 | 68 | As the foundation begins to mature, a couple of currently unfulfilled roles have emerged. 69 | 70 | We will soon communicate the details of these roles. 71 | 72 | We intend to compile a list of all expertise on offer; If you haven't done so already, please tell what expertise you would like to make available using public communication channels. 73 | 74 | --- 75 |
76 | 77 | That’s all for today. Follow us on Twitter [@ThePHPF](https://twitter.com/thephpf) to get the latest updates from the Foundation. 78 | 79 | 💜🐘 80 | -------------------------------------------------------------------------------- /source/_posts/2022-08-04-php-foundation-update-july-2022.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: PHP Foundation Update, July 2022 3 | layout: post 4 | tags: 5 | - update 6 | author: 7 | name: Roman Pronskiy 8 | url: https://twitter.com/pronskiy 9 | published_at: 4 August 2022 10 | --- 11 | ```

I look forward to talk about @ThePHPF at @afup #ForumPHP together with @pronskiy!

We’re eager to answer your questions and look forward to hearing your suggestions! pic.twitter.com/2x8id0mDZ5

— Sebastian Bergmann (@s_bergmann) July 5, 2022 25 | 26 |
27 | 28 | **Gina P. Banyard**, one of the PHP Foundation’s developers, will talk about PHP’s type system internals. 29 | 30 |

Nous sommes ravis d'accueillir pour la première fois @Girgias, jeune et talentueux core-contributeur à PHP, pour un talk sur les rouages du typage lors du Forum PHP 2022.
🎤 "Typage en PHP comment ça fonctionne ?" - Forum PHP 2022 - 13&14/10, Disneyland Paris pic.twitter.com/dB0pWflmKB

— AFUP (@afup) July 11, 2022
31 | 32 |
33 | 34 | **[SymfonyCon, Paris – November 17-18](https://live.symfony.com/2022-paris-con/)** 35 | 36 | At this conference, you’ll be able to catch up with Sebastian Bergmann, Roman Pronskiy, and Nicolas Grekas. 37 | 38 | **[International PHP Conference, Munich – October 23-24](https://phpconference.com/)** 39 | 40 | Sebastian Bergmann and Derick Rethans will each talk at the IPC this year. 41 | 42 | _Where else would you like to see us?_ 43 | 44 | 45 | ### **Swag!** 46 | 47 | By the way, we’d like to have stickers and other swag for conference attendees. If you would like to help with the design or sponsor the production, please reach out to [contact@thephp.foundation](mailto:contact@thephp.foundation). 48 | 49 | 50 | ## Website updates 51 | 52 | Thanks to Sergey Panteleev, one of the PHP 8.2 release managers, we have a few nice additions to our website. 53 | 54 | 55 | 56 | * A new **[structure page](https://thephp.foundation/structure/)** where you can see all the people currently actively involved in the PHP Foundation activities. 57 | * Every post has a nicely generated preview image — please, share the links to the PHP Foundation to help spread the word. 58 | 59 | The [website is open-source](https://github.com/ThePHPF/thephp.foundation) and built with [Sculpin](https://github.com/sculpin/sculpin) and [Tailwind CSS](https://tailwindcss.com/). So if you stumbled upon a bug, please do not hesitate to report or submit a PR. 60 | 61 | 62 | ## PHP Core Roundup 63 | 64 | In July, we marked the feature-freeze for PHP 8.2, and this next version of PHP is being shaped by PHP Foundation members and all the contributors to be an exciting release! 65 | 66 | Catch up to this month's PHP Core changes on the **[PHP Core Roundup #4](https://thephp.foundation/blog/2022/07/28/php-core-roundup-4/)** post by Ayesh, where you can find a detailed log of what's been done and discussed regarding the PHP engine. 67 | 68 | **What if our proposal did not make it?** 69 | 70 | Among many fixes and improvements, some suggestions did not pass the RFC voting barrier. For instance, that happened to the [Short Closures 2.0](https://wiki.php.net/rfc/auto-capture-closure) proposal. 71 | 72 | We consider this a good experience in any case, and developers might reconsider, improve, and suggest it in the next release cycle, i.e., PHP 8.3. 73 | 74 | We also consider it to be a good thing that it's difficult to change the language, as these changes are forever. 75 | 76 | **What about deprecations?** 77 | 78 | PHP has a long 25-year history, and no wonder it has some old quirks. One of them relates to DateTime and DateTimeImmutable confusion. 79 | 80 | Derrick Rethans, a core developer of the PHP Foundation, asks for an opinion about in which way this confusion should be resolved; if it should: 81 | 82 |

Making PHP's DateTime class mutable was one of the bigger mistakes of the Date/Time APIs. I'm considering to change DateTime to be immutable by default in PHP 9, and to drop DateTimeImmutable altogether (or make it an alias). This is likely going to break some code. Opinions?

— Derick Rethans (@derickr) July 25, 2022
83 | 84 | Let Derick know what you think. 85 | 86 | > You can find more insights on PHP core development process in **[PHP Roundup Series](https://thephp.foundation/blog/tag/roundup/)**. 87 | > 88 | > Tweet at us: [@ThePHPF](https://twitter.com/thephpf), [@Ayeshlive](https://twitter.com/Ayeshlive), [@pronskiy](https://twitter.com/pronskiy). 89 | 90 |
91 | 92 | ## Thank you to our sponsors 93 | 94 | This month we are glad to welcome a new major sponsor who joined the PHP Foundation’s sponsors herd: 95 | 96 | **[Cybozu, Inc](https://opencollective.com/cybozu)** 97 | 98 | Thank you for supporting PHP! 99 | 100 | Shout-out to [everyone](https://thephp.foundation/#sponsors) for your continued support – the PHP Foundation is all of us! 101 | 102 | --- 103 |
104 | 105 | That’s all for today. Follow us on Twitter [@ThePHPF](https://twitter.com/thephpf) to get the latest updates from the Foundation. 106 | 107 | 💜🐘 108 | 109 | 110 | -------------------------------------------------------------------------------- /source/_posts/2023-09-06-application-form-2023.md: -------------------------------------------------------------------------------- 1 | 2 | --- 3 | title: 'We Are Looking for Developers to Join the PHP Foundation' 4 | layout: post 5 | tags: 6 | - team 7 | author: 8 | - name: Roman Pronskiy 9 | url: https://twitter.com/pronskiy 10 | 11 | - name: Nils Adermann 12 | url: https://twitter.com/naderman 13 | published_at: 06 September 2023 14 | 15 | --- 16 | 17 | Working on an open-source project which is used by millions of developers and which is trusted by hundreds of thousands of businesses around the world. Getting paid for this work and not having a burnout. Sounds like a dream, doesn't it? But this is exactly the opportunity that the PHP Foundation provides to those who would like to develop and maintain the PHP language. 18 | 19 | The PHP Foundation is a non-profit organization, started in 2021 by Acquia, Automattic, Craft CMS, JetBrains, Laravel, PrestaShop, Private Packagist, Symfony, Tideways, and Zend by Perforce with a mission to support, advance, and develop the PHP language. 20 | 21 | Since April 2022, the foundation pays [six developers](https://thephp.foundation/structure/#core_developers) to work on the language. See what the foundation accomplished in 2022 in the [Impact and transparency report](https://thephp.foundation/blog/2022/11/22/transparency-and-impact-report-2022/). 22 | 23 | 24 | ## We are opening applications for new positions at the PHP Foundation 25 | 26 | The PHP Foundation is almost two years old, and we are gradually introducing structure into our activities and organizing processes. We’re opening a new round of applications for developer positions. We plan to open applications every September from now on, so if you are unable to apply now, you will have another chance next year. We intend to decide on who we will hire by the end of October. If selected, you would start your work January 1st, 2024. 27 | 28 | The application form will be **open until September 30, 2023**. 29 | 30 |

31 | Apply 32 |

33 | 34 |
35 | Note: This is not a job for PHP developers or aspiring PHP developers.
36 | The development of PHP is done in the С programming language, and requires proficiency in system programming. 37 |
38 | 39 | ## What are the requirements? 40 | 41 | As before, we require previous experience in PHP core development. Ideally you should have all, but at least some of the following: 42 | 43 | * Pull-requests / commits to [php/php-src](https://github.com/php/php-src/) 44 | * Experience in writing PHP extensions 45 | * Participation in PHP mailing lists 46 | * Contributions to other open-source projects 47 | 48 | This time, however, we have a clearer idea of the tasks that can be engaged in and so the pool of considered candidates will be wider. 49 | 50 | 51 | ## What am I going to work on? 52 | 53 | Strategic areas we’d like you to work on: 54 | 55 | * Security 56 | * Performance 57 | * Infrastructure 58 | * Web APIs (json, PDO, streams, etc.) 59 | * Documentation 60 | 61 | This is not an exhaustive list, and if you would like to do something else, make sure to mention it in the form. The main criteria is a pragmatic approach. In this sense, we adhere to the position that Rasmus Lerdorf, the author of PHP, voiced back in 2014: 62 | 63 | ```Text 64 | And rather than piling on language features with the main justification 65 | being that other languages have them, I would love to see more focus on 66 | practical solutions to real problems. The password_hash() addition in 67 | 5.5 is a good example of addressing a real Web problem. 68 | … 69 | I know these are much harder and less sexy than adding a couple 70 | of tokens to the yacc grammar, but when we start looking at a new major 71 | release this is what I hear from people who are running PHP in 72 | production environments are looking for. Language features are nice, if 73 | they are well thought out, but significant infrastructure improvements 74 | are nicer. 75 | ``` 76 | *[https://news-web.php.net/php.internals/71525](https://news-web.php.net/php.internals/71525)* 77 | 78 | 79 | ## What does working for the PHP foundation look like? 80 | 81 | Working for the PHP Foundation offers a lot of freedom, but it also requires discipline. Your work will roughly consist of the following: 82 | 83 | * 40% Triaging issues and fixing bugs 84 | * 30% Working on strategic areas 85 | * 20% Code reviews 86 | * 10% Preparing RFCs and developing new language features 87 | 88 | As you can see, developing new RFCs is a fairly small part of the job. Most of the work is a typical maintenance of an open source project. 89 | 90 | We are a fully distributed team. You can work from any place* and at any time. All communication is asynchronous via GitHub, Slack, and Email. We meet for synchronous calls 1-2 times a month. 91 | 92 | ***\*** We do not consider applications from persons residing in sanctioned territories.* 93 | 94 | Your work should be in line with the foundation’s mission statement, and we expect you to follow [the code of conduct](https://thephp.foundation/code-of-conduct/). 95 | 96 | > **PHP Foundation Mission Statement** 97 | > 98 | > The PHP Foundation is a collective of people and organizations relying on the PHP language. Its mission is to ensure the long-term prosperity of the PHP language. The PHP Foundation focuses on providing financial support and guidance to PHP language developers to support its goals of improving the language for its users, providing high-quality maintenance, and improving the PHP language project to retain current contributors and to integrate new contributors. The PHP Foundation aims to promote the public image of the PHP language in the interest of retaining existing and gaining new users and contributors. 99 | 100 | ## How to apply? 101 | 102 | Submit your application now and we will get back to you shortly. If you have any questions or suggestions, reach out to contact@thephp.foundation. 103 | 104 |

105 | Open submission form 106 |

107 | 108 | 109 | -------------------------------------------------------------------------------- /source/_posts/2023-11-23-php-83.md: -------------------------------------------------------------------------------- 1 | 2 | --- 3 | title: 'PHP 8.3 Released!' 4 | layout: post 5 | author: 6 | - name: Ayesh Karunaratne 7 | url: https://aye.sh 8 | 9 | - name: Sergey Panteleev 10 | url: https://sergeypanteleev.com 11 | published_at: 23 November 2023 12 | 13 | --- 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | [PHP 8.3](https://www.php.net/releases/8.3) is here! Bringing a handful of new features, performance and functionality improvements, and a healthy amount of deprecations, PHP 8.3 was released today. 24 | 25 | PHP 8.3 will continue to receive active support for two years, followed by one year of security updates. Similar to the PHP 8.2 upgrade, the PHP 8.3 upgrade will be smooth as backward compatiblity is maintained. While some functionality is deprecated, there are no syntax, API*, and remove functionality in this release. 26 | 27 | ## What's in PHP 8.3 28 | 29 | Some of the major new features in PHP 8.3 include support for declaring a type for class constants, improvements to support deep-cloning of `readonly` properties, improvements to the new Random extension introduced in PHP 8.2, new [`json_validate()`](https://www.php.net/manual/en/function.json-validate.php),[`str_increment()`](https://www.php.net/manual/en/function.str-increment.php), and [`str_decrement()`](https://www.php.net/manual/en/function.str-decrement.php), functions, and a noticeable amount of improvements in DateTime, DOM, and Intl extensions. 30 | 31 | See the [PHP 8.3 release page](https://www.php.net/releases/8.3) for what's new and changed in PHP 8.3. 32 | 33 | > (*) Note that some of the PHP core extensions now declare types for built-in class constants. This is technically a BC break in case child classes declare the same constants without type declaration, which is only supported in PHP 8.3. 34 | 35 | ## Upgrade to PHP 8.3 36 | 37 | PHP packages on software repositories such as Debian and Ubuntu repos maintained by [Ondřej Surý](https://launchpad.net/~ondrej), [Remi Collet](https://github.com/remicollet) for Fedora/RHEL/EL already contain PHP 8.3 builds ready to install. 38 | 39 | Windows builds for PHP 8.3 are available on [windows.php.net](https://windows.php.net/download/) 40 | 41 | [Docker images](https://hub.docker.com/_/php) with PHP 8.3 will also be available on Docker hub in the coming days. 42 | 43 | ## PHP 8.3 Release in Numbers 44 | 45 | The PHP 8.3 release contains **over 1200 code commits** from **114 awesome contributors** to the `php-src` repository, and several more contributions to the documentation and its translations. 46 | 47 | Contributions from the **PHP Foundation members** consist of over **280 commits**. 48 | 49 | During the period from the PHP 8.2 release date and today, the **PHP Internals mailing list has received over 2800 emails**. 50 | 51 | PHP RFCs, where major changes to PHP are proposed, discussed, and voted on, PHP 8.3 received **23 RFCs that went to a vote**, and **18 RFCs passed**. This includes a number includes "catch-all" RFCs such as Deprecations for PHP 8.3, where multiple changes were voted at the same time. Out of the 23 RFCs with votes, **13 RFCs** were either proposed or implemented by the **PHP Foundation** members. 52 | 53 | The PHP documentation and php.net web site contributors have also made several impactful contributions to document the new features in PHP 8.3, prepare release pages, and more. 54 | 55 | 56 | ## 💜 Thank you 💜 57 | 58 | On behalf of the PHP Foundation, we take this post to thank everyone from this milestone in PHP. Your contributions to the PHP Foundation, code and documentation contributions, and several other ways of involvement and contributions help shape PHP to continue to be an exciting, feature-rich, and versatile programming language. 59 | 60 | Thank you 💜 61 | 62 | ## PHP 8.4 Outlook 63 | 64 | PHP 8.4, scheduled for the end of 2024 is already taking shape. Even at the moment PHP 8.3 is released, there are three active RFC votes, and some major changes such as JIT-IR, a brand-new HTML 5 parser in the DOM extension based on [Lexbor](https://github.com/lexbor/lexbor), and Bcrypt default cost increasing already been implemented for PHP 8.4 65 | 66 | We look forward to bringing you updates on our [PHP Core Roundup series](https://thephp.foundation/blog/tag/roundup/) and our newsletter: 67 | 68 | {% include "newsletter.html" %} 69 | 70 | --- 71 | 72 | 💜️ 🐘 73 | 74 | > PHP Roundup is prepared by Ayesh Karunaratne from **[PHP.Watch](https://php.watch)**, a source for PHP News, Articles, Upcoming Changes, and more. 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /source/_posts/2023-11-27-php-foundation-update-november-2023.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: PHP Foundation Update, November 2023 3 | layout: post 4 | tags: 5 | - update 6 | author: 7 | name: Roman Pronskiy 8 | url: https://twitter.com/pronskiy 9 | published_at: 27 November 2023 10 | --- 11 | ``` My name is Roman Pronskiy. I’m employed by [JetBrains](https://jetbrains.com/) to manage operations at the PHP Foundation. Reach out to me at pronskiy@thephp.foundation. 16 | > 17 | > You can find the full foundation structure [here](https://thephp.foundation/structure/), including all board members, developers, and the community. 18 | 19 | ## Team Growth 20 | 21 | In September, we initiated an open call for new developers to join the PHP Foundation by launching an [application form](https://thephp.foundation/blog/2023/09/06/application-form-2023/). 22 | 23 | We received a total of 207 applications. From this pool, we selected a shortlist of 12 qualified candidates. Following a comprehensive review and input from existing foundation members, we further refined our selection to 4 outstanding individuals. We will soon announce the new members. 24 | 25 | The primary focus for the new developers will be on the maintenance and modernization of PHP’s infrastructure — a critical step towards ensuring PHP being a robust and forward-looking language. 26 | 27 | The public work undertaken by our developers can be followed in our monthly ["PHP Core Roundup"](https://thephp.foundation/blog/tag/roundup/) series, which highlights the ongoing progress and developments within PHP core. 28 | 29 | 30 | ## Advisory Board 31 | 32 | For our major sponsors, we offer exclusive insights through occasional digests that provide a deeper dive into discussions, debates, and early-stage developments. This not only keeps our sponsors abreast of the latest happenings but also allows them to see the direct impact of their support. This is one of the benefits of being an Advisory Board member. 33 | 34 | We announced the advisory board initiative [in March](https://thephp.foundation/blog/2023/03/31/php-foundation-update-march-2023/#a-new-benefit-for-major-sponsors-%E2%80%93-advisory-board-membership). Since then, 9 companies have joined the initiative with their representatives. 35 | 36 | In addition to the [Governing Board](https://thephp.foundation/structure/) that includes Automattic, JetBrains, Private Packagist, Symfony, Tideways, Zend by Perforce, and PHP fellows, we now welcome the Advisory Board members: Moodle, Shopware, Laravel, Ardennes-étape, Les-Tilleuls.coop / API Platform, Aternos GmbH, PrestaShop, CraftCMS. 37 | 38 | There were several useful discussions within the group. Specifically, we’d like to highlight the one around [Property Hooks RFC](https://wiki.php.net/rfc/property-hooks). The Advisory Board feedback helped to shape the proposal design significantly. 39 | 40 | By the way, you can already try property hooks on [3v4l.org](https://3v4l.org/), thanks to [Sjon Hortensius](https://github.com/sponsors/SjonHortensius). 41 | 42 | 43 | ## Sovereign Tech Fund invests in PHP 44 | 45 | The [Sovereign Tech Fund](https://sovereigntechfund.de/en/) is an organization that supports the development, improvement, and maintenance of open digital infrastructure in the public interest. Its goal to strengthen the open-source ecosystem sustainably, focusing on security, resilience, technological diversity, and the people behind the code. STF is funded by the German Federal Ministry for Economic Affairs and Climate Action (BMWK) and supported by the German Federal Agency for Disruptive Innovation GmbH (SPRIND). 46 | 47 | We have collaborated with STF to create work plans for these specific projects: PECL overhaul, Testing tool for FPM, Security Audit, and Documentation improvements. 48 | 49 | We’ll share more details on each project early next year, and for now we are thrilled and grateful to the Sovereign Tech Fund for trusting us. 50 | 51 | 52 | ## Security audit of PHP is coming 53 | 54 | As mentioned above, STF is investing in PHP, and we are going to commission an audit of PHP's C code base. We expect security issues to be found. To mitigate possible bad perception, we aim to publish and fix the revealed security issues at the same time. 55 | 56 | For this security audit, we are partnering with [The Open Source Technology Improvement Fund, Inc](https://ostif.org/) (OSTIF), a corporate non-profit dedicated to securing critical open-source projects. They have a proven track record of audits for [popular open-source projects](https://github.com/ostif-org/OSTIF/blob/main/Completed-Engagements.md) such as cURL, Git, Linux Kernel, OpenSSL, Node.js, and others. 57 | 58 | 59 | ## Reports schedule 60 | 61 | Although we promised to prepare quarterly reports, that unfortunately did not happen to be feasible. So for 2023, we fall back to one yearly report. The 2023 transparency report will be published in December. 62 | 63 | 64 | ## Meet us at the conferences 65 | 66 | You can meet our team at the following conferences in late 2023: 67 | 68 | **[betterCode(PHP)](https://php.bettercode.eu/) – Nov 27** 69 | 70 | Jakub Zalenka will give a talk: "PHP 8.3: Changes and future plans".
71 | Besides Jakub, there will be talks from Niels Dossche and Sebastian Bergmann. 72 | 73 | **[SymfonyCon Brussels](https://live.symfony.com/2023-brussels-con/) – Dec 7–8** 74 | 75 | You’ll be able to meet and talk to our board members: Nils Adermann, Sebastian Bergmann, Nicolas Grekas, and Roman Pronskiy. 76 | 77 | 78 | ## Thank you to our sponsors 79 | 80 | Check out the [Sponsors section](https://thephp.foundation/#sponsors) on our [website](https://thephp.foundation/). It shows all major contributors sorted by donation amount. 81 | 82 | Big thanks to the **[Sentry](https://sentry.io/)** team for sponsoring the PHP foundation! 83 | 84 | Sentry is a popular application performance monitoring & error tracking tool, and they [just gave $500,000 to multiple open source maintainers](https://blog.sentry.io/we-just-gave-500-000-dollars-to-open-source-maintainers/?utm_source=linkedin&utm_content=blog-fundfest23-learnmore). 85 | 86 | **Shout-out to non-financial sponsors** 87 | 88 | [Digital Ocean](https://www.digitalocean.com/) has been supporting the PHP project for ages – [php.net](https://www.php.net/) servers run on DigitalOcean boxes. We would like to express our gratitude to DigitalOcean for their ongoing support. 89 | 90 | Big thanks to [everyone](https://thephp.foundation/#sponsors) for your continued support – the PHP Foundation is all of us! 91 | 92 | --- 93 | 94 | That’s all for today. Follow us on Twitter [@ThePHPF](https://twitter.com/thephpf) or Mastodon [phpc.social/@thephpf](https://phpc.social/@thephpf) to get the latest updates from the PHP Foundation. 95 | 💜🐘 96 | -------------------------------------------------------------------------------- /source/_posts/2024-01-03-the-php-foundation-team-update-2024.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "The PHP Foundation\nTeam Update 2024" 3 | layout: post 4 | tags: 5 | - update 6 | author: 7 | name: Roman Pronskiy 8 | url: https://twitter.com/pronskiy 9 | published_at: 03 January 2024 10 | --- 11 | 12 | Now in our third year, we're gearing up to grow our impact. This year, four more developers are joining the PHP Foundation to further advance PHP. 13 | 14 | Since April 2022, the PHP Foundation has contracted six outstanding developers: 15 | 16 | * Arnaud Le Blanc [@arnaud-lb](https://github.com/arnaud-lb) 17 | * Derick Rethans [@derickr](https://github.com/derickr) 18 | * Gina Peter Banyard [@Girgias](https://github.com/Girgias) 19 | * Ilija Tovilo [@iluuu1994](https://github.com/iluuu1994) 20 | * Jakub Zelenka [@bukka](https://github.com/bukka) 21 | * Máté Kocsis [@kocsismate](https://github.com/kocsismate) 22 | 23 | All of them started as part-time contributors, and since then have significantly grown their capacity and dedication to PHP core tasks. We consider it a big achievement that the team continues to collaborate effectively, accumulating more experience and knowledge, and expanding their PHP Core involvement. 24 | 25 | ## Team Update 2024 26 | 27 | We are happy to announce a team expansion. Four talented developers are joining as part-time team members of the foundation. 28 | 29 | * David Carlier [@devnexen](https://github.com/devnexen) 30 | * James Titcumb [@asgrim](https://github.com/asgrim) 31 | * Saki Takamachi [@SakiTakamachi](https://github.com/SakiTakamachi) 32 | * Shivam Mathur [@shivammathur](https://github.com/shivammathur) 33 | 34 | Please give them a warm welcome! We are looking forward to the great things we will accomplish together. 35 | 36 | Happy New Year! 🎉🐘💜 37 | -------------------------------------------------------------------------------- /source/_posts/2024-04-02-open-source-community-cra-compliance-initiative.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Joining Forces for Open Source Cybersecurity Standards' 3 | layout: post 4 | tags: 5 | - news 6 | author: 7 | name: Roman Pronskiy 8 | url: https://twitter.com/pronskiy 9 | published_at: 02 April 2024 10 | --- 11 | 12 | The PHP Foundation, alongside leading open source organizations including the [Apache Software Foundation](https://www.apache.org/), [Blender Foundation](https://www.blender.org/about/foundation/), [OpenSSL Software Foundation](https://www.openssl.org/), [Python Software Foundation](https://www.python.org/psf-landing/), [Rust Foundation](https://foundation.rust-lang.org/), and [Eclipse Foundation](https://www.eclipse.org/), is excited to announce a collaborative initiative aimed at establishing common cybersecurity standards in alignment with the European Union’s [Cyber Resilience Act (CRA)](https://digital-strategy.ec.europa.eu/en/library/cyber-resilience-act). 13 | 14 | This initiative, hosted by the Eclipse Foundation, will focus on creating specifications for secure software development rooted in open source best practices. 15 | 16 | > We hope that our specifications could inform the formal standardisation processes of at least one of the European Standards Organisations. Given the tight time horizon for implementation of the CRA, we believe that this immediate start will provide a constructive environment to host the technical discussions necessary for the stewards, contributors, and adopters of open source to meet the requirements set forth in these new regulations. 17 | 18 | At The PHP Foundation, we are committed to supporting the open source community, ensuring that the PHP language and its ecosystem are prepared for the upcoming regulatory changes. 19 | 20 | For more information, see the [full announcement on the Eclipse Foundation website](https://eclipse-foundation.blog/2024/04/02/open-source-community-cra-compliance/). 21 | -------------------------------------------------------------------------------- /source/_posts/2024-09-12-php-foundation-update-september-2024.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: PHP Foundation Update, September 2024 3 | layout: post 4 | tags: 5 | - update 6 | author: 7 | name: Roman Pronskiy 8 | url: https://twitter.com/pronskiy 9 | published_at: 12 September 2024 10 | --- 11 | 12 | ``` 47 | 48 | That’s all for today. Follow us on X/Twitter [@ThePHPF](https://twitter.com/thephpf), Mastodon [phpc.social/@thephpf](https://phpc.social/@thephpf), and [LinkedIn](https://www.linkedin.com/company/phpfoundation/) to get the latest updates from the PHP Foundation. 49 | 💜🐘 50 | -------------------------------------------------------------------------------- /source/_posts/2024-09-17-application-form-2025.md: -------------------------------------------------------------------------------- 1 | 2 | --- 3 | title: 'The PHP Foundation application form for 2025 is now open' 4 | layout: post 5 | tags: 6 | - team 7 | author: 8 | - name: Roman Pronskiy 9 | url: https://twitter.com/pronskiy 10 | 11 | - name: Nils Adermann 12 | url: https://twitter.com/naderman 13 | published_at: 17 September 2024 14 | 15 | --- 16 | 17 | The PHP Foundation is a non-profit organization, started in 2021 by Acquia, Automattic, Craft CMS, JetBrains, Laravel, PrestaShop, Private Packagist, Symfony, Tideways, and Zend by Perforce with a mission to support, advance, and develop the PHP language. 18 | 19 | The foundation pays [10 developers](https://thephp.foundation/structure/#core_developers) to work on the language. See what the foundation achieved in 2023 in the [Impact and transparency report](https://thephp.foundation/blog/2024/02/26/transparency-and-impact-report-2023/). 20 | 21 | We’re opening a new round of applications for developer positions. We intend to decide on who we will hire by the end of October. If selected, you would start your work January 1st, 2025\. 22 | 23 | The application form will be **open until October 10, 2024**. 24 | 25 |

26 | Apply 27 |

28 | 29 |
30 | Note: This is not a job for PHP developers or aspiring PHP developers.
31 | The development of PHP is done in the С programming language, and requires proficiency in system programming. 32 |
33 | 34 | ## Note: Team size is unlikely to grow 35 | 36 | While we won’t rule out the possibility of expanding our team, it’s likely we won’t pay more than the current number of 10 developers. Mindful of our budget limitations, we may rather consider restructuring or adjusting our team to make space for any outstanding applications that better help us meet our goals. 37 | 38 | ## What are the requirements? 39 | 40 | As before, we require previous experience in PHP core development. Ideally you should have all, but at least some of the following: 41 | 42 | - Pull-requests / commits to [php/php-src](https://github.com/php/php-src/) 43 | - Experience in writing PHP extensions 44 | - Participation in PHP mailing lists 45 | - Contributions to other open-source projects 46 | 47 | This time, however, we have a clearer idea of the tasks that can be engaged in and so the pool of considered candidates will be wider. 48 | 49 | ## What are you going to work on? 50 | 51 | Strategic areas we’d like you to work on: 52 | 53 | - Security 54 | - Performance 55 | - Infrastructure 56 | - Web APIs (json, PDO, streams, etc.) 57 | 58 | This is not an exhaustive list. We encourage you to **provide as detailed a description of what you want to work on as possible**. 59 | 60 | Our primary selection criterion is **pragmatism**. We place greater emphasis on solutions that improve the developer experience and benefit businesses that rely on PHP, rather than new syntax features. 61 | 62 | Out of scope: 63 | 64 | - Pure documentation work 65 | - PHP packages 66 | - Websites 67 | - Translations 68 | 69 | ## What does working for the PHP Foundation look like? 70 | 71 | Working for the PHP Foundation offers a lot of freedom, but it also requires discipline. Your work will roughly consist of the following: 72 | 73 | - 40% Triaging issues and fixing bugs 74 | - 30% Working on strategic areas 75 | - 20% Code reviews 76 | - \>10% Preparing RFCs and developing new language features 77 | 78 | As you can see, developing new RFCs is a fairly small part of the job. Most of the work is typical maintenance of an open source project. 79 | 80 | We are a fully distributed team. You can work from any place**\*** and at any time. All communication is asynchronous via Slack, GitHub, and Email. We meet for synchronous calls 1-2 times a month. 81 | 82 | Your work should be in line with the foundation’s mission statement, and we expect you to follow [the code of conduct](https://thephp.foundation/code-of-conduct/). 83 | 84 | > **PHP Foundation Mission Statement** 85 | > 86 | > The PHP Foundation is a collective of people and organizations relying on the PHP language. Its mission is to ensure the long-term prosperity of the PHP language. The PHP Foundation focuses on providing financial support and guidance to PHP language developers to support its goals of improving the language for its users, providing high-quality maintenance, and improving the PHP language project to retain current contributors and to integrate new contributors. The PHP Foundation aims to promote the public image of the PHP language in the interest of retaining existing and gaining new users and contributors. 87 | 88 | ***\*** We do not consider applications from persons residing in sanctioned territories.* 89 | 90 | ## How to apply? 91 | 92 | Submit your application now and we will get back to you shortly. If you have any questions or suggestions, reach out to contact@thephp.foundation. 93 | 94 |

95 | Open submission form 96 |

97 | 98 | 99 | -------------------------------------------------------------------------------- /source/_posts/2024-09-30-call-fo-sponsors.md: -------------------------------------------------------------------------------- 1 | 2 | --- 3 | title: 'The PHP Foundation Calls for Sponsors: Help Shape the Future of PHP' 4 | layout: post 5 | tags: 6 | - update 7 | author: 8 | - name: Roman Pronskiy 9 | url: https://twitter.com/pronskiy 10 | published_at: 30 September 2024 11 | 12 | --- 13 | 14 | Hey there, PHP enthusiasts and tech leaders\! It's that time of the year again when everyone's crunching numbers and deciding on budgets. We've got an opportunity for you to make a real impact on the PHP ecosystem. Let's dive in. 15 | 16 | **Don't need convincing? [Sponsor us now](https://thephp.foundation/sponsor/)!** 17 | 18 | ## Join us\! Fund the Future of Web Development 19 | 20 | We just opened applications for PHP core language contributors: [The PHP Foundation application form for 2025 is now open](https://thephp.foundation/blog/2024/09/17/application-form-2025/). 21 | 22 | Here's the deal: **the more sponsors we get, the more ambitious we can be with our plans**. At a minimum, we finance maintenance and security support, but with more funding, we can continue high-reaching projects. 23 | 24 | Your sponsorship could help us: 25 | 26 | * **Tackle long-standing bugs** that have been bothering developers for ages. 27 | * **Implement cool new features** that will make PHP even more awesome. 28 | * **Improve performance and security** (because who doesn't want a faster PHP). 29 | 30 | And if we get enough sponsors, we might even venture into some experimental territory. Your support could lead to the next big breakthrough in PHP development. 31 | 32 | {{ include('quote.html', { 33 | name: 'Kévin Dunglas', 34 | title: 'author of [FrankenPHP](https://frankenphp.dev/)', 35 | image: '/assets/post-images/2024/report-2023/kevin_dunglas.png', 36 | quote: 'To achieve exceptional performance and simplify application deployment, FrankenPHP pushes the PHP engine to its limits and uses it in atypical ways (ZTS, musl libc, specific timeout management...). 37 | 38 | This would not be possible without the excellent work done by the PHP Foundation\'s team: they correct the problems we report, continuously improve performance and make the engine always more generic and modular, which not only enables us to innovate in FrankenPHP, but also benefits the entire ecosystem by making PHP faster and more reliable. 39 | 40 | By sponsoring the foundation, you\'re investing in the future of PHP!' 41 | }) }} 42 | 43 | ## 2025: The Year PHP Turns 30 (and It's Going to Be Epic\!) 44 | 45 | PHP is turning 30 in 2025, and we're planning a special celebration\! By sponsoring the PHP Foundation, you'll be front and center for this milestone year. Here's what we've got cooking: 46 | 47 | * A massive collaboration with the marketing teams from Laravel, JetBrains, and Zend by Perforce. It's like the Avengers of the PHP world coming together. 48 | * A much-needed facelift for php.net. Let's make it shine for PHP’s 30th birthday\! 49 | 50 | Imagine your company being visible as a part of this historic moment. Pretty cool, right? 51 | 52 | ## Why Sponsor the PHP Foundation? 53 | 54 | You might be wondering, "Why should I sponsor the PHP Foundation?" Let us list some of the reasons: 55 | 56 | 1. **Visibility:** Your brand will be seen by millions of developers worldwide. That's a lot of eyeballs. 57 | 2. **Influence:** Help shape the future of one of the most widely used programming languages on the web. 58 | 3. **Security:** Without sufficient funding, the PHP language will lack the resources to promptly address bugs your company runs into. 59 | 4. **Recruitment:** Attract top PHP talent by showing your commitment to the language. 60 | 5. **Giving Back:** If PHP has helped your business grow, here's your chance to return the favor. 61 | 6. **Tech Cred:** Nothing says "we're serious about web development" like sponsoring a major programming language. 62 | 63 | ## Ready to Jump In? 64 | 65 | Here's how you can get started: 66 | 67 | 1. Check out our sponsorship tiers on our website: [thephp.foundation/sponsor](https://thephp.foundation/sponsor/). 68 | 2. Reach out to us at [contact@thephp.foundation](mailto:contact@thephp.foundation). 69 | 3. Let's chat about how we can make this partnership beneficial for both of us. 70 | Office hours call: [cal.com/pronskiy/php-foundation-office-hours](http://cal.com/pronskiy/php-foundation-office-hours) 71 | 72 | ## Stay in the Loop 73 | 74 | Don't miss out on any PHP Foundation news. Follow us on: 75 | 76 | * LinkedIn: [PHP Foundation](https://www.linkedin.com/company/phpfoundation) 77 | * Twitter/X: [@ThePHPF](https://x.com/thephpf) 78 | * Mastodon: [@thephpf@phpc.social](https://phpc.social/@thephpf) 79 | 80 | 81 | And for those who prefer their news in their inbox, subscribe to our email newsletter. We send ~1–2 emails a month – just the good stuff about PHP and the Foundation. 82 | 83 | {% include "newsletter.html" %} 84 | 85 | P.S. If you have any questions or wild ideas about how you'd like to support PHP, don't hesitate to reach out. We're all ears. 86 | -------------------------------------------------------------------------------- /source/_posts/2024-10-08-open-source-pledge.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'The PHP Foundation Supports The Open Source Pledge' 3 | layout: post 4 | tags: 5 | - news 6 | author: 7 | - name: Roman Pronskiy 8 | url: https://twitter.com/pronskiy 9 | published_at: 8 October 2024 10 | 11 | --- 12 | 13 | The PHP Foundation is proud to announce our support for the Open Source Pledge initiative, launched by Sentry and its partners. This step addresses the sustainability challenges within the Open Source Software (OSS) community, particularly affecting PHP and its ecosystem. 14 | 15 | ## The Open Source Pledge: A Commitment to Sustainability 16 | 17 | The Open Source Pledge represents a commitment from member companies to provide meaningful financial support to Open Source maintainers. This initiative aims to prevent maintainer burnout and reduce the risk of high-profile security incidents that can impact the broader tech ecosystem. 18 | 19 | The OSS community, including PHP, faces significant challenges: 20 | 21 | * **Security risks:** High-profile incidents like Log4shell, XZ, and Heartbleed have highlighted the potential consequences of under-resourced projects. 22 | * **Developer burnout:** Many maintainers, often volunteers, are feeling exhausted and leaving the very projects you might be using. 23 | * **Losing maintainers:** The demanding nature of maintaining open-source software means we’re seeing fewer contributors over time. 24 | 25 | ## The PHP Foundation's Role 26 | 27 | As the main funder and steward of the PHP language, we’ve seen firsthand how a lack of funding impacts crucial projects. For example: 28 | 29 | * **Core language development:** Keeping PHP up to date and improving it takes a lot of time and expertise. 30 | * **Security support:** Without enough funding, PHP can’t address vulnerabilities quickly. 31 | * **Extension maintenance:** Many essential PHP extensions are struggling to find people to maintain them. 32 | * **Documentation efforts:** Keeping PHP’s extensive documentation current is always a big challenge. 33 | 34 | # How to Join the Pledge 35 | 36 | The Open Source Pledge offers a structured approach to supporting OSS with the following requirements: 37 | 38 | * Minimum contribution: $2,000 per year, per developer on staff. 39 | * Transparency: Companies should publish annual reports detailing their payments. 40 | * Direct impact: Funds go directly to maintainers, supporting their crucial work. 41 | 42 | Thanks to supporting the PHP Foundation, our major sponsors [Private Packagist](https://packagist.com/) and [Tideways](https://tideways.com/) are already part of the [Open Source Pledge](https://opensourcepledge.com/). 43 | 44 | # \[Action Required\] Join the Pledge\! 45 | 46 | We urge PHP-based companies, developers, and organizations to join the Open Source Pledge and **[sponsor The PHP Foundation](https://thephp.foundation/sponsor/)**. 47 | 48 | To learn more about the Open Source Pledge and how you can participate, visit [https://opensourcepledge.com/](https://opensourcepledge.com/). 49 | 50 | Help us spread the word by sharing this post. 51 | 52 | 💜️ 🐘 53 | -------------------------------------------------------------------------------- /source/_posts/2024-11-19-pie-pre-release.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Announcing the Pre-Release of the PHP Installer for Extensions (PIE)' 3 | layout: post 4 | tags: 5 | - news 6 | author: 7 | - name: James Titcumb 8 | url: https://phpc.social/@asgrim 9 | published_at: 19 November 2024 10 | --- 11 | 12 | We're thrilled to introduce the pre-release of the PHP Installer for Extensions (PIE) – [**github.com/php/pie**](https://github.com/php/pie)! 13 | 14 | PIE aims to simplify managing PHP extensions by providing a modern, flexible alternative to PECL and treating extensions as first-class citizens in the PHP ecosystem. 15 | 16 |
17 | PIE development is commissioned by the Sovereign Tech Agency. 18 |
19 | 20 | This initial pre-release is available as a [PHAR download](https://github.com/php/pie/releases/tag/0.2.0), and we invite you to take it for a spin and share your feedback. While this release is an exciting milestone, we know there's a lot more work ahead to make PIE ready for widespread use, so your feedback is invaluable. If you encounter any issues, or have any questions, feel free to open an [issue on GitHub](https://github.com/php/pie/issues), and help us shape the future of PIE. 21 | 22 | ## Why PIE? 23 | 24 | With PIE, the process of managing PHP extensions becomes more streamlined. Extensions are distributed via [Packagist](https://packagist.org/extensions) just like regular PHP packages! It makes the installation and update process quite familiar if you already use Composer. 25 | 26 | We’re working to make PIE stronger and easier to use. We’re improving how PHP extensions are managed and using ideas from Composer to make the process smoother. 27 | 28 | ## Are you an extension author? 29 | 30 | Extensions do need to be made compatible with PIE by adding a `composer.json` (more instructions [here](https://github.com/php/pie/blob/main/docs/extension-maintainers.md)), and submitting it to [Packagist](https://packagist.org/packages/submit). Once a package has added support for PIE, it will appear on the Packagist [Extensions list](https://packagist.org/extensions) page. 31 | 32 | 💜️🐘 33 | -------------------------------------------------------------------------------- /source/_posts/2024-11-22-php-foundation-turns-three.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'The PHP Foundation Turns Three!' 3 | layout: post 4 | tags: 5 | - news 6 | author: 7 | - name: Roman Pronskiy 8 | url: https://twitter.com/pronskiy 9 | published_at: 22 November 2024 10 | --- 11 | 12 | Wow. Can you believe it? Just three years (and one day) ago, PHP had no organization behind it. Only two people were being paid to work on the language that powers 70% of the web. 13 | 14 | Here’s the very first announcement about the creation of the PHP Foundation: 15 | [The New Life of PHP – The PHP Foundation](https://blog.jetbrains.com/phpstorm/2021/11/the-php-foundation/). 16 | 17 | ## Fast forward to today 18 | 19 | We now have a team of 10 talented engineers dedicated to PHP. We’re supported by major companies, governments, and an incredible community. That same community is creating amazing projects with PHP, while businesses continue to thrive thanks to a mature, secure, and performant language. 20 | 21 | Since 2021, we’ve seen three PHP releases—PHP 8.2, 8.3, and the freshly released [PHP 8.4](https://www.php.net/releases/8.4/en.php). Here are just a few highlights from these releases, developed by the PHP Foundation team: 22 | 23 | - [Property hooks](https://wiki.php.net/rfc/property-hooks) 24 | - [Asymmetric Visibility](https://wiki.php.net/rfc/asymmetric-visibility-v2) 25 | - [Lazy Objects](https://wiki.php.net/rfc/lazy-objects) 26 | - [New tool for installing extensions: pie](https://thephp.foundation/blog/2024/11/19/pie-pre-release/) 27 | - [Support object type in BCMath](https://wiki.php.net/rfc/support_object_type_in_bcmath) 28 | - [Saner Increment/Decrement operators](https://wiki.php.net/rfc/saner-inc-dec-operators) 29 | - Multiple type system improvements: [null and false as stand-alone types](https://wiki.php.net/rfc/null-false-standalone-types), [Disjunctive Normal Form Types](https://wiki.php.net/rfc/dnf_types) 30 | - [Readonly amendments](https://wiki.php.net/rfc/readonly_amendments) 31 | - [Dynamic class constant fetch](https://wiki.php.net/rfc/dynamic_class_constant_fetch) 32 | - [Arbitrary static variable initializers](https://wiki.php.net/rfc/arbitrary_static_variable_initializers) 33 | 34 | ## Feature development is only about 20% of what the foundation team does 35 | 36 | Behind the scenes, there’s a lot more: triaging and fixing issues, handling security reports, reviewing code, updating documentation, and maintaining infrastructure. All of this work empowers the community and ensures PHP is stable and reliable. 37 | 38 | Here are some highlights: 39 | 40 | - The total contributions to the PHP repositories grew by 51+% 41 | - We conducted the first external security audit for PHP in 10 years 42 | - We extended security support for PHP versions by one year 43 | - We improved CI and testing infrastructure 44 | - We introduced automated benchmarks to track performance regressions 45 | 46 | None of this would be possible without our sponsors. Huge thanks to every company and individual who has supported us over the past three years! 47 | 48 | Special shout-outs to: 49 | JetBrains, Automattic, Sovereign Tech Agency, Craft CMS, Private Packagist, Tideways, Zend by Perforce, Laravel, Symfony, Mercari Inc., Les-Tilleuls.coop, pixiv Inc., Aternos GmbH, Sentry, Ardennes-étape, Cybozu, 50 | 51 | and many others — PHP is all of us! 52 | 53 | If you haven’t already, please consider [sponsoring the PHP Foundation](https://thephp.foundation/sponsor/) 🙏 54 | 55 | Here’s to PHP and many more years ahead! 56 | 🐘💜 57 | -------------------------------------------------------------------------------- /source/_posts/2024-12-23-happy-holidays-from-the-php-foundation.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Happy Holidays from The PHP Foundation!' 3 | layout: post 4 | tags: 5 | - news 6 | author: 7 | - name: Roman Pronskiy 8 | url: https://twitter.com/pronskiy 9 | published_at: 23 December 2024 10 | --- 11 | 12 | As 2024 comes to a close, we at the PHP Foundation want to take a moment to thank everyone who has supported us this year. It’s been an incredible journey, and we couldn’t have done it without the amazing PHP community and our generous sponsors. 13 | 14 | ## A Year of Milestones 15 | 16 | In [its third year](https://thephp.foundation/blog/2024/11/22/php-foundation-turns-three), the PHP Foundation has achieved several milestones that have further strengthened the PHP ecosystem: first in a decade [security audit](https://thephp.foundation/blog/2024/11/22/php-foundation-turns-three/#feature-development-is-only-about-20%25-of-what-the-foundation-team-does), [pie](https://thephp.foundation/blog/2024/11/19/pie-pre-release/), numerous features and improvements for [PHP 8.4](https://www.php.net/releases/8.4/en.php), and much more to come next year! 17 | 18 | ## Celebrating Our Sponsors 19 | 20 | We owe a special thanks to our major sponsors who make our work possible: 21 | 22 | ### Platinum 23 | 24 | [**Sovereign Tech Agency**](https://www.sovereign.tech/) 25 | 26 | [**JetBrains**](https://www.jetbrains.com/) 27 | 28 | [**Automattic**](https://automattic.com/) 29 | 30 | ### Gold 31 | 32 | [**Laravel**](https://laravel.com/) 33 | 34 | [**GoDaddy**](https://www.godaddy.com/) **\[new! ✨\]** 35 | 36 | ### Silver 37 | 38 | [**Private Packagist**](https://packagist.com/) 39 | 40 | [**Craft CMS**](https://craftcms.com/) 41 | 42 | [**Cybozu**](https://cybozu.co.jp/en/company/) 43 | 44 | [**Tideways**](https://tideways.com/) 45 | 46 | [**Zend by Perforce**](https://www.zend.com/) 47 | 48 | [**Symfony Corp**](https://symfony.com/) 49 | 50 | [**Sentry**](https://sentry.io/welcome/) 51 | 52 | [**Manychat**](https://manychat.com/) **\[new! ✨\]** 53 | 54 | [**Mercari Inc.**](https://www.mercari.com/) 55 | 56 | [**Les-Tilleuls.coop**](http://Les-Tilleuls.coop) 57 | 58 | [**pixiv Inc.**](https://www.pixiv.net/en/) 59 | 60 | [**Aternos GmbH**](https://aternos.gmbh/en/) 61 | 62 | [**CH Studio**](https://chstudio.fr/en/homepage/) 63 | 64 | Big thanks to newly joined major sponsors: [**GoDaddy**](https://www.godaddy.com/) and [**Manychat**](https://manychat.com/)! 65 | 66 | Your contributions enable us to support developers, fund crucial projects, and ensure PHP is a modern and reliable choice for web development. 67 | 68 | If you are yet to decide on sponsoring the foundation, [here](https://thephp.foundation/blog/2024/09/30/call-fo-sponsors/) you can find information on how to join us and why it matters. 69 | 70 | ## Wishing You Joyful Holidays ✨ 71 | 72 | To everyone in the PHP community, we wish you a joyful holiday season filled with warmth, happiness, and a well-deserved break. Thank you for your support, passion, and commitment to PHP. 73 | 74 | Here’s to a wonderful 2025! 🥂 75 | 76 | Warm wishes, 77 | The PHP Foundation 78 | 🐘💜 79 | -------------------------------------------------------------------------------- /source/_posts/2025-01-31-laracons.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Proud to Be Community Sponsors of Laracon EU and Laracon India' 3 | layout: post 4 | tags: 5 | - news 6 | author: 7 | - name: Roman Pronskiy 8 | url: https://twitter.com/pronskiy 9 | published_at: 30 January 2025 10 | --- 11 | 12 | The PHP Foundation is thrilled to announce our community sponsorship of both Laracon EU and Laracon India! We believe in the power of in-person connections and are excited to support these conferences as they bring together PHP enthusiasts from around the world. 13 | 14 | ## [Laracon EU](https://laracon.eu/) 15 | 16 | * **Location:** Amsterdam, Netherlands 17 | * **Date:** February 3–4 18 | * **Meet us:** This year at Laracon EU you can meet [Roman Pronskiy](https://www.linkedin.com/in/pronskiy), [Sebastian Bergmann](https://www.linkedin.com/in/sebastian-bergmann-phpunit), and [Nils Adermann](https://www.linkedin.com/in/nilsadermann/) from the PHP Foundation board. Can you spot our first ever conference banner? 19 | 20 | ## [Laracon India](https://laracon.in/) 21 | 22 | * **Location:** Ahmedabad, India 23 | * **Date:** March 8–9 24 | * **Sponsorship:** Laracon India [welcomes sponsors](https://docs.google.com/forms/d/e/1FAIpQLScQTQJA9tnpwnED3Af61EyewEr7T2bybBR5GJ3MUd3x52FhrA/viewform) who are eager to support the Laravel community and connect with talented developers in India. 25 | 26 | ## Let's Collaborate! 27 | 28 | The PHP Foundation is committed to fostering the growth and development of the PHP ecosystem. We’re excited to collaborate with and support (non-financially) PHP conferences and meetups worldwide! 29 | 30 | 📩 Get in touch: contact@thephp.foundation. 31 | 32 | Here are a few upcoming events to watch for: 33 | 34 | * [PHP UK Conference 2025](https://www.phpconference.co.uk/) – London, UK, February 19. 35 | * [Dutch PHP Conference](https://phpconference.nl/) – Amsterdam, March 18–21. 36 | * [PHP Conference Odawara 2025](https://phpcon-odawara.jp/2025/) – Japan, April 12. 37 | * [PHPDay](https://www.phpday.it/) – Verona, May 16-17. 38 | * [php\[tek\] 2025](https://phptek.io/) – Chicago, IL, USA, May 20-22. 39 | * [PHPers Summit 2025](https://summit.phpers.pl/en/) – Poznań, Poland, 24-25 May. 40 | * [International PHP Conference](https://phpconference.com/berlin-en/) – Berlin, June, 3–5. 41 | 42 | 🐘💜 43 | -------------------------------------------------------------------------------- /source/_posts/2025-04-03-welcoming-passbolt-to-the-php-foundation.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Welcoming Passbolt to the PHP Foundation' 3 | layout: post 4 | tags: 5 | - news 6 | - sponsors 7 | author: 8 | - name: Roman Pronskiy 9 | url: https://twitter.com/pronskiy 10 | published_at: 3 April 2025 11 | --- 12 | 13 | We’re thrilled to announce that **Passbolt has joined the PHP Foundation** as a Silver sponsor! PHP powers over 77% of the web – including Passbolt’s collaborative password and secrets manager. Their support strengthens our mission to keep it thriving. 14 | 15 | Check out their heartfelt announcement here: **[Passbolt’s Blog](https://www.passbolt.com/blog/a-love-letter-passbolt-joins-the-php-foundation-as-a-company-member)**. 16 | 17 | The Foundation funds developers to ensure PHP remains fast, secure, and innovative. With Passbolt and many other industry leaders by our side, we’re building a sustainable future for the language we all rely on. 18 | 19 | > This post kicks off a new blog series highlighting our amazing sponsors. Stay tuned as we spotlight the companies and individuals driving PHP forward – each one a vital part of our community’s success. 20 | 21 | Want to join the effort? [Sponsor The PHP Foundation](https://thephp.foundation/sponsor/) and help us power the web’s backbone! 22 | 23 | 🐘💜 24 | -------------------------------------------------------------------------------- /source/_posts/2025-04-10-php-core-security-audit-results.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'PHP Core Security Audit Results' 3 | layout: post 4 | tags: 5 | - news 6 | author: 7 | - name: Roman Pronskiy 8 | url: https://twitter.com/pronskiy 9 | published_at: 10 April 2025 10 | --- 11 | 12 | The PHP Foundation is pleased to announce the completion of a comprehensive security audit of the PHP source code ([php/php-src](https://github.com/php/php-src)), **commissioned by the [Sovereign Tech Agency](https://www.sovereign.tech/)**. 13 | 14 | This initiative was organized in partnership with the [Open Source Technology Improvement Fund](https://ostif.org/) (OSTIF) and executed by the esteemed security group [Quarkslab](https://www.quarkslab.com/). 15 | 16 | ## Audit Overview 17 | 18 | Conducted over a two-month period in 2024, the audit encompassed: 19 | 20 | * Development of a threat model tailored to php-src 21 | * Manual code reviews 22 | * Dynamic testing procedures 23 | * Cryptographic assessments 24 | 25 | The collaboration between Quarkslab’s auditors and PHP maintainers ensured a thorough examination of the codebase. 26 | 27 | > _⚠️_ 28 | Due to budget constraints, the recent security audit focused on the most critical components of the PHP source code rather than the entire codebase. Organizations interested in sponsoring a comprehensive audit or additional assessments are encouraged to [contact us](mailto:contact@thephp.foundation)! 29 | > _⚠️_ 30 | 31 | ## Key Findings 32 | 33 | The audit identified 27 issues, with 17 having security implications: 34 | 35 | * 3 High-severity 36 | * 5 Medium-severity 37 | * 9 Low-severity 38 | 39 | Additionally, 10 informational findings were reported. 40 | 41 | Notably, four vulnerabilities received CVE identifiers: 42 | 43 | * CVE-2024-9026: Log tampering vulnerability in PHP-FPM, allowing potential manipulation or removal of characters from log messages. 44 | * CVE-2024-8925: Flaw in PHP’s multipart form data parsing, potentially leading to data misinterpretation. 45 | * CVE-2024-8929: Issue where a malicious MySQL server could cause the client to disclose heap content from other SQL requests. 46 | 47 | ## Recommendations and Resolutions 48 | 49 | Quarkslab’s report commended the overall high quality and specification adherence of the php/php-src project. 50 | 51 | The PHP development team has addressed all identified issues. Users are strongly encouraged to upgrade to the latest PHP versions to benefit from these security enhancements. 52 | 53 | ## Acknowledgments 54 | 55 | We extend our gratitude to the individuals and organizations that made this audit possible: 56 | 57 | * **The PHP Foundation Team and PHP maintainers:** 58 | Jakub Zelenka, Arnaud Le Blanc, Niels Dossche, Ilija Tovilo, Stas Malyshev, Dmitry Stogov, Derick Rethans, and Roman Pronskiy. 59 | * **Quarkslab Team:** 60 | Angèle Bossuat, Julio Loayza Meneses, Mihail Kirov, Sebastien Rolland, Ramtine Tofighi Shirazi. 61 | * **Sovereign Tech Agency:** 62 | Abigail Garner and the team – for commissioning the audit and all the help. 63 | * **OSTIF:** 64 | Amir Montazery, Derek Zimmer, Helen Woeste – for organizing the collaboration. 65 | 66 | This audit underscores our commitment to enhancing PHP’s security and reliability. We remain dedicated to ongoing improvements and collaborations to ensure PHP’s robustness for the global development community. 67 | 68 | ## Further Reading 69 | 70 | * [Audit Report](/assets/files/24-07-1730-REP-V1.4_temp.pdf) 71 | * [OSTIF Blog](https://ostif.org/php-audit-complete/) 72 | * [Quarkslab Blog](https://blog.quarkslab.com/security-audit-of-php-src.html) 73 | 74 | If your company is interested in commissioning another round of security audit, please contact The PHP Foundation team: [contact@thephp.foundation](mailto:contact@thephp.foundation). 75 | 76 | 🐘💜 77 | -------------------------------------------------------------------------------- /source/_posts/2025-05-09-manychat-powered-by-php.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Meet Manychat: A PHP Foundation Sponsor Sharing Their PHP Scaling Journey' 3 | layout: post 4 | tags: 5 | - news 6 | - sponsors 7 | author: 8 | - name: Roman Pronskiy 9 | url: https://twitter.com/pronskiy 10 | published_at: 9 May 2025 11 | --- 12 | 13 | At the PHP Foundation, we’re proud to be supported by companies that build amazing products and contribute back to the PHP ecosystem. Today we’d like to highlight [Manychat](https://manychat.com/?utm_source=phpfoundation&utm_medium=site&utm_campaign=casestudy) — one of our Silver sponsors. 14 | 15 | Manychat is the world’s leading chat marketing platform, helping businesses connect with their customers on Instagram, WhatsApp, Facebook Messenger, and beyond. With over **1 billion conversations powered every year** across **170+ countries**, Manychat is a great example of how PHP scales and supports high-traffic applications around the world. 16 | 17 | ## Why PHP? Because Speed Wins 18 | 19 | In their recently published case study — _[How Manychat Scaled to 1 Billion Conversations Using PHP](https://medium.com/manychat-engineering/how-manychat-scaled-to-1-billion-conversations-using-php-a-startups-guide-to-smart-tech-choices-781c74f16f23)_ — the Manychat team shares the story of how PHP helped them go from a tiny startup with just one developer to a platform supporting millions of users. 20 | 21 | > _“We could build right away — our only developer already knew PHP, so we skipped onboarding and got straight to work.”_ 22 | 23 | By choosing PHP, Manychat was able to build their MVP in just a few days and start learning from real users immediately. As they grew, they faced the familiar scaling challenges of high traffic, heavy workloads, and resource management. Their case study provides mentions architectural decisions they made — from using asynchronous request handling with NGINX + Lua, to optimizing background task processing with PHP-CLI workers, and managing database connections efficiently with PgBouncer. 24 | 25 | ## PHP at the Heart of a Global Platform 26 | 27 | Today Manychat’s platform continues to run on PHP, handling millions of API calls and conversations while keeping infrastructure costs under control. 28 | 29 | If you’re excited about building products that reach millions and love working with PHP at scale, check out the [open positions at Manychat](https://careers.manychat.com/team/engineering?utm_source=phpfoundation&utm_medium=site&utm_campaign=casestudy). They’re hiring PHP engineers! 30 | 31 | ## Supporting the Community 32 | 33 | Manychat isn’t just building with PHP — they’re giving back to the community. As a **Silver sponsor** of the PHP Foundation, they help us fund initiatives that keep PHP stable, modern, and accessible to millions of developers worldwide. 34 | 35 | In addition, Manychat is active in the tech community, hosting [PHP meetups and events](https://www.eventbrite.com/o/manychat-46565622503) in **Barcelona** and **Amsterdam**. We love seeing our sponsors not only build great products but also foster connections between developers around the world. 36 | 37 | ## Read Their Story 38 | 39 | We encourage you to check out their full case study on scaling with PHP: 40 | 41 | 👉 _[How Manychat Scaled to 1 Billion Conversations Using PHP](https://medium.com/manychat-engineering/how-manychat-scaled-to-1-billion-conversations-using-php-a-startups-guide-to-smart-tech-choices-781c74f16f23)_ 42 | 43 | 44 | **Thank you, Manychat, for your support!** 45 | 46 | 🐘💜 47 | 48 |
49 |
50 | 51 | > This post continues the [blog series](https://thephp.foundation/blog/tag/sponsors/) highlighting our amazing sponsors. Stay tuned as we spotlight the companies and individuals driving PHP forward – each one a vital part of our community’s success. 52 | 53 | Want to join the effort? [Sponsor The PHP Foundation](https://thephp.foundation/sponsor/) and help us power the web’s backbone! 54 | 55 | 56 | -------------------------------------------------------------------------------- /source/_posts/2025-05-15-frankenphp.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'FrankenPHP Is Now Officially Supported by The PHP Foundation' 3 | layout: post 4 | tags: 5 | - news 6 | author: 7 | - name: Roman Pronskiy 8 | url: https://twitter.com/pronskiy 9 | published_at: 15 May 2025 10 | --- 11 | 12 | [FrankenPHP](https://frankenphp.dev), a modern high-performance PHP application server created by [Kévin Dunglas](https://dunglas.dev) and sponsored by [Les-Tilleuls.coop](http://Les-Tilleuls.coop), is now officially supported by the PHP Foundation. FrankenPHP integrates PHP directly into Go and Caddy, simplifying deployment, improving performance, and reducing costs. It powers real-time features, supports advanced hosting scenarios, and offers a performance-boosting “worker mode” already integrated by Laravel, Symfony, and Yii. The PHP Foundation will actively contribute to FrankenPHP’s development and host its code on the official PHP GitHub, marking a major step toward modernizing the PHP ecosystem while keeping governance with the original maintainers. 13 | 14 | ![FrankenPHP-PHP-Foundation](/assets/post-images/2025/2025-05-15-frankenphp.png) 15 | 16 | PHP is a programming language used by around 70% of websites and applications, and by key software and frameworks such as [WordPress](https://wordpress.org), [Laravel](https://laravel.com), and [Symfony](https://symfony.com). 17 | 18 | FrankenPHP offers a host of new features that allow to: 19 | 20 | * simplify the development of applications written in PHP; 21 | * drastically improve performance, while considerably reducing hosting costs (FinOps) and energy consumption (GreenOps); 22 | * facilitate deployment in production, whether on bare-metal servers or in cloud-native environments; 23 | * easily develop real-time features thanks to native [Mercure](https://mercure.rocks) protocol support; 24 | * extend PHP apps with Go, C, and C++ programming languages; 25 | * support the PHP programming language in any application written in Go (server, proxy, in-house development...). 26 | 27 | Specifically, FrankenPHP integrates the official PHP interpreter as a module for Go and [Caddy](https://caddyserver.com), the popular next-generation web server that supports the latest web platform innovations in terms of performance, security, and DevOps: HTTP/3, compression with Zstandard, 103 Early Hints, automatic generation and renewal of HTTPS certificates, Encrypted Client Hello, structured logs, OpenMetrics/Prometheus metrics… Caddy is also co-maintained by Kévin and sponsored by Les-Tilleuls.coop. 28 | 29 | Thanks to its innovative architecture, FrankenPHP lets you install a complete PHP environment (interpreter, web server, extensions, etc.) optimized for performance and security, by downloading a standalone statically compiled executable or a Docker image. 30 | 31 | FrankenPHP also offers a performance-optimized mode called “worker mode”, which takes advantage of the capabilities of the Go programming language. When this optional mode is used, the PHP application will be able to retain in memory those elements that can be reused to process other HTTP requests instead of being completely reset to process each incoming HTTP request (“share nothing” model). Worker mode is especially useful for frameworks such as Symfony and Laravel that can prevent rebuilding their kernels and services again and again for nothing. 32 | 33 | Using this mode requires minimal adaptations to the code of modern PHP applications in line with good programming practice. The Laravel, Symfony and Yii frameworks already offer official integrations of FrankenPHP's worker mode, enabling worker mode to be activated without modifying the application code. 34 | 35 | According to [an analysis carried out this summer by Sylius](https://sylius.com/blog/ecosystem/month-of-sylius-august-2024/#frankenphp), the publisher of the eponymous e-commerce platform, the use of FrankenPHP's worker mode reduces the software's response times by 80%, while reducing by more than 6 the number of machines required to serve the same number of users. 36 | 37 | FrankenPHP is now a reliable, mature solution used in production for an ever-increasing number of projects. The project now has [almost 8,000 stars on GitHub](https://github.com/dunglas/frankenphp), has passed the symbolic 100-contributor mark, and is officially supported by numerous hosting providers, including Upsun, Laravel Cloud, and Clever Cloud. 38 | 39 | To get to this point, it was necessary to initiate close collaboration between the development teams of FrankenPHP, the PHP interpreter itself, the Caddy web server, and even the Go programming language. 40 | 41 | Today, we're proud to announce that, with the aim of intensifying this collaboration, enabling the project to gain momentum, and modernizing the entire PHP ecosystem, **the FrankenPHP project is now officially supported by the PHP Foundation**. 42 | 43 | In concrete terms, FrankenPHP's source code will be transferred to the PHP project's GitHub organization, and the PHP Foundation team will contribute to the maintenance and development of FrankenPHP to ensure its reliability, durability, and compatibility with the latest language innovations. 44 | 45 | Part of the FrankenPHP documentation will also be transferred to the PHP website. 46 | 47 | The governance of the project remains unchanged, and the current team of maintainers (Kévin Dunglas, Robert Landers, Alexander Stecher) will continue to be in charge of releases, as well as code reviews. They will be actively collaborating with the PHP Foundation team in charge of the language development. 48 | 49 | In addition to the support provided by the foundation, Les-Tilleuls.coop will continue to sponsor FrankenPHP (as well as PHP and Caddy) by providing developers and contributing financially. 50 | 51 | FrankenPHP is already [promoted by Caddy](https://caddyserver.com/#:~:text=4x%20faster%20PHP%20apps) as the official, modern solution for using PHP with this server. 52 | In the future, to simplify the PHP development experience (one-line installation of a complete development environment) and to promote a solution that, for projects requiring it, considerably improves the performance and efficiency of PHP applications, FrankenPHP may be highlighted on the PHP website as one of the ways to use the language (other SAPIs such as PHP-FPM will continue to be fully supported solutions). 53 | 54 | To find out more about FrankenPHP and the many new possibilities it offers, take a look at [its documentation](https://frankenphp.dev). To meet the software's authors and find out how it is used in production, don't miss [the API Platform conference](https://api-platform.com/con/) (by the same authors as FrankenPHP) taking place on September 18 and 19 in France (Lille). 55 | 56 | Also, join us online for [**PHPverse on June 17**](https://lp.jetbrains.com/phpverse-2025/) — a special event celebrating PHP’s 30th anniversary. 57 | 58 | Finally, to help keep the PHP ecosystem innovating, [support the foundation](https://thephp.foundation/sponsor/)! 59 | 60 | [The PHP Foundation](https://thephp.foundation/) 61 | [Les-Tilleuls.coop](http://Les-Tilleuls.coop) 62 | [The Caddy team](https://caddyserver.com) 63 | -------------------------------------------------------------------------------- /source/_views/page-wide.html: -------------------------------------------------------------------------------- 1 | {% extends 'default' %} 2 | 3 | {% block content_wrapper %} 4 |
5 |
6 |
7 |

{{ page.title }}

8 | {% if page.subtitle %} 9 |

{{ page.subtitle }}

10 | {% endif %} 11 |
12 | 13 |
14 | {{ page.blocks.content|raw }} 15 |
16 |
17 |
18 | {% endblock content_wrapper %} 19 | -------------------------------------------------------------------------------- /source/_views/page.html: -------------------------------------------------------------------------------- 1 | {% extends 'default' %} 2 | 3 | {% block content_wrapper %} 4 |
5 |
6 |
7 |

{{ page.title }}

8 | {% if page.subtitle %} 9 |

{{ page.subtitle }}

10 | {% endif %} 11 |
12 | 13 |
14 | {{ page.blocks.content|raw }} 15 |
16 |
17 |
18 | {% endblock content_wrapper %} 19 | -------------------------------------------------------------------------------- /source/_views/post.html: -------------------------------------------------------------------------------- 1 | {% extends "default" %} 2 | 3 | {% block content_wrapper %} 4 |
5 |
6 |

{{ page.title | raw}}

7 | 8 |
9 | {% if page.author.name is defined%} 10 |
11 | Published on 12 | by 13 |
14 | {% elseif page.author is iterable%} 15 |
16 | Published on 17 | by 18 | {% for author in page.author %} 19 | {% if loop.last == false %}, {% endif %} 20 | {% endfor %} 21 |
22 | {% endif %} 23 | 24 | 25 | {% if page.tags is defined%} 26 |
27 | {% for tag in page.tags %} 28 | 30 | {{ tag | capitalize }} 31 | 32 | {% endfor %} 33 |
34 | {% endif %} 35 |
36 | 37 |
38 | {{ page.blocks.content|raw }} 39 |
40 | 41 |
42 | {% if page.previous_post or page.next_post %} 43 | 60 | {% endif %} 61 | 62 |
63 | Edit this page on GitHub 65 |
66 |
67 |
68 |
69 | {% endblock %} 70 | -------------------------------------------------------------------------------- /source/assets/branding/php_foundation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/branding/php_foundation.png -------------------------------------------------------------------------------- /source/assets/files/24-07-1730-REP-V1.4_temp.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/files/24-07-1730-REP-V1.4_temp.pdf -------------------------------------------------------------------------------- /source/assets/icons/digital_ocean.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 18 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /source/assets/icons/logo_slack.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 11 | 14 | 16 | 17 | 18 | 21 | 22 | 24 | 25 | 27 | 28 | 30 | 31 | 32 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /source/assets/icons/mailcoach.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /source/assets/icons/share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/icons/share.png -------------------------------------------------------------------------------- /source/assets/icons/stickermule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/icons/stickermule.png -------------------------------------------------------------------------------- /source/assets/images/slides_img_join.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/images/slides_img_join.png -------------------------------------------------------------------------------- /source/assets/post-images/2022/report-2022/commits_chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2022/report-2022/commits_chart.png -------------------------------------------------------------------------------- /source/assets/post-images/2022/report-2022/expenses.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2022/report-2022/expenses.png -------------------------------------------------------------------------------- /source/assets/post-images/2022/report-2022/financial_contributions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2022/report-2022/financial_contributions.png -------------------------------------------------------------------------------- /source/assets/post-images/2022/report-2022/php-foundation-timeline-2022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2022/report-2022/php-foundation-timeline-2022.png -------------------------------------------------------------------------------- /source/assets/post-images/2022/report-2022/reviews_chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2022/report-2022/reviews_chart.png -------------------------------------------------------------------------------- /source/assets/post-images/2022/roundup-6/tweet-gbp-php-doc-en-issues.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2022/roundup-6/tweet-gbp-php-doc-en-issues.png -------------------------------------------------------------------------------- /source/assets/post-images/2022/roundup-7/tweet-thephpf-status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2022/roundup-7/tweet-thephpf-status.png -------------------------------------------------------------------------------- /source/assets/post-images/2023/3v4l-property-hooks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2023/3v4l-property-hooks.png -------------------------------------------------------------------------------- /source/assets/post-images/2023/roundup-18/supported_versions_php.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2023/roundup-18/supported_versions_php.png -------------------------------------------------------------------------------- /source/assets/post-images/2024/php84/php-icon-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2024/php84/php-icon-new.png -------------------------------------------------------------------------------- /source/assets/post-images/2024/php84/php-icon-old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2024/php84/php-icon-old.png -------------------------------------------------------------------------------- /source/assets/post-images/2024/report-2023/ben_marks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2024/report-2023/ben_marks.jpg -------------------------------------------------------------------------------- /source/assets/post-images/2024/report-2023/brandon_kelly.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2024/report-2023/brandon_kelly.jpg -------------------------------------------------------------------------------- /source/assets/post-images/2024/report-2023/budget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2024/report-2023/budget.png -------------------------------------------------------------------------------- /source/assets/post-images/2024/report-2023/commits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2024/report-2023/commits.png -------------------------------------------------------------------------------- /source/assets/post-images/2024/report-2023/expenses.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2024/report-2023/expenses.png -------------------------------------------------------------------------------- /source/assets/post-images/2024/report-2023/kevin_dunglas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2024/report-2023/kevin_dunglas.png -------------------------------------------------------------------------------- /source/assets/post-images/2024/report-2023/matt_mullenweg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2024/report-2023/matt_mullenweg.jpg -------------------------------------------------------------------------------- /source/assets/post-images/2024/report-2023/mwop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2024/report-2023/mwop.jpg -------------------------------------------------------------------------------- /source/assets/post-images/2024/report-2023/rasmus_lerdorf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2024/report-2023/rasmus_lerdorf.jpg -------------------------------------------------------------------------------- /source/assets/post-images/2024/report-2023/reviews.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2024/report-2023/reviews.png -------------------------------------------------------------------------------- /source/assets/post-images/2025/2025-05-15-frankenphp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2025/2025-05-15-frankenphp.png -------------------------------------------------------------------------------- /source/assets/post-images/2025/report-2024/artemy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2025/report-2024/artemy.png -------------------------------------------------------------------------------- /source/assets/post-images/2025/report-2024/chad.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2025/report-2024/chad.jpeg -------------------------------------------------------------------------------- /source/assets/post-images/2025/report-2024/courtney.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2025/report-2024/courtney.jpeg -------------------------------------------------------------------------------- /source/assets/post-images/2025/report-2024/eu_cra_wg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2025/report-2024/eu_cra_wg.png -------------------------------------------------------------------------------- /source/assets/post-images/2025/report-2024/gina_openuk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2025/report-2024/gina_openuk.png -------------------------------------------------------------------------------- /source/assets/post-images/2025/report-2024/nils.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2025/report-2024/nils.png -------------------------------------------------------------------------------- /source/assets/post-images/2025/report-2024/sta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2025/report-2024/sta.png -------------------------------------------------------------------------------- /source/assets/post-images/2025/report-2024/taylor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/post-images/2025/report-2024/taylor.png -------------------------------------------------------------------------------- /source/assets/sponsors/aternos-gmbh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/aternos-gmbh.png -------------------------------------------------------------------------------- /source/assets/sponsors/automattic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/automattic.png -------------------------------------------------------------------------------- /source/assets/sponsors/craftcms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/craftcms.png -------------------------------------------------------------------------------- /source/assets/sponsors/cybozu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/cybozu.jpg -------------------------------------------------------------------------------- /source/assets/sponsors/godaddy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/godaddy.png -------------------------------------------------------------------------------- /source/assets/sponsors/jetbrains.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/jetbrains.png -------------------------------------------------------------------------------- /source/assets/sponsors/laravel-logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /source/assets/sponsors/les-tilleuls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/les-tilleuls.png -------------------------------------------------------------------------------- /source/assets/sponsors/manychat.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /source/assets/sponsors/mercari.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/mercari.png -------------------------------------------------------------------------------- /source/assets/sponsors/passbolt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/passbolt.png -------------------------------------------------------------------------------- /source/assets/sponsors/pixiv-inc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/pixiv-inc.jpg -------------------------------------------------------------------------------- /source/assets/sponsors/private-packagist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/private-packagist.png -------------------------------------------------------------------------------- /source/assets/sponsors/sentry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/sentry.png -------------------------------------------------------------------------------- /source/assets/sponsors/stickermule_logo_transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/stickermule_logo_transparent.png -------------------------------------------------------------------------------- /source/assets/sponsors/symfony-corp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/symfony-corp.png -------------------------------------------------------------------------------- /source/assets/sponsors/tideways.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/tideways.jpg -------------------------------------------------------------------------------- /source/assets/sponsors/zend-by-perforce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePHPF/thephp.foundation/8c98ace2c6974b92a4b527d78603bca05bed83f0/source/assets/sponsors/zend-by-perforce.png -------------------------------------------------------------------------------- /source/atom.xml: -------------------------------------------------------------------------------- 1 | --- 2 | use: ["posts"] 3 | permalink: atom.xml 4 | title: Feed 5 | --- 6 | 7 | 8 | <![CDATA[{{ site.title | raw }}]]> 9 | 10 | 11 | {{ site.calculated_date | date('c') }} 12 | {{ site.url }}/ 13 | {% if site.author or site.email %} 14 | 15 | {% if site.author %}{% endif %} 16 | {% if site.email %}{% endif %} 17 | 18 | {% endif %} 19 | Sculpin 20 | {% for post in data.posts|slice(0, 10) %} 21 | 22 | <![CDATA[{{ post.title | raw }}]]> 23 | 24 | {{ post.date|date('c') }} 25 | {{ site.url }}{{ post.url }} 26 | 27 | 28 | {% endfor %} 29 | 30 | -------------------------------------------------------------------------------- /source/blog.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: News 3 | layout: default 4 | permalink: blog 5 | generator: pagination 6 | pagination: 7 | max_per_page: 100 8 | use: 9 | - posts 10 | --- 11 | 12 |
13 |
14 |

{{ page.title }}

15 |
16 | 17 |
18 | {% for post in page.pagination.items %} 19 |
20 |
21 | 22 | {% if post.tags is defined%} 23 |
24 | {% for tag in post.tags %} 25 | 27 | {{ tag | capitalize }} 28 | 29 | {% endfor %} 30 |
31 | {% endif %} 32 |
33 | {% if post.author.name is defined%} 34 | 35 | By 36 | 37 | {% elseif post.author is iterable%} 38 | 39 | By 40 | {% for author in post.author %} 41 | {% if loop.last == false %}, {% endif %} 42 | {% endfor %} 43 | 44 | {% endif %} 45 |
46 |
47 |
48 |

49 | 52 |

53 | 54 |
55 | {{ post.description ?: post.content|striptags|length > 80 ? (post.content|striptags|slice(0, 120) ~ '...')|raw : 56 | post.content|striptags|raw }} 57 |
58 |
59 |
60 | 61 | {% if loop.index == 2 %} 62 | {% include "newsletter.html" %} 63 | {% endif %} 64 | 65 | {% endfor %} 66 |
67 | 68 | {% if page.pagination.previous_page or page.pagination.next_page %} 69 | 86 | {% endif %} 87 |
88 | -------------------------------------------------------------------------------- /source/blog/tag/tag.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Tag Archive 4 | generator: [posts_tag_index, pagination] 5 | pagination: 6 | provider: page.tag_posts 7 | --- 8 | 9 |
10 |
11 |

Tag: {{ page.tag | capitalize }}

12 |
13 | 14 | {% if page.tag == 'roundup' %} 15 |
16 | {% include "newsletter.html" %} 17 |
18 | {% endif %} 19 | 20 |
21 | {% for post in page.pagination.items %} 22 |
23 |
24 |
{{ post.published_at|date("M d, Y") }}
25 | {% if post.tags is defined%} 26 |
27 | {% for tag in post.tags %} 28 | 30 | {{ tag | capitalize }} 31 | 32 | {% endfor %} 33 |
34 | {% endif %} 35 |
36 |
37 |

38 | 39 | {{ post.title|raw }} 40 | 41 |

42 | {% if post.author.name is defined%} 43 |
44 | Published on {{ post.published_at|date("M d, Y") }} 45 | by by {{ post.author.name }} 46 |
47 | {% elseif post.author is iterable%} 48 |
49 | Published on {{ post.published_at|date("M d, Y") }} 50 | by 51 | {% for author in post.author %} 52 | {{ author.name }}{% if loop.last == false %}, {% endif %} 53 | {% endfor %} 54 |
55 | {% endif %} 56 |
57 | {{ post.content|striptags|length > 100 ? (post.content|striptags|slice(0, 150) ~ '...')|raw : 58 | post.content|striptags|raw }} 59 |
60 |
61 |
62 | {% endfor %} 63 |
64 | 65 | {% if page.pagination.previous_page or page.pagination.next_page %} 66 | 83 | {% endif %} 84 |
85 | -------------------------------------------------------------------------------- /source/presentations.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Presentations 4 | --- 5 | 6 |
7 |
8 |

{{ page.title }}

9 |
10 | 11 |
12 | {{ include('presentations-item.html', { 13 | iframe: 'https://www.youtube.com/embed/XE4g1Tl6RQw', 14 | date: 'Feb 05-06, 2024', 15 | place: 'Amsterdam, Netherlands', 16 | conference: 'Laracon EU 2024', 17 | title: 'The PHP Foundation', 18 | description: 'The PHP Foundation is a non-profit organization formed in 2021 by well-known PHP folks as well as major companies from the PHP ecosystem. What we have achieved since then and what we are planning next.', 19 | team: [ 20 | { 21 | image: 'https://avatars.githubusercontent.com/u/1196825?s=200&v=4', 22 | url: 'https://twitter.com/pronskiy', 23 | name: 'Roman Pronskiy', 24 | job: 'Board member, Operations manager', 25 | } 26 | ] 27 | }) }} 28 | 29 | {{ include('presentations-item.html', { 30 | iframe: 'https://speakerdeck.com/player/a151df6d6f35473589cebb7b17caa92d', 31 | date: 'Dec 07-08, 2023', 32 | place: 'Brussels, Belgium', 33 | conference: 'SymfonyCon 2023', 34 | title: 'Symfony, PHP and its Foundation', 35 | description: 'The PHP Foundation supports PHP\'s growth and core developers, emphasizing its vital link with Symfony to ensure the language\'s evolution and relevance.', 36 | team: [ 37 | { 38 | image: 'https://avatars.githubusercontent.com/u/243674?v=4', 39 | url: 'https://twitter.com/nicolasgrekas', 40 | name: 'Nicolas Grekas', 41 | job: 'Board member, Symfony Core Team', 42 | } 43 | ] 44 | }) }} 45 | 46 | {{ include('presentations-item.html', { 47 | iframe: 'https://media.ccc.de/v/froscon2023-2859-the_php_foundation/oembed', 48 | date: 'Aug 05-06, 2023', 49 | place: 'Sankt Augustin, Germany', 50 | conference: 'FrOSCon 2023', 51 | title: 'The PHP Foundation', 52 | description: 'The PHP Foundation is a non-profit organization formed in 2021 by well-known PHP folks as well as major companies from the PHP ecosystem. What we have achieved since then and what we are planning next.', 53 | team: [ 54 | { 55 | image: 'https://avatars.githubusercontent.com/u/25218?s=200&v=4', 56 | url: 'https://phpc.social/@sebastian', 57 | name: 'Sebastian Bergmann', 58 | job: 'Board member', 59 | } 60 | ] 61 | }) }} 62 | 63 | {{ include('presentations-item.html', { 64 | iframe: 'https://www.youtube.com/embed/JBPtPy9iSP0', 65 | date: 'Oct 13-14, 2022', 66 | place: 'Paris, France', 67 | conference: 'Forum PHP 2022', 68 | title: 'The PHP Foundation: The Past, the Present, and the Future', 69 | description: 'A complex saga of developers scattered around the world, all living under the rule of the elePHPant technology.', 70 | team: [ 71 | { 72 | image: 'https://avatars.githubusercontent.com/u/25218?s=200&v=4', 73 | url: 'https://phpc.social/@sebastian', 74 | name: 'Sebastian Bergmann', 75 | job: 'Board member', 76 | }, 77 | { 78 | image: 'https://avatars.githubusercontent.com/u/1196825?s=200&v=4', 79 | url: 'https://twitter.com/pronskiy', 80 | name: 'Roman Pronskiy', 81 | job: 'Board member, Operations manager', 82 | } 83 | ] 84 | }) }} 85 |
86 |
87 | -------------------------------------------------------------------------------- /source/robots.txt: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: none 3 | --- 4 | 5 | User-agent: * 6 | 7 | Disallow: /404.html 8 | 9 | Sitemap: {{ site.url }}/sitemap.xml 10 | -------------------------------------------------------------------------------- /source/sitemap.xml: -------------------------------------------------------------------------------- 1 | --- 2 | use: ["pages", "posts"] 3 | permalink: sitemap.xml 4 | title: Sitemap 5 | --- 6 | 7 | 8 | 9 | {{ site.url }} 10 | {{ site.calculated_date | date('Y-m-d') }} 11 | daily 12 | 0.8 13 | 14 | {% for post in data.posts %} 15 | 16 | {{ site.url }}{{ post.url }} 17 | {{ post.date|date('c') }} 18 | weekly 19 | 1.0 20 | 21 | {% endfor %} 22 | {% for page in data.pages %} 23 | 24 | {{ site.url }}{{ page.url }} 25 | {{ page.date|date('c') }} 26 | monthly 27 | 1.0 28 | 29 | {% endfor %} 30 | 31 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: ["./source/**/*.html"], 3 | theme: { 4 | extend: { 5 | backgroundSize: { 6 | 'horizontal': 'auto 0', 7 | }, 8 | colors: { 9 | 'foundation': 'rgba(25, 25, 28, .3)', 10 | 'baseblack': '#19191c', 11 | 'fbg': 'rgba(25, 25, 28, .1)', 12 | 'hborder': 'rgba(39, 40, 44, .2)', 13 | }, 14 | transitionProperty: { 15 | 'footer': 'background-size, color', 16 | } 17 | }, 18 | 19 | screens: { 20 | 'sm': '640px', 21 | 'md': '768px', 22 | 'lg': '1024px', 23 | 'xl': '1280px', 24 | 'smmax': {'max': '550px'} 25 | } 26 | }, 27 | plugins: [ 28 | require('tailwindcss'), 29 | require('autoprefixer'), 30 | ], 31 | } 32 | --------------------------------------------------------------------------------