PHP değişkeni içine kıvırmak stdout'unu yakalayan

4 Cevap php

Task

Bir web sunucusuna bir uzak medya işleme sunucusundan ikili dosyaları indiriliyor.

This works but I cannot capture the curl stdout output

$ Result = shell_exec ('curl-v http://domain.com/images/dir/dir/dir/file.jpg - kullanıcı adı: parola-o / usr / www / htdocs / images / dir / dir / dir / file.jpg');

Note: I have had no luck using the PHP curl wrapper methods for this task, partly because I've never used PHP curl wrappers for FTP downloads.

Question Can someone explain how to capture the output from the command that I am shelling out to or a simple example using PHP curl wrappers?

İşte ne denedim ve ben stumped kısmı hedef sunucu üzerine yerleştirilen yeni bir dosya almak için nasıl - CURLOPT_FILE hattı yanlış hattı. Ben, bir saplama dosyası oluşturmak açmak ve sonra ona yazmak zorunda istemiyorum.

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $ftpserver.$file['directory'].$filename); #input
curl_setopt($curl, CURLOPT_FILE, $dest); #output
curl_setopt($curl, CURLOPT_USERPWD, "$user:$password");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);

Teşekkürler

4 Cevap

Bu stdout çıkış yönlendirme ile sabit: 2> & 1

So this works: $result = shell_exec('curl -v http://domain.com/images/dir/dir/dir/file.jpg --user username:password -o /usr/www/htdocs/images/dir/dir/dir/file.jpg 2>&1');

Bu PHP kıvırmak sarmalayıcıları kullanmak edebilmek için harika olurdu ama o kaynak makinesinde bir taslaktır dosyasını açarak ve daha sonra yazma anlamına gelir eğer. Kıvırmak komut satırı sürümü sadece güzel ve düzgün, dosya üzerinde taşır. Herkes PHP sarma kullanarak yapmaya çalışıyorum ne yapmak nasıl biliyorsa, ben bunu nasıl görmek isterdim.

Göre a comment PHP kılavuzda, dosyanın önce kıvırmak akışı VE dosya işleyicisi kapatmak için emin olmalıdır düzgün yazılmış. Ben arama amaçlı burada örnek kopyalamak olacak:

<?php

$fh = fopen('/tmp/foo', 'w');
$ch = curl_init('http://example.com/foo');
curl_setopt($ch, CURLOPT_FILE, $fh);
curl_exec($ch);
curl_close($ch);

# at this point your file is not complete and corrupted

fclose($fh);

# now you can use your file;

read_file('/tmp/foo');

?>

CURLOPT_RETURNTRANSFER curl_exec sonucu (as) getirilen sonuçlarını döndürmek için kıvırmak söyler gibi Ayrıca, ben, CURLOPT_FILE ile CURLOPT_RETURNTRANSFER kullanarak tartışırlar olacaktır. Muhtemelen gerekmez, sadece bir dosyaya yazıyoruz.

$ Dest ile açılan bir dosya kaynak olması gerekir

$dest = fopen("filename.ext", "w");

Bu sizin için çalışır?

Bunu yapmak için bir yol ob_start() ile olduğunu düşünüyorum.

ob_start();
curl_exec($curl);
$result = ob_get_clean();