Indirilebilir bir metin dosyası yazdırmak için PHP Kullanımı

5 Cevap php

Benim komut dosyası içine geçirilen bilgilere göre Htaccess bir dizi kurallar koyar ve kullanıcı içine yazdırılan kuralları ile indirilebilir metin dosyası verir. Fikir bir yönetici, bazı form bilgilerini doldurur indirilebilir bir bağlantıyı tıkladığında, içeride çıktı kurallar ile bir metin dosyasını alır, dosya açılır, kopyalar kuralları ve bunların etki htaccess dosyasına yapıştırır olmasıdır.

Ben bu kuralları üreten komut araya başardınız. Ancak, metin dosyası bunu yazdırmak tüm satır karakterleri görmezden görünüyor. Sekmeler çalışır, ancak newlines yok. Ben header () işlev çağrıları ile istimal kodlama ile ilgili bir şey olmalı, ama ben yanlış yapıyorum emin değilim. Googling hiçbir miktarı olarak doğru yönde bana gelin gibiydi. Herhangi bir giriş mutluluk duyacağız.

İşte kod:

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="htaccess.txt"'); 
header('Content-Transfer-Encoding: binary');

$id = addslashes( $_GET['id']);
$location = addslashes( $_GET['location'] ); 
$location = substr($location, strpos($location, '/', 9 ) + 1 ) . ( ( substr( $location, strlen($location) - 1 ) == '/' ) ? '' : '/' );
$regEx = '([0-9a-zA-Z-_]*)';
$lines = array();

for( $x = 0; $x < 10; $x++ ) {
    $line = 'RewriteRule ^' . $location;
    for( $y = 1; $y <= $x; $y++ )
    	$line .= $regEx . '/';
    $line .=  '*$' . "\t\t\t\t\t";
    $line .= "http://localhost/redirect.php?ring=$id";
    $line .= ( $x >= 1 ) ? '&link=$1' : '';
    $line .= ( $x > 1 ) ? '&tag' . ( $x - 1 ) . '=$' . $x . ' [NC]' . "\n" : "\n";
    $lines[] = $line;
}

foreach( $lines as $line )
    echo $line;

5 Cevap

Eğer bir windows sistemi veya Unix sistem üzerinde test ediyoruz? Ben Unix sistemleri sistemleri mutlaka pencere daha metin dosyaları farklı çizgi biten karakterler kullanmak olduğunu hatırlar gibiyim.

Wikipedia anlaşılacağı

"Another common problem is the use of '\n' when communicating using an Internet protocol that mandates the use of ASCII CR+LF for ending lines. Writing '\n' to a text mode stream works correctly on Windows systems, but produces only LF on Unix, and something completely different on more exotic systems. Using "\r\n" in binary mode is slightly better, as it works on many ASCII-compatible systems, but still fails in the general case. One approach is to use binary mode and specify the numeric values of the control sequence directly, "\x0D\x0A"."

http://en.wikipedia.org/wiki/Newline

Windows her zaman anlamak "\n". Değil , Windows "\r\n" satır sonları için varsayılan olarak kullanır.

"\r\n" yerine "\n" koyarak deneyin

Linux: \n
Mac: \r
Win: \n\r

Onlar benim için çalışmak. Eğer bir windows makinede geliştiriyoruz? Eğer öyleyse kullanmak isteyebilirsiniz \ r \ n ya da daha iyisi, çevre-agnostik olduğu sabit PHP_EOL.

Şu anda biraz bu iki başlıklarıyla ilgili şaşkın:

Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

Genel olarak, oktet-stream ikili yürütülebilir için kullanılır. Içeriği düz metin olarak, ben de "ikili" için kodlamayı ayarlama herhangi bir anlam görmüyorum.

Bu hem UNIX derviates yanı sıra Microsoft Windows makinelerde çalışır gibi satır sonu için \ r \ n kullanımı güvenlidir.

Içerik türü için olduğu gibi, ben senin durumunda "metin / düz" olarak öneriyoruz.