2013-07-24 5 views
5

Ich habe WampServer 2.0 installiert, das Apache 2.4.4, MySQL 5.6.12 und PHP 5.4.12 hat. Wenn ich PHP_INT_MAX echo, gab es mir 2147483647. Ich habe auch echo phpinfo() und die Architektur zeigt x64. Dies soll nicht passieren, weil mein PHP 64 Bit richtig ist? Ich brauche mein PHP 64 Bit Integer zu unterstützen. Ich brauche mein PHP_INT_MAX 9223372036854775807.php 64 bit mit php_int_max = 2147483647

Kann mir jemand helfen? Dank

+0

* 'long' muss in der PHP-Quelle' long long' werden. Dann neu kompilieren! :) - habe keine Ahnung, ob es funktionieren würde, da es die Dinge überall brechen könnte. * Ich hoffe, dass sie irgendwann zu einer 64 Bit langen Repräsentation gehen. Aber es gibt so ziemlich nichts, was Sie dagegen tun können. Ich hoffe auch, dass sie Unicode werden ... aber es gibt wenig Hoffnung. – CodeAngry

+0

Ich bin momentan nicht 100% ig zu beschäftigt, um es nachzuschlagen, aber 'floats' in PHP sind' doubles', die '64bit' sogar unter Windows '' float'' sind 32bit. Also könnten Sie versuchen, sie zu benutzen. – CodeAngry

+0

Das Problem ist jetzt, ich kann nicht mit meinem Code fortfahren, wenn ich es ausführe, weil ich versuche, Dropbox in meine Website zu integrieren, wenn ich meinen Code mit Dropbox SDK ausführen, hat es Fehler, der besagt, dass meine Version von PHP doesn ' t Unterstützung 64-Bit-Integer, so kann ich nicht mit der Integration fortfahren. – mikellez

Antwort

9

Wenn Sie ein Windows-Betriebssystem laufen lassen, WampServer schlagen Sie sind, this is your answer:

On windows x86_64, PHP_INT_MAX is 2147483647. This is because in the underlying c-code, a long is 32 bit.

Beachten Sie, dass dies nicht bedeutet, dass Windows nicht 64-Bit-int die nicht unterstützt: int64_t existieren, aber es ist nicht von PHP AFAIK verwendet.
Ich habe es geschafft, mit this link, auf dieser Seite zu kommen, gibt es einige Code sind Sie, zu verwenden, könnte der Lage sein, die Unterstützung für 64-Bit-Ints, um Ihren Code hinzuzufügen

+0

danke für die Antwort. Gibt es einen Weg, dieses Problem zu lösen? Ich verstehe nicht wirklich, was es mit dem Link, den du mir gegeben hast, zu tun hat. – mikellez

+0

@ user2615039: [Es gibt eine hacky Problemumgehung] (http://www.mysqlperformanceblog.com/2007/03/27/integers-in-php-running-with-scissors-and-portability/), die nicht müssen Sie auf Linux wechseln;) –

4

In der Datei RequestUtil.php, tut es die folgende Überprüfung:

if (strlen((string) PHP_INT_MAX) < 19) { 
    // Looks like we're running on a 32-bit build of PHP. This could cause problems because some of the numbers 
    // we use (file sizes, quota, etc) can be larger than 32-bit ints can handle. 
    throw new \Exception("The Dropbox SDK uses 64-bit integers, but it looks like we're running on a version of PHP that doesn't support 64-bit integers (PHP_INT_MAX=" . ((string) PHP_INT_MAX) . "). Library: \"" . __FILE__ . "\""); 
} 

Sie können kommentieren Sie sie aus und versuchen, von dort hacken Sie Ihren Weg.

Wenn ich Sie wäre, würde ich meine eigene Dropbox API-Implementierung unter Verwendung von Strings und keine ganzen Zahlen schreiben.

PS: Aber das ist, was ich tue, so genieße ich es

+0

danke für die alternative Lösung, hoffe nur, es wird später nicht zu Problemen führen. – mikellez

+0

@ user2615039 ** Es könnte **, * aber Sie können zumindest mit dem Test weitermachen. * Versuchen Sie immer, lange ganze Zahlen als Zeichenfolge zu behandeln, und Sie könnten damit durchkommen. – CodeAngry

1

Try PHP7 :) - den aktuellen Master http://windows.php.net/downloads/snaps/master/. 64-Bit-Builds nutzen jetzt alle Funktionen des 64-Bit-Windows.

+0

"PHP 7 bietet vollständige 64-Bit-Unterstützung. Die x64-Builds von PHP 7 unterstützen native 64-Bit-Ganzzahlen, LFS, memory_limit und vieles mehr." Also, alle Builds, nicht nur Master: http://windows.php.net/download/ –

+0

Ja, 7.0 war Master auf die Zeit des Postings :) Nach der GA ist es jetzt jede OFC-Build. –

-1

versuchte ich php7 und es funktionierte:

running php.exe -r "echo PHP_INT_MAX;"

und es gibt 9223372036854775807

1

Zum 'Verkäufer/Dropbox/Dropbox-sdk/lib/Dropbox'
und Kommentarzeilen 19- 23 in RequestUtil.php.

Kommentar in diesem Abschnitt:

/*if (strlen((string) PHP_INT_MAX) < 19) { 
    // Looks like we're running on a 32-bit build of PHP. This could cause problems because some of the numbers 
    // we use (file sizes, quota, etc) can be larger than 32-bit ints can handle. 
    throw new \Exception("The Dropbox SDK uses 64-bit integers, but it looks like we're running on a version of PHP that doesn't support 64-bit integers (PHP_INT_MAX=" . ((string) PHP_INT_MAX) . "). Library: \"" . __FILE__ . "\""); 
}*/ 

Das ist es.