Примечание. В следующем блоке if
используйте скобки вокруг continue
для ясности. В противном случае, похоже, что echo
происходит внутри блока if
, а не после его завершения.
if($file == "." || $file == ".." || $file == "index.php" )
{
continue;
}
// Prints a checkbox after each file.
// The checkboxes are received by the form handler as an array called $files[]
// holding the filenames of the files you want deleted.
echo "<input type='checkbox' name='files[]' value='$file' /> $file<br />\n";
Теперь в вашем скрипте обработки форм:
$path = "/var/www/vhosts/default/htdocs/Members/$company/Users/$insp_name/Orders/Clients";
foreach($_POST['files'] as $filename) {
// To prevent traversal attacks, you need to validate $filename
// For example, if it would only be expected to be alphanumeric:
if (ctype_alnum($filename)) {
if(!unlink($path . "/" . $filename)) {
echo "Error deleting $filename";
}
}
}
Примечание о проверке: очень важно проверить содержимое $filename
, чтобы убедиться, что оно не содержит нулевых байтов, или ../../../
, чтобы разрешить изменение файлов за пределами предполагаемого пути. В приведенном выше примере это было сделано с ctype_alnum()
, но другие регулярные выражения или in_array()
могут быть более подходящими для данной ситуации.