Verktyg Visningsval
2012-06-30, 14:57   #1

lundahldaniel

Medlem

lundahldaniels avatar

Plats: Örebro

Registrerad: maj 2011

Problem med uppladdning [PHP]


Hej!

Jag pular på ett skript för att ladda upp bilder till min hemsida.

Om jag använder t.ex. "/var/www/site/album" som mapp att flytta uppladdade bilden till så fungerar det.
Men när jag vill använda mig av en mapp beroende på användare så går det inte, bilden laddas inte upp alls. T.ex. "/var/www/site/album/$username" så fungerar det inte. $username innehåller, som ni kanske förstår, användarnamnet på den inloggade användaren. ^^

Någon som vet en lösning på problemet?

Med vänliga hälsningar,
Daniel Lundahl

EDIT:

Här kommer hela koden:
<?php
    $res 
mysql_query("SELECT id,username FROM users WHERE id='".$_SESSION['uid']."'");
    
$row mysql_fetch_assoc($res);
    
$username $row['username'];
    if (!empty(
$_FILES)) {
        
$tempFile $_FILES['Filedata']['tmp_name'];
            
$targetFile =  "/var/www/picturebox/albums/$username/".$_FILES['Filedata']['name'];

        
move_uploaded_file($tempFile,$targetFile);

    }
?>

Senast redigerad av lundahldaniel 2012-06-30 klockan 17:37.
__________________
Asus M4N68T-M V2 | AMD Athlon II 250 X2 @ 3.3GHz | Corsair 6GB | XFX 6870
Citera för garanterat svar!
lundahldaniel är inte uppkopplad
2012-06-30, 15:18   #2

Snacker

Medlem

Snackers avatar

Plats: Umeå

Registrerad: aug 2011

Skulle man kunna få mer kod?
Se även till så att PHP har rättighet att spara till den mappen

Skickades från m.sweclockers.com
__________________
Stationär: AMD Athlon X2 Dual Core 6400+ 3,21 GHz | 2x1GB DDR2 667 MHz | 320 GB SATA2 7200rpm | ASUS Radeon HD 4350 512 MB | Deltaco PSU 423 500W
Laptop: ASUS X72J Series | Intel i3-330M 2,13 GHz | 2x2GB DDR3 1333 MHz | Seagate 500 GB SATA2 5400rpm | ATI Mobility Radeon HD 5470 1 GB
Krignutrustning: Logitech G400 | Mionix Keid 20 | Microsoft Basic Keyboard 1.0A
Snacker är inte uppkopplad
2012-06-30, 15:28   #3

lundahldaniel

Medlem

lundahldaniels avatar

Plats: Örebro

Registrerad: maj 2011

Självklart. Glömmer bort det varje gång


FUNKAR
if (!empty($_FILES)) {
    
$tempFile $_FILES['Filedata']['tmp_name'];
    
$targetFile =  '/var/www/picturebox/albums/'.$_FILES['Filedata']['name'];

    
move_uploaded_file($tempFile,$targetFile);

FUNKAR INTE

if (!empty($_FILES)) {
    
$tempFile $_FILES['Filedata']['tmp_name'];
    
$targetFile =  '/var/www/picturebox/albums/$username/'.$_FILES['Filedata']['name'];

    
move_uploaded_file($tempFile,$targetFile);


när jag skapar mappen (som görs vid registrering) så användar jag chmod för att sätta alla rättigheter.

mkdir("./albums/$username");
chmod("./albums/$username"0777); 
__________________
Asus M4N68T-M V2 | AMD Athlon II 250 X2 @ 3.3GHz | Corsair 6GB | XFX 6870
Citera för garanterat svar!
lundahldaniel är inte uppkopplad
2012-06-30, 15:41   #4

fiffy

Medlem

Plats: Malmö

Registrerad: jul 2008

testa

$targetFile =  "/var/www/picturebox/albums/$username/".$_FILES['Filedata']['name']; 
Du måste ha " om du ska ha en variabel i en sträng
fiffy är inte uppkopplad
2012-06-30, 16:05   #5

Cocosoft

Medlem

Registrerad: nov 2011

Citat:
Ursprungligen inskrivet av fiffy Visa inlägg
testa

$targetFile =  "/var/www/picturebox/albums/$username/".$_FILES['Filedata']['name']; 
Du måste ha " om du ska ha en variabel i en sträng
Misstänkte att detta var felet också, vilket också det delvis är.
Men en mapp i linux kan väl innehålla $, så filen borde ändå hamna i just /var/www/picturebox/albums/$username/ , misstänker att det fortfarande finns privilegier-fel?
Cocosoft är inte uppkopplad
2012-06-30, 16:06   #6

lundahldaniel

Medlem

lundahldaniels avatar

Plats: Örebro

Registrerad: maj 2011

Citat:
Ursprungligen inskrivet av fiffy Visa inlägg
testa

$targetFile =  "/var/www/picturebox/albums/$username/".$_FILES['Filedata']['name']; 
Du måste ha " om du ska ha en variabel i en sträng
Detta ledde till att bilden laddades upp i albums. :S

$username = $row['username'];

men har även testat $username = "$row[username]";

Inget av dem fungerar :/
__________________
Asus M4N68T-M V2 | AMD Athlon II 250 X2 @ 3.3GHz | Corsair 6GB | XFX 6870
Citera för garanterat svar!
lundahldaniel är inte uppkopplad
2012-06-30, 16:09   #7

lundahldaniel

Medlem

lundahldaniels avatar

Plats: Örebro

Registrerad: maj 2011

Citat:
Ursprungligen inskrivet av Cocosoft Visa inlägg
Misstänkte att detta var felet också, vilket också det delvis är.
Men en mapp i linux kan väl innehålla $, så filen borde ändå hamna i just /var/www/picturebox/albums/$username/ , misstänker att det fortfarande finns privilegier-fel?
Den mapp som skapas ägs av www-data. albums har jag ju skapat manuellt på servern så den ägs av daniellundahl och dit kan jag ju ladda upp.

Har det något med saken att göra? :S
__________________
Asus M4N68T-M V2 | AMD Athlon II 250 X2 @ 3.3GHz | Corsair 6GB | XFX 6870
Citera för garanterat svar!
lundahldaniel är inte uppkopplad
2012-06-30, 16:26   #8

fiffy

Medlem

Plats: Malmö

Registrerad: jul 2008

Citat:
Ursprungligen inskrivet av lundahldaniel Visa inlägg
Detta ledde till att bilden laddades upp i albums. :S

$username = $row['username'];

men har även testat $username = "$row[username]";

Inget av dem fungerar :/

Det ska vara det översta, troligen. Svårt att säga utan att se hur du hämtar $row.
Gör du "select username, password from users" hade jag använt:

$row =/*dbmotor här*/_fetch_row($resource);
$username $row[0]; 
Linux-filrättigheter har jag tyvärr inte så bra koll på
fiffy är inte uppkopplad
2012-06-30, 17:30   #9

lundahldaniel

Medlem

lundahldaniels avatar

Plats: Örebro

Registrerad: maj 2011

Citat:
Ursprungligen inskrivet av fiffy Visa inlägg
Det ska vara det översta, troligen. Svårt att säga utan att se hur du hämtar $row.
Gör du "select username, password from users" hade jag använt:

$row =/*dbmotor här*/_fetch_row($resource);
$username $row[0]; 
Linux-filrättigheter har jag tyvärr inte så bra koll på
Så här ser hämtningen av användarnamnet ut, efter ändring till det du skrev.

$res mysql_query("SELECT id,username FROM users WHERE id='".$_SESSION['uid']."'");
$row mysql_fetch_row($res);
$username $row[1]; 
Detta fungerade inte. Innan såg det ut så här:

$res mysql_query("SELECT id,username FROM users WHERE id='".$_SESSION['uid']."'");
$row mysql_fetch_assoc($res);
$username $row['username']; 
EDIT: Antog att det blev $row[1] eftersom id blir väl $row[0]?
__________________
Asus M4N68T-M V2 | AMD Athlon II 250 X2 @ 3.3GHz | Corsair 6GB | XFX 6870
Citera för garanterat svar!
lundahldaniel är inte uppkopplad
2012-07-01, 10:03   #10

lundahldaniel

Medlem

lundahldaniels avatar

Plats: Örebro

Registrerad: maj 2011

Bestämde mig för att byta taktik. Istället för att bilderna ska läggas i en användares mapp så ändras filnamnet till användarnamn_filnamn.filändelse istället. Blir rörigare men det skulle funka.

Men det går inte ens att få filnamnet att ändras!? Kan få dit ett _ framför namnet men användarnamnet går inte.

GÅR INTE
<?php
    $res 
mysql_query("SELECT * FROM users WHERE id='".$_SESSION['uid']."'");
    
$row mysql_fetch_assoc($res);

    
$username $row['username'];
        
$targetFolder "/var/www/picturebox/albums";
if (!empty(
$_FILES)) {
    
$tempFile $_FILES['Filedata']['tmp_name'];
    
$targetFile $targetFolder  "/$username_".$_FILES['Filedata']['name'];
    
move_uploaded_file($tempFile,$targetFile);
}
?>
GÅR INTE
<?php
    $res 
mysql_query("SELECT * FROM users WHERE id='".$_SESSION['uid']."'");
    
$row mysql_fetch_assoc($res);

    
$username $row['username'];
        
$targetFolder "/var/www/picturebox/albums";
if (!empty(
$_FILES)) {
    
$tempFile $_FILES['Filedata']['tmp_name'];
    
$targetFile $targetFolder  "/".$username."_".$_FILES['Filedata']['name'];
    
move_uploaded_file($tempFile,$targetFile);
}
?>

Senast redigerad av lundahldaniel 2012-07-01 klockan 11:11.
__________________
Asus M4N68T-M V2 | AMD Athlon II 250 X2 @ 3.3GHz | Corsair 6GB | XFX 6870
Citera för garanterat svar!
lundahldaniel är inte uppkopplad
2012-07-01, 10:58   #11

Snacker

Medlem

Snackers avatar

Plats: Umeå

Registrerad: aug 2011

<?php
    $targetFile 
= "$targetFolder/{$username}_{$_FILES['Filedata']['name']}";
?>
Det där ska ju funka

Skickades från m.sweclockers.com
__________________
Stationär: AMD Athlon X2 Dual Core 6400+ 3,21 GHz | 2x1GB DDR2 667 MHz | 320 GB SATA2 7200rpm | ASUS Radeon HD 4350 512 MB | Deltaco PSU 423 500W
Laptop: ASUS X72J Series | Intel i3-330M 2,13 GHz | 2x2GB DDR3 1333 MHz | Seagate 500 GB SATA2 5400rpm | ATI Mobility Radeon HD 5470 1 GB
Krignutrustning: Logitech G400 | Mionix Keid 20 | Microsoft Basic Keyboard 1.0A
Snacker är inte uppkopplad
2012-07-01, 11:12   #12

lundahldaniel

Medlem

lundahldaniels avatar

Plats: Örebro

Registrerad: maj 2011

Citat:
Ursprungligen inskrivet av Snacker Visa inlägg
<?php
    $targetFile 
= "$targetFolder/{$username}_{$_FILES['Filedata']['name']}";
?>
Det där ska ju funka

Skickades från m.sweclockers.com
Det där fungerade inte heller Jag förstår inte varför det inte vill fungera. $username är inte tomt heller. om jag kör echo $username; så skriver den ut mitt användarnamn.
__________________
Asus M4N68T-M V2 | AMD Athlon II 250 X2 @ 3.3GHz | Corsair 6GB | XFX 6870
Citera för garanterat svar!
lundahldaniel är inte uppkopplad
2012-07-01, 11:14   #13

Tunnelsork

Medlem

Plats: foo

Registrerad: feb 2010

Citat:
Ursprungligen inskrivet av lundahldaniel Visa inlägg
Detta ledde till att bilden laddades upp i albums. :S

$username = $row['username'];

men har även testat $username = "$row[username]";

Inget av dem fungerar :/
Om bilden hamnade i albums så fanns det antagligen inget värde i $row["username"] (din sökväg blev .../albums//filename.jpg), om du inte fick någon varning för det så bör du aktivera felrapportering i PHP. Alternativt så var användarnamnet helt enkelt tomt, vilket för oss till nästa punkt. Använd hellre användaridt för att namnge mapparna, på så sätt slipper du problem med namn som inte är giltiga i ditt filsystem, kan byta namn på användare utan att deras relaterade material "försvinner" etc.

Angående dina variabler så tycks slutresultatet vara detsamma i det här fallet, men du ska alltid använda den första metoden. Med den säger du att värdet av $row["username"] ska kopieras till variabeln $username, vilket är precis vad du vill.

Den andra raden säger att du vill skapa en ny sträng utan innehåll, kopiera och konvertera innehållet i $row["username"] till en annan sträng om det inte redan var av den datatypen, slå samman dessa och placera resultatet i $username.

Att göra den metoden till en vana kan ge upphov till buggar om du inte förväntar dig att datatypen ska ändras och det kräver både mer minne och prestanda. Vill du ändra datatypen bör du göra det explicit så att läsaren förstår att input var av en annan typ.

När man kopierar en variabel i PHP skapas egentligen en referens till originalet, den faktiska kopian skapas inte förrän en av variablerna ändras. Med den första raden pekar alltså $username och $row["username"] till samma innehåll, medans det redan finns två kopior av det med den andra metoden. Se exempel nedan:

<?php
header("Content-type: text/plain");

$a = "Foo";

debug_zval_dump($a); // string(3) "Foo" refcount(2)

// Skapar en ny variabel som refereras från två platser:
// Det aktiva scopet, samt inuti funktionen debug_zval_dump()

$b = $a;

debug_zval_dump($a); // string(3) "Foo" refcount(3)

// Nu är $b en "kopia" av $a, men eftersom att de inte har
// ändrats så behandlas $b som en referens av $a. Vi ser att 
// $a har ytterligare en referens.

$a = "Bar";

debug_zval_dump($a); // string(3) "Bar" refcount(2)
debug_zval_dump($b); // string(3) "Foo" refcount(2)

// Först när vi ändrar $a separeras de två.

$c = "$a";

debug_zval_dump($a); // string(3) "Bar" refcount(2)

// När vi "kopierar" $a med den andra metoden refereras den
// aldrig, istället har du skapat helt ny data, och använder
// ~ dubbelt så mycket minne.

?>
TL,DR: Quota aldrig variabler om du bara vill komma åt deras innehåll.

Skickades från m.sweclockers.com
__________________
Akta gräsmattan!

Tunnelsork är inte uppkopplad
2012-07-01, 11:35   #14

lundahldaniel

Medlem

lundahldaniels avatar

Plats: Örebro

Registrerad: maj 2011

Spoiler:
Citat:
Ursprungligen inskrivet av Tunnelsork Visa inlägg
Om bilden hamnade i albums så fanns det antagligen inget värde i $row["username"] (din sökväg blev .../albums//filename.jpg), om du inte fick någon varning för det så bör du aktivera felrapportering i PHP. Alternativt så var användarnamnet helt enkelt tomt, vilket för oss till nästa punkt. Använd hellre användaridt för att namnge mapparna, på så sätt slipper du problem med namn som inte är giltiga i ditt filsystem, kan byta namn på användare utan att deras relaterade material "försvinner" etc.

Angående dina variabler så tycks slutresultatet vara detsamma i det här fallet, men du ska alltid använda den första metoden. Med den säger du att värdet av $row["username"] ska kopieras till variabeln $username, vilket är precis vad du vill.

Den andra raden säger att du vill skapa en ny sträng utan innehåll, kopiera och konvertera innehållet i $row["username"] till en annan sträng om det inte redan var av den datatypen, slå samman dessa och placera resultatet i $username.

Att göra den metoden till en vana kan ge upphov till buggar om du inte förväntar dig att datatypen ska ändras och det kräver både mer minne och prestanda. Vill du ändra datatypen bör du göra det explicit så att läsaren förstår att input var av en annan typ.

När man kopierar en variabel i PHP skapas egentligen en referens till originalet, den faktiska kopian skapas inte förrän en av variablerna ändras. Med den första raden pekar alltså $username och $row["username"] till samma innehåll, medans det redan finns två kopior av det med den andra metoden. Se exempel nedan:

<?php
header("Content-type: text/plain");

$a = "Foo";

debug_zval_dump($a); // string(3) "Foo" refcount(2)

// Skapar en ny variabel som refereras från två platser:
// Det aktiva scopet, samt inuti funktionen debug_zval_dump()

$b = $a;

debug_zval_dump($a); // string(3) "Foo" refcount(3)

// Nu är $b en "kopia" av $a, men eftersom att de inte har
// ändrats så behandlas $b som en referens av $a. Vi ser att 
// $a har ytterligare en referens.

$a = "Bar";

debug_zval_dump($a); // string(3) "Bar" refcount(2)
debug_zval_dump($b); // string(3) "Foo" refcount(2)

// Först när vi ändrar $a separeras de två.

$c = "$a";

debug_zval_dump($a); // string(3) "Bar" refcount(2)

// När vi "kopierar" $a med den andra metoden refereras den
// aldrig, istället har du skapat helt ny data, och använder
// ~ dubbelt så mycket minne.

?>
TL,DR: Quota aldrig variabler om du bara vill komma åt deras innehåll.

Skickades från m.sweclockers.com


Försökte förstå det du skrev, hängde inte riktigt med på exemplet då det var vissa saker jag aldrig använt mig utav.
Jag provade att ändra så jag använder mig utav användarIDt istället, men det gav samma resultat.

Koden ser nu ut såhär:

<?php
session_start
();
include 
"./global.php";


    
$res mysql_query("SELECT * FROM users WHERE id='".$_SESSION['uid']."'");
    
$row mysql_fetch_assoc($res);

    
$userid $row['id'];

if (!empty(
$_FILES)) {
    
$tempFile $_FILES['Filedata']['tmp_name'];
    
$ext explode('.',$_FILES['Filedata']['name']);
    
move_uploaded_file($tempFile,'/var/www/picturebox/albums/' $userid '_' $_FILES['Filedata']['name']);
}
?>
Den laddar fortfarande upp _filnamn.filtyp.

Senast redigerad av lundahldaniel 2012-07-01 klockan 11:41.
__________________
Asus M4N68T-M V2 | AMD Athlon II 250 X2 @ 3.3GHz | Corsair 6GB | XFX 6870
Citera för garanterat svar!
lundahldaniel är inte uppkopplad
2012-07-01, 12:00   #15

Tunnelsork

Medlem

Plats: foo

Registrerad: feb 2010

Citat:
Ursprungligen inskrivet av lundahldaniel Visa inlägg
Spoiler:
Citat:
Ursprungligen inskrivet av Tunnelsork Visa inlägg
Om bilden hamnade i albums så fanns det antagligen inget värde i $row["username"] (din sökväg blev .../albums//filename.jpg), om du inte fick någon varning för det så bör du aktivera felrapportering i PHP. Alternativt så var användarnamnet helt enkelt tomt, vilket för oss till nästa punkt. Använd hellre användaridt för att namnge mapparna, på så sätt slipper du problem med namn som inte är giltiga i ditt filsystem, kan byta namn på användare utan att deras relaterade material "försvinner" etc.

Angående dina variabler så tycks slutresultatet vara detsamma i det här fallet, men du ska alltid använda den första metoden. Med den säger du att värdet av $row["username"] ska kopieras till variabeln $username, vilket är precis vad du vill.

Den andra raden säger att du vill skapa en ny sträng utan innehåll, kopiera och konvertera innehållet i $row["username"] till en annan sträng om det inte redan var av den datatypen, slå samman dessa och placera resultatet i $username.

Att göra den metoden till en vana kan ge upphov till buggar om du inte förväntar dig att datatypen ska ändras och det kräver både mer minne och prestanda. Vill du ändra datatypen bör du göra det explicit så att läsaren förstår att input var av en annan typ.

När man kopierar en variabel i PHP skapas egentligen en referens till originalet, den faktiska kopian skapas inte förrän en av variablerna ändras. Med den första raden pekar alltså $username och $row["username"] till samma innehåll, medans det redan finns två kopior av det med den andra metoden. Se exempel nedan:

<?php
header("Content-type: text/plain");

$a = "Foo";

debug_zval_dump($a); // string(3) "Foo" refcount(2)

// Skapar en ny variabel som refereras från två platser:
// Det aktiva scopet, samt inuti funktionen debug_zval_dump()

$b = $a;

debug_zval_dump($a); // string(3) "Foo" refcount(3)

// Nu är $b en "kopia" av $a, men eftersom att de inte har
// ändrats så behandlas $b som en referens av $a. Vi ser att 
// $a har ytterligare en referens.

$a = "Bar";

debug_zval_dump($a); // string(3) "Bar" refcount(2)
debug_zval_dump($b); // string(3) "Foo" refcount(2)

// Först när vi ändrar $a separeras de två.

$c = "$a";

debug_zval_dump($a); // string(3) "Bar" refcount(2)

// När vi "kopierar" $a med den andra metoden refereras den
// aldrig, istället har du skapat helt ny data, och använder
// ~ dubbelt så mycket minne.

?>
TL,DR: Quota aldrig variabler om du bara vill komma åt deras innehåll.

Skickades från m.sweclockers.com


Försökte förstå det du skrev, hängde inte riktigt med på exemplet då det var vissa saker jag aldrig använt mig utav.
Jag provade att ändra så jag använder mig utav användarIDt istället, men det gav samma resultat.

Koden ser nu ut såhär:

<?php
session_start
();
include 
"./global.php";


    
$res mysql_query("SELECT * FROM users WHERE id='".$_SESSION['uid']."'");
    
$row mysql_fetch_assoc($res);

    
$userid $row['id'];

if (!empty(
$_FILES)) {
    
$tempFile $_FILES['Filedata']['tmp_name'];
    
$ext explode('.',$_FILES['Filedata']['name']);
    
move_uploaded_file($tempFile,'/var/www/picturebox/albums/' $userid '_' $_FILES['Filedata']['name']);
}
?>
Den laddar fortfarande upp _filnamn.filtyp.
var_dump($row);

// Använd alltid var_dump för att felsöka.
// echo, print_r m.fl. ger ingen typinformation
Det är antagligen så att sessionsdatan inte innehåller vad du förväntar dig, därför hittas ingen användare och $row är tom, kolumnen "id" finns inte i resultatet och inget kan därför slås samman med ditt filnamn. Eftersom att du inte tycks ha felrapportering igång så får du inte heller några varningar om detta.</guess>

Senast redigerad av Tunnelsork 2012-07-01 klockan 12:02.
__________________
Akta gräsmattan!

Tunnelsork är inte uppkopplad
2012-07-01, 12:07   #16

lundahldaniel

Medlem

lundahldaniels avatar

Plats: Örebro

Registrerad: maj 2011

Citat:
Ursprungligen inskrivet av Tunnelsork Visa inlägg
var_dump($row);

// Använd alltid var_dump för att felsöka.
// echo, print_r m.fl. ger ingen typinformation
Det är antagligen så att sessionsdatan inte innehåller vad du förväntar dig, därför hittas ingen användare och $row är tom, kolumnen "id" finns inte i resultatet och inget kan därför slås samman med ditt filnamn. Eftersom att du inte tycks ha felrapportering igång så får du inte heller några varningar om detta.</guess>
var_dump($row) skriver ut:

array(5) { ["id"]=> string(1"1" ["username"]=> string(13"daniellundahl" ["password"]=> string(32"***" ["email"]=> string(26"***" ["admin"]=> string(1"***" 
Så den är inte tom. Försökte med att ta bort if(!empty($_FILES)) runt koden men det gav samma resultat.
__________________
Asus M4N68T-M V2 | AMD Athlon II 250 X2 @ 3.3GHz | Corsair 6GB | XFX 6870
Citera för garanterat svar!
lundahldaniel är inte uppkopplad
2012-07-01, 18:53   #17

lundahldaniel

Medlem

lundahldaniels avatar

Plats: Örebro

Registrerad: maj 2011

Hmm det fungerar i IE, men inte i Chrome (kör alltid chrome). :S Någon som vet vad det då kan bero på?
__________________
Asus M4N68T-M V2 | AMD Athlon II 250 X2 @ 3.3GHz | Corsair 6GB | XFX 6870
Citera för garanterat svar!
lundahldaniel är inte uppkopplad
2012-07-19, 18:43   #18

Cocosoft

Medlem

Registrerad: nov 2011

Citat:
Ursprungligen inskrivet av lundahldaniel Visa inlägg
Den mapp som skapas ägs av www-data. albums har jag ju skapat manuellt på servern så den ägs av daniellundahl och dit kan jag ju ladda upp.

Har det något med saken att göra? :S
Oj, kanske var lite trött när jag skrev detta. Men jag tyckte strängen hade enkelcitat -> ' istället för " vilket leder till att variabler inte tolkas och istället skrivs just $username ut istället.

Citat:
Ursprungligen inskrivet av Tunnelsork Visa inlägg
Om bilden hamnade i albums så fanns det antagligen inget värde i $row["username"] (din sökväg blev .../albums//filename.jpg), om du inte fick någon varning för det så bör du aktivera felrapportering i PHP. Alternativt så var användarnamnet helt enkelt tomt, vilket för oss till nästa punkt. Använd hellre användaridt för att namnge mapparna, på så sätt slipper du problem med namn som inte är giltiga i ditt filsystem, kan byta namn på användare utan att deras relaterade material "försvinner" etc.

Angående dina variabler så tycks slutresultatet vara detsamma i det här fallet, men du ska alltid använda den första metoden. Med den säger du att värdet av $row["username"] ska kopieras till variabeln $username, vilket är precis vad du vill.

Den andra raden säger att du vill skapa en ny sträng utan innehåll, kopiera och konvertera innehållet i $row["username"] till en annan sträng om det inte redan var av den datatypen, slå samman dessa och placera resultatet i $username.

Att göra den metoden till en vana kan ge upphov till buggar om du inte förväntar dig att datatypen ska ändras och det kräver både mer minne och prestanda. Vill du ändra datatypen bör du göra det explicit så att läsaren förstår att input var av en annan typ.

När man kopierar en variabel i PHP skapas egentligen en referens till originalet, den faktiska kopian skapas inte förrän en av variablerna ändras. Med den första raden pekar alltså $username och $row["username"] till samma innehåll, medans det redan finns två kopior av det med den andra metoden. Se exempel nedan:

<?php
header("Content-type: text/plain");

$a = "Foo";

debug_zval_dump($a); // string(3) "Foo" refcount(2)

// Skapar en ny variabel som refereras från två platser:
// Det aktiva scopet, samt inuti funktionen debug_zval_dump()

$b = $a;

debug_zval_dump($a); // string(3) "Foo" refcount(3)

// Nu är $b en "kopia" av $a, men eftersom att de inte har
// ändrats så behandlas $b som en referens av $a. Vi ser att 
// $a har ytterligare en referens.

$a = "Bar";

debug_zval_dump($a); // string(3) "Bar" refcount(2)
debug_zval_dump($b); // string(3) "Foo" refcount(2)

// Först när vi ändrar $a separeras de två.

$c = "$a";

debug_zval_dump($a); // string(3) "Bar" refcount(2)

// När vi "kopierar" $a med den andra metoden refereras den
// aldrig, istället har du skapat helt ny data, och använder
// ~ dubbelt så mycket minne.

?>
TL,DR: Quota aldrig variabler om du bara vill komma åt deras innehåll.

Skickades från m.sweclockers.com
Tack för väldigt användbar och intressant information.

Citat:
Ursprungligen inskrivet av lundahldaniel Visa inlägg
Hmm det fungerar i IE, men inte i Chrome (kör alltid chrome). :S Någon som vet vad det då kan bero på?
Hmm det är lustigt.

Misstänker att du redan har löst problemet, men i alla fall;
Fungerar, endast i IE? Hur ser <form>-taggen ut?

Printa ut /var/www/picturebox/albums/' . $userid . '_' . $_FILES['Filedata']['name'] och se hur det ser ut?
Jag misstänker att det fortfarande är något sessions-problem dock.

Testa att printa ut själva query texten också och se hur den ser ut.
Även bra att kolla hur många rader mysql-query:n ger ut:
if(mysql_num_rows($res) == 0) echo "Inga rader från query!";
Cocosoft är inte uppkopplad
Senaste nyheterna

Redaktionens senaste nyhetsrubriker

Sök jobb