Bonsoir à tous!
Spoiler: Le problème ne porte pas sur le code: je cherche un VPS/dédié pour exécuter le script PHP
j'ai un script PHP:
Qui doit se trouver dans le même dossier qu'un XML, nommé "1.xml":
Ce script PHP est destiné à tester la rapidité des fonctions PHP "fopen / flock / fread". Le principe est le suivant:
Mon but est, avec ce système, d'éviter les écritures concurrentes, et éviter ainsi le cas du "le script A lit le fichier, le script B lit le fichier, le script A écrit dans le fichier, le script B écrit dans le fichier", ce qui fait disparaitre le travail du script A, écrasé par le script B.
J'ai exécuté ce PHP sur mon serveur local (donc, sur mon PC), pour le résultat suivant:
Ca dépote bien plus vite que ce que j'espérais (mais c'est Windows XP, alors le verrou est-il vraiment fiable?).
Je teste ensuite sur mon mutualisé OVH (perso):
Je déchante un peu, mais bon...
Ma requête est la suivante: quelqu'un pourrait-il tester ce script PHP sur un VPS voire sur un dédié? J'aimerai savoir si la "lenteur" apparente des verrous est due au mutualisé, ou si c'est général à PHP.
Pour faire le test, il suffit de créer un fichier "*.php" contenant le code PHP ci-dessus, et de mettre un fichier "1.xml" (le nom est écrit en dur dans le code PHP, c'est pourquoi il est forcé de s'appeler ainsi), contenant le code XMl ci-dessus, dans le même répertoire que le *.php.
Ensuite, il n'y a plus qu'à visiter l'URL du fichier php, et à communiquer le résultat ici.
Je pense que la vitesse des verrous dépend du type d'hébergement (le mutualisé n'étant pas top), et j'aimerai donc avoir une comparaison avec vos VPS/dédiés si vous en avez.
Merci d'avance!
Spoiler: Le problème ne porte pas sur le code: je cherche un VPS/dédié pour exécuter le script PHP
j'ai un script PHP:
<?php
$filename = '1.xml';
$start=microtime(true);
$N=1000;
for ($i=$N;$i>0;$i--)
{
$file = fopen($filename, 'r+');
if (flock($file, LOCK_EX))
{
fseek($file, 0, SEEK_END);
$flength = ftell($file);
fseek($file, 0, SEEK_SET);
$content = fread($file, $flength);
flock($file, LOCK_UN);
fclose($file);
}
else
echo('cannot get lock at i='.$i);
}
echo('Durée unitaire: ' . round(1000000.0*(microtime(true)-$start)/$N) . 'µs<br/>');
$start=microtime(true);
$N=1000;
for ($i=$N;$i>0;$i--)
{
$file = fopen($filename, 'r+');
fseek($file, 0, SEEK_END);
$flength = ftell($file);
fseek($file, 0, SEEK_SET);
$content = fread($file, $flength);
flock($file, LOCK_UN);
fclose($file);
}
echo('Durée unitaire (sans lock): ' . round(1000000.0*(microtime(true)-$start)/$N) . 'µs<br/>');
?>
Qui doit se trouver dans le même dossier qu'un XML, nommé "1.xml":
<?xml version="1.0" encoding="utf-8"?>
<comments>
<comment id="1">
<author>3</author>
<lang>fr</lang>
<date>21:04 13/04/2013</date>
<edits>
<edit>
<author>4</author>
<date>21:04 13/04/2013</date>
<why>Pour tester</why>
</edit>
</edits>
<text>
Je trouve ce passage totalement idiot et incompréhensible
</text>
<responses>
<comment id="8">
<author>3</author>
<lang>fr</lang>
<date>21:04 13/04/2013</date>
<edits>
</edits>
<text>
Moi pareil
</text>
<responses>
</responses>
</comment>
</responses>
</comment>
<comment id="5">
<author>3</author>
<lang>fr</lang>
<date>21:04 13/04/2013</date>
<edits>
<edit>
<author>4</author>
<date>21:04 13/04/2013</date>
<why>Pour tester</why>
</edit>
</edits>
<text>
Joyeux Noël
</text>
<responses>
</responses>
</comment>
</comments>
Ce script PHP est destiné à tester la rapidité des fonctions PHP "fopen / flock / fread". Le principe est le suivant:
- Je bloque le fichier 1.xml
- Je lis ce fichier
- plus tard, je ferai des traitements sur le résultat de la lecture
- J'écris dans le fichier
- Je débloque le fichier
Mon but est, avec ce système, d'éviter les écritures concurrentes, et éviter ainsi le cas du "le script A lit le fichier, le script B lit le fichier, le script A écrit dans le fichier, le script B écrit dans le fichier", ce qui fait disparaitre le travail du script A, écrasé par le script B.
J'ai exécuté ce PHP sur mon serveur local (donc, sur mon PC), pour le résultat suivant:
Citation :Durée unitaire: 93µs
Durée unitaire (sans lock): 86µs
Ca dépote bien plus vite que ce que j'espérais (mais c'est Windows XP, alors le verrou est-il vraiment fiable?).
Je teste ensuite sur mon mutualisé OVH (perso):
Citation :Durée unitaire: 2163µs
Durée unitaire (sans lock): 1725µs
Je déchante un peu, mais bon...
Ma requête est la suivante: quelqu'un pourrait-il tester ce script PHP sur un VPS voire sur un dédié? J'aimerai savoir si la "lenteur" apparente des verrous est due au mutualisé, ou si c'est général à PHP.
Pour faire le test, il suffit de créer un fichier "*.php" contenant le code PHP ci-dessus, et de mettre un fichier "1.xml" (le nom est écrit en dur dans le code PHP, c'est pourquoi il est forcé de s'appeler ainsi), contenant le code XMl ci-dessus, dans le même répertoire que le *.php.
Ensuite, il n'y a plus qu'à visiter l'URL du fichier php, et à communiquer le résultat ici.
Je pense que la vitesse des verrous dépend du type d'hébergement (le mutualisé n'étant pas top), et j'aimerai donc avoir une comparaison avec vos VPS/dédiés si vous en avez.
Merci d'avance!