Ik heb een vraagje.
Ben bezig met een scriptje waarmee ik bestanden kan uploaden naar mijn toegekende folder.
Op dit moment worden de bestanden met de bestandsnamen geupload welke ook op mijn computer staan.
Ik heb al wel voor elkaar gekregen dat ik de datum er voor krijg.
Ik zou graag willen dat deze een specifieke vastgestelde bestandsnaam mee krijgen.
Het script zal gaan dienen dat er telkens twee bestanden worden geupload en deze daarna worden doorgestuurd per mail. Ik zou graag willen dat het bestand 1.txt en 2.txt krijgen telkens wanneer het bestand word geupload.
Op welke manier upload je? Is dit meerdere bestanden per PHP-script (zoals $_FILES), of een enkele (als je bijv. een "drag 'n drop" zoals bijvoorbeeld PLupload gebruikt)?
Ikzelf gebruik geen oplopende nummers, omdat die te voorspelbaar zijn.
Niet iedereen stelt er prijs op, en je moet steeds bepalen wat je laatste nummer is als je een nieuwe foto toevoegt.
Ikzelf gebruik de unix-epoch samen met een random string erachter. Dat laatste is omdat je lokaal bij het testen vaak zonder uploadtijd zit, en dat hij in die ene seconde meerdere bestanden gaat uploaden, en de andere overschrijven.
tevens heb ik voor het geval een controle ingebouwd of het bestand toevallig al bestaat.
<?php
private static function createFilename($filename) {
while (true) {
$timecreated = time();
$file = pathinfo($filename);
$prefix = uniqid();
$filename_new = $timecreated.'_'.$prefix;
if (!file_exists($filename_new)) break;
}
return $filename_new;
}
?>
Zoals de eerste inderdaad met $_files.
Ik kan het script evt. doorsturen? het is in principe een basic multi upload script die ik op internet gevonden heb. Deze ga ik verwerken zodra ik weet wat ik met de bestandsnamen kan.
Je kan het relevante deel van het script hier eventueel plaatsen. Uit veiligheidsoverwegingen raad ik altijd aan om niet de standaard naam erin te houden.
Het is nu nog een test dus nog niks beveiligd aan.
1&2 waren eigenlijk een voorbeeld. ik zou graag een naam eraan koppelen bijv links,rechts,boven,onder
Maar wel namen die ik zelf bepaal. Mits mogelijk :)
Onderstaand het script wat ik nu gebruik om te uploaden.
<?php
if(isset($_POST['submit'])){
if(count($_FILES['upload']['name']) > 0){
//Loop through each file
for($i=0; $i<count($_FILES['upload']['name']); $i++) {
//Get the temp file path
$tmpFilePath = $_FILES['upload']['tmp_name'][$i];
//Make sure we have a filepath
if($tmpFilePath != ""){
//save the filename
$shortname = $_FILES['upload']['name'][$i];
//save the url and the file
$filePath = "./test/" . date('d-m-Y-H-i-s').'-'.$_FILES['upload']['name'][$i];
//Upload the file into the temp dir
if(move_uploaded_file($tmpFilePath, $filePath)) {
$files[] = $shortname;
//insert into db
//use $shortname for the filename
//use $filePath for the relative url to the file
}
}
}
}
//show success message
echo "<h1>Uploaded:</h1>";
if(is_array($files)){
echo "<ul>";
foreach($files as $file){
echo "<li>$file</li>";
}
echo "</ul>";
}
}
?>
<form action="" enctype="multipart/form-data" method="post">
<div>
<label for='upload'>Add Attachments:</label>
<input id='upload' name="upload[]" type="file" multiple="multiple" />
</div>
<p><input type="submit" name="submit" value="Submit"></p>
</form>
Als je een uploadsysteem aan het maken bent kun je prima de naam waar je aan refereert en de daadwerkelijke bestandsnaam loskoppelen van elkaar. In wezen maakt het niet uit wat de daadwerkelijke bestandsnaam is zolang deze maar uniek is. Je zou de bestandsnaam zelfs om kunnen zetten in een random hash (of simpelweg het auto-increment id), en vervolgens via een database-tabelletje het type (MIME), de oorspronkelijke bestandsnaam, de eigenaar, datum van upload, bestandsgrootte en wat je ook maar verder wilt bijhouden hier in opslaan.
Persoonlijk zou ik deze dingen ook ontkoppelen, zodat je daar verder geen omkijken meer naar hebt.
Deze tabel kun je dan later ook gebruiken om bestanden te beheren en/of te serveren als download of attachment, waarbij je hier weer de oorspronkelijke bestandsnaam aan kunt koppelen.
Bedankt voor je reactie.
Hoe zou je dit dan doen? Kan je hiervoor een voorbeeld geven?
In mijn andere script(die ik actief ga maken) heb ik dit gedaan door een losgekoppelde naam.
Deze naam is altijd uniek en loopt ook op.
Alleen krijg ik dus wel dat unieke nummer gekoppeld aan het bestand. Maar niet die extra 2 namen die ik zou willen. oftewel, links rechts, 1 of 2, a of b.
Ik sla alle foto's die geüpload zijn in de database op met de bestandsnaam en het en wat metadata. In een koppeltabel koppel ik de ID's van de foto's aan waar het aan toebehoort, en welke IDnummer dat type (nieuws, reviews, agendapunt) heeft.
Dus als ik aan een item 5 foto's gekoppeld heb, heb ik ook 5 records met die foto's. Ik sla alleen de timestamp en hashstring op zodat ik de foto's ook prima kan gebruiken bij andere items.
Je kan een foto wel links als prefix geven, maar wat als deze nou onverhoopt toch opeens bij 'rechts' toebehoort? Daarom zou ik zulke koppelingen in je database vastleggen zodat je toch flexibel bent.
Op het moment dat je hieraan begint ben je eigenlijk al met meerdere systemen bezig:
- loginsysteem (voor authenticatie)
- uploadsysteem
- backend met databaseondersteuning
Het is zaak dat je dit enigszins uitdenkt voordat je begint te rennen.
Voor de toevoeging van de databasetabel + extra veldnamen hoef je enkel het formulier uit te breiden met de extra metadata die je wilt opslaan. Vervolgens sla je eerst deze data op in de database, en het verkregen auto-increment id van die query gebruik je vervolgens voor het moven van de upload. Dan zul je een soort van backend moeten maken met een lijst van bestanden, hun oorspronkelijke naam, en alle andere informatie die je nog wilt weergeven.
De vraag is, waar ga je dit uiteindelijk voor gebruiken? Voor geautomatiseerde mailings en verder niets?
Ik heb een geheel systeem draaien alleen dan voor een single file upload.
Deze maakt ook netjes het bestand aan zoals ik het wil.
Nu ben ik op een tweede omgeving een multiupload aan het maken. Om veiligheidsredenen heb ik verder de koppelingen daar niet naar toe gemaakt.
Het moet een systeem worden die 2 geuploade bestandjes + een .txt verstuurd naar een mailbox.
Het .txt bestand word aangemaakt door een invul veld op deze pagina, daar Koppel je dan de twee bestanden aan die ik zou willen uploaden (speciale extensie) en deze verstuur ik dan naar een mailbox.
Op de webpagina hoef ik overigens nergens iets van deze geuploade bestanden terug te vinden.
Op dit moment heb ik het werkend als ik handmatig de bestandsnamen wijzig voordat ik deze upload.
Maar zou dit graag door het script willen aanpassen.
Het gaat mij er dus echt om, ik heb twee bestanden a.pdf en b.pdf en deze wil ik automatisch noemen naar boven.pdf en onder.pdf