ФорумПрограммированиеPHP для идиотовРасширения PHP → самописное расширение на C++

самописное расширение на C++

  • zaytsewa

    Сообщения: 14 Репутация: N Группа: Кто попало

    Spritz 2 августа 2010 г. 1:26

    Привет всем!
    Пытаюсь создать и использовать тестовый модуль по этому мануалу
    http://devzone.zend.com/article/4486
    Должен получиться установленный php-модуль, использующий самописную библиотеку на С++
    в итоге модуль у меня устанавливается, а при загрузке в браузер тестика

    // create a 5 gear car
    $car = new Car(5);
    print $car->getCurrentSpeed(); // prints '0'
    $car->accelerate();
    print $car->getCurrentSpeed(); // prints '5'

    вываливается ошибка
    Fatal error: Class 'Car' not found in /var/www/test_php/test.php on line 2

    в php.ini у меня прописано

    ;Windows Extensions
    ;Note that MySQL and ODBC support is now built in, so no dll is needed for it.
    ;
    ;extension=php_bz2.dll
    ;extension=php_cpdf.dll

    ;extension=php_xslt.dll
    ;extension=php_yaz.dll
    ;extension=php_zip.dll
    extention=vehicles.so

    тут правда чисто виндовые почему-то библиотеки….
    может куда-то в другое место надо прописать extention=vehicles.so
    я не нашла….
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 2 августа 2010 г. 1:33, спустя 7 минут 9 секунд

    а он нормально скомпиллировался?
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 2 августа 2010 г. 13:17, спустя 11 часов 44 минуты 17 секунд

    винда или линукс для начала? Если линукс, то файл с расширением в папку с расширениями скопирован?
    Work, buy, consume, die
  • Chiffa

    Сообщения: 510 Репутация: N Группа: Джедаи

    Spritz 3 августа 2010 г. 1:07, спустя 11 часов 50 минут 4 секунды

    ;Windows Extensions

    тут правда чисто виндовые почему-то библиотеки….

    стало быть винда
  • zaytsewa

    Сообщения: 14 Репутация: N Группа: Кто попало

    Spritz 3 августа 2010 г. 2:56, спустя 1 час 49 минут 4 секунды

    я собираю под линукс!
    я собрала 2 тестовых примера, точнее попыталась

    отсюда http://devzone.zend.com/article/4486

    и отсюда http://habrahabr.ru/blogs/php/75445/

    в первом примере у меня даже модуль добавился, назвался он ужасно странно правда, но в тесте работать отказался
    во втором примере модуль у меня даже не добавился

    своё задание я делать даже не пыталась ещё, тк там есть зависимость от ещё одной самописной либы и от Qt и что с этим делать пока непонятно
    реально ли это вообще?

    вследствие этого возникли вопросы

    1) в какой папке необходимо собирать исходники - в любой или в include/php/ext/ ?
    2) как надо устанавливать собранный модуль? make install
    php -d"extension=mylib.so" -m
    или
    cp ./modules/mylib.so lib/php/extensions

    как и где указать, что мой модуль зависит ещё от динамических сишных библиотек и от Qt?

    +я ничего не поняла зачем переписывать код функций, которые и так написаны - ладно ещё с выделением/удалением памяти - это ещё хоть как-то понятно, а вот всё остальное…

    + отсюда вопрос - нужны ли исходники, т.е. исходная либа на C где она должна лежать
    где указать путь к ней??
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 3 августа 2010 г. 3:21, спустя 25 минут 8 секунд

    после того как прописали свой экстеншен, выполните php -m
    что он выводит?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • zaytsewa

    Сообщения: 14 Репутация: N Группа: Кто попало

    Spritz 3 августа 2010 г. 3:27, спустя 5 минут 24 секунды

    сейчас пытаюсь собрать hello_world
    php -m моего модуля не выводит
    в php-config
    –extension-dir [/usr/local/lib/php/extensions/no-debug-non-zts-20090626]
    как это исправить?? (кривой путь) и откуда это вообще взялось?
    как повторно пересобрать модуль после исправления?

    madworld:/usr/local/include/php/ext/hello# make

    Build complete.
    Don't forget to run 'make test'.

    у меня вот так постоянно
  • zaytsewa

    Сообщения: 14 Репутация: N Группа: Кто попало

    Spritz 3 августа 2010 г. 3:35, спустя 8 минут 29 секунд

    при этом в php.ini

    ; Directory in which the loadable extensions (modules) reside.
    extension_dir = "./"
  • zaytsewa

    Сообщения: 14 Репутация: N Группа: Кто попало

    Spritz 3 августа 2010 г. 4:02, спустя 26 минут 39 секунд

    исправила config
    модуль установился
    при попытке использования
    kate@madworld:/usr/local/include/php/ext/hello$ php -r 'echo hello_world();'

    Fatal error: Call to undefined function hello_world() in Command line code on line 1
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 3 августа 2010 г. 4:31, спустя 28 минут 53 секунды

    оспади, девушка, ну сдался вам этот модуль? Ну не тянете вы написание экстеншенов к пыху на Сях. А тянули бы - так не задавали б подобных вопросов а самостоятельно их разруливали.
    Спустя 69 сек.
    зачем тебе вообще какой-то экстеншн? Используй опкод-кешеры, все будет шустренько работать.
  • zaytsewa

    Сообщения: 14 Репутация: N Группа: Кто попало

    Spritz 3 августа 2010 г. 5:22, спустя 51 минуту 14 секунд

    о спасибо!
    приятно слышать)
    да мне вообще было бы проще
    shell-exec сделать)
    при установке XCache происходит ошибка
    AUTOCHECK ERROR: ==== asm zend_op_array =================
    make: *** [processor.out] Ошибка 1
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 3 августа 2010 г. 9:15, спустя 3 часа 53 минуты 12 секунд


    зачем тебе вообще какой-то экстеншн? Используй опкод-кешеры, все будет шустренько работать.
    не всегда
    Work, buy, consume, die
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 3 августа 2010 г. 9:21, спустя 5 минут 29 секунд

    там в комментах писали, что как-то криво работает модуль, собранный из исходников в статье, сам автор сказал качать исходник отсюда, может в этом проблема
    Спустя 10 сек.
    это по первому примеру
    Work, buy, consume, die
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 3 августа 2010 г. 9:29, спустя 8 минут 41 секунду

    1) в какой папке необходимо собирать исходники - в любой или в include/php/ext/ ?
    В любой, главное чтобы компилятор заголовочные файлы нашёл, а линковщик библиотеки необходимые
    как и где указать, что мой модуль зависит ещё от динамических сишных библиотек и от Qt?
    при линковке -l lib_name.so
    Work, buy, consume, die
  • zaytsewa

    Сообщения: 14 Репутация: N Группа: Кто попало

    Spritz 4 августа 2010 г. 0:06, спустя 14 часов 36 минут 53 секунды


    там в комментах писали, что как-то криво работает модуль, собранный из исходников в статье, сам автор сказал качать исходник отсюда, может в этом проблема
    Спустя 10 сек.
    это по первому примеру


    скачала - результат тот же…
    Fatal error: Class 'Car' not found in /var/www/test_php/test.php on line 2

    после php -d"extension=vehicles.so" -m
    vehicles в списке модулей выводится
    при выполнении php -m сразу после этого уже не выводится
    в php.ini строка extension=vehicles.so вписана

Пожалуйста, авторизуйтесь, чтобы написать комментарий!