【问题标题】:DIfferent behaviour on Edge/Chrome and Firefox on save filenameEdge/Chrome 和 Firefox 上保存文件名的不同行为
【发布时间】:2021-04-25 17:25:30
【问题描述】:

我在一个项目上工作,我面临着边缘/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 打开页面时,我得到 $user 和 $_SERVER['REMOTE_ADDR'] 的“null”,当我从 firefox 打开页面时,我得到 $user 和 $_SERVER[ 'REMOTE_ADDR'] 正确。

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

从firefox来看是这样的:file_127.0.0.0-test.txt

我在这里错过了什么?

【问题讨论】:

  • 如何将数据发送到服务器?表单?不确定浏览器的选择如何影响 remote_addr 值,这没有多大意义
  • 感谢您的回复.. 我正在通过 ajax 从 html 文件发送
  • 它是通过http:// 还是通过file:// 加载的HTML 文件?并请出示相关代码,以防万一。
  • 我正在我的本地主机 wamp 服务器上对其进行测试
  • 好的。请同时显示data 来自的表单的HTML。

标签: php google-chrome sockets firefox fputs


【解决方案1】:

谜团解开了。各种浏览器处理 localhost ip 的方式造成的所有麻烦。

  • firefox返回localhost ip:

127.0.0.1

  • chrome/edge 返回 localhost ip 为:

::1

所以后来卫生系统“清空”了我的变量,并导致了问题。谢谢大家的回答。

【讨论】:

  • 你说 $user 也为空?不确定您在这里写的内容是否可以解释?
  • 是的,没错。我不知道为什么会这样。我认为因为在卫生处理过程中所有变量都为空,我错误地认为 $user 也是空的。
【解决方案2】:

访问提供者使用谷歌代理,或者访问者使用谷歌代理,那么你必须查看变​​量$_SERVER['HTTP_X_FORWARDED_FOR']或$_SERVER['HTTP_CLIENT_IP']

PS:客户端可以轻松更改这些变量,因此您可以使用它们,但它们不应被视为可靠。

【讨论】:

  • 感谢您的回复。但我认为你没有抓住重点。关键是当我从 chrome 打开页面时返回 null 作为保存的文件名,但从 firefox 正确返回相应的变量..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 2016-02-09
  • 2017-08-27
  • 1970-01-01
  • 2021-02-08
  • 2021-04-30
相关资源
最近更新 更多