簡體   English   中英

php if語句作為ajax調用的一部分不會失敗

[英]php if statement not failing as part of ajax call

我有一個從javascript調用的php文件,目的是將文件上傳到我的服務器。

澄清一下,即時通訊正在用ajax調用此php文件,因此據我了解,它不是以傳統的方式運行,這就是為什么我不使用$ _FILE和$ _POST的原因,因為該項目的重點是處理fileupload /無需重新加載頁面即可完成用戶數據的收集。

顯然,我們需要某種服務器端文件驗證,這是我在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標頭將其原始提供,或者在上傳時檢查多個文件擴展名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM