⚠ Attention : Les Feuilles de Style en Cascade (CSS)↗ sont désactivées dans votre navigateur. Pour profiter pleinement de ce site web, veuillez activer les CSS.


Browscap v6000032

🗣 Traductions

Site web: browscap.org↗

Downloading the INI files here implies you agree to our fair usage policy. Any repeat attempts to download the files will be banned. We highly recommend that you request the version URL and compare your current version against the latest version before requesting the download URL.

We have implemented rate limiting and banning with the following rules:

Écrivons un script pour ça !

Script de téléchargement

Premièrement, créez le dossier /var/local/lib/browscap/. Il contiendra toutes les données browscap. S'il n'existe pas déjà, créez également le dossier /var/local/log/.

Ensuite, créez le script /usr/local/sbin/update-browscap-source avec le contenu suivant :

#!/bin/bash

# select a RAMDISK or a temporary directory (i.e. /tmp or /var/tmp)
TMP="/var/tmp/"

# 1A) remote files
REMOTE_BASE="http://browscap.org/"
REMOTE_VERSION="${REMOTE_BASE}version-number"
REMOTE_INI="${REMOTE_BASE}stream?q=Full_PHP_BrowsCapINI"

# 1B) tmp files
FILE_VERSION="version"
FILE_NAME="full-php-browscap"
FILE_EXT=".ini"
FILE_INI="${FILE_NAME}${FILE_EXT}"

# 1C) local files
LOCAL_BASE="/var/local/lib/browscap/"
LOCAL_VERSION="${LOCAL_BASE}${FILE_VERSION}"

# 1Z) runtime
VERSION_LOCAL=
VERSION_REMOTE=

#  2) must be root or staff
if [ "root" != "`id -un`" ] && [ -z "`id -Gn | grep staff`" ];
then
	echo "ERROR: privilege denied!" >&2
	echo "GO AWAY!" >&2
	exit 255
fi

if ! umask 0002;
then
	echo "WARNING: unable to set umask" >&2
fi
echo "UMASK = $(umask)" >&2

#  3) check directory
if ! [ -d "${TMP}" ];
then
	echo "ERROR: ${TMP} does not exist!" >&2
	exit 255
fi
if ! [ -w "${TMP}" ];
then
	echo "ERROR: ${TMP} is not writable!" >&2
	exit 255
fi
echo "${TMP} is ok" >&2

if ! [ -d "${LOCAL_BASE}" ];
then
	echo "ERROR: ${LOCAL_BASE} does not exist!" >&2
	exit 255
fi
if ! [ -w "${LOCAL_BASE}" ];
then
	echo "ERROR: ${LOCAL_BASE} is not writable!" >&2
	exit 255
fi
echo "${LOCAL_BASE} is ok" >&2

if ! cd "${TMP}";
then
	echo "ERROR: unable to read ${TMP}" >&2
	exit 255
fi
echo "PWD = ${PWD}" >&2

#  4) get local version
if ! [ -f "${LOCAL_VERSION}" ];
then
	echo "WARNING: ${LOCAL_VERSION} does not exist!" >&2
else
	VERSION_LOCAL=$(cat "${LOCAL_VERSION}")
	echo "VERSION_LOCAL = ${VERSION_LOCAL}" >&2
fi

#  5) get remote version
VERSION_REMOTE=$(wget "${REMOTE_VERSION}" -q -O -)
if [ $? != 0 ];
then
	echo "ERROR: unable to download ${REMOTE_VERSION}" >&2
	exit 255
fi
echo "VERSION_REMOTE = ${VERSION_REMOTE}" >&2

#  6) terminate if equal
if [ "${VERSION_LOCAL}" == "${VERSION_REMOTE}" ]
then
	echo "Browscap is up to date (version=${VERSION_LOCAL})" >&2
	echo ${VERSION_LOCAL}
	exit 1
fi

echo "UPDATING BROWSCAP TO ${VERSION_REMOTE}" >&2

#  7) download new version
if ! wget "${REMOTE_INI}" -q -O "${FILE_INI}";
then
	echo "ERROR: unable to download ${REMOTE_INI}" >&2
	exit 255
fi

if ! cd "${LOCAL_BASE}";
then
	echo "ERROR: unable to read ${LOCAL_BASE}" >&2
	exit 255
fi
echo "PWD = ${PWD}" >&2

#  8) create the new version folder
if ! mkdir -p "${VERSION_REMOTE}";
then
	echo "ERROR: unable to create ${VERSION_REMOTE}/" >&2
fi
ls -dl "${VERSION_REMOTE}/" >&2

#  9) save the new ini file
echo cp "${TMP}${FILE_INI}" "${VERSION_REMOTE}/${FILE_INI}"
if ! cp "${TMP}${FILE_INI}" "${VERSION_REMOTE}/${FILE_INI}";
then
	echo "ERROR: unable to copy to ${VERSION_REMOTE}/${FILE_INI}" >&2
fi
# ls -l "${VERSION_REMOTE}/" >&2

# 10) link the new version to its final destination
echo ln -sf "${VERSION_REMOTE}/${FILE_INI}" "${FILE_INI}"
if ! ln -sf "${VERSION_REMOTE}/${FILE_INI}" "${FILE_INI}";
then
	echo "ERROR: unable to apply the new browscap" >&2
	exit 255
fi

# 11) update the version file
VERSION_LOCAL="${VERSION_REMOTE}"
echo -n "${VERSION_LOCAL}" > "${LOCAL_VERSION}"

# 12) end
echo ${VERSION_LOCAL}
exit 0

N'oubliez pas de rendre le script exécutable et … exécutez-le !

$ chmod ug+x /usr/local/sbin/update-browscap-source
$ cd /var/local/lib/browscap/
$ ls -1
$ update-browscap-source 2>/dev/null
6000032
$ echo $?
0
$ ls -1
6000032
full-php-browscap.ini -> 6000032/full-php-browscap.ini
version
$ echo $(cat version)
6000032

Le fichier full-php-browscap.ini est un lien symbolique mis à jour à la dernière version.

Le script ne retourne 0 que lorsqu'une mise-à-jour a été effectuée avec succès.

S'il n'y a pas d'erreur (ex. succès de mise-à-jour ou déjà à jour) le script retourne le nouveau numéro de version ou l'actuel (6000032) vers STDOUT.

Finallement, en cas d'erreur, un message est retourné vers STDERR.

Tant que les fichiers dans /var/local/lib/browscap/ ne sont pas supprimés, vous pouvez maintenant exécuter ce script autant de fois que vous le voulez.

$ update-browscap-source 2>/dev/null
6000032
$ echo $?
1
$ ls -1
6000032
full-php-browscap.ini -> 6000032/full-php-browscap.ini
version
$ echo $(cat version)
6000032

CRON

Créez le fichier /etc/cron.d/browscap :

#
# /etc/cron.d/browscap -- updates the browscap database
#

# runs at 10:51AM every Sunday
51 10 * * 0 root /usr/local/sbin/update-browscap-source > /dev/null 2>> /var/local/log/browscap.log

Choisissez votre propre date et heure de mise-à-jour ainsi qu'un utilisateur (quelqu'un de moins privilégié de préférence). N'oubliez pas de recharger cron !

$ /etc/init.d/cron reload

PHP

Editez les fichiers /etc/php5/apache2/php.ini et /etc/php5/cli/php.ini comme suit :

browscap = /var/local/lib/browscap/full-php-browscap.ini

Redémarrez apache:

$ /etc/init.d/apache2 restart

Fichiers de correspondances

Les valeurs retournées par la librairie browscap peuvent être mises en correspondance avec plus d'information. Voir Maps - Browscap

Fin

Amusez-vous bien !