Neden PHP komut dosyası komut satırından veya görev zamanlayıcısı üzerinden sunucuya 2008 tarihinde dosyası yazmak canâ € ™ t?

1 Cevap php

Ben serverfault.com ilgili bir soru yarattı, ve ben burada sormak tavsiye edilmiştir.

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

Ben bir PHP komut dosyası var. Bir tarayıcıyı kullanmak zaman iyi çalışır. Bu aynı dizinde bir XML dosyası yazar. Komut dosyası çalıştırmak için ~ 60 saniye sürer ve sonuç XML dosyası ~ 16 MB.

Ben Windows Server Web edition SP1 64 bit üzerinde FastCGI yoluyla PHP 5.2.13 çalıştırıyorum.

Kod SQL sunucusundan envanter çeker, üçüncü bir parti için bir XML dosyası oluşturmak için bir döngü çalışır.

Php.exe \ php5 \: Ben c çalıştırmak için görev zamanlayıcı bir görev yarattı "D: \ inetpub \ tools \ build.php"

Görev zamanlayıcı komut bir tarayıcıda çalıştırmak için ne kadar sürer yaklaşık bir dakika, bir time lapse gösterir.

Hiçbir hata döndürdü, ama hiçbir dosya oluşturulur.

Ben zamanlanmış görev özelliklerinde bir değişiklik yapmak her zaman bir kullanıcı, şifre kutusu gelir ve ben yönetici hesabı parolasını girin.

Ben bir komut satırında bu aynı yol ve argümanı çalıştırırsanız o hata değil ve dosya oluşturmak değil.

Ben doğru bir yönetici olarak çalıştırmak komut istemini tıkladığınızda, dosya hala yaratılmış değildir. Ben bu dosya oluşturulduktan sonra ve hiçbir hata döndürdü benim echo ifadesi "yayınladı dosyası" olsun.

Ben bir. Xml dosyasına php değişkenin içeriğini kaydetmek için basit bir fopen fwrite fclose yapıyorum, ve komut tarayıcısı üzerinden çalıştırdığınızda dosyası sadece oluşturulan alır.

İşte xml-bina döngü sonra ne olur:

$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>";

Teşekkürler

1 Cevap

Büyük olasılıkla sizin besleme dosyasının mutlak bir yol belirtmeniz gerekir. Sizden scriptinizi tam olarak nerede belli değil, ama o başladı nerede betiğin "çalışma dizini" genellikle:

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

besleme dosyası yazmak için çalışıyor olacak:

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

değil c: \ php5 veya d: \ inetpub \ araçları

Ben görev zamanlayıcı varsayılan dizin olarak kullandığı bilmiyorum, ama büyük olasılıkla bunu bekliyorsanız değil.

Ayrıca Görev Zamanlayıcı altında iş çalıştırıyorsanız hesap çıktı dizinin izinlerini yazmak olduğunu kontrol edin. Bir fopen() denilen (başarısızlık durumunda FALSE döndürür) başarılı olmadığını ve her zaman kontrol edin.