Aller au contenu

jcaron

Membre+
  • Compteur de contenus

    998
  • Inscrit(e) le

  • Dernière visite

Tout ce qui a été posté par jcaron

  1. Va voir les commentaires sur readfile dans la doc PHP, tu vas voir que: - max_execution_time s'appliquerait quand même (donc set_time_limit(0) juste avant le readfile pourrait résoudre le problème). Comme quoi la description de tout ça reste très vague... - certains indiquent un problème de mémoire utilisée, mais je pense que ça dépend beaucoup de l'implémentation au niveau OS. Dans le pire des cas tu peux être obligé de lire le fichier et de le transmettre par "petits" bouts Jacques.
  2. Solutions envisageables: - utiliser un cookie (évidemment s'il bloque ou efface les cookies ça tombe à l'eau) - s'il a un navigateur peu courant (voir HTTP_USER_AGENT), tu peux te baser là-dessus pour le bloquer. Evidemment s'il a un IE7 tout ce qu'il y a de plus basique ce n'est pas applicable, mais s'il a une extension ou une autre qui modifie le User-Agent (certaines toolbars et autres extensions par exemple), ça peut le faire, surtout si le User-Agent contient alors un identifiant unique (il y en a) Au delà ça risque d'être difficile, mais quel est le problème qu'il pose en réalité? S'il s'agit d'un problème de commentaires / messages, il faut obliger à avoir un compte, et tu peux bloquer le compte. Si c'est un problème de comptes créés à tour de bras, il faut obliger à avoir une adresse e-mail pour chaque compte, la valider, et évidemment n'autoriser une adresse e-mail qu'une seule fois. Ca devrait finir par le limiter pas mal dans sa gêne, non? Jacques.
  3. Précisons que c'est minoritaire ou égalitaire, donc même à 50% on n'est pas TNS. Mais re-précisons encore une fois qu'il faut considérer la totalité des parts du ou des gérants (y compris conjoints) pour déterminer le statut minoritaire/égalitaire/majoritaire. Jacques.
  4. Sauf que les adresses en questions ne sont pas "résolvables", sinon je n'aurais pas proposé ces solutions compliquées... Jacques.
  5. Si les fichiers qui sont appelés par ces machines sont des scripts, tu peux ajouter un peu de code pour rejeter les requêtes basé sur le nom de domaine et/ou logguer l'IP et bloquer sur cette base... Sinon il va falloir faire des trucs tordus genre rewriting vers un script qui va faire ça avant de transmettre le fichier. Jacques.
  6. Ca veut dire que tu as HostNameLookups à On, ce qui n'est de façon générale pas super top. Mets-le à Off, tu auras des adresses IP à la place. Jacques.
  7. Tu as une idée du temps au bout duquel ça s'arrête? J'ai tendance à penser qu'il est relativement fixe, par opposition à la taille du fichier transféré (qui va dépendre du débit). Tu peux regarder du côté de la directive Timeout dans la conf httpd. En théorie c'est prévu pour que ça ne pose pas de problème, mais en réalité, surtout avec des scripts, ça ne me paraît pas impossible du tout. Côté PHP, il y a aussi set_time_limit() et la valeur par défaut max_execution_time dans php.ini, mais ils ne concernent que le temps CPU plutôt que le temps réel. Si ce n'est rien de tout ça, il faut voir du côté de règles de filtrage IP qui pourraient avoir des timeouts mal calculés (i.e. depuis le début de le connexion plutôt que depuis le dernier paquet), mais normalement de nos jours ça ne se voit plus trop. Jacques.
  8. Si le .htaccess est au bon endroit et que la configuration du serveur autorise les .htaccess à cet endroit, pas de raison que le .htaccess ne soit pas pris en compte, quoi que l'appelant fasse. Par contre je n'utiliserais pas des noms de domaine mais des adresses IP (vraisemblablement des plages d'adresses IP, en fait) dans le deny. Jacques.
  9. Petite précision: le ou les gérants sont TNS si l'ensemble de la gérance est majoritaire. Donc si deux associés à 50/50 (ou 51/49 ou même 49/49 et le reste détenu par quelqu'un d'autre), et qu'ils sont tous les deux gérants, alors ils sont TNS. Jacques.
  10. Plusieurs solutions: - tu mets les fichiers en question dans un répertoire séparé, et tu mets un .htaccess dans ce répertoire avec ce qui va bien dedans - tu construis la regex qui va bien pour sélectionner les fichiers que tu veux dans le FilesMatch. Par exemple <FilesMatch "^(cefichier.png|celuilaaussi.css|etaussiceluici.gif)$"> Note que tu as probablement intérêt à utiliser ExpiresDefault ou ExpiresByType (de mod_expires) plutôt que Header set, ça te permet de définir des dates d'expiration de façon relative (genre "dans 6 mois"). Jacques.
  11. Ca peut aller de quelques minutes (voire secondes) à plusieurs jours, suivant l'importance qu'il accorde à ton site, son rythme de mise à jour, la disponibilité d'un sitemap ou flux RSS, et probablement tout un tas d'autres paramètres. Jacques.
  12. Et "?" est un caractère spécial dans une regex (comme *, +, ., etc.), qui signifie "0 ou 1 fois l'élément précédent". Il faut donc l'escaper (avec un \). Sinon de façon plus générale, pour que .* prenne tout jusqu'à un caractère donné, tu peux utiliser "[^x]*", x étant le caractère à ne pas prendre en compte (ça veut dire "de 0 à n fois tout caractère sauf x"). Jacques.
  13. En clair: si tu veux mettre un "-" entre des [], il faut le mettre au début ou à la fin, comme je le disais précédemment, et "\" n'a pas sa signification habituelle entre [], pas plus que ".". Donc tu revrais écrire [a-zA-Z0-9.-]. Moi je conseillerais même [-a-zA-Z0-9.], il me semble avoir vu dans une vie antérieure des implémentations qui n'acceptent le "-" qu'en première position (il faut le mettre à des endroits particuliers pour faire la différence entre un "-" litéral et un "-" qui indique un range, et la syntaxe historique ne prévoit pas qu'on puisse utiliser \ pour ça, mais qu'on le mette a des endroits particuliers). Ceci étant dit je ne sais pas très bien pourquoi ça marche chez OVH, il doit y avoir une implémentation différente des regex sur cette machine-là je pense (il y en a à peu près autant que de versions différentes d'OS...). Jacques.
  14. Je ne sais pas quelle implémentation de regex Apache utilise (il y en a une dans le source, mais peut-être qu'il utilise celle du système quand il y en a une? Flemme de vérifier), mais dans certaines, pour inclure un "-" dans une liste entre crochets, il faut le mettre en premier (non escapé). Dans d'autres tu peux le mettre en premier ou en dernier au choix, pas escapé non plus. Donc [-A-Z], pas [A-Z-] ou [A-Z\-]. Alternativement tu peux utiliser des notations type (a| donc par exemple ([A-Z]|-) mais ça peut poser des problèmes si tu dois récupérer des paramètres (dans les implémentations un peu sympa des regex tu peux utiliser (?:texte) pour que les () ne soient pas capturantes, mais je ne pense pas que ce soit le cas dans celles d'Apache. Jacques.
  15. Ce n'est pas le referer qu'il faut regarder (qui indique l'adresse de la page d'où vient l'utilisateur qui aurait suivi un lien, et qui de toutes façons serait HTTP_REFERER et pas REFERER), mais le Host, donc $_SERVER['HTTP_HOST']. Jacques.
  16. Les tables sur lesquelles je travaille ont plus souvent de l'ordre du milliard d'enregistrements, et on effectue quelques millions d'opérations sur chacune par jour, avec de nombreux selects avec des joins implicites sur plusieurs tables. Et ça marche plutôt bien :-) Ensuite, une jointure "externe" (un "OUTER JOIN") ça n'a rien à voir avec une jointure implicite, qui est forcément une jointure interne. Et si on sait ce qu'on fait, ça n'a rien de kamikaze (même si un FULL OUTER JOIN reste d'une utilité très limitée à mon avis, un LEFT/RIGHT JOIN qui est un type de OUTER JOIN est fréquemment utilisé, et c'est le genre de cas où la syntaxe explicite est effectivement obligatoire). A ma connaissance, la norme SQL n'interdit pas le "comma join", et je pense que tous les SGBD l'acceptent sans souci. Ceci dit je n'ai pas la norme SQL sous la main, mais la doc de SQL server nous dit: Vu que sémantiquement, dans la spec, c'est la même chose, je ne vois pas comment un SGBD pourrait faire une différence... Ce n'est pas ce que j'ai dit. J'ai dit que dans mon expérience, c'était rarement plus lisible. Mais c'est probablement juste une question d'habitude. Tout ceci étant dit, je suis totalement pour les standards, mais à ma connaissance le standard ne dit pas "on DOIT faire des joins explicites", mais on PEUT (probablement on DEVRAIT, mais je n'ai pas le texte d'aucune des -nombreuses- versions du standard). Et pour en revenir au point de départ, même si pour des raisons de lisibilité on devrait utiliser des joins explicites, ce que je tiens surtout à démentir c'est que des joins explicites seraient mieux optimisés que des joins implicites, vu que ce n'est absolument pas le cas, puisque c'est la même chose. Jacques.
  17. Je pense qu'aucun SGBDR sérieux de nos jours ne fait la moindre différence (en termes d'optimisation) entre un JOIN explicite et une liste de tables avec un WHERE. Par exemple avec postgresql: ad=# create table test1 (a integer,b integer); CREATE TABLE ad=# create table test2 (b integer, c integer); CREATE TABLE ad=# explain select * from test1,test2 where test1.b=test2.b; QUERY PLAN --------------------------------------------------------------------- Merge Join (cost=270.68..562.65 rows=18818 width=16) Merge Cond: (test1.b = test2.b) -> Sort (cost=135.34..140.19 rows=1940 width=8) Sort Key: test1.b -> Seq Scan on test1 (cost=0.00..29.40 rows=1940 width=8) -> Sort (cost=135.34..140.19 rows=1940 width=8) Sort Key: test2.b -> Seq Scan on test2 (cost=0.00..29.40 rows=1940 width=8) (8 lignes) ad=# explain select * from test1 join test2 on (test1.b=test2.b); QUERY PLAN --------------------------------------------------------------------- Merge Join (cost=270.68..562.65 rows=18818 width=16) Merge Cond: (test1.b = test2.b) -> Sort (cost=135.34..140.19 rows=1940 width=8) Sort Key: test1.b -> Seq Scan on test1 (cost=0.00..29.40 rows=1940 width=8) -> Sort (cost=135.34..140.19 rows=1940 width=8) Sort Key: test2.b -> Seq Scan on test2 (cost=0.00..29.40 rows=1940 width=8) (8 lignes) D'ailleurs la doc de postgresql nous dit: Dans certains cas limités, il est possible d'utiliser des JOINs explicites pour "forcer" l'ordre des jointures (voir http://www.postgresql.org/docs/8.2/interac...icit-joins.html et http://www.postgresql.org/docs/8.2/interac...-COLLAPSE-LIMIT - ce dernier nous dit d'ailleurs que par défaut, un join explicite sera bel et bien converti en une liste de stables...), mais ça reste du cas particulier. Maintenant, le débat reste ouvert sur le fait que l'une des notations soit plus lisible que l'autre. Normalement la notation avec les JOINs explicites devrait l'être, mais dans la pratique, surtout si on a beaucoup de tables à joindre, c'est rarement vrai dans mon expérience. Jacques.
  18. Vu que c'est exactement la même chose, aucune différence. Jacques.
  19. Même genre: remettre effectivement la même opération en cron un peu plus tard (je ne sais pas quelle est la périodicité "originale", j'ai tendance à penser que c'est quotidien plutôt que toutes les heures?), et faire un test pour voir si la tâche a déjà été exécutée correctement. S'il n'y a pas de test évident, il suffit de créer une table SQL avec une seule ligne qui contient la dernière exécution réussie, ou même un fichier quelque part qui contient cette info. Jacques.
  20. SELECT l1.id_client FROM Liaison l1,Liaison l2 WHERE l1.liaison_id_option ='1' AND l2.liaison_id_option='3' AND l1.liaison_id_client=l2.liaison_id_client Jacques.
  21. jcaron

    Soucis SQL

    Tout bêtement: SELECT nom, max(temps_sec) FROM sujet, articles WHERE sujet.id = articles.ref_sujet GROUP BY id ORDER BY max(temps_sec) DESC LIMIT 0,5 Non? Attention cependant, c'est absolument pas optimal ça, quand le nombre de sujets/articles va grossir ça va consommer pas mal de resources (il faut que le serveur lise tous les sujets et tous les articles...). A condition d'avoir un index sur temps_sec, il est probablement possible de faire quelque chose de plus optimisé avec un select distinct bien ajusté. Jacques.
  22. Je n'utilise jamais mod_rewrite donc j'y vais un peu au pif... En encadrant l'expression par des guillemets? Jacques.
  23. jcaron

    Marquer les non lus?

    Tu peux tout simplement utiliser du CSS et les sélecteurs :visited. Avec une couleur différente (comme sur un lien "classique" sans couleur forcée), ou en ajoutant quelque chose avant ou après avec :before ou :after, en ajoutant une image (avec un background-image et probablement un padding), tu devrais pouvoir obtenir l'effet voulu. A ma connaisance c'est comme ça que ça fonctionne sur webrankinfo (les coches vertes pour les sujets déjà lus sur la première page), mais j'ai la flemme d'aller vérifier. Evidemment pour que ça marche il faut que pour une VDB donnée il n'y ait qu'un seul lien possible quelle que soit la façon dont on arrive dessus (depuis la page d'accueil, une autre page...), ou au minimum que tout lien vers cette VDB fasse un redirect vers cette URL unique. Jacques.
  24. Au lieu de faire une redirection (qui ne sera pas visible pour Analytics), passe des paramètres qui sont interprétés par Analytics: www.monsite.fr/mapage?utm_source=mailing&utm_medium=email&utm_campaign=mailing1 par exemple. Voir la doc d'Analytics pour les détails. Sinon avec ta méthode, il faut utiliser un soft de stats qui utilise tes logs httpd. Jacques.
×
×
  • Créer...