2016-04-29 20 views
1

Ich habe ein Problem, wo durch, wenn ich versuche, Zahlen mit mt_rand oder Rand (in einem größeren Maßstab) nach dem Zufallsprinzip zu generieren, bekomme ich überhaupt kein Ergebnis. Früher funktionierte das auf meinem Server gut, aber jetzt scheint es Probleme zu geben und ich bin mir nicht sicher warum.mt_rand und rand funktioniert nicht (PHP)

<?php 
echo 'Your number is: '.rand(0, 99999999999999999999); 
?> 

Wo, wie es ich es so etwas wie (unter Verwendung einer 9-stellige Zahl) aktualisieren:

<?php 
echo 'Your number is: '.rand(0, 999999999); 
?> 

das untere Beispiel fein arbeiten. Ich habe kürzlich meine Serverversion PHP 7.0 geändert. Gibt es eine Möglichkeit, die maximale Anzahl oder einen besseren Weg zu erhöhen? Vielen Dank.

+0

Sie brauchen nur zufällige Zeichenfolge richtig? ob es Zahlen oder Zeichen sind? – Poria

+1

Es gibt eine Konstante namens 'PHP_INT_MAX', vielleicht suchen Sie das? – paskl

+0

geben Sie Float-Wert, deshalb gibt es in PHP 7.0 Fehler –

Antwort

1

Um den Code in php 7 laufen Sie

<?php 
echo 'Your number is: '.rand(0,(int) 99999999999999999999); 
?> 
+0

Warum? Meinst du das im Fall strict_types = 1 ist aktiviert? – NikiC

+0

ja, ich denke schon. –

+0

Es ist weil 'rand' erwartet, dass der zweite Parameter eine Ganzzahl ist. Wenn eine Zahl zu groß ist, um in eine ganze Zahl zu passen, wird sie von PHP in einen Float umgewandelt (der größere Zahlen enthalten kann). Sie sollten Ihren Server so konfigurieren, dass während der Entwicklung Warnungen angezeigt werden (PHP zeigt [show a warning] (http://sandbox.onlinephpfunctions.com/code/e565cbb80672a798489d28eac5d380f5e06bcc87)); –

2

Auf beiden 32-Bit- und 64-Bit-Systemen typisieren haben, ist die Zahl 99999999999999999999 zu groß als eine ganze Zahl in PHP 7 dargestellt werden, so es wird zu einem Float.

Allerdings benötigt mt_rand() zwei ganze Zahlen. Weil 99999999999999999999 zu groß ist, um eine ganze Zahl zu sein, wenn Sie es an die Funktion übergeben, PHP 7 throws an error, because it cannot be safely converted. Sie haben diesen Fehler für nicht erhalten, weil es klein genug ist, um eine ganze Zahl zu sein.

Wie auch immer, Ihr aktueller Code wird wahrscheinlich nicht tun, was Sie wollen unter PHP 5: 99999999999999999999 wird still zu 7766279631452241920 auf 64-Bit-Systemen und etwas anderes auf 32-Bit-Systemen konvertiert. Sie erhalten also nicht die volle Auswahl an Zufallszahlen. Sie haben rand(0, 99999999999999999999) geschrieben, aber Sie bekommen tatsächlich rand(0, 7766279631452241920).

Wenn Sie nur eine Zufallszahl aus einem möglichst breiten Bereich wollen, versuchen Sie dies:

<?php 
echo 'Your number is: '.rand(0, PHP_INT_MAX); 
?> 

PHP_INT_MAX ist eine Konstante, die größtmögliche ganze Zahl enthält (die anders sein wird, je nachdem, ob Sie sind auf 32- Bit oder 64-Bit). Wenn Sie dies tun, erhalten Sie immer den größtmöglichen Bereich zufälliger positiver Zahlen aus dieser Funktion.