FAQ
Hi internals,

so based on a discussion of php.pecl we thought about using the php_getopt
for the PHP_FUNCTION(getopt) instead of the system provided getopt. Here
is the patch for that. Hopefully someone is reviewing and commiting the
patch as i don't have karma.

It addes main/getopt.c main/php_getopt.h to the build system and uses the
php_getopt function in the ext/standard/basic_functions.c. Furthermore it
removes all HAVE_GETOPT and HARTMUT_0 switches. it also enable longopts
for both win and linux in the form

$opt = getopt("a", array("param:", "param2"));

Where ":" in the longopts marks that the parameter takes an argument.

The main/getopt.c and main/php_getopt.h is in fact taken from
sapi/cli/getopt.c and sapi/cli/php_getopt.h but is slightly modified.

http://experimentalworks.net/~dsp/getopt.patch.tar.gz

It also runs on windows.

To apply the patch:
1) remove
sapi/cli/getopt.c sapi/cli/php_getopt.h
sapi/cgi/getopt.c sapi/cgi/php_getopt.h

2) add main/getopt.c and main/php_getopt.h frm the archive
3) apply the patch.

Search Discussions

  • Marcus Boerger at Aug 7, 2007 at 12:23 pm
    Hello Jani,

    David has a point here. So first of all we should move getopt
    implementation out of CLI/CGI and into main. Could you do that
    first Jani?

    marcus

    Monday, August 6, 2007, 3:57:26 PM, you wrote:
    Hi internals,
    so based on a discussion of php.pecl we thought about using the php_getopt
    for the PHP_FUNCTION(getopt) instead of the system provided getopt. Here
    is the patch for that. Hopefully someone is reviewing and commiting the
    patch as i don't have karma.
    It addes main/getopt.c main/php_getopt.h to the build system and uses the
    php_getopt function in the ext/standard/basic_functions.c. Furthermore it
    removes all HAVE_GETOPT and HARTMUT_0 switches. it also enable longopts
    for both win and linux in the form

    $opt = getopt("a", array("param:", "param2"));
    Where ":" in the longopts marks that the parameter takes an argument.
    The main/getopt.c and main/php_getopt.h is in fact taken from
    sapi/cli/getopt.c and sapi/cli/php_getopt.h but is slightly modified.
    http://experimentalworks.net/~dsp/getopt.patch.tar.gz
    It also runs on windows.
    To apply the patch:
    1) remove
    sapi/cli/getopt.c sapi/cli/php_getopt.h
    sapi/cgi/getopt.c sapi/cgi/php_getopt.h
    2) add main/getopt.c and main/php_getopt.h frm the archive
    3) apply the patch.



    Best regards,
    Marcus
  • Jani Taskinen at Aug 7, 2007 at 3:00 pm
    Yes, I know about this. I was wondering about this thing long time
    ago..just never got around doing anything about it.. :D

    But let's wait for PHP 5.3 branch to get opened first.

    --Jani

    On Tue, 2007-08-07 at 14:22 +0200, Marcus Boerger wrote:
    Hello Jani,

    David has a point here. So first of all we should move getopt
    implementation out of CLI/CGI and into main. Could you do that
    first Jani?

    marcus

    Monday, August 6, 2007, 3:57:26 PM, you wrote:
    Hi internals,
    so based on a discussion of php.pecl we thought about using the php_getopt
    for the PHP_FUNCTION(getopt) instead of the system provided getopt. Here
    is the patch for that. Hopefully someone is reviewing and commiting the
    patch as i don't have karma.
    It addes main/getopt.c main/php_getopt.h to the build system and uses the
    php_getopt function in the ext/standard/basic_functions.c. Furthermore it
    removes all HAVE_GETOPT and HARTMUT_0 switches. it also enable longopts
    for both win and linux in the form

    $opt = getopt("a", array("param:", "param2"));
    Where ":" in the longopts marks that the parameter takes an argument.
    The main/getopt.c and main/php_getopt.h is in fact taken from
    sapi/cli/getopt.c and sapi/cli/php_getopt.h but is slightly modified.
    http://experimentalworks.net/~dsp/getopt.patch.tar.gz
    It also runs on windows.
    To apply the patch:
    1) remove
    sapi/cli/getopt.c sapi/cli/php_getopt.h
    sapi/cgi/getopt.c sapi/cgi/php_getopt.h
    2) add main/getopt.c and main/php_getopt.h frm the archive
    3) apply the patch.



    Best regards,
    Marcus
  • Stanislav Malyshev at Aug 7, 2007 at 8:02 pm

    David has a point here. So first of all we should move getopt
    implementation out of CLI/CGI and into main. Could you do that
    first Jani?
    Why one would need getopt outside of cgi/cli? I.e. where would these
    options come from?
    --
    Stanislav Malyshev, Zend Software Architect
    stas@zend.com http://www.zend.com/
    (408)253-8829 MSN: stas@zend.com
  • David Soria Parra at Aug 7, 2007 at 8:26 pm

    Why one would need getopt outside of cgi/cli? I.e. where would these
    options come from?
    initially the idea was to use getopt on windows machines. After proposing
    my patch which just includes the NetBSD getopt(), there was a
    recommandation in php.pecl to use the php_getopt instead of the system
    provided getopt to implement the PHP_FUNCTION(getopt).

    This imho makes sense. We got windows support as well as long parameter
    support. As we use it in ext/standard/basic_functions.c we have to move
    the getopt.c out of sapi/cli.
  • Johannes Schlüter at Aug 7, 2007 at 9:05 pm

    On Tue, 2007-08-07 at 13:02 -0700, Stanislav Malyshev wrote:
    David has a point here. So first of all we should move getopt
    implementation out of CLI/CGI and into main. Could you do that
    first Jani?
    Why one would need getopt outside of cgi/cli? I.e. where would these
    options come from?
    Having the file in CLI as well as in CGI isn't good for maintaining it,
    therefore we should move it imo.

    johannes
  • Johannes Schlüter at Aug 7, 2007 at 3:59 pm
    David,
    On Mon, 2007-08-06 at 09:57 -0400, David Soria Parra wrote:
    Hi internals,

    so based on a discussion of php.pecl we thought about using the php_getopt
    for the PHP_FUNCTION(getopt) instead of the system provided getopt. Here
    is the patch for that. Hopefully someone is reviewing and commiting the
    patch as i don't have karma.
    The idea is good imo, but there are a few things we have to do:

    - We need more tests, as far as I saw using grep we just have a single
    testcase for getopt() which is certainly not enough when replacing the
    implementation.

    - The current implementation is not thread-safe, I don't know about the
    glibc implementation but if we use our own implementation for
    PHP's getopt function that should be threadsafe.

    - If you move php_getopt to main you have to mark it as PHPAPI so the
    SAPIs can use it.

    Maybe there's more, didn't do a deeper review of the patch, yet, since
    I'd like to wait a) until Jani moved the files and b) we have more
    tests :-)

    johannes
  • Jani Taskinen at Aug 7, 2007 at 4:13 pm
    Thread safe for CGI and CLI ? :)
    Or do you find the function useful outside those SAPIs?

    --Jani


    Johannes Schlüter kirjoitti:
    David,
    On Mon, 2007-08-06 at 09:57 -0400, David Soria Parra wrote:
    Hi internals,

    so based on a discussion of php.pecl we thought about using the php_getopt
    for the PHP_FUNCTION(getopt) instead of the system provided getopt. Here
    is the patch for that. Hopefully someone is reviewing and commiting the
    patch as i don't have karma.
    The idea is good imo, but there are a few things we have to do:

    - We need more tests, as far as I saw using grep we just have a single
    testcase for getopt() which is certainly not enough when replacing the
    implementation.

    - The current implementation is not thread-safe, I don't know about the
    glibc implementation but if we use our own implementation for
    PHP's getopt function that should be threadsafe.

    - If you move php_getopt to main you have to mark it as PHPAPI so the
    SAPIs can use it.

    Maybe there's more, didn't do a deeper review of the patch, yet, since
    I'd like to wait a) until Jani moved the files and b) we have more
    tests :-)

    johannes
  • Johannes Schlüter at Aug 7, 2007 at 5:23 pm

    On Tue, 2007-08-07 at 19:13 +0300, Jani Taskinen wrote:
    Thread safe for CGI and CLI ? :)
    Or do you find the function useful outside those SAPIs?
    Well David's plan is to use the implementation for PHP-level getopt()
    and I can imagine doing crazy stuff, so if we can make it thread-safe in
    a good way we should do that - I've seen to many people doing too crazy
    stuff...

    Of course that's not high priority...

    johannes
    --Jani


    Johannes Schlüter kirjoitti:
    David,
    On Mon, 2007-08-06 at 09:57 -0400, David Soria Parra wrote:
    Hi internals,

    so based on a discussion of php.pecl we thought about using the php_getopt
    for the PHP_FUNCTION(getopt) instead of the system provided getopt. Here
    is the patch for that. Hopefully someone is reviewing and commiting the
    patch as i don't have karma.
    The idea is good imo, but there are a few things we have to do:

    - We need more tests, as far as I saw using grep we just have a single
    testcase for getopt() which is certainly not enough when replacing the
    implementation.

    - The current implementation is not thread-safe, I don't know about the
    glibc implementation but if we use our own implementation for
    PHP's getopt function that should be threadsafe.

    - If you move php_getopt to main you have to mark it as PHPAPI so the
    SAPIs can use it.

    Maybe there's more, didn't do a deeper review of the patch, yet, since
    I'd like to wait a) until Jani moved the files and b) we have more
    tests :-)

    johannes
  • Jani Taskinen at Oct 1, 2007 at 2:05 pm
    Patch applied to HEAD / PHP_5_3.

    --Jani
    On Mon, 2007-08-06 at 09:57 -0400, David Soria Parra wrote:
    Hi internals,

    so based on a discussion of php.pecl we thought about using the php_getopt
    for the PHP_FUNCTION(getopt) instead of the system provided getopt. Here
    is the patch for that. Hopefully someone is reviewing and commiting the
    patch as i don't have karma.

    It addes main/getopt.c main/php_getopt.h to the build system and uses the
    php_getopt function in the ext/standard/basic_functions.c. Furthermore it
    removes all HAVE_GETOPT and HARTMUT_0 switches. it also enable longopts
    for both win and linux in the form

    $opt = getopt("a", array("param:", "param2"));

    Where ":" in the longopts marks that the parameter takes an argument.

    The main/getopt.c and main/php_getopt.h is in fact taken from
    sapi/cli/getopt.c and sapi/cli/php_getopt.h but is slightly modified.

    http://experimentalworks.net/~dsp/getopt.patch.tar.gz

    It also runs on windows.

    To apply the patch:
    1) remove
    sapi/cli/getopt.c sapi/cli/php_getopt.h
    sapi/cgi/getopt.c sapi/cgi/php_getopt.h

    2) add main/getopt.c and main/php_getopt.h frm the archive
    3) apply the patch.
    --
    Patches/Donations: http://pecl.php.net/~jani/

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-internals @
categoriesphp
postedAug 6, '07 at 1:57p
activeOct 1, '07 at 2:05p
posts10
users6
websitephp.net

People

Translate

site design / logo © 2022 Grokbase