Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在多个PHP页面中使用同一数组_Php - Fatal编程技术网

在多个PHP页面中使用同一数组

在多个PHP页面中使用同一数组,php,Php,在一个PHP页面中,我收集了服务器上的一些数据(即文件夹中的文件列表),并将其显示到一个表中。用户可能需要删除一个文件。因为我是PHP新手,我不知道我的方法是否正确。让我们看一些代码: list.php delete.php 我想有一些选择: 将filename作为DELETE查询的参数传递,而不是id。我想这不是个好办法 php应该将文件名放在数据库中,这样我就可以随时随地访问它们。实际上,我是在/dev/shm中的“实时”数据库上做的,但我想知道这是否是一种有效的方法。每次重新加载页面时,

在一个PHP页面中,我收集了服务器上的一些数据(即文件夹中的文件列表),并将其显示到一个表中。用户可能需要删除一个文件。因为我是PHP新手,我不知道我的方法是否正确。让我们看一些代码:

list.php delete.php 我想有一些选择:

  • filename
    作为
    DELETE
    查询的参数传递,而不是
    id
    。我想这不是个好办法
  • php应该将文件名放在数据库中,这样我就可以随时随地访问它们。实际上,我是在
    /dev/shm
    中的“实时”数据库上做的,但我想知道这是否是一种有效的方法。每次重新加载页面时,我都需要删除表并再次创建它(页面上有一个刷新按钮用于此目的)
  • 使用
    $\u SESSION
    变量存储数组,以便
    delete.php
    页面可以通过其
    id
    检索
    文件名

  • 请注意,我不是在征求关于这三个选项的意见。我想从技术角度问什么是正确的方法:安全性、性能、可靠性等。

    如果您只需要快速简便的内部解决方案,那么选项1是可以的。但是使文件名可见会导致安全漏洞。(见下文评论)

    选项2的速度要慢得多,如果您也从其他地方访问FS,数据库和文件系统信息可能会不同步。(或者您需要一直重新加载,如您所述)

    但是如果您确保通过PHP代码访问FS,这可能是最好的方法。添加新文件时,可以在数据库中创建条目。对它的每次访问也需要通过您的代码,并在需要时更新DB条目。 不再需要每次重新加载数据库,这可能是一个很好的实现


    选项3与选项1类似。但是,它可以解决可见文件名的问题,并且仍然很简单,因为您不需要DB。

    如果您只需要快速简单的内部解决方案,那么选项1是可以的。但是使文件名可见会导致安全漏洞。(见下文评论)

    选项2的速度要慢得多,如果您也从其他地方访问FS,数据库和文件系统信息可能会不同步。(或者您需要一直重新加载,如您所述)

    但是如果您确保通过PHP代码访问FS,这可能是最好的方法。添加新文件时,可以在数据库中创建条目。对它的每次访问也需要通过您的代码,并在需要时更新DB条目。 不再需要每次重新加载数据库,这可能是一个很好的实现

    选项3与选项1类似。但是,它可以解决可见文件名的问题,并且仍然很简单,因为您不需要数据库。

    使用类似的PHP框架,然后开始正确地操作。您甚至没有使用HTML方法DELETE。在代码中,对delete.php的POST调用将删除您在URL中设置的任何内容。使用Slim,您的代码将是这样的,您不会下地狱:

        <?php
    use Psr\Http\Message\ResponseInterface as Response;
    use Psr\Http\Message\ServerRequestInterface as Request;
    use Slim\Factory\AppFactory;
    
    require __DIR__ . '/../vendor/autoload.php';
    
    $app = AppFactory::create();
    
    $app->delete('/', function (Request $request, Response $response, array $args) {
        $id = $request->get('id');
        $path = "/path/to/directory/";
        //$filename = ???;
        //unlink($path . $filename);
        $response->getBody()->write("success");
        return $response;
    });
    
    $app->run();
    
    使用像这样的PHP框架,开始正确地做事。您甚至没有使用HTML方法DELETE。在代码中,对delete.php的POST调用将删除您在URL中设置的任何内容。使用Slim,您的代码将是这样的,您不会下地狱:

        <?php
    use Psr\Http\Message\ResponseInterface as Response;
    use Psr\Http\Message\ServerRequestInterface as Request;
    use Slim\Factory\AppFactory;
    
    require __DIR__ . '/../vendor/autoload.php';
    
    $app = AppFactory::create();
    
    $app->delete('/', function (Request $request, Response $response, array $args) {
        $id = $request->get('id');
        $path = "/path/to/directory/";
        //$filename = ???;
        //unlink($path . $filename);
        $response->getBody()->write("success");
        return $response;
    });
    
    $app->run();
    

    答案非常广泛,但这将是一个主要基于观点的问题。。。。还有,这个系统的意义是什么?是否需要受信任的人(通过受信任的身份验证)才能删除目录中的文件?@RaymondNijland是的,这是一台开发机器,有一个特定的目录,用户可以在其中加载和删除文件(使用web应用程序)。由于这个原因,路径是硬编码的:他们只能选择文件名,而不能选择路径。安全性与最薄弱的环节一样强,因此,如果身份验证方法/层泄漏,则整个系统也是不安全的。。也考虑重新考虑这个问题,或者这个问题或多或少地被认为是灰色的。当被要求时,也要准备好发布更多的代码,这样人们就可以给出更可靠的建议,而不是猜测..说到可信身份验证->有一个新的web标准叫做。。还有更好的解释。。。这是一个javascript API,可以使用windows hello/usb令牌在Web应用程序中注册/登录。。该链接解释了它在浏览器端的工作原理,并详细介绍了Web应用程序应如何确保其安全。浏览器支持现代Edge、Firefox和Chrome浏览器版本。。。但我认为可能已经有PHP libsVery广泛的答案,而且这将是一个主要基于意见的问题。。。。还有,这个系统的意义是什么?是否需要受信任的人(通过受信任的身份验证)才能删除目录中的文件?@RaymondNijland是的,这是一台开发机器,有一个特定的目录,用户可以在其中加载和删除文件(使用web应用程序)。由于这个原因,路径是硬编码的:他们只能选择文件名,而不能选择路径。安全性与最薄弱的环节一样强,因此,如果身份验证方法/层泄漏,则整个系统也是不安全的。。也考虑重新考虑这个问题,或者这个问题或多或少地被认为是灰色的。当被要求时,也要准备好发布更多的代码,这样人们就可以给出更可靠的建议,而不是猜测..说到可信身份验证->有一个新的web标准叫做。。还有更好的解释。。。这是一个javascript API,可以使用windows hello/usb令牌在Web应用程序中注册/登录。。该链接解释了它在浏览器端的工作原理,并详细介绍了Web应用程序应如何确保其安全。浏览器支持现代Edge、Firefox和Chrome浏览器版本。。。但我认为
    
    $url = $_SERVER["REQUEST_URI"];
    $query = parse_url($url, PHP_URL_QUERY);
    parse_str($query, $params); 
    $id = $params["id"]; 
    $path = "/path/to/directory/";
    //$filename = ???;
    //unlink($path . $filename);
    echo "success";
    
        <?php
    use Psr\Http\Message\ResponseInterface as Response;
    use Psr\Http\Message\ServerRequestInterface as Request;
    use Slim\Factory\AppFactory;
    
    require __DIR__ . '/../vendor/autoload.php';
    
    $app = AppFactory::create();
    
    $app->delete('/', function (Request $request, Response $response, array $args) {
        $id = $request->get('id');
        $path = "/path/to/directory/";
        //$filename = ???;
        //unlink($path . $filename);
        $response->getBody()->write("success");
        return $response;
    });
    
    $app->run();