2013-07-24 33 views
5

Tôi đã cài đặt WampServer 2.0 có apache 2.4.4, mysql 5.6.12 và php 5.4.12. Khi tôi echo PHP_INT_MAX nó đã cho tôi 2147483647. Tôi cũng echo phpinfo() và kiến ​​trúc cho thấy x64. Điều này giả sử không xảy ra vì php của tôi là 64 bit phải không? Tôi cần php của tôi để hỗ trợ số nguyên 64 bit. Tôi cần PHP_INT_MAX của mình là 9223372036854775807.php 64 bit với php_int_max = 2147483647

Ai đó có thể giúp tôi không? Cảm ơn

+0

* 'long' phải trở thành' long long' trong nguồn PHP. Sau đó biên dịch lại! :) - không có ý tưởng nếu nó sẽ làm việc vì nó có thể phá vỡ mọi thứ ở khắp mọi nơi. * Tôi hy vọng họ cuối cùng đi đến một đại diện dài 64bit. Nhưng có khá nhiều thứ bạn không thể làm được. Tôi cũng hy vọng họ sẽ đi Unicode ... nhưng có rất ít hy vọng. – CodeAngry

+0

Tôi không phải là 100% ngay bây giờ và quá bận rộn để tìm kiếm nó nhưng 'floats' trong PHP là' double' mà ARE '64bit' ngay cả trên Windows, trong khi' floatats' là 32bit. Vì vậy, bạn có thể thử sử dụng chúng. – CodeAngry

+0

Vấn đề bây giờ là tôi không thể tiếp tục với mã của mình khi tôi thực hiện nó vì tôi đang cố gắng tích hợp dropbox vào trang web của mình, khi tôi chạy mã của mình bằng cách sử dụng dropbox sdk, nó có lỗi báo cáo rằng phiên bản php của tôi không ' t hỗ trợ số nguyên 64 bit, vì vậy tôi không thể tiến hành tích hợp. – mikellez

Trả lời

9

Nếu bạn đang chạy một hệ điều hành windows, wampServer cho thấy bạn đang có, 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.

Lưu ý rằng điều này không có nghĩa là Windows không hỗ trợ 64bit int của: int64_t không tồn tại, nhưng nó không được sử dụng bởi PHP AFAIK.
tôi đã quản lý để đưa ra this link, trên trang đó, có một số mã bạn có thể sử dụng, để hỗ trợ thêm cho ints 64bit mã của bạn

+0

cảm ơn câu trả lời. Vậy có cách nào để giải quyết vấn đề này không? Tôi không thực sự hiểu những gì nó nói với tôi để làm với các liên kết bạn đã cho tôi. – mikellez

+0

@ user2615039: [có một cách giải quyết hacky] (http://www.mysqlperformanceblog.com/2007/03/27/integers-in-php-running-with-scissors-and-portability/), điều đó không yêu cầu bạn chuyển sang linux;) –

4

Trong tập tin RequestUtil.php, nó kiểm tra sau đây:

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__ . "\""); 
} 

Bạn có thể nhận xét và thử cách truy cập từ đó.

Nếu tôi là bạn, tôi sẽ viết triển khai API Dropbox của riêng tôi bằng cách sử dụng chuỗi chứ không phải số nguyên.

PS: Nhưng đây là những gì tôi làm như vậy tôi thích nó :)

+0

cảm ơn vì giải pháp thay thế, chỉ hy vọng nó sẽ không gây ra vấn đề sau này. – mikellez

+0

@ user2615039 ** Có thể **, * nhưng bạn ít nhất có thể tiếp tục thử nghiệm. * Luôn cố gắng xử lý các số nguyên dài dưới dạng chuỗi và bạn có thể thoát khỏi nó. – CodeAngry

1

Hãy thử PHP7 - bậc thầy hiện http://windows.php.net/downloads/snaps/master/. Các bản dựng 64 bit giờ đây khai thác tất cả các khả năng của Windows 64 bit.

+0

"PHP 7 cung cấp hỗ trợ đầy đủ 64-bit. Các bản dựng x64 của PHP 7 hỗ trợ các số nguyên 64 bit gốc, LFS, memory_limit và nhiều thứ khác." Vì vậy, tất cả các bản dựng, không chỉ là chủ: http://windows.php.net/download/ –

+0

Yea, 7.0 đã thành thạo tới thời điểm đăng bài :) Sau GA, giờ đây, bất kỳ bản dựng nào đều là OFC. –

-1

tôi đã cố gắng php7 và nó làm việc:

running php.exe -r "echo PHP_INT_MAX;"

và nó ra 9223372036854775807

1

Đến 'vendor/dropbox/dropbox-sdk/lib/Dropbox'
và comment dòng 19- 23 trong RequestUtil.php.

luận phần này:

/*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__ . "\""); 
}*/ 

Vậy là xong.

Các vấn đề liên quan