Pergunta

dentro de PHP (XAMPP) instalado em um Computador com Windows XP, estou tentando ler um dir que existe em um servidor de rede local.Im usando is_dir() para verificar se é um diretório que eu possa ler.

No Windows Explorer, e tipo, eu \\\server\dir e que dir está sendo mostrado.Quando eu mapeie uma unidade de rede um pode acessá-lo com z:\dir bem.

No PHP eu tenho esse script:

<?php if( is_dir($dir){ echo 'success' } ) ?>

Para $dir Eu tentei:

  • /server/dir
  • //server/dir
  • \server\dir
  • \\server\dir
  • \\\\server\\dir

e

  • z:\dir
  • z:\\dir
  • z:/dir
  • z://dir

Mas eu nunca obter sucesso?Alguma idéia?thx

Foi útil?

Solução

Eu resolvi que alterar algumas coisas no registro do servidor, conforme explicado na última resposta desta discussão:

http://bugs.php.net/bug.php?id=25805

Graças a VolkerK e Gumbo de qualquer maneira!Eu amo stackoverflow e os seus grandes as pessoas que nos ajudam de modo incrivelmente rápido!!

EDITAR (tomadas a partir de php.net):

O serviço tem acesso limitado a recursos de rede, tais como acções e pipes, porque ele não tem credenciais e deve se conectar usando um null sessão.A seguinte chave do registro contém o NullSessionPipes e NullSessionShares valores, que são utilizados para especificar os tubos e ações para que as sessões nulas podem se conectar:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters Como alternativa, você pode adicionar o valor de REG_DWORD RestrictNullSessAccess para a chave e defina-o como 0 para permitir que todos null sessões para aceder a todas as tubulações e partilhas criadas na máquina.`

adicionar RestrictNullSessAccess=0 registery.

Outras dicas

Você provavelmente permite que o XAMPP instale o Apache como serviço e execute os scripts PHP. E o serviço Apache (em execução como Localsystem) não tem permissão para acessar a rede da maneira como sua conta de usuário é.

Um serviço que é executado no contexto da conta do sistema local herda o contexto de segurança do SCM. O usuário SID é criado no valor do Security_Local_System_Rid. A conta não está associada a nenhuma conta de usuário conectada.
Isso tem várias implicações:
...
   * O serviço apresenta as credenciais do computador para servidores remotos.
...

Você pode testar isso iniciando o aplicativo Apache como console (apache_start.bat no diretório XAMPP deve fazer isso) e executar o script novamente. Você pode usar barras para frente e para trás no caminho UNC. Eu sugiro usar // servidor /compartilhar, pois o PHP não se importa com /em literais de string.

<?php
$uncpath = '//server/dir';
$dh = opendir($uncpath);
echo "<pre>\n";
var_dump($dh, error_get_last());
echo  "\n</pre>";

Tente o file: Esquema URI:

file://server/dir
file:///Z:/dir

O começo é sempre file://. O próximo segmento de caminho é o servidor. Se estiver na sua máquina local, deixe -a em branco (veja o segundo exemplo). Veja também Arquive Uris no Windows.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top