Lors de l'enregistrement d'images distantes à l'aide de PHP, comment vérifier si l'image est légale avant de l'enregistrer ?

WBOY
Libérer: 2023-07-12 20:18:02
original
1045 Les gens l'ont consulté

Comment vérifier si l'image est légale avant de l'enregistrer lorsque vous utilisez PHP pour enregistrer une image distante ?

Pendant le développement, nous rencontrons souvent le besoin de sauvegarder des images distantes, telles que l'exploration d'images sur des pages Web, le téléchargement d'avatars par les utilisateurs, etc. Cependant, afin de garantir la sécurité du serveur et de réduire le gaspillage inutile de ressources, nous devons effectuer un contrôle de légalité avant de sauvegarder des images distantes. Cet article explique comment utiliser PHP pour vérifier la légalité des images avant de les enregistrer et fournit des exemples de code correspondants.

1. Vérifiez la légalité de l'image
Avant d'enregistrer l'image distante, nous devons nous assurer que l'image est légale et éviter d'enregistrer des scripts malveillants ou des formats de fichiers non pris en charge. Voici quelques méthodes de vérification courantes :

  1. Vérification des extensions de fichiers
    Les extensions de fichiers sont un moyen simple de déterminer le type de fichier. Habituellement, nous pouvons utiliser la fonction pathinfo de PHP pour obtenir l'extension du fichier et la comparer avec les formats d'image pris en charge. Vous pouvez utiliser la fonction in_array pour déterminer si le suffixe du fichier se situe dans la plage autorisée, comme indiqué ci-dessous :
$allowedExtensions = array('jpg', 'jpeg', 'png', 'gif'); // 允许的图片格式
$extension = pathinfo($imageUrl, PATHINFO_EXTENSION); // 获取文件后缀名

if (!in_array(strtolower($extension), $allowedExtensions)) {
    die('Invalid file format');
}
Copier après la connexion
  1. Vérifiez le format du fichier
    En plus de vérifier le suffixe du fichier, nous pouvons également déterminer le format du fichier via les informations d’en-tête du fichier. Avant d'enregistrer l'image distante, vous pouvez utiliser la fonction get_headers de PHP pour envoyer une requête HEAD afin d'obtenir les informations d'en-tête de réponse. Ensuite, nous pouvons définir le champ d'en-tête Content-Type correspondant en fonction de différents formats de fichiers, puis le comparer avec les formats d'image pris en charge. Voici un exemple de code :
$responseHeaders = get_headers($imageUrl);
$contentType = '';

foreach ($responseHeaders as $header) {
    if (strpos($header, 'Content-Type:') === 0) {
        $contentType = substr($header, 14);
        break;
    }
}

$allowedContentTypes = array('image/jpeg', 'image/png', 'image/gif');
if (!in_array($contentType, $allowedContentTypes)) {
    die('Invalid file format');
}
Copier après la connexion
  1. Vérifiez la taille du fichier
    Pour éviter d'enregistrer des images trop volumineuses, nous pouvons limiter la taille du fichier téléchargé. Vous pouvez utiliser la fonction filesize de PHP pour obtenir la taille du fichier, puis la comparer à la valeur maximale définie. Voici un exemple de code :
$maxFileSize = 2 * 1024 * 1024; // 最大文件大小为2MB
$fileSize = filesize($tempFilePath);

if ($fileSize > $maxFileSize) {
    die('File size too large');
}
Copier après la connexion

2. Enregistrez l'image distante
Après avoir confirmé la légalité de l'image distante, nous pouvons utiliser la fonction file_put_contents de PHP pour enregistrer l'image sur le serveur. Voici un exemple de code :

// 获取远程图片内容
$imageData = file_get_contents($imageUrl);

// 生成保存路径和文件名(可根据实际需求修改)
$savePath = 'path/to/save/directory/';
$saveFileName = uniqid() . '.' . $extension;
$saveFilePath = $savePath . $saveFileName;

// 保存图片
if (file_put_contents($saveFilePath, $imageData)) {
    echo 'Save successfully';
} else {
    echo 'Save failed';
}
Copier après la connexion

Ce qui précède explique comment vérifier si l'image est légale avant de l'enregistrer lorsque vous utilisez PHP pour enregistrer une image distante. En vérifiant l'extension du fichier, le format du fichier, la taille du fichier, etc., vous pouvez augmenter la sécurité du serveur et vous assurer que les images enregistrées sont légales. J'espère que cet article pourra vous aider.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal