Я написал расширение PHP, и его можно было скомпилировать и запустить под Linux. Но на окнах я встретил некоторые проблемы.
Я сделал компиляцию по окнам в соответствии с http://blog.slickedit.com/?p=128 с исходной версией PHP 5.2.10, а после компиляции она сгенерировала файл dll. Но когда я пытался использовать файл dll, он сообщал мне о проблемах с памятью при запуске Apache (Wamp server). И затем я начал процесс отладки, казалось, что у REGISTER_INI_ENTRIES () возникли проблемы.
Вот исходный код расширения PHP, http://www.bluefly.cn/xsplit.tar.gz , и он отлично работает в Linux. Но я также хочу, чтобы он работал в Windows.
Извините, я не профессионал, поэтому надеюсь, что кто-то может мне помочь.
Любая помощь приветствуется и заранее благодарит ~
Причина, по которой вы не видите проблему в Linux, скорее всего, вы делаете поточную безопасную структуру в Windows, но не в Linux. Попробуйте добавить --enable-maintainer-zts
в Linux, а затем проверить с помощью valgrind ( USE_ZEND_ALLOC=0 valgrind /usr/bin/php script.php
)
С быстрым взглядом на ваш код я увидел, что вы не определили свои php_xsplit_init_globals
которые инициализировали переменные потока. Функция Tis должна быть зарегистрирована от MINIT
, добавив
ZEND_INIT_MODULE_GLOBALS(xsplit, php_yplist_init_globals, NULL);
вызов. Возможно, что-то еще не так, но это первое, что я видел.
Wamp скомпилирован с использованием VC6, и требуется, чтобы ваш модуль был скомпилирован с помощью VC6.
Сообщение Romain Bourdon (автор WampServer): Поскольку Apache скомпилирован с VC6, если вы хотите запустить PHP как модуль (как в WampServer), вы должны скомпилировать модуль с VC6.
Если вы хотите скомпилировать свой модуль с более новой платформой, вам нужно скомпилировать весь дистрибутив PHP-CGI и запустить его как (быстрый) CGI.
Если вы можете прочитать французский (или если вы знаете, как пользоваться переводчиком), вы можете прочитать этот пост .