【问题标题】:Uploading a csv file in PHP. Where is the error in the code在 PHP 中上传 csv 文件。代码中的错误在哪里
【发布时间】:2012-12-14 23:44:21
【问题描述】:
<?php
    require '../config.php';
   // Edit upload location here   
   $result = 0;
   $name = mysql_real_escape_string($_FILES['myfile']['name']);
   $path = csv;
   $ext = 'csv';
   $md5 = md5($name);
   $target_path = $path . '\\' . $md5 . '.' . $ext;

   if(move_uploaded_file($_FILES['myfile']['tmp_name'], $target_path)) {
      $result = 1;
   }

   sleep(1);


?>

不会上传文件名中包含括号等的文件

【问题讨论】:

  • 要显示错误信息,请使用error_reporting(E_ALL);

标签: php file-upload csv upload


【解决方案1】:

不要这样做:

$name = mysql_real_escape_string($_FILES['myfile']['name']);

做:

$name = $_FILES['myfile']['name'];

你得到的是 $name 的 MD5,所以没有理由清理它,因为它会生成一个 32 字符的十六进制字符串,无论如何都不会包含任何特殊字符。如果文件名包含特殊字符并且您使用上述转义,则 MD5 将完全改变。

【讨论】:

    【解决方案2】:

    错误可能在这里:

    $path = csv;
    

    这里 PHP 正在寻找一个名为 csv 的常量,除非你已经定义了它,否则它将返回 null,所以你的 $target_path 没有正确构建。

    【讨论】:

    • 您好,csv 被定义为具有正确权限的目录。另外,我怎样才能让它显示任何错误消息。它甚至没有显示任何错误消息。
    • 你为什么使用\` in the $target_path`定义。检查以确保您已将error_reportingdisplay_errors 正确设置为可以看到PHP 错误的位置。
    • 我也不知道你为什么在这里使用mysql_real_escape_string。您没有将文件名插入 mysql,所以我不知道您从中获得了什么,尽管我认为这不是您的问题,除非您没有打开数据库连接,否则它将失败。
    【解决方案3】:

    再尝试一件事是在构建 $target 路径时使用预定义的 DIRECTORY_SEPERATOR 常量...

    $target_path = $path . DIRECTORY_SEPERATOR . $md5 . '.' . $ext;
    

    【讨论】:

    • 仍然无法正常工作。我可以上传名称中没有任何特殊字符的文件
    • 你能给我一个你尝试上传失败的例子吗?
    • 听起来正在发生的事情是您需要从文件名中删除任何在保存文件时不允许使用的特殊字符。为此,长期但安全的方法是创建一个函数,并在该函数内部定义一个不允许的字符数组,然后返回 str_replace($badchars, '', $target_path.
    猜你喜欢
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多