php if语句作为ajax调用的一部分没有失败

先生

我有一个从 javascript 调用的 php 文件,目的是将文件上传到我的服务器。

澄清我正在做的是用 ajax 调用这个 php 文件,所以据我所知它不是在传统意义上运行的,这就是为什么我不使用 $_FILE 和 $_POST 作为这个项目的重点是处理文件上传/无需重新加载页面即可完成用户数据的收集。

显然我们想要某种服务器端文件验证,我已经在 if 语句中设置了它。

但是,无论我选择什么文件类型,代码都会成功并继续上传。

有人可以告诉我出了什么问题/或指导我朝正确的方向发展吗?

<?php
session_start();

$name = $_SESSION['name'];
$email = $_SESSION['email'];
$phone = $_SESSION['phone'];

$date = date('Y-m-d');

$mypath = $name . '-' . $phone . '-' . $date;

$ext = $_SERVER['HTTP_X_FILE_TYPE'];
$allow = array('psd', 'ai', 'eps', 'svg', 'jpg', 'png', 'docx', 'doc', 'pptx', 'ppt');

if(!in_array($ext,$allow)){
    if(!file_exists($mypath)) {
    mkdir($mypath,0777,TRUE);
    }
    $str = file_get_contents('php://input');

    $title = $_SERVER['HTTP_X_FILE_NAME'];

    $path = "$mypath/".$title;
    file_put_contents($path,$str);
}else{
    return false;
}
?>  

非常感谢 - B先生

贾马尔

代码的问题是(就像评论中提到的@Cashbee),是if(!in_array($ext,$allow))代码的一部分。这部分允许当文件扩展要上载的文件不是$allow阵列。正确的代码应该如下。

<?php
session_start();

$name = $_SESSION['name'];
$email = $_SESSION['email'];
$phone = $_SESSION['phone'];

$date = date('Y-m-d');

$mypath = $name . '-' . $phone . '-' . $date;

$ext = $_SERVER['HTTP_X_FILE_TYPE'];
$allow = array('psd', 'ai', 'eps', 'svg', 'jpg', 'png', 'docx', 'doc', 'pptx', 'ppt');

if(in_array($ext,$allow)){
    if(!file_exists($mypath)) {
    mkdir($mypath,0777,TRUE);
    }
    $str = file_get_contents('php://input');

    $title = $_SERVER['HTTP_X_FILE_NAME'];

    $path = "$mypath/".$title;
    file_put_contents($path,$str);
}else{
    exit;
}
?>

重要提示:请记住,基于浏览器的 javascript 命令设置的标头信任扩展程序具有高风险,不应信任。如果这是必需的,您必须将这些文件存储在一个文件夹中,要么无法访问/限制从网络访问,并根据请求使用正确的 mime 标头提供原始文件,或在上传时检查多个文件扩展名。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通过PHP在JSON添加@符号作为对象名的一部分

PHP检查值是否是具有共同差异的数字序列的一部分

是否有可能使用php即时重写rss feed的一部分

从URL删除查询字符串作为PHP函数的一部分

PHP仅调用字符串项的一部分

尚未设置Ajax POST,但仍会激活php if语句的一部分

在PHP中复制xml的一部分

作为AJAX成功函数的一部分,从API调用发送PHP的JSON响应

获取文件名(如果有一部分)-PHP

使用php提取链接的一部分?

如何在PHP中将“&”作为字符串的一部分传递?

PHP Sessions购物车:如果产品已经作为会话的一部分,则更新产品

AJAX / PHP重新加载页面的一部分

PHP .htaccess异常.php文件的一部分

连接PHP中的URL的一部分

PHP检查是否另一个数组的一部分

在PHP中获取日期的一部分

PHP更改URL的一部分

如何从PHP中提取AJAX响应的一部分

CMS admin作为config.php vs users表的一部分

Python和PHP没有发挥作用,只有很小一部分被解析

PHP-<form action =“”>属性内的变量作为get方法的url的一部分

有没有办法用 php 一致地阅读电子邮件正文的一部分(回复)

如何显示一个div,它是php代码的一部分

php If语句作为函数内部返回值的一部分

`<?php ?>` 中的字符串是否是 PHP 的一部分?

作为类函数一部分的 SQL 查询中的 PHP 变量未按预期工作

有没有办法将 javascript 变量用作 PHP SQL 页面的一部分?

更新 .php 页面的一部分