Garanti Skrevet 29. april 2008 Forfatter Del Skrevet 29. april 2008 Har en kodesnutt jeg har laget som jeg er sikker på kunne gått an å effektivisere ved å bruke en for eller foreach-loop, men jeg er ikke sikker på hvordan jeg skal gjøre dette: <?PHP if(isset($_FILES)){ error_reporting(E_ALL); ######## function countfilesinfolder($path){ // From http://www.jonasjohn.de/snippets/php/count-files-recursive.htm <3 $files = 0; $dir = opendir($path); if (!$dir){return 0;} while (($file = readdir($dir)) !== false) { if ($file[0] == '.'){ continue; } if (is_dir($path.$file)){ $files += count_files_recursive($path.$file.DIRECTORY_SEPARATOR); } else { $files++; } } closedir($dir); return $files; } ######## $dir = "files/"; $File = $_FILES['File']; foreach($File['name'] as $key => $value) { // Unsetter tomme arrayelementer mellom elementer med data if (is_null($value) || $value=="") { unset($File['name'][$key]); } } sort($File['name']); // Flytter f.eks [0]=1,[1]=NULL,[2]=2 til [0]=1,[1]=2 $numFiles = 0; array_walk_recursive($File['name'], create_function('&$v', 'global $numFiles;if(!empty($v)) $numFiles++;')); // Teller filer i arrayet echo '>>'.$numFiles.'<<'; // Viser antall opplastede filer for($c=0; $c <= $numFiles-1; $c++){ $ext = explode('.', $File['name'][$c]); // Finner filendelse $ext = array_pop($ext); // Finner filendelse $name = countfilesinfolder($dir); $name = $name++; $name = $dir . $name . '.' . strtolower($ext); echo "$name\n"; if(move_uploaded_file($_FILES['File']['tmp_name'][$c], $name)){} else{$error[] = "Problem uploading file $c";} } } if(isset($error)){print_r($error);} ?> <form action="<?PHP echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post"> <input type="file" name="File[]" /><br /> <input type="file" name="File[]" /><br /> <input type="file" name="File[]" /><br /> <input type="file" name="File[]" /><br /> <input type="submit" /> </form> Si ifra dersom du ønsker ytterligere kommentering! Lenke til kommentar
Garanti Skrevet 6. mai 2008 Forfatter Del Skrevet 6. mai 2008 (endret) Jeg har følgende case: Alle vokaler i stringen $text skal gjøres til store bokstaver: <?PHP header('Content-type: text/html; charset=utf-8'); $text = 'I løpet av ungdomsskolen gjennomføres 8 forskjellige etapper fra Treriksrøysa i sør til Grense Jakobselv i nord.'; preg_replace_callback('/[aeiou]/i', create_function('$matches', 'return strtoupper($matches[0]);' ), $text); echo $text; ?> Men resultatet blir bare: I løpet av ungdomsskolen gjennomføres 8 forskjellige etapper fra Treriksrøysa i sør til Grense Jakobselv i nord. Kan noen hjelpe meg? Endret 6. mai 2008 av Garanti Lenke til kommentar
Hallonen Skrevet 6. mai 2008 Del Skrevet 6. mai 2008 (endret) EDIT: sorry, leste litt feil her..... Endret 6. mai 2008 av Hallonen Lenke til kommentar
Garanti Skrevet 6. mai 2008 Forfatter Del Skrevet 6. mai 2008 Dette var ment som et eksempel på et mer komplekst skript der jeg virkelig trenger preg_replace_callback... Takk for svar uansett Lenke til kommentar
Runar0 Skrevet 6. mai 2008 Del Skrevet 6. mai 2008 (endret) Jeg har følgende case: Alle vokaler i stringen $text skal gjøres til store bokstaver: .... Dette skjer fordi preg_replace_callback returnerer den nye strengen, den modifiserer ikkje den variabelen du gir. Dermed vil $text = preg_replace_callback(...) vil fungere Endret 6. mai 2008 av Runar0 Lenke til kommentar
Garanti Skrevet 6. mai 2008 Forfatter Del Skrevet 6. mai 2008 Svært mange takk ;D Lenke til kommentar
Garanti Skrevet 14. mai 2008 Forfatter Del Skrevet 14. mai 2008 Heisann igjen! Begynner å gå lenger og lenger tid mellom hver gang jeg spør om noe, det er jo forsåvidt et godt tegn så lenge jeg faktisk gjør noe Uansett, jeg lurte på hvordan man kan lage et tag-basert system vha. PHP/mySQL. Med 'tag' mener jeg da tag-er slik de blir benyttet i nyhetssider osv. Hvordan setter man f.eks opp en database med tag-er basert på artikler? Det finnes vel bedre måter enn dette: ___________________ | |Bil|Båt|Tog|Fly| |Art1 | 0| 0| 1| 0| |Art2 | 1| 0| 0| 1| |Art3 | 1| 1| 0| 0| |Art4 | 0| 0| 1| 0| |Art5 | 1| 1| 0| 1| ? Lenke til kommentar
Lokaltog Skrevet 14. mai 2008 Del Skrevet 14. mai 2008 Hehe, absolutt. Jeg ville gjort det på denne måten: Tabell: articles art_id (primary key, autoinc) title text timestamp Tabell: tags tag_id (primary key, autoinc) tag_text Tabell: articles_tags id (primary key, autoinc) tag_id art_id Ved å strukturere dataene slik kan du legge inn et ubegrenset antall tags i tags-tabellen, og du kan tagge en hvilken som helst artikkel med så mange tags du orker. Du kan også kjøre forskjellige former for spørringer for å hente ut relevante artikler i forholdt til gitte tags, etc. Lenke til kommentar
Garanti Skrevet 14. mai 2008 Forfatter Del Skrevet 14. mai 2008 Har jeg forstått det riktig: det er meningen at en ny rad skal bli opprettet for hver tag man legger til per artikkel? Lenke til kommentar
Wackamole Skrevet 14. mai 2008 Del Skrevet 14. mai 2008 hvorfor ikke legge til en vanlig TAG row til tabellen? så deler du dem opp med , (komma) eller mellomrom? kan kanskje bruke explode etter man har hentet tagene ut -Fredrik Lenke til kommentar
Garanti Skrevet 14. mai 2008 Forfatter Del Skrevet 14. mai 2008 Ikke dumt. En ting til jeg lurer på. På f.eks youtube finnes det en script kalt 'watch', som kan se f.eks slik ut: youtube.com/watch?v=ey78dkjv9v Dette er nok ikke PHP-spesifikt, men hvordan får de scriptet til å kjøre uten utvidelsen .php ell. lign? Når jeg prøver å kjøre filer blir de ikke kompilert. Det finnnes kanskje innstillinger for dette i Apache? Lenke til kommentar
Wackamole Skrevet 14. mai 2008 Del Skrevet 14. mai 2008 (endret) nå vet jeg ikke dette sikkert: men jeg tror det er en regel i .htaccess som heter modrewrite elns. men skal ikke si mer. det er helt sikkert noen andre som vet dette bedre. EDIT: Fant noe til apache serveren: http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html Endret 14. mai 2008 av Famen Lenke til kommentar
Garanti Skrevet 15. mai 2008 Forfatter Del Skrevet 15. mai 2008 Ok. Jeg har følgende kode: Klikk for å se/fjerne innholdet nedenfor <pre> <?PHP if(isset($_FILES['File'])){ $imgsize = getimagesize($_FILES['File']['tmp_name']); print_r($_FILES['File']); echo '<br> X: '.$imgsize[0].' Y: '.$imgsize[1]; $newis[0] = $imgsize[0]*0.2; $newis[1] = $imgsize[1]*0.2; echo '<br>NEW! X: '.$newis[0].' Y: '.$newis[1]; $image = imagecreatetruecolor(round($newis[0]), round($newis[1])); imagecopyresampled($image, $_FILES['File']['name'], 0, 0, 0, 0, $newis[0], $newis[1], $iSizeRaw['0'], $iSizeRaw['1']); imagepng($image, 'HAHAHAHAH.png', 0, IMG_FILTER_NEGATE); echo '<img src="'.$image.'" alt="HOHOOI!">'; } ?></pre> <form action="<?PHP echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post"> <input type="file" name="File" /><br /> <input type="submit" /> </form> Får følgende feil: Warning: imagecopyresampled(): supplied argument is not a valid Image resource in *****.php on line 20 Dette regner jeg med er på grunn av linken til kildebildet i imagecopyresampled(). Hvilken "ressurs" skal jeg bruke? Det virker verken med $_FILES['File']['name'] eller $_FILES['File']['tmp_name']. Lenke til kommentar
Lokaltog Skrevet 15. mai 2008 Del Skrevet 15. mai 2008 Du må lage en bilderessurs av bildet som blir lastet opp. Se på imagecreatefrom*-funksjonene i PHP-manualen. Lenke til kommentar
Garanti Skrevet 19. mai 2008 Forfatter Del Skrevet 19. mai 2008 Hei igjen! Har fått til et dugelig resize-script, men har støtt på et problem. Enkelte bildefiler er så store at de overgår hva PHP-installasjonen tillater. Hva skal jeg gjøre med dette? Da dette scriptet vil være en del av et større script for en klient, som skal hostes på en webserver, vil denne maks-grensen normalt være pa sammen nivå hos vanlige hoster? Lenke til kommentar
Lokaltog Skrevet 19. mai 2008 Del Skrevet 19. mai 2008 Problemet med behandling av store bilder er at det ofte krever store mengder minne. En minnegrense på 8MB eller 16MB blir ofte knapt for å resize veldig store bilder. Det du bør gjøre hvis du bruker en shared host er å begrense dimensjonene på bilder man laster opp. Hvis du hoster selv og har kapasiteten til det, kan du øke minnegrensen i scriptet ditt med ini_set() eller via .htaccess. Lenke til kommentar
Garanti Skrevet 21. mai 2008 Forfatter Del Skrevet 21. mai 2008 Hva skal jeg gjøre for å forhindre at et script med et sett funksjoner blir kjørt uten at det ble inkludert av en annen, spesifikk fil? Lenke til kommentar
Lokaltog Skrevet 21. mai 2008 Del Skrevet 21. mai 2008 (endret) Jeg vet ikke om jeg skjønner helt hva du mener. Hvis du vil forhindre at folk skal kunne laste filen fra nettleseren sin (i.e. det vil kun være serveren som kan kjøre den internt) kan du enten legge den utenfor webroot, ellers kan du gjøre noe a la dette i .htaccess: <Files *> Order deny,allow Deny from all Allow from localhost </Files> En annen løsning jeg kom på i farta (som er litt mer usexy): index.php: <?php $allow_include = true; include('include.php'); ?> include.php: <?php if(!$allow_include) die(); /* ... */ ?> Endret 21. mai 2008 av Lokaltog Lenke til kommentar
Alex Moran Skrevet 22. mai 2008 Del Skrevet 22. mai 2008 Hva skal jeg gjøre for å forhindre at et script med et sett funksjoner blir kjørt uten at det ble inkludert av en annen, spesifikk fil? functions.php <?php if (!defined('INDEX')) { die('No access'); } function hasSiblings() { return true; } index.php: <?php define ('INDEX', true); include('functions.php'); var_dump(hasSiblings()); Lenke til kommentar
Garanti Skrevet 28. mai 2008 Forfatter Del Skrevet 28. mai 2008 Når jeg kjører et skript fra nettleseren min ved bruk av $_POST, bruker serveren (WAMP) alltid noen sekunder før den tilsynelatende reagerer og utfører det jeg har bedt den om. Dette må vel være en slags sperre? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå