RSS

  • YouTube
  • LinkedIn
  • Google

Archiv nach dem Monat : PHP

CPF-Validierungscode für PHP

Der folgende Code ist eine PHP-Funktion, die optimiert ist, um die kleinste Anzahl von zyklomatischer Komplexität zu haben, die ich basierend auf der Erklärung im Artikel Brasilianische CPF-Validierungsmethode - Individuelle Registrierung. Es hat eine leichte Änderung zum Zeitpunkt der Berechnung des zweiten digitalisierten Testers. Anstatt mit der zweiten Ziffer zu beginnen, Der Code beginnt mit dem ersten und verwendet den Wert 11 als Multiplikator. Eine weitere bemerkenswerte Änderung besteht darin, dass wir nicht vergleichen müssen, um zu wissen, ob wir uns in der neunten und decimo Ziffer befinden., Ich weise dem letzten Element den Wert Null zu (Index 10) um einen weiteren Vergleich zu reduzieren.

Der verwendete Algorithmus ist der 1 erklärt in dem zuvor zitierten Artikel und es gibt einen kleinen Trick, um zu vermeiden, mit dem Rest gleich zu vergleichen 10 die das Modul machen soll 10 des Restes.

   // Codigo que valida um CPF informado quanto a validade de seus dígitos verificadores.

   /**
     * 
     * Verifica se um CPF é válido
     * @author Marcos Regis <marcos@marcosregis.com>
     * @param  string $cpf
     * @return bool
     */
    function validar(string $cpf): bool
    {
        if (strlen($cpf) != 11) {
            return false;
        }
        $elementos = (array)str_split($cpf);
        $elementos[10] = 0; // Reduz uma comparação no calculo de $somaB
        $somaA = 0;
        $somaB = 0;
        foreach ($elementos as $indice => $elemento) {
            $multiplicador = count($elementos) - $indice;
            $somaA += (int)$elemento * (int)($multiplicador > 2 ? $multiplicador - 1 : 0);
            $somaB += (int)$elemento * (int)$multiplicador;
        }

        $moduloA = (($somaA * 10) % 11) % 10;
        $moduloB = (($somaB * 10) % 11) % 10;

        return preg_replace('#\d{9}(\d{2})$#', '$1', $cpf) == $moduloA . $moduloB;
    }

Sie können diesen Code testen Hier.

Docker auf Ubuntu. Dienst nginx konnte nicht erstellt werden: ADD fehlgeschlagen: stat /var/lib/docker/tmp/docker-builder(;)/startup.sh: keine solche Datei oder ein solches Verzeichnis

Docker in Ubuntu

Manchmal, bei Verwendung von Laradock, Dieser Fehler tritt auf, nachdem Sie einen Containerneuaufbau mit no such file or directory Nachricht auf docker-compose up -d –build nginx Befehl.

Mir ist nicht klar, worum es jetzt geht., aber das Ausführen des Befehls mit sudo, wir können es erfolgreich führen.

Seems that the regular user need access rights to directory /var/lib/docker/tmp/ but do not have. So, running with sudo the trouble is bypassed and the build can finished normally.

Nach dem Bau von Containern mit sudo, ist es möglich, es zu entladen und neu zu laden, ohne sudo.

DataTables + HTML 5 Export-Buttons + Laravel-Mix (Webpack)

In den letzten Tagen, Ich habe ein Problem versucht, verwenden Sie erlebt. DataTables und Bootstrap 4 mit Unterstützung für den Export der Ergebnisse Excel und PDF-DATEI mit Hilfe Laravel-Mix. Nach Stunden und Stunden damit, alle Skripte zur Zusammenarbeit zu setzen, Ich Gewinne schließlich. Also, Ich beschließe, dieses kleine schreiben So wird es gemacht für diejenigen mit derselben Art von Schwierigkeiten.



Lesen Sie weiter >>

Mehrere Werte verbindlich in PDO-SQL-Anweisung (PDOStatement)

Manchmal müssen wir einen einzelnen Wert über mehrere Spalten suchen, beim Erstellen von SQL-Anweisungen.

Nehmen wir an der folgenden Tabelle

  • [ENTITY_ONE]
    • ID
    • COLUMN_A
    • COLUMN_B
    • COLUMN_C
    • COLUMN_D
    • COLUMN_E

Wir benötigen einen einzelnen Wert auf Spalten suchen B,D und E Wir werden die folgende Anweisung verwenden, müssen

ID AUSWÄHLEN, COLUMN_A,(...Spalten..), COLUMN_E 
FROM ENTITY_ONE WHERE COLUMN_B LIKE '%search_value%' OR COLUMN_D LIKE '%search_value%' OR COLUMN_E LIKE '%search_value%';

Wir können in PHP-code

$q = '%search_value%';
$sql = "Auswählen * VON ENTITY_ONE WO COLUMN_B LIKE '$q' ODER COLUMN_D LIKE '$q' ODER COLUMN_E LIKE '$q'; 
$pdo = neue g.A.($Dsn, $Benutzer, $bestehen); 
$stmt = $pdo->;Abfrage($Sql);

Gut, this can work but we know that isn’;t der beste Ansatz. Wir brauchen verbindliche Werte verwenden, um SQL-Injection und andere schädlichen Leckereien zu vermeiden.

Also, der Code kann geändert werden

$q = '%search_value%'; 
$sql = "Auswählen * VON ENTITY_ONE WHERE COLUMN_B LIKE ? ODER COLUMN_D LIKE ? ODER COLUMN_E LIKE ?; 
$args = [$Q, $Q, $Q]; // Wir brauchen je einen Eintrag "?" on instruction
$pdo = new PDO($Dsn, $Benutzer, $bestehen); 
$stmt = $pdo->;Zubereiten($Sql);
$stmt->;Ausführen($Args);

Viel besser, aber, beim Bau von komplexen SQL-Anweisung, things can be confusing with lots of arguments and don’;Vergessen Sie nicht: BESTELLEN FRAGEN.

Glücklich kann PDO binden Werte in unterschiedlicher Reihenfolge wenn Bindungen mit benannt werden..

$q = '%search_value%'; 
$sql = "Auswählen * VON ENTITY_ONE WHERE COLUMN_B LIKE :First_arg oder COLUMN_D wie :Second_arg oder COLUMN_E wie :third_arg; 

$pdo = neue g.A.($Dsn, $Benutzer, $bestehen); 
$stmt = $pdo->;Zubereiten($Sql); 
// Eine Möglichkeit $args = [':first_arg' =>; $Q, ':third_arg' =>;$Q, ':second_arg' =>; $Q]; // Wir brauchen je einen Eintrag ":Name" on instruction 
$stmt->;Ausführen($Args); 
// Another way
$stmt->;bindValue(':Third_arg ". $Q);
$stmt->;bindValue(':First_arg ", $Q); 
$stmt->;bindValue(':Second_arg ", $Q);

$stmt->;Ausführen(); 

Hmm, seems that this isn’;t gut genug. Wir ändern nur die Verwendung von 1-indizierte Platzhalter um eine :benannten Platzhalter. There’;s kein Gewinn jenseits der Code lesbar und die Möglichkeit, in beliebiger Reihenfolge zu binden.

Ja, aber jetzt können wir die beste Vorgehensweise tun, wenn Sie einen einzigartigen Suchbegriff in mehrere Spalten verwenden. Wir können nur eine Bindung an eine oder mehrere :named placeholders ’;PDO ist smart und clever. Schauen Sie unsere endgültige Code hier.

$q = '%search_value%'; 
$sql = "Auswählen * VON ENTITY_ONE WHERE COLUMN_B LIKE :unique_arg ODER COLUMN_D LIKE :unique_arg ODER COLUMN_E LIKE :unique_arg; 
$pdo = neue g.A.($Dsn, $Benutzer, $bestehen); 
$stmt = $pdo->;Zubereiten($Sql); 
// One way 
$args = [':unique_arg' =>; $Q]; // Wir können alle binden :name with only one term 
$stmt->;Ausführen($Args); 
// Another way 
$stmt->;bindValue(':Unique_arg ", $Q); 
$stmt->;Ausführen(); 

Erspart eine Menge Tipparbeit beim Schreiben viele SQL-Anweisung mit demselben argument.

Benennen von Dateien mithilfe der Liste aus 0 bis Z

Heute ich war einige Skripte programmieren und habe ein wenig Mühe zu ein definiertes Muster verwenden.

Das Muster ist, Dateien zu erstellen, wo die Reihenfolge in beginnt 0 (0 (null)) und kann nicht wiederholt werden, bis Z.

Beispiel:

myfile0.ext, myfile1.ext, myfile2.ext, (...), myfile9.ext, myfileA.ext, myfileB.txt, (...), myfileZ.txt

Gut, Dies ist kein großes Problem, so dass ich diesen Code verwenden.

// Filename
$seq = $last_used_seq = '';
$seqs = array_merge(range('0','9'), range('A', 'Z'));]
$l = 1;
while (!in_array($seq, $seqs)) {
    $seq = chr(ord($last_used_seq) + $l++);
}

Aber

$Seq

nicht gab der erwartete Wert des nicht 0 (0 (null)) bei der ersten Ausführung. Stattdessen, Es war leer.

Debuggen die Variablen, Ich sah, dass die while nie ergibt true. Auf der Kommandozeile zu reproduzieren versucht sah ich, dass

in_array($Seq, $seqs);

immer zurück true. Ich versuchte, verwenden “”, “R” und egal, welchen Wert ich habe, noch zurückgeben true.

So ändern ich, um zu verwenden STRICT Argument für in_array to true and works for ‘;A’; through ‘;Z’;, but not for ‘;0; through ‘;9;.

while (!in_array($seq, $seqs, true)) {
    $seq = chr(ord($last_used_seq) + $l++);
}

Damn…; PHP ist richtig, ;0; ist nicht unbedingt gleich 0. Die Chr Funktionsrückgabe string und

Bereich('0', '9')

erstellt ein array mit integer Werte.

Also, Ich änderte den Ansatz auf alle Werte mit auswerten STRICT, Da ich einen schönen und sauberen Code ohne keine anderen Funktionen möchte verwendet werden zu erstellen.

This is the final code that I’;m mit:

// Anfangswerte $seq = '';
$Seqs = Array_merge(Bereich(Ord('0'),Ord('9')), Bereich(Ord('A'), Ord('Z')));
$Seqs = Array_map("chr", $seqs);
$l = 1;
während (!in_array($Seq, $seqs, wahr)) {
    $Seq = chr(Ord($Infos['Last_seq']) + $l ++);
}

// Dateinamen foreach ($itens_for_files as $key =>; $itens) {
    // ... Eine andere Codes, die Datei $seq füllen = chr(Ord($Seq) + 1);
    während (!in_array($Seq, $seqs, wahr)) {
    $Seq = chr(Ord($Seq) + 1);
    $Filename = 'Myfile' . $Seq . . 'ext';
    // ...
}

Wie Sie sehen können, Ich änderte die $seqs initial values from ‘;0; zu Ihrem ASCII Code und auf Ihren Wert, der gab mir wieder ein array mit allen Werten im string Typ.

Bis bald!

PHP-Vergleich-Fehler

Heute, Ich schrieb ein Skript in PHP beim stieß ich auf unerwartetes Verhalten in der Befehlszeile verwendet werden (zumindest von meiner Seite).
Das Skript sollte drei Argumente erhalten., das letzte von ihnen eine Liste mit einem oder mehreren numerischen Codes.
Versuch, diese letzte Argument zu überprüfen war ein anderes Ergebnis bekommen als gedacht.
Finden Sie das Code-Snippet, das war ich mit:

// Test.php wenn (php_sapi_name() == 'Cli') {
    $di = Isset($argv[1]) ? $argv[1] : Datum('Y-m-d'); // Erste $df = Isset($argv[2]) ? $argv[2] : Datum('Y-m-d'); // Termin $prods = Isset($argv[3]) ? explodieren(',', $argv[3]) : Array(); // Codeliste

    ##### Überprüfen von
    // Erste wenn ($di != Datum('Y-m-d', strtotime($di))) {
        Echo "\n";
        Echo "FEHLER! Ungültige Fixierung!\n";
        Ausfahrt;
    }
    // Finale ausgehen, falls ($DF != Datum('Y-m-d', strtotime($DF))) {
        Echo "\n";
        Echo "ERRO! Ungültiges Datum endgültig!\n";
        Ausfahrt;    
    }

    // Codes, wenn (Graf($Viehtreiber) >; 0) {
        foreach ($prods als $prod) {
            if ($Prod != (int)$Prod) {
                Echo "\n";
                Echo "FEHLER! Der CODE " . $Prod . " ist ungültig!\n" ;
                Ausfahrt;
            }
        }
    }
    Echo "FERTIG!";
}

Lesen Sie weiter >>

Konvertieren von xor, SHR und Shl von Delphi für PHP

Ich bin eine Software gemacht Migration. Delphi für PHP und stieß ich auf ein Problem in einem ficken Seliger Verschlüsselungsfunktion.

Ich litt ein bisschen versucht, die Funktion schreiben wird die Komplexität des Codes und die Unterschiede in den Ergebnissen.

Die Funktion nutzt der Betreiber XOR und SHR in Delphi-version. Die SHR war relativ einfach dank Erfahrungen mit bitweisen Operatoren und wie Delphi Dokumentation sagt, dass der Betreiber Sie Bits nach rechts zieht

Lesen Sie weiter >>