WordPress / wordpress-playground

Run WordPress in the browser via WebAssembly PHP
https://w.org/playground/
GNU General Public License v2.0
1.65k stars 264 forks source link

Error because of lack of cURL and allow_url_fopen #1008

Closed jdevalk closed 1 month ago

jdevalk commented 9 months ago

When you try to use the Plausible WordPress plugin on the WordPress playground, you get the following fatal error:

Fatal error: Uncaught RuntimeException: Plausible\Analytics\WP\Client\Lib\GuzzleHttp requires cURL, the allow_url_fopen ini setting, or a custom HTTP handler. in /wordpress/wp-content/plugins/plausible-analytics/src/Client/lib/Lib/GuzzleHttp/Utils.php:105 Stack trace:

0 /wordpress/wp-content/plugins/plausible-analytics/src/Client/lib/Lib/GuzzleHttp/HandlerStack.php(49): Plausible\Analytics\WP\Client\Lib\GuzzleHttp\Utils::chooseHandler()

1 /wordpress/wp-content/plugins/plausible-analytics/src/Client/lib/Lib/GuzzleHttp/Client.php(53): Plausible\Analytics\WP\Client\Lib\GuzzleHttp\HandlerStack::create()

2 /wordpress/wp-content/plugins/plausible-analytics/src/Client.php(36): Plausible\Analytics\WP\Client\Lib\GuzzleHttp\Client->__construct()

3 /wordpress/wp-content/plugins/plausible-analytics/src/Admin/Provisioning.php(40): Plausible\Analytics\WP\Client->__construct()

4 /wordpress/wp-content/plugins/plausible-analytics/src/Plugin.php(42): Plausible\Analytics\WP\Admin\Provisioning->__construct()

5 /wordpress/wp-includes/class-wp-hook.php(3): Plausible\Analytics\WP\Plugin->register_services('')

6 /wordpress/wp-includes/class-wp-hook.php(3): WP_Hook->apply_filters(NULL, Array)

7 /wordpress/wp-includes/plugin.php(2): WP_Hook->do_action(Array)

8 /wordpress/wp-settings.php(2): do_action('plugins_loaded')

9 /wordpress/wp-config.php(99): require_once('/wordpress/wp-s...')

10 /wordpress/wp-load.php(2): require_once('/wordpress/wp-c...')

11 /wordpress/wp-admin/admin.php(2): require_once('/wordpress/wp-l...')

12 /wordpress/wp-admin/index.php(2): require_once('/wordpress/wp-a...')

13 {main} thrown in /wordpress/wp-content/plugins/plausible-analytics/src/Client/lib/Lib/GuzzleHttp/Utils.php on line 105

With networking enabled, maybe allow_url_fopen should be true?

I've also filed an issue with Plausible who should catch this fatal error.

CodyReichert commented 9 months ago

I don't think I'm providing any new info here, but wanted to chime in that I have the same issue when adding a blueprint for SimplyRETS. We use curl when available or fall back to file_get_contents.

cURL isn't enabled and file_get_contents() returns the following error:

Warning: file_get_contents(): https:// wrapper is disabled in the server configuration by allow_url_fopen=0 in /wordpress/wp-content/plugins/simply-rets/simply-rets-api-helper.php on line 287

Warning: file_get_contents(https://...<url>): Failed to open stream: no suitable wrapper could be found in /wordpress/wp-content/plugins/simply-rets/simply-rets-api-helper.php on line 287

Really cool work so far though, I'm looking forward to this support.

jcvignoli commented 9 months ago

With my plugin, which also needs CuRL, I get a different message:

PHP Fatal error: Uncaught Error: Call to undefined function Imdb\curl_init() in /wordpress/wp-content/plugins/lumiere-movies/vendor/jcvignoli/imdbphp/src/Imdb/Request.php:37

Seems like php extension CuRL is missing.

adamziel commented 8 months ago

Libcurl and stream wrappers are indeed not supported at the moment. This issue explores the challenge:

https://github.com/WordPress/wordpress-playground/issues/85

To bring some good news, I got a basic file_get_contents("https://mysite.com") support to work in https://github.com/WordPress/wordpress-playground/pull/1051, and the technique used would unblock libcurl support, too. Note that PR is focused on another topic and needs a lot of cleaning up as it's an amalgamate of many different explorations.

adamziel commented 8 months ago

I've extracted the HTTPS support, which is a pre-requisite to supporting libcurl, to a separate PR where it can be discussed and iterated on https://github.com/WordPress/wordpress-playground/pull/1093.

mhsdef commented 5 months ago

Yeah, we're going to need libcurl too for heavy adoption in WPVIP.

adamziel commented 4 months ago

@mhsdef libcurl is supported in Playground CLI now, we'll update this issue once it's also available in the browser.

adamziel commented 1 month ago

Curl is available in web browsers since https://github.com/WordPress/wordpress-playground/pull/1935. I've confirmed the https://wordpress.org/plugins/plausible-analytics/ plugin installs cleanly – although that might also be thanks to their work after @jdevalk reported the crash. Either way, curl is in place! The typical web CORS limitations apply as all network calls are handled using fetch() – to solve for that in the medium term, we're figuring out a generalized CORS proxy for Playground.