我试图不允许将裸露的文件上传到服务器。我在网上找到了javascript,它将扫描照片中的裸露内容。它带有演示图片以及html文件和js文件。我正在使用PHP上传文件,但如果扫描发现该图片有裸露之处,我将无法解决。
这是我的代码示例:
$q= "insert into $table values('', '$email', '$aim', '$icq', '$yahoo', '$homepage', '0', '0', '0', '0', '0', '0', '', now(),'$myip','$email2','$password','$title','$download','$approved','$allowdelete','$author','$facebook','$piclink','$domain','$option3','$secret')";
$result = mysql_query($q) or die("Failed: $sql - ".mysql_error());
$q = "select max(id) from $table";
$result = mysql_query($q);
$resrow = mysql_fetch_row($result);
$id = $resrow[0];
$file = $_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'], "pics/".$id.".".$picext);
$picfile=$id.".".$picext;
echo '<script type="text/javascript" <src="nude.js">';
echo 'nude.load("pics/".<? echo $picfile; ?>);nude.scan(function(result){if(!result){ <? $nude = false; ?>;}else{ $nude = true;}})';
echo '</script>';
if ($nude === false) {
$q = "update $table set picfile = '".$id.".".$picext."' where id='$id'";
$result = mysql_query($q);
Header("Location: index.php?id=$id");
} else{
echo '<script type="text/javascript">';
echo 'alert("Nudity found. Please try again.")';
echo '</script>';
$q = "delete from $table where id='$id'";
$result = mysql_query($q);
unlink("pics/".$picfile);
Header("Location: new2.php");
}
该代码上传了文件,然后应该检查文件中的裸露并将其删除,并告诉用户如果发现裸露,请重试。如果找不到裸体,则会将用户带到网站的主页。(这是添加新的照片页面)。所有的PHP都运行良好,但是由于javascript似乎没有运行我上传的文件,然后由于未设置$ nude,因此它将进入if语句的else,并且js再次不运行(无警报)框),然后删除文件。如何使javascript运行以扫描上传的图片中的裸露内容?我在这里做错了什么?
任何帮助是极大的赞赏!
附言
对于那些想查看正在执行扫描的js文件的人:http://pastebin.com/MpG7HntQ
最佳答案
问题是这一行:
echo 'nude.load("pics/".<? echo $picfile; ?>);nude.scan(function(result){if(!result){ <? $nude = false; ?>;}else{ $nude = true;}})';
不按照您的想法去做。
通过
echo()
输出JavaScript时,该代码在浏览器或客户端运行,直到PHP脚本完成后才运行。您将需要将代码移植到PHP或使用AJAX调用来报告图像的有效性。