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

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

  • zaytsewa

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

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

    в консоли наконец-то заработал hello_world();
    а вот на странице он работать не хочет
    #include делать надо в php коде??
    или ф-ция из подгруженного модуля видна везде?
  • Nyaah

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

    Spritz 4 августа 2010 г. 20:14, спустя 6 часов 8 минут 16 секунд

    если расширение загружено пыхой, то функции/классы, объявленные в расширении должны быть видна отовсюду
    Work, buy, consume, die
  • zaytsewa

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

    Spritz 5 августа 2010 г. 11:55, спустя 15 часов 41 минуту 46 секунд

    у меня почему-то разные настройки для php, который в консоли и для php, который использует apache…
    (смотрела по phpinfo)
    как такое может быть и как с этим бороться?
    +мне нужны переменные окружения из shell, если запускать браузер изх консоли - не помогает
  • zaytsewa

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

    Spritz 5 августа 2010 г. 13:28, спустя 1 час 32 минуты 46 секунд

    и ещё у меня проблемы с подключением библиотек:
    директории к *.so я указала

    в config.m4 прописала
    PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $LIBDIR, HAVE_HELLO)

    PHP_ADD_LIBRARY(qt-mt, 1, HAVE_HELLO)
    PHP_ADD_LIBRARY( qui, 1, HAVE_HELLO)

    такое впечатление, что не указана INCLUDEPATH

    при выполнении make тоже никаких признаков подключения библиотек…
  • zaytsewa

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

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

    всё, с библиотеками разобралась вроде бы…
    теперь неожиданно возникла ошибка, которой раньше не было

    char* hello_world()
    {
    return "hello_world!";
    }
    PHP_FUNCTION(hello_world)
    {
    // return char*;
    RETURN_STRING(hello_world(),1);
    }

    ругается вот так:
    /home/kate/develop/php_hello/hello.cpp:28: warning: deprecated conversion from string constant to 'char*'
    /home/kate/develop/php_hello/hello.cpp: In function 'void zif_hello_world(int, zval*, zval**, zval*, int)':
    /home/kate/develop/php_hello/hello.cpp:37: error: 'hello_world' was not declared in this scope
  • Nyaah

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

    Spritz 5 августа 2010 г. 21:00, спустя 4 часа 7 минут 18 секунд

    у меня почему-то разные настройки для php, который в консоли и для php, который использует apache…
    (смотрела по phpinfo)
    как такое может быть и как с этим бороться?
    незнаю какой у вас дистрибутив линукса, но в убунту php-cli и для модуля апача php имеет разные конфиги
    +мне нужны переменные окружения из shell, если запускать браузер изх консоли - не помогает
    дак естественно, пхп то запущен как модуль апача
    /home/kate/develop/php_hello/hello.cpp:28: warning: deprecated conversion from string constant to 'char*'

    юзаете преобразование типов корявое из const char* в char*, сама функция кривая короче, нельзя так делать: return "hello_world!"; (черевато либо утечками памяти либо чтением из чужого адресного пространства)
    /home/kate/develop/php_hello/hello.cpp:37: error: 'hello_world' was not declared in this scope
    функцию не объявили? воткните в заголовочный файл куда-нибуть char* hello_world(); чтобы цпп узнал, что такая функция есть, а то чейчас у вас только реализация функции есть, а её объявления нет.
    Work, buy, consume, die
  • zaytsewa

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

    Spritz 6 августа 2010 г. 0:16, спустя 3 часа 15 минут 43 секунды


    юзаете преобразование типов корявое из const char* в char*, сама функция кривая короче, нельзя так делать: return "hello_world!"; (черевато либо утечками памяти либо чтением из чужого адресного пространства)
    /home/kate/develop/php_hello/hello.cpp:37: error: 'hello_world' was not declared in this scope
    функцию не объявили? воткните в заголовочный файл куда-нибуть char* hello_world(); чтобы цпп узнал, что такая функция есть, а то чейчас у вас только реализация функции есть, а её объявления нет.


    объявление ф-ции в заголовочном файле есть, просто здесь не приведено
    с const char* пробовала - история та же
    странно, но до подрубания либ это работало…
  • zaytsewa

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

    Spritz 9 августа 2010 г. 12:44, спустя 3 дня 12 часов 27 минут

    у меня почему-то разные настройки для php, который в консоли и для php, который использует apache…
    (смотрела по phpinfo)
    как такое может быть и как с этим бороться?

    незнаю какой у вас дистрибутив линукса, но в убунту php-cli и для модуля апача php имеет разные конфиги


    посмотрела файлы php.ini и там и там, они идентичные
    где ещё искать различия?

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