php 从TypeScript/Angular客户端写入服务器端文本文件(由客户端创建)时出现问题

50few1ms  于 2023-08-02  发布在  PHP
关注(0)|答案(2)|浏览(101)

问题是,我试图写入服务器上的文件,以响应客户端浏览器发起的请求。注意:我已经很长时间没有在TypeScript / PHP / Servers上工作了,所以不要默认认为我知道很多东西:-)
我的程式码是以这个范例为基础:/questions/11240996/将javascript输出到服务器上的文件
我最后得到了在服务器端使用PHP在https://objective.no/webapptest2/文件夹中创建文件“h.txt”的代码。确实创建了一个空的h.txt文件,但其内容“456”从未被写入:我没有收到任何错误消息指出原因。
下面是我的客户端和服务器端代码

服务器端

//PHP code:  (A little elaborate, but it should work)

//h.txt is created, but its content is never written: read only problem?? I can't find how to see if //the file is read only or not)

//The php Code is located on Server

<?php
function getData() {
  $myFile = fopen("h.txt", "w");
  fclose($myFile);
  sleep(5);
  //return "link to h.txt";
}
getData();

// Tried to return different values for the URL below: 
// "h.txt" is created, but its content "456" is never // written

return "URL to h.txt";
?>

个字符
(我试图包括适当的链接到服务器等,但后被归类为垃圾邮件?)
问题是否在于服务器上的h.txt对于客户端是只读的?解决的办法是什么?
我希望能够将文本写入服务器上的h.txt文件。

cczfrluj

cczfrluj1#

在这里你打开一个文本文件与写选项,然后立即关闭它

function getData() {
  $myFile = fopen("h.txt", "w");
  fclose($myFile);
  sleep(5);

字符串
你实际上需要做的是在你发布到url的数据变量中写入内容,如下所示:

function getData() {
$myFile = fopen("h.txt", "w");
fwrite($myFile, filter_input(INPUT_POST, 'data', FILTER_SANITIZE_SPECIAL_CHARS));
fclose($myFile);


我个人更喜欢input_put_content()而不是fopen/fclose

wz3gfoph

wz3gfoph2#

你的代码缺少三个重要但简单的东西:
1.客户端代码无法正确发送带有命名参数和值的form-url编码字符串。目前您已经有了这个值,但是没有PHP可以识别它的名称。这种模式与您在URL中经常看到的模式相同:name=value。(多个参数将写成name1=value1&name2=value2...等)
1.服务器端的PHP代码不会尝试读取从客户端提交的任何内容。PHP将把(正确编写的)form-url编码的POST参数放在$_POST数组中,以方便您使用。

  1. PHP代码也没有尝试实际将任何内容写入文件。对于这个简单的例子,与其对fopen等进行单独的调用,使用file_put_contents要容易得多,所以你可以在一行中完成整个操作。
    考虑到所有这些,这应该是可行的:

JavaScript

testWriteToServerFile() {

        let data: string = "text=456";// this is your data that you want to pass to the server, with a parameter name in form-url-encoded format
        var url = "test.php"; //url to the server side PHP code that will receive the data.

        var http = new XMLHttpRequest();
        http.open("POST", url, true);

        //Send the proper header information along with the request
        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

         http.onreadystatechange = function() { //define a function to be called when the request's state changes.
            if (http.readyState == 4) { //if the state indicates the request is done
                alert(http.responseText); //show what the server sent back as its response
            }
        }
        //send the request with the data
        http.send(data);
}

字符串

test.php

<?php
file_put_contents("h.txt", $_POST["text"]);
echo "Saved submitted text to h.txt on the server";
?>

相关问题