2012-03-07 20 views
1

アップロード時にファイルに番号を付ける必要があります。私はSFWUploadのusinfです。アップロード時にファイルの名前を変更する - PHP

mkdir("../../imagenes/".$codigo , 0777); 
$i = 1; 
$nombre = $codigo.'_'.$i.'.jpg'; 
move_uploaded_file($_FILES['Filedata']['tmp_name'], "../../imagenes/".$codigo."/".$nombre); 
chmod("../../imagenes/".$codigo."/".$_FILES['Filedata']['name'], 0777); 

$のcodigoは、たとえば101213のために、コードであるので、私はそうで101213_1.jpg、101213_2.jpg、101213_3.jpg、とのようにアップロードする写真が必要になります。私はこのコードを持っています。

問題は、SWFUploadが1ピクチャあたり1つのPHPを実行するため、foreachループを使用できないことです(私は推測します)。

ファイルが存在するかどうかをチェックし、次のファイルを書き込むためにスクリプトが必要です。たとえば、101213_4.jpgが存在する場合は、101213_5.jpgと入力します。

どうすればいいですか?私はPHPの初心者であり、すべてを試しました! :(事前に

おかげ

ロベルト

+0

は、その後、我々はそこから起動することができ、私達にあなたの「すべて」の試みを表示:) –

+0

どこかに番号を保存し、「everithingは」ファイルを数えるになる数 – undone

+0

を使用し、チェック...そのコードを試してみてくださいファイルが存在する場合でも、セッションを使用しても、何も機能しませんでした。 : –

答えて

0

まあ、フォルダの現在のファイル数を取得して、そこから$iを得ることができます:

mkdir("../../imagenes/".$codigo , 0777); 
$i = count(glob("../../imagenes/".$codigo.'_*.jpg')) + 1; 
$nombre = $codigo.'_'.$i.'.jpg'; 
move_uploaded_file($_FILES['Filedata']['tmp_name'], "../../imagenes/".$codigo."/".$nombre); 
chmod("../../imagenes/".$codigo."/".$nombre, 0777); 

+0

これはうまくいった!ありがとう!私はこのコードラインにこの変更を加えました!! $ i = count(glob( "../../imagenes/"。$ codigo。 "/ *。jpg"))+ 1; ありがとうございました! ;) –

+0

2人で同時にアップロードしようとするとどうなりますか? –

+0

私はそれについて考えています...しかし、PHPプロセス間の競合状態をどう回避するのですか?おそらくセマフォを使用していますか? sem_get、sem_acquireなど – eagleoneraptor

1

は、ここで私が使用して機能です:

function cleanup_name($name){ //accepts name and cleans it up. 
$finalDir='/home/username/uploads'; 

# Go to all lower case for consistency 
$name = strtolower($name); 
//echo("Name is $name<br>"); 

$matches=split('\.',$name); 
foreach ($matches as $key=>$value){ 
$exkey=$key; 
$exvalue=$value; //if there is more than one period, this will find the actual extension. 
//echo("Key $key|$exkey Value $value|$exvalue<br>"); 
} 

if ($exkey<1){die('The file must have an extension.');} 
$extension=".".$exvalue; 
$loop=0; 
while ($loop<($exkey)){ 
if ($loop<($exkey-1)){$matches[$loop]=".".$matches[$loop];} // this puts extra periods back into the string, but the borrowed code will replace them with underscores. 
$stem.=$matches[$loop]; 
$loop++; 
} 

//echo("Stem is $stem<br>"); 
//echo("Extension is $extension<br>"); 

# Convert whitespace of any kind to single underscores 
$stem = preg_replace('/\s+/', '_', $stem); 

# Remove any remaining characters other than A-Z, a-z, 0-9 and _ 
$stem = preg_replace('/[^\w]/', '', $stem); 

# Make sure the file extension has no odd characters 
if (($extension != '') && 
    (!preg_match('/^\.\w+$/', $extension))) 
{ 
    echo("odd characters in extension"); 
    //die("Bad file extension"); 
    return FALSE; 
} 

$safeExtensions = array(
'.zip', 
'.psd', 
'.pdf', 
'.jpg', 
'.jpeg', 
'.gif', 
'.rar', 
'.gz', 
'.ai', 
'.eps', 
'.bmp', 
'.pub', 
'.xls', 
'.doc', 
'.wpd', 
'.rtf', 
'.tiff', 
'.tif', 
'.pcx', 
'.ttf', 
'.png', 
'.txt', 
'.mp3', 
'.avi', 
'.mov', 
'.wav' 
); 

if (!in_array($extension, $safeExtensions)) { 
    echo("Extension &quot;$extension&quot; not approved."); 
    //die("File extension not approved"); 
    return FALSE; 
} 

# Search for a unique filename by adding a number to the 
# stem (first we try without, of course) 

$suffix = ''; 
while (file_exists($finalDir."/".$stem.$suffix.$extension)) { 
    if ($suffix == '') { 
    $suffix = '0'; 
    } else { 
    $suffix++; 
    } 
} 

# Put the full name back together 
$name = "$stem$suffix$extension"; 
return $name; 
} 

はこれでセクションに特別な注意を払ってください: "(file_existsながら..."

+0

コメントを使用して、回答を送信しません;-) – undone

+0

問題は、ここでは..ループではインクリメンタルにコードを記述するのは簡単ですが、私の場合はループを使用できません。とにかくありがとう。! xD –

+0

あなたはファイルが何をしているのかを間違って理解していると思います。これは、適切なファイル名を見つけるだけのループを行い、1つのファイルを書き込みます。 '$ suffix = ''; ($ suffix = ''){$ suffix = '0'; $ suffix = '$'); } else {$ suffix ++; }} 'これは本当にあなたが必要とする唯一の部分ですが、私の変数名は文脈上より意味をなさないと思っていました。 – TecBrat

関連する問題