更改自动生成的文件名

时间:2015-04-15 15:56:43

标签: php

所以我有这个PHP脚本链接到我的一个客户站点上的联系表单。 PHP脚本的作用基本上是获取所有字段和值,并使用表单中给出的信息生成.txt文件。之后,脚本根据您在字段'forefternamn'中添加的信息决定命名文件的内容。

我的问题很简单。如何在字段后命名文件,而不是用序列号命名?

我希望序列号在第一次提交时以1000开头,然后我只想继续使用1001,1002,1003,1004等。

所以文件看起来像这样:

1000.txt 1001.txt 1002.txt 1003.txt 1004.txt 等...

这是我使用的PHP脚本:

<?php
$nyckel = array(
'privatforetag',
'forefternamn', 
'foretagsnamn', 
'gatuadress', 
'mobil', 
'telefon', 
'e-post', 
'epost', 
'kalender-tidig', 
'kalender-senast', 
'flyttar-fran-gatuadress', 
'flyttar-fran-portkod', 
'flyttar-fran-postadress', 
'boendetyp', 
'meter', 
'hiss', 
'flyttar-till-gatuadress', 
'flyttar-till-postnummer', 
'flyttar-till-portkod', 
'boendetyp2', 
'meter2', 
'hiss2', 
'rum', 
'personer', 
'kontor', 
'moblerat', 
'boyta', 
'biyta', 
'inventarielista', 
'packning', 
'uppackning', 
'inventarie', 
'antalflyttlador', 
'flyttlada', 
'miljostation', 
'flyttstad', 
'magasinering', 
'student', 
'ovriginfo', 
'rekommenderad', 
'hurhittade'
);
foreach ($nyckel as $key) {
    if ($_POST[$key]) {
        $input .= $_POST[$key]. "\t";
    } else {
        $input .= "-\t";
    }
    $thekey .= $key. "\t";
}
$index = 1;
$name = str_replace(" " , "" , $_POST["forefternamn"]);
$filename =  $name . $index . ".txt";
while (file_exists($filename)) {
    $index++;
    $filename =  $name .$index. ".txt";
}
$handle = fopen($filename, 'w') or die('Cannot open file:  '.$filename);
fwrite($handle, $thekey);
fwrite($handle, PHP_EOL);
fwrite($handle, $input);
fclose($handle);
if (file_exists($filename)) {
 echo "<script>window.location = 'www.domain.com'</script>";
}?>

2 个答案:

答案 0 :(得分:0)

使用主键ID字段和名称字段创建数据库表。将名称插入表中并检索生成的ID。使用此生成的ID命名文件。

答案 1 :(得分:0)

如下: -

    $dir='c:/temp/inv/';
    $col=glob( $dir . '*.txt' );
    $tmp=array();
    foreach( $col as $file ) $tmp[]=intval( pathinfo( $file, PATHINFO_FILENAME ) );

    $last=intval( max( $tmp ) );
    $next=( $last+1 ).'.txt';

    echo $next;

按要求继续提出想法,并与“活泼”保持一致?评论......怎么样: -

$nyckel = array(
    'privatforetag',
    'forefternamn', 
    'foretagsnamn', 
    /* rest of the elements removed for brevity */
    'student', 
    'ovriginfo', 
    'rekommenderad', 
    'hurhittade'
);

/* Helper function to generate next invoice id */
function getnextinvid( $path=false ){
    if( $path ){
        $col=glob( $path . '*.txt' );
        $tmp=array();
        foreach( $col as $file ) $tmp[]=intval( pathinfo( $file, PATHINFO_FILENAME ) );
        $last=intval( max( $tmp ) );
        return $path . ( $last+1 ).'.txt';
    }
    return false;
}

/* Loop through array to get POSTed values */
$thekey=$input=array();
foreach( $nyckel as $key ) {
    $input[]=isset( $_POST[ $key ] ) ? $_POST[ $key ] : '-';
    $thekey[]=$key;
}




/* The output filename / invoice should be sequentially numbered */
$output=getnextinvid('c:/temp/inv/');

if( $output ) {
    /* write your data to the output file */
    $bytes=file_put_contents( $output, implode( "\t", $thekey ) . PHP_EOL . implode( "\t", $input ), FILE_TEXT );

    /* Does the new invoice exist? */
    $exists=file_exists( $output ) ? true : false;

    /* good practice to call this after calls to certain functions */
    clearstatcache();

    /* Redirect - alternatively use javascript as originally */
    if( $exists && $bytes ) header('location: http://www.domain.com');

} else {
    echo 'failed';  
}