Для эффективности с очень большими файлами (распространенный в ситуациях с файлом журнала, где можно хотеть использовать хвост), Вы обычно не хотите читать целый файл (даже если Вы действительно делаете это, не читая целый файл в память сразу), Однако, действительно необходимо так или иначе разработать смещение в строках, а не символах. Одна возможность читает назад с, ищут () символ символом, но это очень медленно. Вместо этого лучше для обработки в больших блоках.
у меня есть служебная функция, которую я записал только что для чтения файлов назад, которые могут использоваться здесь.
import os, itertools
def rblocks(f, blocksize=4096):
"""Read file as series of blocks from end of file to start.
The data itself is in normal order, only the order of the blocks is reversed.
ie. "hello world" -> ["ld","wor", "lo ", "hel"]
Note that the file must be opened in binary mode.
"""
if 'b' not in f.mode.lower():
raise Exception("File must be opened using binary mode.")
size = os.stat(f.name).st_size
fullblocks, lastblock = divmod(size, blocksize)
# The first(end of file) block will be short, since this leaves
# the rest aligned on a blocksize boundary. This may be more
# efficient than having the last (first in file) block be short
f.seek(-lastblock,2)
yield f.read(lastblock)
for i in range(fullblocks-1,-1, -1):
f.seek(i * blocksize)
yield f.read(blocksize)
def tail(f, nlines):
buf = ''
result = []
for block in rblocks(f):
buf = block + buf
lines = buf.splitlines()
# Return all lines except the first (since may be partial)
if lines:
result.extend(lines[1:]) # First line may not be complete
if(len(result) >= nlines):
return result[-nlines:]
buf = lines[0]
return ([buf]+result)[-nlines:]
f=open('file_to_tail.txt','rb')
for line in tail(f, 20):
print line
[Редактирование] Добавленная более определенная версия (избегает потребности инвертировать дважды)
если добавить? после index.php он работает?
http://example.com/index.php?/blog/comments
По умолчанию, ваш пример должен работать. Изучите свои конфигурации и удалите .htaccess, поскольку в вашем примере mod_rewrite не используется.
Начать с нуля также поможет вам в обучении;)
У меня была такая же проблема. В итоге я не закрывал ни одной своей первой функции - я остановился на последней}. Так что функция, которую я не закрыл, работала нормально, но все, что происходило после этого, продолжало выдавать мне 404.
Всегда стоит попробовать некоторые из параметров $ config ['uri_protocol'] в application / config / config.php.
/*
|--------------------------------------------------------------------------
| URI PROTOCOL
|--------------------------------------------------------------------------
|
| This item determines which server global should be used to retrieve the
| URI string. The default setting of "AUTO" works for most servers.
| If your links do not seem to work, try one of the other delicious flavors:
|
| 'AUTO' Default - auto detects
| 'PATH_INFO' Uses the PATH_INFO
| 'QUERY_STRING' Uses the QUERY_STRING
| 'REQUEST_URI' Uses the REQUEST_URI
| 'ORIG_PATH_INFO' Uses the ORIG_PATH_INFO
|
*/
$config['uri_protocol'] = 'AUTO';
Некоторые у серверов есть проблемы с разными параметрами, поэтому попробуйте каждый вручную. Возможно, это не сработает в вашем случае, но это спасло меня в прошлом.