【问题标题】:PHP Form writing to file in https://PHP 表单在 https:// 中写入文件
【发布时间】:2009-10-06 13:49:20
【问题描述】:

我在获取 php 表单以写入由 apache httpsdocs 文件夹托管的文件时遇到问题。如果表单的所有部分都使用 http 协议,则该表单可以正常工作,但是当我保护表单、表单提交和结果写入的文件时,它会失败。

谁能帮忙?

这是php代码:

$myFile = "files/data.txt";
$fh = fopen($myFile, 'a') or die ("Could not read file");
$stringData = "Data in pipe format\n";
fwrite($fh, $stringData);
fclose($fh);
header( 'Location: http://www.example.com/thankyou');

不同的地点是:

  • /var/www/vhosts/example.com/httpdocs/files
  • /var/www/vhosts/example.com/httpsdocs/files

另外,我的表单页面是https://example.com/form.php,并且表单字段重定向到action="processform.php",那么为什么它在httpdocs而不是httpsdocs中查找processform.php?当然,它应该与调用它的协议/目录保持在同一个协议/目录中!

感谢您的帮助:)

【问题讨论】:

    标签: php https fopen


    【解决方案1】:

    你把事情弄糊涂了。 url 不是 url,它们是目录。 我的第一个想法是检查安全目录(# /var/www/vhosts/mysite.co.uk/httpsdocs/files)的权限,看看您的网络服务器用户是否可以在那里写入。

    【讨论】:

    • 对不起,错误的术语 - 它们是文件的位置,显然,对应于代码中请求的 url。 httpsdocs/files 分配给 user:psaserv,因此 apache 确实可以写入该文件夹以及所有内容。
    • 另外,我的主要问题是,即使example.com/form.php 具有“processform.php”的操作,调用的文件是 httpdocs/processform.php 而不是 httpsdocs/processform.php
    • 这最后一件事只有在 https 服务器也使用不安全的 docroot 时才有可能,或者如果您没有 processform.php 作为操作但例如yoursite../processform.php.
    【解决方案2】:

    我第二个 Maarten,这绝对是对文件的权限设置。你chmod了文件吗?这应该是您唯一的问题,但是即使您通过 https 提交,这种类型的提交也非常不安全。我会将文件命名为“data.secured” 然后您可以使用 apache 的权限设置来“锁定”文件以防止外部访问/读取。

    <files "*.secured">
    order allow,deny
    deny from all
    </files>
    

    【讨论】:

      猜你喜欢
      • 2018-04-27
      • 1970-01-01
      • 2012-06-18
      • 2023-04-09
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      相关资源
      最近更新 更多