mardi 25 septembre 2007
Installer des plugins dotclear 1.2.7 sans "allow_url_fopen"
Pour faire simple voici la manip à suivre :
- Editer le fichier à la racine de dotclear "inc/libs/lib.files.php"
-
Trouver la ligne
# Copier d'un fichier binaire distant
function copyRemote($src,$dest)
Chez moi la ligne 157 - Supprimer cette fonction. Pour les développeurs modifier la fonction. ajouter les deux suivantes
- Inserer ces deux fonctions juste en dessous comme ci-après
# Copier d'un fichier binaire distant
function copyRemote($src,$dest)
{
if (($fp1 = @fopen($src,'r')) === false)
{
//return __('An error occured while downloading the file.');
files::copyRemote2($src,$dest);
}
else
{
if (($fp2 = @fopen($dest,'w')) === false)
{
fclose($fp1);
return __('An error occured while writing the file.');
}
else
{
while (($buffer = fgetc($fp1)) !== false) {
fwrite($fp2,$buffer);
}
fclose($fp1);
fclose($fp2);
return true;
}
}
}
function copyRemote2($src,$dest)
{
$buffer = files::httpGet($src);
if (($fp = @fopen($dest,'w')) === false)
{
return __('An error occured while writing the file.');
}
else
{
fwrite($fp, $buffer);
fclose($fp);
return true;
}
}
function httpGet($url)
{
$url_stuff = parse_url($url);
$port = isset($url_stuff['port']) ? $url_stuff['port'] : 80;
$fp = fsockopen($url_stuff['host'], $port);
$query = 'GET ' . $url_stuff['path'] . " HTTP/1.0\n";
$query .= 'Host: ' . $url_stuff['host'];
$query .= "\n\n";
fwrite($fp, $query);
while ($tmp = fread($fp, 1024))
{
$buffer .= $tmp;
}
preg_match('/Content-Length: ([0-9]+)/', $buffer, $parts);
if (!($parts[1] > 0))
return __('An error occured while downloading the file.');
return substr($buffer, - $parts[1]);
}
Avec ceci je peux installer un plugins via l'installeur sans problème.
Si vous rencontrez des soucis n'hésitez pas à émettre vos commentaires sur ce billet.
PHP4/PHP5 - mardi 25 septembre 2007
Tags : php
, programmation
, socket