通过字符串操作从另一个变量创建新变量

时间:2018-11-22 06:26:36

标签: php string

假设我有一个变量 $ var1 ,其中包含以下内容:

$var1="../sidebar_items/uploaded_files/notices/circular.pdf";

现在,我想创建另一个变量 $ var2 ,该变量将具有以下值:

$var2="../dev/sidebar_items/uploaded_files/notices/circular.pdf";

我想通过字符串操作在$ var1的帮助下创建$ var2。有可能这样做吗?我将如何实现?

4 个答案:

答案 0 :(得分:1)

只需使用str_replace()。它返回更改后的字符串,但不更改原始变量,因此您可以将结果存储在新变量中:

$var2 = str_replace('../', '../dev/', $var1);

答案 1 :(得分:0)

您似乎允许用户上传文件并保存文件名。根据您如何与他们打交道,这可能非常危险。如果您要获取其字符串值并对其进行文件系统操作,最终可能会导致用户上载名称为vector<ast::Expression>的文件,并冒着允许对该文件进行删除操作的风险(如果已设置权限)确实,确实不佳),或者也许更现实地,使用路径操纵来删除,修改或覆盖Web服务器用户拥有的任何文件。 ../../../../../usr/bin/php将成为明显的目标。

您应该考虑将两个路径保持在单独的常量中,而不是在运行时使用字符串操作将它们转换为另一个。您还应该考虑重命名用户上传的文件,或者至少要非常小心您如何基于在代码中访问它们的方式存储它们的命名方式。

答案 2 :(得分:0)

您还可以使用PHP的 strtr()函数

$var2 = strtr($var1, '../', '../dev/');

答案 3 :(得分:0)

我可以通过使用basename()分离出文件名,然后使用一个变量来指定dev目录的路径。这样,您就可以将其进行各种更改,而不必将其限制为较小的更改...

$var1="../sidebar_items/uploaded_files/notices/circular.pdf";
$devpath = "../dev/sidebar_items/uploaded_files/notices/";
echo $devpath.basename($var1);

给予...

../dev/sidebar_items/uploaded_files/notices/circular.pdf