Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PhpNode and PhpCgiNode locateFile breaks dynamic imports #55

Open
mglaman opened this issue Aug 21, 2024 · 5 comments
Open

PhpNode and PhpCgiNode locateFile breaks dynamic imports #55

mglaman opened this issue Aug 21, 2024 · 5 comments

Comments

@mglaman
Copy link

mglaman commented Aug 21, 2024

I'm trying out PhpNode and the following:

        const php = new PhpNode({
            persist: {
                mountPath: '/persist',
                localPath: process.cwd() + '/tests/fixtures/'
            },
            sharedLibs: [
                await import('php-wasm-zlib'),
                await import('php-wasm-libzip')

All is good until the following: See following screenshot

		args.locateFile = path => {
			let located = userLocateFile(path);
			if(located !== undefined)
			{
				return located;
			}
			if(urlLibs[path])
			{
				return urlLibs[path];
			}
		};

Screenshot 2024-08-21 at 4 23 28 PM

The path is php8.3-zlib.so, but urlLibs[path] has the proper URL. But located returns a value even though it is wrong.

locateFile never returns undefined when using PhpNode and returns files which do not exist. See result in the next screenshot.

Screenshot 2024-08-21 at 4 26 24 PM

@mglaman
Copy link
Author

mglaman commented Aug 21, 2024

Possible workaround:

import { PhpBase } from 'php-wasm/PhpBase.mjs';
import PhpBinary from 'php-wasm/php-node.mjs';

        const php = new PhpBase(PhpBinary, {
            persist: {
                mountPath: '/persist',
                localPath: process.cwd() + '/tests/fixtures/'
            },
            sharedLibs: [
                await import('php-wasm-zlib'),
                await import('php-wasm-libzip')
``

@mglaman
Copy link
Author

mglaman commented Aug 21, 2024

I don't think this is quite working either as when I debug I find it trying to load php83-zlib.so.so

@mglaman
Copy link
Author

mglaman commented Aug 21, 2024

WIP branch where I'm trying this out: https://github.com/mglaman/wasm-drupal/blob/9768d93d0b4bca056a87d40dfc5a06264b2c5190/tests/init-phpcode.test.js

Warning: PHP Startup: Invalid library (maybe not a PHP library) 'libzip.so' in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'php8.3-zlib.so' (tried: ./php8.3-zlib.so (Tried to lookup unknown symbol "_zend_extension_entry" in dynamic lib: libzip.so), ./php8.3-zlib.so.so ()) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'zlib.so' (tried: ./zlib.so (), ./zlib.so.so ()) in Unknown on line 0

@mglaman
Copy link
Author

mglaman commented Aug 21, 2024

Okay, I got it working this way: using PhpBase and not PhpNode

import { PhpBase } from 'php-wasm/PhpBase.mjs';
import PhpBinary from 'php-wasm/php-node.mjs';

        const php = new PhpBase(PhpBinary, {
            persist: {
                mountPath: '/persist',
                localPath: process.cwd() + '/tests/fixtures/'
            },
            sharedLibs: [
                {
                    name: `php${PhpNode.phpVersion}-zip.so`,
                    url: `${process.cwd()}/node_modules/php-wasm-libzip/php${PhpNode.phpVersion}-zip.so`,
                    ini: true
                },
                {
                    name: `libzip.so`,
                    url: `${process.cwd()}/node_modules/php-wasm-libzip/libzip.so`,
                    ini: false
                },
                {
                    name: `php${PhpNode.phpVersion}-zlib.so`,
                    url: `${process.cwd()}/node_modules/php-wasm-zlib/php${PhpNode.phpVersion}-zlib.so`,
                    ini: true
                },
                {
                    name: `libz.so`,
                    url: `${process.cwd()}/node_modules/php-wasm-zlib/libz.so`,
                    ini: false
                },
            ]
        });

@mglaman mglaman changed the title PhpNode.locateFile breaks dynamic imports PhpNode and PhpCgiNode locateFile breaks dynamic imports Aug 22, 2024
@seanmorris
Copy link
Owner

ah, this is my fault for getting "creative."

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants