Como configuro o IIS para permitir acesso a recursos de rede para scripts PHP?

5

Atualmente, estou trabalhando em um front-end de PHP que reúne uma série de aplicativos em execução em servidores separados; muitos desses aplicativos geram arquivos que eu preciso acessar, mas esses arquivos (por vários motivos) residem em seus servidores-pai.

Se eu, na linha de comando, emitir um script como:

<?php
var_dump(glob("\\machine-name\some\share\*"));

Eu irei pegar o conteúdo completo desse diretório, provando que não há nenhum problema programaticamente com o PHP lendo o conteúdo de um compartilhamento UNC. No entanto, se eu tentar executar o mesmo script do servidor da web, recebo uma matriz vazia - mais especificamente, se eu usar funções mais explicitamente projetadas para "abrir" um diretório como se fosse um arquivo, obtenho erros de acesso. / p>

Acredito que isso seja um problema de permissões, mas não sou um tipo de administrador de rede / servidor, por isso não tenho certeza do que preciso fazer para corrigir isso e fazer com que meu script seja executado e os links que verifiquei não tem sido uma quantidade terrível de ajuda, talvez devido ao meu histórico, ou a falta dela, tanto quanto o IIS está em causa, juntamente com o fato de que não estamos realmente usando o .net para isso.

Estatísticas relevantes: Windows Server 2008 Standard SP2 IIS 7.0 PHP 5.2.9

Estarei me conectando a dois tipos de servidores: algumas outras máquinas quase idênticas do Server 2008 e uma máquina executando o XP integrado.

Links que não foram particularmente úteis, mas talvez eu esteja apenas interpretando mal:

por Dereleased 05.08.2010 / 02:27

3 respostas

1

Como você adivinhou, este é um problema de permissões ... o usuário que o processo de trabalho do IIS está executando como uma conta local na máquina (provavelmente IUSER_ <MACHINENAME> ), e esse usuário não está autenticado (nem a ação ainda existe!) nas outras máquinas que você está tentando navegar via UNC

Assim como um teste, você pode entrar no gerenciador do IIS e alterar o que o serviço IIS está executando como para esse site ... Estou usando a terminologia do Server 2003 / IIS 6, porque eu não tenho um Server 2008 caixa à mão agora. Se você procurar no gerenciador do IIS 7, poderá localizar onde pode definir o usuário com o qual o processo de trabalho é executado.

    
por 28.08.2010 / 18:35
2

Seu aplicativo PHP é executado usando uma conta de serviço e essa é a conta de usuário cujas credenciais são usadas para acessar os recursos da rede. O padrão para o IIS é usar uma conta local do servidor da web para isso, e essa conta não tem permissões para acessar os recursos da rede (porque é uma conta local).

Você deve configurar o pool de aplicativos do IIS para que seu site seja executado usando uma conta de usuário de domínio e, em seguida, conceder a essa conta de usuário as permissões apropriadas no compartilhamento de rede.

Se você não tem um domínio do Active Directory, ou esses dois servidores não são membros dele, as coisas ficam um pouco mais complicadas, mas isso pode ser feito de qualquer maneira criando duas contas de usuário com os mesmos nomes de usuário e senhas ambos os servidores.

    
por 28.08.2010 / 18:50
-1

Se você estiver usando o "Windows Server 2008 Standard SP2 IIS 7.0", por que lê artigos no Windows-es / IIS-es do milênio anterior?
Você não pode ter qualquer coisa que essas seções de artigo "APLLIES TO:" descrevem, como IIS3.0-5.0 (principalmente IIS 4.0), ASP clássico (obsoleto em 1999), Extensões do FrontPage preteridas, ASP.NET.0-1.1 (C # .NET /VB.NET 2002) e contexto das estações de trabalho no grupo de trabalho!

Você tem AD / DC?

Plz leu minha resposta para Representação NÃO está funcionando - Compartilhamento em rede

    
por 28.08.2010 / 05:23