Pregunta

Por alguna razón, yo quiero servir a mi robots.txt través de un script PHP. Tengo Apache configuración de modo que la petición de archivo robots.txt (infact todas las solicitudes de archivo) terminan en una sola secuencia de comandos PHP.

El código que estoy utilizando para hacer robots.txt es:

echo "User-agent: wget\n";
echo "Disallow: /\n";

Sin embargo, no está procesando los saltos de línea. Cómo robots.txt servidor correctamente, motores (o cualquier cliente) para buscar verlo correctamente? ¿Tengo que enviar algunas cabeceras especiales para archivos txt?

EDIT 1:

Ahora tengo el siguiente código:

header("Content-Type: text/plain");
echo "User-agent: wget\n";
echo "Disallow: /\n";

que todavía no muestra saltos de línea (ver http://sarcastic-quotes.com/robots.txt ).

EDIT 2:

Algunas personas mencionaron su bien y no se muestran en el navegador. Sólo tenía curiosidad de cómo hace esto una pantalla correctamente: http://en.wikipedia.org/robots.txt

EDITAR 3:

He descargado tanto la mía y de Wikipedia a través de wget, y ver esto:

$ file en.wikipedia.org/robots.txt
en.wikipedia.org/robots.txt: UTF-8 Unicode English text

$ file sarcastic-quotes.com/robots.txt
sarcastic-quotes.com/robots.txt: ASCII text

RESUMEN FINAL:

El problema principal fue que no estaba poniendo la cabecera. Sin embargo, hay otro error interno, que está haciendo el Content-Type como html. (Esto se debe a que mi petición es en realidad sirve a través de un proxy interno, pero eso es otro tema).

Algunos de los comentarios que los navegadores no muestran nueva línea eran sólo la mitad-correcta -> los navegadores modernos se muestran correctamente línea, si el tipo de contenido es text / plain. Estoy seleccionando la respuesta que corresponde estrechamente con el problema real y carecía de la idea errónea por encima de un poco engañoso :). Gracias a todos por la ayuda y su tiempo!

gracias

JP

¿Fue útil?

Solución

Sí, se le olvidó preparar el tipo de contenido de la salida a text/plain:

header("Content-Type: text/plain");

Su salida es probable que se envía como HTML, donde una nueva línea se trunca en un espacio, y para mostrar realmente un salto de línea, que necesitaría la etiqueta <br />.

Otros consejos

  1. header('Content-Type: text/plain') es correcta.
  2. Debe llamar a este método antes de nada está escrito a su salida, incluyendo espacios en blanco. Compruebe si hay un espacio en blanco antes de la apertura <?php.
  3. Si su cabecera Content-Type ha sido ajustada a text/plain, no hay ningún navegador en su sano juicio se colapse el espacio en blanco. Ese comportamiento es exclusivo de HTML y formatos similares.
  4. Estoy seguro de que tiene sus razones, pero como regla general, que sirve contenido estático a través de PHP utiliza los recursos de servidor innecesarias. Cada golpe de PHP es típicamente un nuevo proceso de desove y unos pocos megas de memoria. Se puede utilizar Apache directivas de configuración a punto a los diferentes archivos de robots basados ??en cabeceras como User-Agent -. Estaría buscando en ese
  5. Es probable que los motores de búsqueda ignoran la cabecera Content-Type, así que esto no debería ser un problema de todos modos.

Espero que esto ayude.

-n

<?php header("Content-Type: text/plain"); ?>
User-agent: wget
Disallow: /

Por cierto, los saltos de línea están allí muy bien. Son sólo no se muestran en un navegador . Navegadores Cerrar todos los espacios en blanco, incluyendo saltos de línea, a un solo espacio.

deceze$ curl http://sarcastic-quotes.com/robots.txt
User-agent: wget
Disallow: /

Se debe establecer el tipo de contenido del documento que está sirviendo. En el caso de un archivo de texto .txt:

header("Content-Type: text/plain");

La IANA tiene información sobre algunos de los más populares MIME (contenido) tipos .

i estaba teniendo un problema similar y, o bien "\ n", ni PHP_EOL trabajado. Finalmente he utilizado:

header('Content-Disposition: attachment; filename="plaintext.txt"');
header("Content-Type: text/plain");
echo "some data";
echo chr(13).chr(10);

El eco de ambos personajes hizo el truco. Espero que ayuda a alguien.

Adiós anankin

Si está utilizando eco, a continuación, utilizar <br> de nuevas líneas. la función printf es lo que utiliza \ n.

En su caso, el uso de printf porque usted no está utilizando HTML. Creo que esta es la forma correcta de hacer esto, junto con la configuración del tipo MIME para el texto.

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