Блокирование с помощью PHP загрузки НЮ-изображений и изображений для взрослых

На phpclasses.org я нашел интересный и полезный файл класса, который помогает распознать изображения обнаженных людей на основе подсчета пикселей цвета кожи. Он был разработан Бакром Альшарифом из Египта.

Я совместил его со своими материалами о том, как загружать изображения через Jquery и PHP, уверен, что этот код поможет вам блокировать изображения НЮ и изображения для взрослых.

Скачать скрипт ДЕМО

Пример конфигурация базы данных для пользователей.

Пользователи

Содержит сведения о пользователях: имя пользователя, пароль, адрес электронной почты и т. д:

CREATE TABLE `users` (
`uid` int(11) AUTO_INCREMENT PRIMARY KEY,
`username` varchar(255) UNIQUE KEY,
`password` varchar(100),
`email` varchar(255) UNIQUE KEY
)

Пример значений:

INSERT INTO `users` 
(`uid`, `username`, `password`, `email`) 
VALUES 
('1', '9lessons', MD5('password'), 'srinivas@9lessons.info');

Код Javascript:

$("#photoimg").live('change',function(){})- photoimg это ID имени тега INPUT FILE, а $('#imageform').ajaxForm() - imageform это ID имени FORM. Пока изменяется INPUT, это порождает вызов формы подтверждения FORM без обновления страницы. При этом используется метод ajaxForm(). Загруженное изображение будет <i>содержаться</i> внутри тега <i>#preview</i>. 
<script type="text/javascript" src="http://ajax.googleapis.com/
ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<script type="text/javascript" src="jquery.wallform.js"></script>
<script type="text/javascript">
$(document).ready(function() 
{ 

$('#photoimg').live('change', function() 
 {
var A=$("#imageloadstatus");
var B=$("#imageloadbutton");

$("#imageform").ajaxForm({target: '#preview', 
beforeSubmit:function(){
A.show();
B.hide();
}, 
success:function(){
A.hide();
B.show();
}, 
error:function(){
A.hide();
B.show();
} }).submit();
});

}); 
</script>

Здесь задается вывод и скрытие #imageloadstatus и #imageloadbutton, основываясь на статусе подтверждения загрузки формы.

index.php

Содержит простые коды PHP и HTML. Здесь $session_id=1 это значение идентификатора сессии пользователя:

<?php
include('db.php');
session_start();
$session_id='1'; // Значение логина сессии пользователя
?>
<div id='preview'>
</div>
<form id="imageform" method="post" enctype="multipart/form-data" action='ajaximage.php'>
Upload image: 
<div id='imageloadstatus' style='display:none'><img src="loader.gif" alt="Uploading...."/></div>
<div id='imageloadbutton'>
<input type="file" name="photoimg" id="photoimg" />

</div>
</form>

ajaximage.php

Содержит PHP-код. Этот скрипт помогает загружать изображения в папку uploads. Имя файла изображение изменяется в timestamp+session_id.extention:

<?php
include('db.php');
session_start();
$session_id='1'; // Идентификатор сессии пользователя

$path = "uploads/";

function getExtension($str)
{
$i = strrpos($str,".");
if (!$i)
{
return "";
}
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}

$valid_formats = array("jpg", "png", "gif", "bmp","jpeg","PNG","JPG","JPEG","GIF","BMP");
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST")
{
$name = $_FILES['photoimg']['name'];
$size = $_FILES['photoimg']['size'];
if(strlen($name))
{
$ext = getExtension($name);
if(in_array($ext,$valid_formats))
{
if($size<(1024*1024)) // Максимальный размер изображения 1 MB
{
//--- Код фильтра изображения
require_once('class.ImageFilter.php');
$filter = new ImageFilter;
$score = $filter->GetScore($_FILES['photoimg']['tmp_name']);
if(isset($score))
{
if($score >= 60) // Подсчет соответствующих пикселей изображения. Если значение больше 60%, оно считается изображением для взрослых. 
{
echo "Image scored ".$score."%, Кажется вы хотите загрузить изображение для взрослых :-(";
}
else
{
//--- Код фильтра изображения
$actual_image_name = time().$session_id.".".$ext;
$tmp = $_FILES['photoimg']['tmp_name'];
if(move_uploaded_file($tmp, $path.$actual_image_name))
{
mysqli_query($connection,"UPDATE users SET profile_image='$actual_image_name' WHERE uid='$session_id'");
echo "<img src='uploads/".$actual_image_name."' class='preview'>";
}
else
echo "ошибка";
//--- Код фильтра изображения
}
}
//--- Код фильтра изображения
}
else
echo "Максимальный размер изображения 1 MB"; 
}
else
echo "Неверный формат файла.."; 
}
else
echo "Пожалуйста выберите изображение..!";
exit;
}
?>

db.php

Файл конфигурации базы данных, просто изменяет учетные данные базы данных:

<?php
error_reporting(0);
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'username');
define('DB_PASSWORD', 'password');
define('DB_DATABASE', 'database');
$connection =@mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
?>

РедакцияПеревод статьи «Block Uploads of Adult or Nude Images using PHP»