FLUX RSS

  • YouTube
  • LinkedIn
  • Google

Archives pour : Développement

Docker sur Ubuntu. Service nginx n'a pas réussi à construire: ADD a échoué: stat /var/lib/docker/tmp/docker-builder(;)/startup.sh: aucun fichier ou répertoire de ce genre

Docker à Ubuntu

Parfois, lors de l’utilisation de Laradock, cette erreur se produit après avoir essayé une reconstruction de conteneur avec no such file or directory message sur docker-compose up -d –build nginx Commande.

Ce n’est pas clair pour moi quelle est la question actuelle, mais en cours d’exécution de la commande avec sudo, nous pouvons l’exécuter avec succès.

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.

Après la construction de conteneurs avec sudo, est possible de le décharger et de recharger sans sudo.

Tables de données + HTML 5 Boutons d’exportation + Laravel-Mix (Webpack)

Dans les derniers jours, J’ai connu un problème en essayant d’utiliser Tables de données et Bootstrap 4 avec le soutien de l’exportation des résultats Excel et PDF à l’aide Laravel-Mix. Après des heures et des heures à essayer de mettre tous les scripts pour travailler ensemble, Je gagne enfin. Alors, J’ai décider d’écrire ce petit Comment pour ceux qui ont le même genre de troubles.



Continuer la lecture >>

À l’aide de jQueryMask Plugin au format dates dans différents modèles

Masque de Plugin jQuery est une grande bibliothèque Javascript pour les champs de format pour la présentation ou de forcer une entrée correctement par les utilisateurs.

Ici, Je montre comment faire face à l’entrée ou un autre élément HTML pour afficher des dates quand la date de la source a un format différent de l’élément cible.

Exemple de:

  • Nous avons un datetime avec Année-mois-jour heure:Minute:Secondes et le besoin de ne montrer que la Année/mois/jour partie.
  • Nous avons da date Année-mois-jour et il fallait formater à Jour/mois/année.

jQueryMask est très simple à utiliser. Il est inutile de beaucoup pour masquer tout ce que vous devez. Jetez un oeil à exemples sur son site Internet.

Si vous avez besoin pour mettre en forme un champ date simple (même d’un élément non-input), Il suffit d’utiliser le code ci-dessous.

jQuery('[données-rôle ="Date"]).masque("TC99/M9/D9", {
        espace réservé: "____/__/__",
        translation: {
            "D": {modèle: /[0-3]/, en option: faux, récursif: true},
            "M": {modèle: /[01]/, en option: faux, récursif: true},
            "T": {modèle: /[12]/, en option: faux, récursif: true},
            "C": {modèle: /[09]/, en option: faux, récursif: true}
        }
    });

Le code ci-dessus peut masquer et valider des dates dans ANNÉE/MOIS/JOUR format.

Avec une entrée comme

<;input type ="texte" données-rôle ="Date" valeur ="2018-06-11 15:47" />;

changerait sa valeur à 2018/06/11.

Si vous essayez de taper une autre date (après clear, Bien sûr) vous ne pouvez pas commencer par un chiffre différent de 1 ou 2. Cette raison est que notre masque ont une traduction à faire lorsque vous autorisez des caractères. Si le modèle ne correspond pas, le char est effacée.

The meaning of “;TC99/M9/D9; le masque est:

  • Doit commencer par 1 ou 2 (Translation T: /[12]/ ; Format personnalisé)
  • Devez disposer du numéro 0 ou 9 (Traduction C: /[09]/ ; Format personnalisé)
  • Doit avoir un numéro (n’importe quel) (Translation 9 ; Format de base de MaskPlugin)
  • Doit avoir un numéro (n’importe quel) (Translation 9 ; Format de base de MaskPlugin)
  • Une barre oblique s’ajouteront automatique ( / )
  • Devez disposer du numéro 0 ou 1 (Traduction M: /[01]/ ; Format personnalisé)
  • Doit avoir un numéro (n’importe quel) (Translation 9: Format de base de MaskPlugin)
  • Une barre oblique s’ajouteront automatique ( / )
  • Devez disposer du numéro 0, 1, 2 ou 3 (Traduction D: /[0-3]/ ; Format personnalisé)
  • Doit avoir un numéro (n’importe quel) (Translation 9: Format de base de MaskPlugin)

Bien sûr, Il n’y a aucune véritable validation. You can type “;2999/19/39; et ce n’est pas une date valide, mais est presque fini.

Alors, pour mettre en forme une autre manière, Il suffit de changer ordre de paramètre de masque.

Mais, Si la date de la source se trouve dans un modèle différent, comme le jour/mois/année, le masque ne fonctionnent pas. The date output for “;06/11/2018 15:40; will be weird “;1018/15/0;.

Pour gérer les dates différentes formats il faudra plus qu’un masque simple. Nous aurons besoin d’une fonction.

Regardez le code ci-dessous

        var maskBehaviorDateTime = function (Val, et, domaine) { // Cette fonction doit retourner un masque var msk = "TC99/M9/D9"; // Notre format désiré var v = field.is(« entrée ») ? Field.Val() : Field.Text(); // une entrée ou un autre élément html??
                    v = v.replace(/\D/g, ''); // Stripe chiffres non si (v != '') { // a la valeur?
                        If ((/^[01]\d[0-3]\dd{4}$/).test(v)) { //vérifier si le modèle correspond à v seul jour/mois/année = v.replace(/^(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 ');
                        } sinon si ((/^[01]\d[0-3]\dd{4}[012]\d[0-5]\d$ /).test(v)) { //vérifier si le modèle correspond à l’heure de jour/mois/année:Minute v = v.replace(/^(\d{2})(\d{2})(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 ');
                            // Si nous devons montrer l’heure et minute, masque retourné doit être changé aussi
                            // v = v.replace(/^(\d{2})(\d{2})(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 $4:$5');
                            // MSK = ' TC99/M9/D9 h9:M9'; // h et m doivent être existe dans les options de traduction
                        }
                        Field.is(« entrée ») ? Field.Val(v) : Field.Text(v);
                    }
                    retour de msk;
                },
                optionsDateTime = {
                    espace réservé: "____/__/__",
                    translation: {
                        "D": {modèle: /[0-3]/, en option: faux, récursif: true},
                        "M": {modèle: /[01]/, en option: faux, récursif: true},
                        "T": {modèle: /[12]/, en option: faux, récursif: true},
                        "C": {modèle: /[09]/, en option: faux, récursif: true},
                        "h": {modèle: /[0-2]/, en option: true, récursif: true},
                        "m": {modèle: /[0-5]/, en option: true, récursif: true}
                    }
                };
        jQuery('[données-rôle ="Date"]').masque(maskBehaviorDateTime,  optionsDateTime);

Nous avons maintenant deux modèle de traduction plus (h et m). h signifie que la position n-index doit avoir des nombres 0, 1 ou 2 et m nombres entre 0 et 5. N’oubliez pas que l’affaire des questions.

Avec le code ci-dessus, Nous pouvons formater et afficher la date de plusieurs façons. Il suffit de changer .test() et .remplacer() modèle pour remplir votre motif désiré.

C’est le code que j’utilise pour mettre en forme les champs de la base datetime avec l’année-mois-jour heure:MINUTE:DEUXIÈME dans les éléments html avec heure jour/année/mois:MINUTE

    var maskBehaviorDateTime = function (Val, et, domaine) {
            // S’il y a déjà une valeur, les formats dans le jj/mm/aaaa standard avec le hh en option:mm:msk var SS = "TC99/M9/D9 h9:M9:S9";
            If (champ d’attr.("valeur date d’origine") == undefined) {
                var o = field.is(« entrée ») ? Field.Val() : Field.Text();
            } d’autre {
                var attr = champ.("valeur date d’origine");
            }
            v = la. remplacer(/\D/g, '');
            If (v != '') {
                champ d’attr.("valeur date d’origine") == undefined &;&; champ d’attr.("valeur date d’origine", le);
                If ((/^[12][09]\d{2}[01]\d[0123]\d$ /).test(v)) { // année/mois/jour v = v.replace(/^(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 ');
                    MSK = "D9/M9/TC99";
                } sinon si ((/^[12][09]\d{2}[01]\d[0123]\d[012]\d[0-5]\d$ /).test(v)) { // année/mois/jour heure:minute v = v.replace(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})$/, ' $3 / $2 / $1 $4:$5');
                    MSK = "D9/M9/TC99 h9:M9";
                } sinon si ((/^[12][09]\d{2}[01]\d[0123]\d[012]\d[0-5]\d[0-5]\d$ /).test(v)) { // année/mois/jour heure:minute:deuxième v = v.replace(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/, ' $3 / $2 / $1 $4:$5:$6');
                    MSK = "D9/M9/TC99 h9:M9:S9";
                }
                Field.is(« entrée ») ? Field.Val(v) : Field.Text(v);
            }

            retour de msk;
        },
        optionsDateTime = {
            espace réservé: "__/__/____",
            translation: {
                "D": {modèle: /[0-3]/, en option: faux, récursif: true},
                "M": {modèle: /[01]/, en option: faux, récursif: true},
                "T": {modèle: /[12]/, en option: faux, récursif: true},
                "C": {modèle: /[09]/, en option: faux, récursif: true},
                "h": {modèle: /[0-2]/, en option: true, récursif: true},
                "m": {modèle: /[0-5]/, en option: true, récursif: true},
                "s": {modèle: /[0-5]/, en option: true, récursif: true}
            },
        };
    jQuery('[données-rôle ="Date"]').masque(maskBehaviorDateTime,  optionsDateTime);

Avec une entrée comme

<;input type ="texte" données-rôle ="Date" valeur ="2018-06-11 15:40">;

La sortie sera

11/06/2018 15:40

J’espère que cela vous aider!

Liaison de plusieurs valeurs dans une requête SQL PDO (PDOStatement)

Parfois nous avons besoin de rechercher une valeur unique par le biais de plusieurs colonnes lorsque vous créez des instructions SQL.

Supposons que la table ci-dessous

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

Si nous avons besoin de rechercher une valeur unique sur les colonnes B,D et E Nous allons besoin d’utiliser l’instruction suivante

SÉLECTIONNEZ L’ID, COLUMN_A,(...COLONNES...), COLUMN_E de ENTITY_ONE où COLUMN_B comme « % search_value % » ou COLUMN_D comme « % search_value % » ou COLUMN_E comme « % search_value % »;

Dans le code PHP que nous pouvons faire

$q = « % search_value % »;
$SQL = "SÉLECTIONNEZ * DE ENTITY_ONE OÙ COLUMN_B COMME « $q » OU COLUMN_D COMME « $q » OU COLUMN_E COMME « $q »; 
$pdo = nouvel AOP($Dsn, $Utilisateur, $Passer); 
$stmt = $pdo->;Requête($Sql);

Eh bien, this can work but we know that isn’;t la meilleure approche. Nous avons besoin utilisation valeurs contraignantes pour éviter l’injection SQL et autres gâteries malveillants.

Alors, le code peut être modifié pour

$q = « % search_value % »; 
$SQL = "SÉLECTIONNEZ * DE ENTITY_ONE OÙ COLUMN_B COMME ? OU COLUMN_D COMME ? OU COLUMN_E COMME ?; 
$args = [$Q, $Q, $Q]; // Nous avons besoin d’une entrée pour chaque "?" on instruction
$pdo = new PDO($Dsn, $Utilisateur, $Passer); 
$stmt = $pdo->;Préparer($Sql);
$stmt->;Exécuter($Args);

Beaucoup mieux, mais, lors de la construction complexe instruction SQL, things can be confusing with lots of arguments and don’;t oublier: QUESTIONS D’ORDRE.

Heureusement AOP peut lier des valeurs en ordre différent quand à l’aide de nommé les liaisons.

$q = « % search_value % »; 
$SQL = "SÉLECTIONNEZ * DE ENTITY_ONE OÙ COLUMN_B COMME :first_arg OU COLUMN_D LIKE :second_arg OU COLUMN_E LIKE :third_arg; 

$pdo = nouvel AOP($Dsn, $Utilisateur, $Passer); 
$stmt = $pdo->;Préparer($Sql); 
// One way
$args = [':first_arg' =>; $Q, ':third_arg' =>;$Q, ':second_arg' =>; $Q]; // Nous avons besoin d’une entrée pour chaque ":Nom" on instruction 
$stmt->;Exécuter($Args); 
// Another way
$stmt->;bindValue(':third_arg'. $Q);
$stmt->;bindValue(':first_arg', $Q); 
$stmt->;bindValue(':second_arg', $Q);

$stmt->;Exécuter(); 

Hmm, seems that this isn’;t assez bon. Nous changeons seulement l’utilisation de 1-espace réservé indexée pour un :espace réservé nommé. There’;s aucun gain au-delà du code lisible et la possibilité de lier à n’importe quel ordre.

Oui, mais maintenant, nous pouvons faire la meilleure approche lors de l’utilisation d’un terme de recherche unique en plusieurs colonnes. Nous pouvons utiliser qu’une seule liaison à un ou plusieurs :named placeholders ’;cause AOP est intelligent et astucieux. Regardez notre code final ici.

$q = « % search_value % »; 
$SQL = "SÉLECTIONNEZ * DE ENTITY_ONE OÙ COLUMN_B COMME :unique_arg ou COLUMN_D comme :unique_arg ou COLUMN_E comme :unique_arg; 
$pdo = nouvel AOP($Dsn, $Utilisateur, $Passer); 
$stmt = $pdo->;Préparer($Sql); 
// Une façon $args = [':unique_arg' =>; $Q]; // Nous pouvons lier tous les :name with only one term 
$stmt->;Exécuter($Args); 
// Another way 
$stmt->;bindValue(':unique_arg', $Q); 
$stmt->;Exécuter(); 

Peut sauver beaucoup de frappe lors de l’écriture de nombreuses instructions SQL en utilisant le même argument.

Nommage des fichiers à l'aide de la liste de 0 à Z

Aujourd'hui j'ai était codage certains scripts et trouvé un peu de mal à utiliser un modèle défini.

Le modèle consiste à créer des fichiers où la séquence commence dans 0 (zéro) et ne peut être répété jusqu'à Z.

Exemple de:

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

Eh bien, ce n'est pas un gros problème, alors j'ai utilisé ce code.

// 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++);
}

Mais

$Seq

donné pas la valeur attendue de 0 (zéro) sur la première manche. Au lieu de cela, il était vide.

Les variables de débogage, J'ai vu que le while jamais la valeur true. Tenter de reproduire sur la ligne de commande, j’ai vu que

in_array($Seq, $seqs);

retourne toujours true. J'ai essayé d'utiliser “”, “R” et peu importe de quelle valeur, j'ai utilisé, encore de retour true.

Donc j’ai changer pour utiliser STRICT argument en faveur de 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 est juste, ;0; n'est pas strictement égal à 0. Le Chr retour de fonction string et

gamme(« 0 », « 9 »)

crée un array avec integer valeurs.

Alors, J'ai changé l'approche pour évaluer toutes les valeurs par STRICT, parce que je voudrais créer un code sympa et propre, sans aucune autre fonction à utiliser.

This is the final code that I’;à l’aide de m:

// Valeurs $seq initiales = '';
$seqs = array_merge(gamme(ORD(« 0 »),ORD(« 9 »)), gamme(ORD(« A »), ORD(« Z »)));
$seqs = array_map(« chr », $seqs);
$l = 1;
tout en (!in_array($Seq, $seqs, true)) {
    $Seq = chr(ORD($infos[« last_seq »]) + $l ++);
}

// Noms de fichier foreach ($itens_for_files as $key =>; $itens) {
    // ... Un autre codes pour remplir le fichier $seq = chr(ORD($Seq) + 1);
    tout en (!in_array($Seq, $seqs, true)) {
    $Seq = chr(ORD($Seq) + 1);
    $filename = « myfile » . $Seq . « .ext »;
    // ...
}

Comment vous pouvez voir, J'ai changé le $seqs initial values from ‘;0; à votre ASCII code et revenir à votre valeur qui m'a donné un array avec toutes les valeurs de string type de.

A la prochaine!

Erreur de comparaison PHP

Aujourd'hui, J'ai écrit un script en PHP pour être utilisé dans la ligne de commande lorsque je suis tombé sur un comportement inattendu (au moins de ma part).
Le script devrait recevoir trois arguments, le dernier d'entre eux une liste contenant un ou plusieurs codes numériques.
Essayant de valider ce dernier argument a été d'obtenir un résultat différent qu'imaginé.
Voir l'extrait de code que j'utilisais:

// test.php si (php_sapi_name() == « cli ») {
    $di = isset($argv[1]) ? $argv[1] : Date("Y-m-d"); // Première Date $df = isset($argv[2]) ? $argv[2] : Date("Y-m-d"); // Date limite $prods = isset($argv[3]) ? exploser(',', $argv[3]) : Tableau(); // Liste de codes

    ##### Validation de
    // Première Date si ($di != date("Y-m-d", strtotime($di))) {
        ECHO "\n";
        ECHO "ERREUR! DATE initiale non valide!\n";
        sortie;
    }
    // Date limite si ($DF != date("Y-m-d", strtotime($DF))) {
        ECHO "\n";
        ECHO "ERRO! DATE finale non valide!\n";
        sortie;    
    }

    // Si des codes (comte($prods) >; 0) {
        foreach ($prods comme $prod) {
            If ($prod != (int)$prod) {
                ECHO "\n";
                ECHO "ERREUR! Le CODE " . $prod . " n'est pas valide!\n" ;
                sortie;
            }
        }
    }
    ECHO "FAIT!";
}

Continuer la lecture >>

jQuery.html() ne fonctionne pas dans Internet Explorer

J'ai récemment eu des problèmes avec un code javascript qui utilise jQuery et cela a fonctionné dans les différents navigateurs comme Chrome, le Firefox et certaines versions de Internet Explorer, mais qui refuse obstinément de fonctionner Internet Explorer 7 et 8.
Le code de suivi:

$.Publier(URL,{ Options }, 
  fonction (réponse) {
     $(« #myElement »).HTML(réponse);
  },
« texte »);

Après quelques essais, j'ai réalisé qu'il y avait un problème de méthode, comme dans d'autres codes, il s'est comporté comme prévu.
Donc le code de débogage soigneusement et les réponses de la méthode Ajax réalisée une erreur de syntaxe petit dans le code HTML et c'était juste l'IE fix 7 afficher correctement la réponse.
Suit alors la pointe, Si vous avez des problèmes avec la méthode jQuery.html(), Vérifiez d'abord si le contenu en cours d'écriture dans l'élément est un code html sans erreurs, parce que la validation IE 7/8 écrira HTML sans erreur, Peu importe la taille.

Installation de Redmine dans Nginx sur Centos 6. X

Dans cet article je vais vous montrer comment configurer le Redmine Version 2.5.2 (2014-07-06) sur un serveur Web Nginx.

Redmine est une application web de gestion de projet. Je l'ai rencontré quelque temps il y a dans l'une des sociétés où j'ai passé et est une excellente alternative gratuite pour ceux qui ont besoin de gérer des projets, Si oui ou non développement.

Nginx est un serveur Web qui prend beaucoup d'espace dans ces dernières années en raison de sa performance pour de grandes quantités de demande.

Continuer la lecture >>

Conversion de xor, RSH et shl de Delphi pour PHP

Je suis migration d'un logiciel fait en Delphi pour PHP et je suis tombé sur un problème dans un putain Fonction de cryptage béni.

J'ai souffert un peu en train de réécrire la fonction fait de la complexité du code et avec les différences dans les résultats.

La fonction fait appel à des opérateurs XOR et RSH dans la version de Delphi. La RSA a été relativement facile grâce à l'expérience avec les opérateurs de bits et comment Delphi documentation dit que l'opérateur tire sur bits vers la droite

Continuer la lecture >>

Comment diminuer la taille des volets disques virtuels VMDK 3

Si vous voulez lire le partie 1 Ce tutoriel, Cliquez ici.
Si vous voulez lire le partie 2 Ce tutoriel, Cliquez ici.

Dans l'article précédent fait un clonage d'un disque avec une seule partition. Dans les prochaines lignes, je vais vous montrer comment j'ai cloné un disque avec une seule partition primaire et la logique pour deux partitions principales et une logique avec un point de montage pour le swap qui était à l'origine dans un fichier.

REMARQUE: J'ai utilisé comme une source qui site, pour résoudre les problèmes avec le nouveau disque de démarrage. Faire comme je l'ai, toujours citer vos sources.

En utilisant comme base les informations de partie 1 Ce tutoriel, Nous allons ajouter un nouveau disque à la machine virtuelle.

Continuer la lecture >>