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å 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ör filerna på 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ä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??
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 är inte inloggad.";
}
// visa formulär för att logga in
echo "<form method=\"post\" action=\"login.php\">\n";
echo "Användarid:<br>\n";
echo "<input type=\"text\" name=\"userid\"><br><br>\n";
echo "Lö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ö?
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...