webForumDet fria alternativet

php/mysql/iis - vad är grejjen??

PHP

5 svar · 794 visningar · startad av k:sson

Medlem sedan feb. 20034 inlägg
Frågan#1

Hej PHP-masters!

Det verkar som php-script-förutsättningarna på NT/IIS är så olika(=begränsade?) gentemot Linux/Apache. Jag måste alltså få häng på hur mina script måste ändras för att uppladdn (inkl mkdir(), rmdir(), copy(), unlink() etc etc) ska funka på ovan nämnda NT/IIS-server.

--Skulle gärna köra på Linux/Apache men har tyvärr ingen möjlighet till detta alltså-- :(

Nån som kan berätta vad som är fel när jag får:

Warning: mkdir(../uploads/news/7) [function.mkdir]: Permission denied in D:\www\131\xxx.se\www\test_030213\news\news_add.php on line 120

Warning: copy() [function.copy]: Unable to access C:\WINNT\TEMP\php2D.tmp in D:\www\131\xxx.se\www\test_030213\news\news_add.php on line 137

Warning: copy(C:\WINNT\TEMP\php2D.tmp) [function.copy]: failed to create stream: No such file or directory in D:\www\131\xxx.se\www\test_030213\news\news_add.php on line 137

...som felmeddelande när jag kör koden:

<?
// jag har förstås ett formulär som loopar fram input-fält och döper
// varje fieldname till 'upfile[]' resp 'url[]'

// includes
	include("../includes/news_conf.php");
	include("../includes/functions.php");
	// open database connection
		$connection = @mysql_connect($host) or die ("Kunde inte ansluta!");
        // select database
		@mysql_select_db($db, $connection) or die ("Kunde inte f&aring; kontakt med databasen!");
    
	// generate and execute query
        $query = "INSERT INTO news(slug, content, timestamp) VALUES('$slug', '$content', NOW())";
		$result = @mysql_query($query) or die ("Fel i query: $query. " . mysql_error());
        $id = mysql_insert_id();
        $uploadpath = "../uploads/news";
        // if files create a directory to store them in
        if(!mkdir($uploadpath.'/'.$id, 0777))
        {
        echo "Obs! Det gick inte att skapa mapp f&ouml;r filerna p&aring; servern.";
        }
        // loop through the files and validate them - insert files into db,
        // copy to id-named dir on server
		for($i = 0;$i < count($upfile);$i++)
		{
		// check if we have any files to process
        if ($upfile_size[$i])
        {
		// validate the names and contents of the files
		if(trim($upfile[$i])!="none" and trim($upfile[$i])!="" and trim($upfile_name[$i])!="")
        {
        $queryf = "INSERT INTO files SET file_name = '$upfile_name[$i]', id = '$id'";
		$resultf = @mysql_query($queryf) or die ("Fel i query: $queryf. " . mysql_error());
		// copy to server
		if(!copy($upfile[$i], $uploadpath.'/'.$id.'/'.$upfile_name[$i]))
		{
		echo "Obs! Tyv&auml;rr gick det inte att ladda upp filerna.";
        }
        }
      }
     }
      // insert urls if user said so
		for($u = 0; $u < count($url); $u++)
		{
		// check if we have any url at a spec position and if the input is NOT blank
		// then perform the input
		if (isset($url[$u]) and trim($url[$u])!='')
		{
        $queryu = "INSERT INTO urls SET url_name = '$url[$u]', id = '$id'";
		$resultu = @mysql_query($queryu) or die ("Fel i query: $queryu. " . mysql_error());
        }
        }
        
        ?>

Någon som kan skjutsa mig på rätt väg och droppa litet självklarheter att tänka på vid (tvångs-)övergång från Linux/Apache till NT/IIS??

...please!!

Medlem sedan apr. 2000137 inlägg
#2

Tja

Jag själv kör W2K / Apache så jag kan inte testa allt, men försöker mkdir() skapa en katalog utanför webrooten? Det kanske kan ställa till problem.

Sen så kan det hjälpa att använda is_uploaded_file() och move_uploaded_file()

för att kolla om det verkligen kom någon fil, samt istället för copy()

Har som sagt inte testat, bara lite bräjnstårming

[edit]
Välkommen !
[/edit]

Medlem sedan feb. 20034 inlägg
#3

Precis vad jag behöver - en 'psykolog' ;)

Har nämligen svurit/svettats över detta
en del. Ska göra en seriös test av:

is_uploaded_file() och move_uploaded_file()

Har provat till viss del men utan resultat...

På frågan om jag försöker skapa mapp utanför
rooten är svaret nej. Går bara upp en nivå från
min 'news'-mapp (till en 'main'-mapp som ligger
i själva rooten) och ned i 'uploads'-mappen.

Ska jag vara helt ärlig så är jag litet osäker på
det här hur man bör knalla upp och ned i mappar
(själva sökvägarna alltså) i NT/IIS. Har hört att
det är känsligt/annorlunda? Har i alla fall full
behörighetsmode på alla inblandade mappar...

För övrigt så bråkar en utmärkt (på Linux/Apache)
fungerande session-snutt:

login.php

<?
session_start();

if (isset($userid) && isset($password))
{
// anslut till db
if (mysql_num_rows($result) >0)
{
// om anv finns i db registrera session
$valid_user = $userid;
session_register("valid_user");
}
}

if (session_is_registered("valid_user"))
{
// om behörig anv
echo "<script language=\"javascript\">location.href='behorig.php'</script>";

else
{
if (isset($userid))
{
// om anv försökt logga in men misslyckats
echo "Kunde inte logga in dig.";
}
else
{
// anv har ej loggat in eller är utloggad
echo "Du &auml;r inte inloggad.";
}

// visa formulär för att logga in
echo "<form method=\"post\" action=\"login.php\">\n";
echo "Anv&auml;ndarid:<br>\n";
echo "<input type=\"text\" name=\"userid\"><br><br>\n";
echo "L&ouml;senord:<br>\n";
echo "<input type=\"password\" name=\"password\"><br><br>\n";
echo "<input type=\"submit\" value=\"Logga in\">\n";
}
?>

alla_andra_skyddade_sidor.php
[kod]
<?
// anv koll
session_start();

// kolla session variabel
if (session_is_registered("valid_user"))
{

// massa innehåll för behöriga

}
else
{
// skicka till login-sidan
echo "<script language=\"javascript\">location.href='login.php'</script>";
}
?>

...men detta funkar ju inte på NT/IIS förstås - nån som kan
ge litet tips att tänka på med sessions i denna miljö?

tack!

Medlem sedan mars 20002 836 inlägg
#4

En liten parentes bara.
Har du fulla rättigheter på denna mapp: C:\WINNT\TEMP\ (finns med i ditt felmeddelande).

dvs, IUSER_sitename måste ha fulla rättigheter på den mappen, eller det användarkonto som siten använder som "sitt".

Om jag inte missminner mig så är det ett par andra mappar i PHP mappen som också behöver fullständiga rättigheter.

cya,
PatrikB

Medlem sedan feb. 20034 inlägg
#5

Där har vi nog nåt, PatrikB! I mitt felmedd får jag
nämligen upp just den mappen med tmp-fil efter:

C:\WINNT\TEMP\det_genererade_tmp_namnet
(och att jag inte har access...)

Nu är det ju så (och jag skäms för att det nog
inte framgått tidigare :r ) att det är en ISP som
står för servern. Min fråga är dock: borde inte
jag slippa gå på ISPmänniskan om att 'sätta på' olika
saker på servern?? Jag har iofs fått gå på
om att de skulle sätta på register_globals (vilket
de gjorde) men borde det inte vara default
(av ISP'ns mänskliga faktor) att ge mig tillgång
till tmp-mappen och annat sånt?

Annars: vad ska jag säga åt dem att göra för
mig? Lost in space, känner jag mig...

tjena!

Medlem sedan feb. 20034 inlägg
#6

...nu får jag skämmas litet igen, då jag
plötsligt for tillbaks till typ 1996 och
inte kunde skilja på ISP och webbhotell ...

Hoppas poängen gick fram i alla fall :)

324 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
193 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)