PHP 7.1 + Windows-læsningslængde er ikke alle funktioner

Indlæg af Hanne Mølgaard Plasc

Problem



En af forbedringerne i PHP7.1 er, at i Windows er linjelængden tilgængelig uden for boksen. Jeg har problemer med at bruge alle funktionerne, da de ikke alle eksisterer. Følgende kode:


$functions = [
    'readline\_add\_history',
    'readline\_callback\_handler\_install',
    'readline\_callback\_handler\_remove',
    'readline\_callback\_read\_char',
    'readline\_clear\_history',
    'readline\_completion\_function',
    'readline\_info',
    'readline\_list\_history',
    'readline\_on\_new\_line',
    'readline\_read\_history',
    'readline\_redisplay',
    'readline\_write\_history',
    'readline'
];
foreach($functions as $function) {
    echo $function . (function\_exists($function) ? ' exists' : ' does not exist') . PHP\_EOL;
}


... producerer følgende output:


readline\_add\_history exists
readline\_callback\_handler\_install does not exist
readline\_callback\_handler\_remove does not exist
readline\_callback\_read\_char does not exist
readline\_clear\_history exists
readline\_completion\_function exists
readline\_info exists
readline\_list\_history does not exist
readline\_on\_new\_line does not exist
readline\_read\_history exists
readline\_redisplay does not exist
readline\_write\_history exists
readline exists


Jeg kan ikke finde nogen henvisning i PHP-manualen, at kun en delmængde af linjelængdeudvidelsesfunktionerne er tilgængelige i Windows. [9]


Når jeg kalder php\_info(), får jeg følgende output:



  readline

  
  Readline Support aktiveret

  
  Readline bibliotek WinEditLine



Er der nogen php.ini-konfigurationsindstilling (eller CLI-argument), der skal foretages for at gøre alle funktioner tilgængelige? Alternativt er der en anden måde at gøre funktioner som readline\_callback\_handler\_install() til rådighed i Windows, eller er forlængelsen kun halvbagt?

Bedste reference


Oprindeligt troede jeg, at du måske på en eller anden måde kunne falde igennem til en gammel PHP 5.0, som mangler disse funktioner, men i mangel af at skulle jeg gætte, at dit PHP-binære er blevet kompileret mod et underliggende bibliotek [[eller version deraf]], der ikke understøtter funktion, at disse funktioner afhænger af.


Krydsreferencer listen over funktioner, der mangler med ext/readline/readline.c Jeg vil gætte dig, at du mangler funktioner svarende til konstanterne/funktionerne HAVE\_RL\_CALLBACK\_READ\_CHAR og HAVE\_LIBEDIT defineret i ext/readline/config.m4. [[[10] [11]


TL; DR: Den, der sammensatte dit PHP, skal finde ud af det. [[sandsynligvis]]