Y at-il une alternative à php readfile () dans le serveur de mode sans échec?
-
27-10-2019 - |
Question
Je héberger mon site sur un hébergement partagé, qui a changé récemment le serveur en mode sans échec (sans même aviser que). J'utilise une fonctionnalité que les fichiers de téléchargement à partir du serveur, en utilisant le readfile () fonction (j'utilise php). Maintenant, safe_mode, cette fonction est plus disponible. Y at-il un remplacement ou une solution de contournement pour gérer la situation que le fichier pourra être téléchargé par l'utilisateur?
Merci
La solution
Comme je l'ai écrit dans les commentaires, readfile()
est désactivé en incluant dans disable_functions
php.ini directive. Cela n'a rien à voir avec mode sans échec . Essayez de vérifier quelles fonctions sont désactivées et voir si vous pouvez utiliser toute autre fonction de système de fichiers (-s) pour faire ce que fait readfile()
.
Pour voir la liste des fonctions désactivées, utilisez:
var_dump(ini_get('disable_functions'));
Vous pouvez utiliser:
// for any file
$file = fopen($filename, 'rb');
if ( $file !== false ) {
fpassthru($file);
fclose($file);
}
// for any file, if fpassthru() is disabled
$file = fopen($filename, 'rb');
if ( $file !== false ) {
while ( !feof($file) ) {
echo fread($file, 4096);
}
fclose($file);
}
// for small files;
// this should not be used for large files, as it loads whole file into memory
$data = file_get_contents($filename);
if ( $data !== false ) {
echo $data;
}
// if and only if everything else fails, there is a *very dirty* alternative;
// this is *dirty* mainly because it "explodes" data into "lines" as if it was
// textual data
$data = file($filename);
if ( $data !== false ) {
echo implode('', $data);
}
Autres conseils
Je suppose que vous utilisez readfile
pour charger des fichiers à distance, comme vous le dites « du serveur ». Si cela est exact, votre problème n'est pas mode sans échec, mais que les URL d'ouverture avec des fonctions de fichier php normales ne sont pas plus permis (réglage allow_url_fopen
désactivé).
Dans ce cas, vous pouvez utiliser les fonctions PHP papillotes à télécharger des dossiers. En outre, file_get_contents
est une alternative valable.