好吧,我有一个简单的问题,我无法弄明白 我怎么做
$image = file_get_contents('http://www.url.com/image.jpg');
file_put_contents('/images/image.jpg', $image); //Where to save the image on your server
我可以使用html表单设置$image
变量,人们可以使用$_GET[""]
方法提交链接,而不必手动更改php文件中的链接?
答案 0 :(得分:0)
你的表格是这样的:
<form>
URL: <input name="url">
<input type="submit">
</form>
然后您可以检索使用$_GET['url']
提交的网址:
$image = file_get_contents($_GET['url']);
file_put_contents('/images/image.jpg', $image);
无论如何,您必须注意本地文件包含,因为如果不进一步检查,用户可以选择/etc/passwd
,../configuration.php
等路径,如果/images/image.jpg
可以查看用户,他们可以阅读不应该看到的文件。
您可能想要做的事情是检查$_GET['url
]`是否是有效的网址。你可以用:
if (!filter_var($_GET['url'], FILTER_VALIDATE_URL)) {
throw new \InvalidArgumentException('The url is not valid.');
}
但这还不够,因为file:///etc/passwd
是一个有效的网址。因此,请确保该网址以http://
或https://
开头。
$isValid = false;
foreach(['http://', 'https://'] as $schema) {
if (strpos($_GET['url'], $schema) === 0) {
$isValid = true;
break;
}
}
if ($isValid && filter_var($_GET['url'], FILTER_VALIDATE_URL)) {
$image = file_get_contents($_GET['url']);
file_put_contents('/images/image.jpg', $image); //Where to save the image on your server
}
答案 1 :(得分:0)