Moodle APIs 4.3
Moodle 4.3.6 (Build: 20240812)
file_system_filedir Class Reference

File system class used for low level access to real files in filedir. More...

Inheritance diagram for file_system_filedir:

Public Member Functions

 __construct ()
 Perform any custom setup for this type of file_system.
 
 add_file_from_path ($pathname, $contenthash=null)
 Add the supplied file to the file system.
 
 add_file_from_string ($content)
 Add a file with the supplied content to the file system.
 
 add_storedfile_to_archive (stored_file $file, file_archive $filearch, $archivepath)
 Add file/directory into archive.
 
 add_to_curl_request (stored_file $file, &$curlrequest, $key)
 Adds this file path to a curl request (POST only).
 
 copy_content_from_storedfile (stored_file $file, $target)
 Copy content of file to given pathname.
 
 cron ()
 Cleanup the trash directory.
 
 extract_to_pathname (stored_file $file, file_packer $packer, $pathname, file_progress $progress=null)
 Extract file to given file path (real OS filesystem), existing files are overwritten.
 
 extract_to_storage (stored_file $file, file_packer $packer, $contextid, $component, $filearea, $itemid, $pathbase, $userid=null, file_progress $progress=null)
 Extract file to given file path (real OS filesystem), existing files are overwritten.
 
 get_content (stored_file $file)
 Get the content of the specified stored file.
 
 get_content_file_handle (stored_file $file, $type=stored_file::FILE_HANDLE_FOPEN)
 Returns file handle - read only mode, no writing allowed into pool files!
 
 get_imageinfo (stored_file $file)
 Returns information about image.
 
 get_local_path_from_storedfile (stored_file $file, $fetchifnotfound=false)
 Get a remote filepath for the specified stored file.
 
 get_psr_stream (stored_file $file)
 Get a PSR7 Stream for the specified file which implements the PSR Message StreamInterface.
 
 get_remote_path_from_storedfile (stored_file $file)
 Get a remote filepath for the specified stored file.
 
 is_file_readable_locally_by_hash ($contenthash, $fetchifnotfound=false)
 Determine whether the file is present on the file system somewhere given the contenthash.
 
 is_file_readable_locally_by_storedfile (stored_file $file, $fetchifnotfound=false)
 Determine whether the file is present on the file system somewhere.
 
 is_file_readable_remotely_by_hash ($contenthash)
 Determine whether the file is present locally on the file system somewhere given the contenthash.
 
 is_file_readable_remotely_by_storedfile (stored_file $file)
 Determine whether the file is present on the local file system somewhere.
 
 is_image_from_storedfile (stored_file $file)
 Attempt to determine whether the specified file is likely to be an image.
 
 list_files ($file, file_packer $packer)
 List contents of archive.
 
 mimetype_from_hash ($contenthash, $filename)
 Retrieve the mime information for the specified stored file.
 
 mimetype_from_storedfile ($file)
 Retrieve the mime information for the specified stored file.
 
 readfile (stored_file $file)
 Output the content of the specified stored file.
 
 remove_file ($contenthash)
 Marks pool file as candidate for deleting.
 
 supports_xsendfile ()
 Returns true if filesystem is configured to support xsendfile.
 
 xsendfile ($contenthash)
 Serve file content using X-Sendfile header.
 
 xsendfile_file (stored_file $file)
 Serve file content using X-Sendfile header.
 

Protected Member Functions

 empty_trash ()
 
 get_contentdir_from_hash ($contenthash)
 Get the content directory for the specified content hash.
 
 get_contentpath_from_hash ($contenthash)
 Get the content path for the specified content hash within filedir.
 
 get_fulldir_from_hash ($contenthash)
 Get the full directory to the stored file, including the path to the filedir, and the directory which the file is actually in.
 
 get_fulldir_from_storedfile (stored_file $file)
 Get the full directory to the stored file, including the path to the filedir, and the directory which the file is actually in.
 
 get_imageinfo_from_path ($path)
 Returns image information relating to the specified path or URL.
 
 get_local_path_from_hash ($contenthash, $fetchifnotfound=false)
 Get the full path for the specified hash, including the path to the filedir.
 
 get_remote_path_from_hash ($contenthash)
 Get the full path for the specified hash, including the path to the filedir.
 
 get_trash_fulldir_from_hash ($contenthash)
 Get the full directory for the specified hash in the trash, including the path to the trashdir, and the directory which the file is actually in.
 
 get_trash_fullpath_from_hash ($contenthash)
 Get the full path for the specified hash in the trash, including the path to the trashdir.
 
 recover_file (stored_file $file)
 Tries to recover missing content of file from trash.
 
 validate_hash_and_file_size ($contenthash, $pathname)
 Validate that the content hash matches the content hash of the file on disk.
 

Static Protected Member Functions

static check_file_exists_and_get_size (string $hashfile)
 Checks if the file exists and gets its size.
 
static get_file_handle_for_path ($path, $type=stored_file::FILE_HANDLE_FOPEN)
 Return a file handle for the specified path.
 
static is_file_removable ($contenthash)
 Check whether a file is removable.
 

Protected Attributes

string $dirpermissions = null
 Default directory permissions for new dirs.
 
string $filedir = null
 The path to the local copy of the filedir.
 
string $filepermissions = null
 Default file permissions for new files.
 
string $trashdir = null
 The path to the trashdir.
 

Detailed Description

File system class used for low level access to real files in filedir.

License
http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later

Member Function Documentation

◆ add_file_from_path()

file_system_filedir::add_file_from_path ( $pathname,
$contenthash = null )

Add the supplied file to the file system.

Note: If overriding this function, it is advisable to store the file in the path returned by get_local_path_from_hash as there may be subsequent uses of the file in the same request.

Parameters
string$pathnamePath to file currently on disk
string$contenthashSHA1 hash of content if known (performance only)
Return values
array(contenthash, filesize, newfile)

Reimplemented from file_system.

◆ add_file_from_string()

file_system_filedir::add_file_from_string ( $content)

Add a file with the supplied content to the file system.

Note: If overriding this function, it is advisable to store the file in the path returned by get_local_path_from_hash as there may be subsequent uses of the file in the same request.

Parameters
string$contentfile content - binary string
Return values
array(contenthash, filesize, newfile)

Reimplemented from file_system.

◆ add_storedfile_to_archive()

file_system::add_storedfile_to_archive ( stored_file $file,
file_archive $filearch,
$archivepath )
inherited

Add file/directory into archive.

Parameters
stored_file$fileThe file to archive
file_archive$filearchfile archive instance
string$archivepathpathname in archive
Return values
boolsuccess

◆ add_to_curl_request()

file_system::add_to_curl_request ( stored_file $file,
& $curlrequest,
$key )
inherited

Adds this file path to a curl request (POST only).

Parameters
stored_file$fileThe file to add to the curl request
curl$curlrequestThe curl request object
string$keyWhat key to use in the POST request
Return values
voidThis needs the fullpath for the storedfile :/ Can this be achieved in some other fashion?

◆ check_file_exists_and_get_size()

static file_system_filedir::check_file_exists_and_get_size ( string $hashfile)
staticprotected

Checks if the file exists and gets its size.

This function avoids a specific issue with networked file systems if they incorrectly report the file exists, but then decide it doesn't as soon as you try to get the file size.

Parameters
string$hashfileFile to check
Return values
int|nullNull if the file does not exist, or the result of filesize(), or -1 if error

◆ copy_content_from_storedfile()

file_system_filedir::copy_content_from_storedfile ( stored_file $file,
$target )

Copy content of file to given pathname.

Parameters
stored_file$fileThe file to be copied
string$targetreal path to the new file
Return values
boolsuccess

Reimplemented from file_system.

◆ cron()

file_system_filedir::cron ( )

Cleanup the trash directory.

Reimplemented from file_system.

◆ extract_to_pathname()

file_system::extract_to_pathname ( stored_file $file,
file_packer $packer,
$pathname,
file_progress $progress = null )
inherited

Extract file to given file path (real OS filesystem), existing files are overwritten.

Parameters
stored_file$fileThe archive to inspect
file_packer$packerFile packer instance
string$pathnameTarget directory
file_progress$progressprogress indicator callback or null if not required
Return values
array|boolList of processed files; false if error

◆ extract_to_storage()

file_system::extract_to_storage ( stored_file $file,
file_packer $packer,
$contextid,
$component,
$filearea,
$itemid,
$pathbase,
$userid = null,
file_progress $progress = null )
inherited

Extract file to given file path (real OS filesystem), existing files are overwritten.

Parameters
stored_file$fileThe archive to inspect
file_packer$packerfile packer instance
int$contextidcontext ID
string$componentcomponent
string$fileareafile area
int$itemiditem ID
string$pathbasepath base
int$useriduser ID
file_progress$progressProgress indicator callback or null if not required
Return values
array|boollist of processed files; false if error

◆ get_content()

file_system::get_content ( stored_file $file)
inherited

Get the content of the specified stored file.

Generally you will probably want to use readfile() to serve content, and where possible you should see if you can use get_content_file_handle and work with the file stream instead.

Parameters
stored_file$fileThe file to retrieve
Return values
stringThe full file content

◆ get_content_file_handle()

file_system::get_content_file_handle ( stored_file $file,
$type = stored_file::FILE_HANDLE_FOPEN )
inherited

Returns file handle - read only mode, no writing allowed into pool files!

When you want to modify a file, create a new file and delete the old one.

Parameters
stored_file$fileThe file to retrieve a handle for
int$typeType of file handle (FILE_HANDLE_xx constant)
Return values
resourcefile handle

◆ get_contentdir_from_hash()

file_system_filedir::get_contentdir_from_hash ( $contenthash)
protected

Get the content directory for the specified content hash.

This is the directory that the file will be in, but without the fulldir.

Parameters
string$contenthashThe content hash
Return values
stringThe directory within filedir

◆ get_contentpath_from_hash()

file_system_filedir::get_contentpath_from_hash ( $contenthash)
protected

Get the content path for the specified content hash within filedir.

This does not include the filedir, and is often used by file systems as the object key for storage and retrieval.

Parameters
string$contenthashThe content hash
Return values
stringThe filepath within filedir

◆ get_file_handle_for_path()

static file_system::get_file_handle_for_path ( $path,
$type = stored_file::FILE_HANDLE_FOPEN )
staticprotectedinherited

Return a file handle for the specified path.

This abstraction should be used when overriding get_content_file_handle in a new file system.

Parameters
string$pathThe path to the file. This shoudl be any type of path that fopen and gzopen accept.
int$typeType of file handle (FILE_HANDLE_xx constant)
Return values
resource
Exceptions
coding_exceptionWhen an unexpected type of file handle is requested

◆ get_fulldir_from_hash()

file_system_filedir::get_fulldir_from_hash ( $contenthash)
protected

Get the full directory to the stored file, including the path to the filedir, and the directory which the file is actually in.

Parameters
string$contenthashThe content hash
Return values
stringThe full path to the content directory

◆ get_fulldir_from_storedfile()

file_system_filedir::get_fulldir_from_storedfile ( stored_file $file)
protected

Get the full directory to the stored file, including the path to the filedir, and the directory which the file is actually in.

Note: This function does not ensure that the file is present on disk.

Parameters
stored_file$fileThe file to fetch details for.
Return values
stringThe full path to the content directory

◆ get_imageinfo()

file_system::get_imageinfo ( stored_file $file)
inherited

Returns information about image.

Information is determined from the file content

Parameters
stored_file$fileThe file to inspect
Return values
mixedarray with width, height and mimetype; false if not an image

◆ get_imageinfo_from_path()

file_system::get_imageinfo_from_path ( $path)
protectedinherited

Returns image information relating to the specified path or URL.

Parameters
string$pathThe full path of the image file.
Return values
array|boolarray that containing width, height, and mimetype or false if cannot get the image info.

◆ get_local_path_from_hash()

file_system_filedir::get_local_path_from_hash ( $contenthash,
$fetchifnotfound = false )
protected

Get the full path for the specified hash, including the path to the filedir.

Parameters
string$contenthashThe content hash
bool$fetchifnotfoundWhether to attempt to fetch from the remote path if not found.
Return values
stringThe full path to the content file

Reimplemented from file_system.

◆ get_local_path_from_storedfile()

file_system_filedir::get_local_path_from_storedfile ( stored_file $file,
$fetchifnotfound = false )

Get a remote filepath for the specified stored file.

Parameters
stored_file$fileThe file to fetch the path for
bool$fetchifnotfoundWhether to attempt to fetch from the remote path if not found.
Return values
stringThe full path to the content file

Reimplemented from file_system.

◆ get_psr_stream()

file_system::get_psr_stream ( stored_file $file)
inherited

Get a PSR7 Stream for the specified file which implements the PSR Message StreamInterface.

Parameters
stored_file$file
Return values
StreamInterface

◆ get_remote_path_from_hash()

file_system_filedir::get_remote_path_from_hash ( $contenthash)
protected

Get the full path for the specified hash, including the path to the filedir.

Parameters
string$contenthashThe content hash
Return values
stringThe full path to the content file

Reimplemented from file_system.

◆ get_remote_path_from_storedfile()

file_system_filedir::get_remote_path_from_storedfile ( stored_file $file)

Get a remote filepath for the specified stored file.

Parameters
stored_file$fileThe file to serve.
Return values
stringfull path to pool file with file content

Reimplemented from file_system.

◆ get_trash_fulldir_from_hash()

file_system_filedir::get_trash_fulldir_from_hash ( $contenthash)
protected

Get the full directory for the specified hash in the trash, including the path to the trashdir, and the directory which the file is actually in.

Parameters
string$contenthashThe content hash
Return values
stringThe full path to the trash directory

◆ get_trash_fullpath_from_hash()

file_system_filedir::get_trash_fullpath_from_hash ( $contenthash)
protected

Get the full path for the specified hash in the trash, including the path to the trashdir.

Parameters
string$contenthashThe content hash
Return values
stringThe full path to the trash file

◆ is_file_readable_locally_by_hash()

file_system::is_file_readable_locally_by_hash ( $contenthash,
$fetchifnotfound = false )
inherited

Determine whether the file is present on the file system somewhere given the contenthash.

Parameters
string$contenthashThe contenthash of the file to check.
bool$fetchifnotfoundWhether to attempt to fetch from the remote path if not found.
Return values
bool

◆ is_file_readable_locally_by_storedfile()

file_system::is_file_readable_locally_by_storedfile ( stored_file $file,
$fetchifnotfound = false )
inherited

Determine whether the file is present on the file system somewhere.

A local copy of the file will be fetched if $fetchifnotfound is tree.

The $fetchifnotfound allows you to determine the expected path of the file.

Parameters
stored_file$fileThe file to ensure is available.
bool$fetchifnotfoundWhether to attempt to fetch from the remote path if not found.
Return values
bool

◆ is_file_readable_remotely_by_hash()

file_system::is_file_readable_remotely_by_hash ( $contenthash)
inherited

Determine whether the file is present locally on the file system somewhere given the contenthash.

Parameters
string$contenthashThe contenthash of the file to check.
Return values
bool

◆ is_file_readable_remotely_by_storedfile()

file_system::is_file_readable_remotely_by_storedfile ( stored_file $file)
inherited

Determine whether the file is present on the local file system somewhere.

Parameters
stored_file$fileThe file to ensure is available.
Return values
bool

◆ is_file_removable()

static file_system::is_file_removable ( $contenthash)
staticprotectedinherited

Check whether a file is removable.

This must be called prior to file removal.

Parameters
string$contenthash
Return values
bool

◆ is_image_from_storedfile()

file_system::is_image_from_storedfile ( stored_file $file)
inherited

Attempt to determine whether the specified file is likely to be an image.

Since this relies upon the mimetype stored in the files table, there may be times when this information is not 100% accurate.

Parameters
stored_file$fileThe file to check
Return values
bool

◆ list_files()

file_system::list_files ( $file,
file_packer $packer )
inherited

List contents of archive.

Parameters
stored_file$fileThe archive to inspect
file_packer$packerfile packer instance
Return values
arrayof file infos

◆ mimetype_from_hash()

file_system::mimetype_from_hash ( $contenthash,
$filename )
inherited

Retrieve the mime information for the specified stored file.

Parameters
string$contenthash
string$filename
Return values
stringThe MIME type.

◆ mimetype_from_storedfile()

file_system::mimetype_from_storedfile ( $file)
inherited

Retrieve the mime information for the specified stored file.

Parameters
stored_file$fileThe stored file to retrieve mime information for
Return values
stringThe MIME type.

◆ readfile()

file_system::readfile ( stored_file $file)
inherited

Output the content of the specified stored file.

Note, this is different to get_content() as it uses the built-in php readfile function which is more efficient.

Parameters
stored_file$fileThe file to serve.
Return values
void

◆ recover_file()

file_system_filedir::recover_file ( stored_file $file)
protected

Tries to recover missing content of file from trash.

Parameters
stored_file$filestored_file instance
Return values
boolsuccess

◆ remove_file()

file_system_filedir::remove_file ( $contenthash)

Marks pool file as candidate for deleting.

Parameters
string$contenthash

Reimplemented from file_system.

◆ supports_xsendfile()

file_system::supports_xsendfile ( )
inherited

Returns true if filesystem is configured to support xsendfile.

Return values
bool

◆ validate_hash_and_file_size()

file_system::validate_hash_and_file_size ( $contenthash,
$pathname )
protectedinherited

Validate that the content hash matches the content hash of the file on disk.

Parameters
string$contenthashThe current content hash to validate
string$pathnameThe path to the file on disk
Return values
arrayThe content hash (it might change) and file size

◆ xsendfile()

file_system::xsendfile ( $contenthash)
inherited

Serve file content using X-Sendfile header.

Please make sure that all headers are already sent and the all access control checks passed.

Parameters
string$contenthashThe content hash of the file to be served
Return values
boolsuccess

◆ xsendfile_file()

file_system::xsendfile_file ( stored_file $file)
inherited

Serve file content using X-Sendfile header.

Please make sure that all headers are already sent and the all access control checks passed.

This alternate method to xsendfile() allows an alternate file system to use the full file metadata and avoid extra lookups.

Parameters
stored_file$fileThe file to send
Return values
boolsuccess

The documentation for this class was generated from the following file: