通过php将URL中的图像保存到表单中
我有一个php脚本,它从外部URL获取图像,读取图像并将其保存到服务器上的目录中。该脚本位于php文件中,包含:通过php将URL中的图像保存到表单中,php,image,forms,url,save,Php,Image,Forms,Url,Save,我有一个php脚本,它从外部URL获取图像,读取图像并将其保存到服务器上的目录中。该脚本位于php文件中,包含: <?php $image_url = "http://example.com/image.jpg"; $ch = curl_init(); $timeout = 0; curl_setopt ($ch, CURLOPT_URL, $image_url); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); //
<?php
$image_url = "http://example.com/image.jpg";
$ch = curl_init();
$timeout = 0;
curl_setopt ($ch, CURLOPT_URL, $image_url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
// Getting binary data
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$image = curl_exec($ch);
curl_close($ch);
$f = fopen('/home1/path/public_html/path/saved/image.jpg', 'w');
fwrite($f, $image);
fclose($f);
?>
那里一切都很好
我想做的是让脚本为多个URL执行此操作。URL将写在一个表单textarea中,由comas(或else)分隔
提交按钮会告诉脚本对表单中的所有URL执行此操作,并使用任何名称保存它们,这并不重要(随机即可)
我还是个新手,我正在学习PHP
提前感谢您的帮助
编辑
我的代码现在看起来像这样:
<?php
error_reporting(E_ALL);
$image_urls = explode('\n', $_POST['urls']);
foreach ($image_urls as $image_url) {
$ch = curl_init();
$timeout = 0;
curl_setopt ($ch, CURLOPT_URL, $image_url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$image = curl_exec($ch);
curl_close($ch);
$f = fopen('/home1/path/public_html/path/saved/'.rand().time().".jpg", 'w');
fwrite($f, $image);
fclose($f);
}
?>
它只对第一个有效,并且不返回任何错误。。。有什么想法吗
谢谢你的帮助 您需要从文本区域提取URL,然后在该区域上循环:
<?php
$image_urls = explode('\n', $_POST['urls']); # Will create a list of urls, if each line contains one url.
#Basic settings and initializers need to be ran only once.
$sequencer = 1;
$timeout = 0;
foreach ($image_urls as $image_url) {
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $image_url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
// Getting binary data
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$image = curl_exec($ch);
curl_close($ch);
$f = fopen("/home1/path/public_html/path/saved/image_$sequencer.jpg", 'w');
fwrite($f, $image);
fclose($f);
$sequencer++;
}
?>
显然,您应该清理、验证和双重检查输入的信息:不仅是为了避免山羊毛,也是为了避免打断应用程序的条目(如白线)。您需要从文本区域提取URL,然后循环:
<?php
$image_urls = explode('\n', $_POST['urls']); # Will create a list of urls, if each line contains one url.
#Basic settings and initializers need to be ran only once.
$sequencer = 1;
$timeout = 0;
foreach ($image_urls as $image_url) {
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $image_url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
// Getting binary data
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$image = curl_exec($ch);
curl_close($ch);
$f = fopen("/home1/path/public_html/path/saved/image_$sequencer.jpg", 'w');
fwrite($f, $image);
fclose($f);
$sequencer++;
}
?>
显然,您应该清理、验证和双重检查输入的信息:不仅是为了避免山羊毛,也是为了避免破坏应用程序的条目(如白线)。将单个URL存储在txt或db中?存储在文本区域中,按行分割……抱歉,我完全忽略了这个问题。不知何故,我以为你想通过cron作业获取这些图像。我可能想稍后再这样做,但现在我只想这样做。。。对我的问题有什么想法吗?你是说如何通过cron作业获取它们?将单个URL存储在txt或db中?将其存储在文本区域中,按行分割…抱歉,我完全忽略了这个问题。不知何故,我以为你想通过cron作业获取这些图像。我可能想稍后再这样做,但现在我只想这样做。。。对我的问题有什么想法吗?你是说如何通过cron作业获取它们?非常感谢你的快速回答!还有一件事,在HTML中,我应该将操作设置为“MYSCRIPT.php”,并将textarea命名为“URL”对吗?是的,method=“post”action=“MYSCRIPT.php”带有一个textarea“URL”请注意,任何人(也包括那些无法访问呈现textarea的代码的人)都可以发送带有URL列表的帖子。您可能希望在上述代码中首先检查访问权限。此外,请参阅Hassan的答案以了解进一步的改进:在函数中添加这样的保护程序可以使代码更好、可读性更好、可维护性更好、更不容易出现错误。因此,我尝试使用您的解决方案,当我将两个URL放在文本区域的不同行上时,会得到一个名为image_1.jpg的文件,其权重为0kb。就这样。知道我做错了什么吗?谢谢好的,现在它工作了,但是它只在第一个url上工作。。。想法?我更改了代码:关闭和打开curl资源时出错。对于未来:尝试调试和调查日志。日志会告诉你这里的问题。调试将向您显示问题发生的原因。在代码上撒一些
var\u dump()
。就像一个var\u dump($image\u url)
在你创建之后,看看它是否是一个正确的URL列表(数组)。非常感谢你的快速回答!还有一件事,在HTML中,我应该将操作设置为“MYSCRIPT.php”,并将textarea命名为“URL”对吗?是的,method=“post”action=“MYSCRIPT.php”带有一个textarea“URL”请注意,任何人(也包括那些无法访问呈现textarea的代码的人)都可以发送带有URL列表的帖子。您可能希望在上述代码中首先检查访问权限。此外,请参阅Hassan的答案以了解进一步的改进:在函数中添加这样的保护程序可以使代码更好、可读性更好、可维护性更好、更不容易出现错误。因此,我尝试使用您的解决方案,当我将两个URL放在文本区域的不同行上时,会得到一个名为image_1.jpg的文件,其权重为0kb。就这样。知道我做错了什么吗?谢谢好的,现在它工作了,但是它只在第一个url上工作。。。想法?我更改了代码:关闭和打开curl资源时出错。对于未来:尝试调试和调查日志。日志会告诉你这里的问题。调试将向您显示问题发生的原因。在代码上撒一些var\u dump()
。就像您创建了一个var\u dump($image\u url)
之后,查看它是否是一个正确的URL列表(数组)。