【问题标题】:php imorting file keeps searching on the serverphp imorting 文件不断在服务器上搜索
【发布时间】:2016-06-23 23:40:14
【问题描述】:

我在将 .csv 文件导入 php 脚本以添加到 mysql 服务器时遇到问题,我在本地托管服务器,当我测试脚本时,输出错误说文件位置不存在,因为它正在搜索文件所在的位置该网站存储在我的桌面上,而不是文件实际所在的桌面上。

     <form id="import" action="edit.php" method="post" enctype="multipart/form-data">
    Select BOM .csv file to upload:
    <input name="file" type="file" required="required" id="file" form="import">
    <input name="submit" type="submit" form="import" value="import">
    <?php
    if(isset($_POST['submit']))
    {
        $file = $_FILES['file'];
        $query = "LOAD DATA INFILE '$file' INTO TABLE `boards` FIELDS TERMINATED BY ',' IGNORE 1 LINES";
        $Result = mysql_query($query) OR die(mysql_error());
    }

    ?>
    </form>

有谁知道如何上传实际的 .csv 文件以便我可以将其添加到 sql 数据库中?

【问题讨论】:

  • 服务器如何访问您的桌面?这是不可能的。
  • 你想要 tmp_name 来自 FILES 数组,php.net/manual/en/reserved.variables.files.php 上传文件时,服务器首先将文件存储在 temp 文件夹中,然后 php 运行,因此文件在 php.ini 之前上传。您只需将其从临时文件夹中拉出并将其移动到您要长期存储的位置。或者阅读它等等。

标签: php mysql csv import


【解决方案1】:

问题很可能是您需要文件的实际名称/位置。现在你可能会认为这是你给文件起的名字。然而,它实际上是服务器为其拥有的文件副本提供的名称。这样做是为了避免各种文件名(特殊字符)令人讨厌,并防止重复名称被覆盖。在 PHP 和超级全局 $_FILES 中,您会发现这是数组键 tmp_name

[file] => Array
    (
        [name] => MyFile.jpg
        [type] => image/jpeg
        [tmp_name] => /tmp/php/php6hst32
        [error] => UPLOAD_ERR_OK
        [size] => 98174
    )

如您所见,tmp_name(这个烂摊子/tmp/php/php6hst32)是服务器上的实际物理文件,名称键是您在上传时给它的名称(只是一个字符串)。大多数时候,您可以使用rename() 函数来重命名和移动它。例如rename( $_FILES['tmp_name'], 'path to your upload place/'.$_FILES['name']);copy(),这实际上会在复制/移动文件(在本例中为 tmp/php/ )后将您给它的名称放回去。

你也可以使用move_uploaded_file()http://php.net/manual/en/function.move-uploaded-file.php

或者您可以从临时文件夹中打开它。使用移动上传的文件而不是其他选项(或第一个)可能有一些安全原因,但那是另一天的帖子。

【讨论】:

    猜你喜欢
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    相关资源
    最近更新 更多