php 在输入框输入内容,提交后自动在这段内容前后添加特定内容并把这些内容生成多个文件名不同的文件供下
想实现的流程:1:网页中的输入框输入内容(一段网址)2:程序自动将这段内容的前后自己制定的内容3:把经过第二步处理后的内容生成特定扩展名的文件4:复制5份(自己定义,不需...
想实现的流程:
1:网页中的输入框输入内容(一段网址)
2:程序自动将这段内容的前后自己制定的内容
3:把经过第二步处理后的内容生成特定扩展名的文件
4:复制5份(自己定义,不需要用户选择份数)
5:把5份文件根据特定txt文件(放文件名,每行一个名称)中的内容,随机命名。
6:输出这5份制作好的文件供用户下载 展开
1:网页中的输入框输入内容(一段网址)
2:程序自动将这段内容的前后自己制定的内容
3:把经过第二步处理后的内容生成特定扩展名的文件
4:复制5份(自己定义,不需要用户选择份数)
5:把5份文件根据特定txt文件(放文件名,每行一个名称)中的内容,随机命名。
6:输出这5份制作好的文件供用户下载 展开
3个回答
展开全部
这个符合要求吗?
假如用户输入的数据以POST方式提交,保存在$_POST['input']
<?php
$text_before = '要在前面添加的内容';
$text_after = '要在后面添加的内容';
$copy = 5; // 复制的份数
$extension = '文件扩展名';
$filename_li = '存放文件名的txt文件';
$file_dir = '生成的文件的存放目录';
if ((!isset($_POST['input'])) || (empty($_POST['input']))) {
die('您未输入!');
}
$text = $text_before . $_POST['input'] . $text_after;
unset($text_before, $text_after);
// 获取所有可选择的文件名
$filename_li = explode("\n", file_get_contents($filename_li));
$array_max = count($filename_li) - 1;
// 复制文件
$files = array(); // 存放文件地址
for($i = 0; $i < $copy; ++$i) {
$f = fopen($files[$i] = $file_dir . $filename_li[rand(0, $array_max)] . '.' . $extension, 'w');
fwrite($text, $f);
fclose($f);
}
unset($copy, $extension, $filename_li, $file_dir, $text, $array_max, $i, $f);
// $files 数组中存放的就是生成的文件的地址
谢谢!
如果还有什么要求,或者有不满意的地方,请随便指出!
追问
需要怎么改?
追答
因为文件下载可能在其他地方进行,或者不是在同一个会话中进行,所以要一个单独的处理方法。
您需要将生成的文件名称保存在数据库中。
首先在文件最开始加上:
ob_start();
然后再加上以下内容
$file = ''; // 这个是文件路径
$filename = explode('/', $file);
$filename = $filename[count($filename) - 1];
// 提示浏览器进行下载
header('Content-type: application/octet-stream');
header('Accept-Ranges: bytes');
header('Accept-Length:' . filesize($file));
header('Content-Disposition: attachment; filename=' . $filename);
// 输出文件内容
echo file_get_contents($file);
就可以了,浏览器会提示下载的。
2013-09-02 · 知道合伙人软件行家
关注
展开全部
<form method="post" action="?do=true">
<textarea name="url" cols="45" rows="5"></textarea>
<input type="submit" name="button" value="提交">
</form>
<?php
if($_GET['do']){
if($_POST['url']){
//加入自定义内容
$str = "自己定制的内容,自己改".$_POST['url'];
//扩展名
$ext = ".doc";
//读取存放文件名的文件
$names = file_get_contents('a.txt');
//这里能不能用分号隔开每个名字,好写一点。。。
$names = explode(';', $names);
//生成5分文件
$returns = array();
for($i=0;$i<5;$i++){
//随机从文件名中抽一个
$idx = array_rand($names);
$fielName = $names[$idx] + $ext;
//将他弹出
array_pop($names[$idx]);
file_put_contents($fielName, $str);
array_push($returns, $fielName);
}
//输出
foreach($returns as $k => $v){
$fp = fopen($v, 'r');
$file_size = filesize($v);
//下载文件需要用到的头
header('Content-type: application/octet-stream');
header('Accept-Ranges: bytes');
header('Accept-Length:'.$file_size);
header('Content-Disposition: attachment; filename='.$v);
$buffer = 1024;
$file_count = 0;
//向浏览器返回数据
while(!feof($fp) && $file_count<$file_size){
$file_con = fread($fp, $buffer);
$file_count += $buffer;
echo $file_con;
}
fclose($fp);
}
}
}
?>
enjoy it !
追问
我想要直接把文件复制5份,根据文本文件的内容随机命名这5份文件名称,需要怎么改进?
追答
我写的是直接创建5个文件不行么?而且5个文件的名字就是从那个名字的文本文件里边读的。
如果非要复制的话,在file_put_contents之后,使用php的copy函数就行了
$names = file_get_contents('a.txt');
$names = explode(';', $names);
//生成5分文件
//随机从文件名中抽一个
$idx = array_rand($names);
$fielName = $names[$idx] + $ext;
file_put_contents($fielName, $str);
array_pop($names[$idx]);
$source = $fielName;
for($i=0;$i<5;$i++){
$idx = array_rand($names);
$fielName = $names[$idx] + $ext;
array_pop($names[$idx]);
//根据文本文件的名字复制5份
copy($source, $fielName);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
$a = "前缀";
$b = "后最";
$filename = rand(100000,999999);
$filesuffix = ".asd";
$filepath = "D:/wamp/asd/";
for($i=0;$i<5;$i++) {
$content = $a.$_POST['content'].$b;
file_put_contents($filepath.$filename.$i.$filesuffix, $content);
}
下载是列表页的问题了 我就不写了
$b = "后最";
$filename = rand(100000,999999);
$filesuffix = ".asd";
$filepath = "D:/wamp/asd/";
for($i=0;$i<5;$i++) {
$content = $a.$_POST['content'].$b;
file_put_contents($filepath.$filename.$i.$filesuffix, $content);
}
下载是列表页的问题了 我就不写了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询