Fájl másolás copy()-val, failed to open stream: Permission denied

Fájl másolás copy()-val, failed to open stream: Permission denied
2021-06-12T16:29:56+02:00
2021-07-12T21:56:18+02:00
2022-10-15T21:25:41+02:00
javorkaigy
Sziasztok!

Segítséget szeretnék kérni abban, hogy mi lehet az oka, hogy ha copy() függvénnyel szeretnék fájlt másolni hálózatban levő másik gép megosztott könyvtárába, minden próbálkozásomra a "failed to open stream: Permission denied" a válasz.
Sok témát végigolvastam már, PHP leírást is, de nem találtam megoldást.
Javasolták, hogy állítsak be teljes hozzáférést a PHP szkriptet futtató felhasználó számára a cél könyvtárra.
get_current_user()-rel megnéztem, hogy a PHP szkript SYSTEM felhasználó nevében fut.
A másik gépen SYSTEM felhasználónak is és Mindenkinek is teljes hozzáférése van az adott könyvtárhoz.

Próbáltam azt is, hogy a fájl másolási utasítást beírtam egy cmd kiterjesztésű fájlba és azt próbáltam lefuttatni a PHP-val. Ez sem ment. A cmd fájl rendben létrejött, ha rákattintok hibátlanul megy a másolás.

Köszönöm a segítségeteket előre is!
Mutasd a teljes hozzászólást!
Sziasztok!
A megoldás az lett, hogy készítettem egy copy.cmd fájlt, amiben leírtam a copy parancsot. 
Ezt futtatom a 

function execInBackground($cmd) {

     pclose(popen("start /B ". $cmd, "r"));

}

függvénnyel.
Így működik, és nincs jogosultság probléma.

Mindenkinek köszönöm a segítséget!
Mutasd a teljes hozzászólást!

  • Az üzenet nem elég pontos, vonatkozhat az inputfájlra, az outputfájlra, vagy az ezeket tartalmazó könyvtárakra. Már létező fájl felülírásához írási jog kell a fájlra, nem létező fájl létrehozásához írási jog kell a könyvtárra.
    Mutasd a teljes hozzászólást!
  • Szia!

    A SYSTEM user nem fér hozzá a hálózati erőforrásokhoz.

    Olyan user nevében kell futtatni a webszervert (IIS esetén az Application Poolt), akinek van hálózati hozzáférése.

    Ha domain-ben vannak a gépek, akkor egy domain usert kell létrehozni, a nevében futtatni, megosztáson jogokat kiosztani.

    Ha csak munkacsoportban, akkor elvileg mindkét gépen létre kell hoznod a felhasználókat ugyanazzal a névvel/jelszóval (régebben legalábbis így működött).

    VAGY a webszerver csak lokálisan ír, és egy független job (scheduld task) időnként elvégzi a hálózati másolást. Ekkor csak a job-nak kell hálózati felhasználót beállítani, a webszerverhez nem kell nyúlni.
    Mutasd a teljes hozzászólást!
  • Sziasztok!
    A megoldás az lett, hogy készítettem egy copy.cmd fájlt, amiben leírtam a copy parancsot. 
    Ezt futtatom a 

    function execInBackground($cmd) {

         pclose(popen("start /B ". $cmd, "r"));

    }

    függvénnyel.
    Így működik, és nincs jogosultság probléma.

    Mindenkinek köszönöm a segítséget!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd