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