Cita: debe ser posible escribir ese directorio. Para eso, ¿puedo subir los archivos a un directorio cualquiera dentro del document_root (como hago ahora) y luego moverlos con move_uploaded_file() a un directorio de fuera del document_root?
Cuando haces tu move_uploaded_file() puedes mover directamente el archivo que queda en el "temporal" donde PHP los deja al subirlo por HTTP hacia cualquier directorio de tu servidor que tenga permisos de escritura y que PHP no esté limitado para su acceso (con restricciones tipo open_base_dir y cosas así ..).
Cita: Mi idea era tener 2 subdirectorios al mismo nivel, uno publico y otro restringido, y que al restringido se pudiera acceder de alguna forma si se ha habierto una sesión y se está correctamente autentificado.
Bueno .. independientemente que tengas un script en PHP que lea el archivo y lo entrege al cliente (vía header() y readfile() y afines) .. los permisos que des a tus usuarios los defines en tu programación en el archivo (script) que destines para la descarga de archivos.
Cita: ¿Es posible hacer lo que quiero sin recurrir a la carpeta fuera del document_root?
Parace que con un .htaccess y comandos tipo "allow from ..." de Apache (supongo que usas Apache como servidor HTTP) podrías limitar los accesos de tus archivos a sólo "localhost" como HOST .. algo tipo (no estoy seguro si será del todo correcto .. verificalo en un manual de Apache o bien en el foro de "Servidores web -> Apache"):
<Limit GET POST PUT>
order deny,allow
deny from all
allow from 127.0.0.1
</Limit>
Es decir .. sólo autorizas a la "IP" 127.0.0.1 (= a Localhost) para acceder a ese directorio ..por ende sólo un script tuyo PHP que corra en ese servidor podría leer/abrir tu archivo .. no desde una llamada por HTTP ..
Un saludo,