首页 > 解决方案 > Edge/Chrome 和 Firefox 上保存文件名的不同行为

问题描述

我在一个项目上工作,我面临着边缘/铬和火狐之间的奇怪行为。我正在尝试使用file_[ip address]-[username].txt 之类的文件名保存文件。

通过ajax从html页面发送数据..

...
<form id="frmChat" action="#">
    <table>
      <tr>
        <td>User:</td>
        <td>
          <input class="input-data" type="text" id="txtUser" name="user" size="20" value="" />
        </td>
        <td rowspan="2">
            <input class="input-data-submit" type="submit" name="send" value="Send Value" />
        </td>
      </tr>
      <tr>
        <td>Message:</td>
        <td>
            <input  type="text" name="message" id="txtMessage" size="20" />
        </td>
      </tr>
    </table>
</form>
...  
var data = $(this).serialize();
$.ajax({
    url: 'xxx.php',
    dataType: 'text',
    data: data,
    type: 'post',
    ...
    }
  });
...

我将数据保存到我的 php 文件中,如下所示:

...
$postVars = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
extract($postVars); //contains $user, $message and some more fields
...

然后我尝试保存文件

...
$userip = $_SERVER['REMOTE_ADDR']."-".$user;
$msg = $userip."-".$message;

$fp=fsockopen($host,$port,$errstr,$errno,300)
fputs($fp,$msg);
fclose($fp);
...

到目前为止,一切都按预期工作。但是,当我从 edge/chrome 打开页面时,我得到“ null ”作为 $user 和 $_SERVER['REMOTE_ADDR'] 并且当我从 firefox 打开页面时,我得到了 $user 和 $_SERVER['REMOTE_ADDR']正确

所以在边缘/铬上创建的保存文件看起来像:file_-.txt

而从火狐是这样的:file_127.0.0.0-test.txt

我在这里想念什么?

标签: phpgoogle-chromesocketsfirefoxfputs

解决方案


谜团已揭开。每个浏览器处理 localhost ip 的方式引起的所有问题。

  • Firefox 返回本地主机 ip:

127.0.0.1

  • chrome/edge 将 localhost ip 返回为:

::1

所以在后来的环境卫生“清空”了我的变量,并导致了问题。谢谢大家的答案。


推荐阅读