¿Por qué no puede script PHP escribir un archivo en el servidor 2008 a través de línea de comandos o planificador de tareas?

StackOverflow https://stackoverflow.com/questions/2812057

Pregunta

He creado una pregunta sobre serverfault.com, y se recomendó que pido aquí.

https://serverfault.com/questions/140669/why-cant-php-script-write-a-file-on-server-2008-via-command-line-or-task-schedul

Tengo un script PHP. Funciona bien cuando se utiliza un navegador. Se escribe un archivo XML en el mismo directorio. El script toma ~ 60 segundos para correr, y el archivo XML resultante es de ~ 16 MB.

Estoy corriendo PHP 5.2.13 a través de FastCGI en Windows Server Web Edition SP1 de 64 bits.

El inventario tirones de código del servidor SQL, se ejecuta un bucle para crear un archivo XML para un tercero.

crea una tarea en el planificador de tareas para ejecutar c: \ php5 \ php.exe "D: \ inetpub \ tools \ build.php"

El planificador de tareas muestra un lapso de tiempo de aproximadamente un minuto, que es el tiempo que tarda la secuencia de comandos para ejecutar en un navegador.

devuelve ningún error, pero no hay ningún archivo creado.

Cada vez que hago un cambio en las propiedades de las tareas programadas, un cuadro de contraseña de usuario se acerca y que introduzca la contraseña de cuenta de administrador.

Si me quedo este mismo camino y discusión en una línea de comandos que no de error y no crea el archivo.

Cuando hago clic derecho comando de marcha rápida como administrador, el archivo todavía no se ha creado. Consigo mi "archivo publicado" eco afirmación de que es después de la creación del archivo y se devuelve ningún error.

Estoy haciendo un simple fopen fwrite fclose para guardar el contenido de una variable PHP a un archivo .xml y el archivo sólo se crea cuando el script se ejecuta a través del navegador.

Esto es lo que sucede después de que el bucle xml-construcción:

$feedContent .= "</feed>";

sqlsrv_close( $conn );

echo "<p>feed built</p>";

$feedFile = "feed.xml";

$handler = fopen($feedFile, 'w');

fwrite( $handler, $feedContent );

fclose( $handler );

echo "<p>file published</p>";

Gracias

¿Fue útil?

Solución

Lo más probable es que necesita especificar una ruta absoluta al archivo de alimentación. No está claro exactamente donde está ejecutando la secuencia de comandos de, pero "directorio de trabajo" de la secuencia de comandos es generalmente donde se inició a partir de:

 c:\some\deeply\nested\directory> c:\php5\php.exe d:\inetpub\tools\build.php

será tratar de escribir el archivo de la alimentación en:

 c:\some\deeply\nested\directory\feed.xml

y no en c: \ php5 o D: \ inetpub \ tools

No sé lo que la tarea del programador usos como su directorio por defecto, pero lo más probable es que no es lo que estás esperando.

También comprobar que la cuenta se está ejecutando el trabajo bajo en el programador de tareas tiene permisos de escritura en el directorio de salida. Y siempre comprobar si un fopen() llamada tuvo éxito (FALSE en caso de fallo).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top