Coding standards
Security in ResourceSpace
Developer reference
- Project structure
- Database schema
- Fixed list fields
- Debugging ResourceSpace
- Writing your own plugins
- Context help links
- Custom fields ("user" defined)
- Query caching
- All user permissions
- Client side API calls
- Modals
- Sending user notifications
- Progressive Web App
- Managing (PHP) code dependencies
- Managing (JS) code dependencies
- OpenAPI documentation
- Automated Testing
Database
- Table: activity_log
- Table: annotation
- Table: annotation_node
- Table: api_log
- Table: collection
- Table: collection_keyword
- Table: collection_log
- Table: collection_resource
- Table: collection_savedsearch
- Table: comment
- Table: daily_stat
- Table: dash_tile
- Table: dynamic_tree_node
- Table: external_access_keys
- Table: filter
- Table: filter_rule
- Table: filter_rule_node
- Table: ip_lockout
- Table: job_queue
- Table: keyword
- Table: keyword_related
- Table: mail_log
- Table: message
- Table: node
- Table: node_keyword
- Table: plugins
- Table: preview_size
- Table: report
- Table: report_periodic_emails
- Table: report_periodic_emails_unsubscribe
- Table: request
- Table: research_request
- Table: resource
- Table: resource_alt_files
- Table: resource_custom_access
- Table: resource_dimensions
- Table: resource_keyword
- Table: resource_log
- Table: resource_node
- Table: resource_related
- Table: resource_type
- Table: resource_type_field
- Table: resource_type_field_resource_type
- Table: search_log
- Table: site_text
- Table: slideshow
- Table: sysvars
- Table: tab
- Table: user
- Table: user_collection
- Table: user_dash_tile
- Table: user_message
- Table: user_preferences
- Table: user_rating
- Table: user_report
- Table: user_userlist
- Table: usergroup
- Table: usergroup_collection
- Table: usergroup_dash_tile
User api session functions
Geolocation functions
Storage test functions
storage_test_path()
Description
Validate a manifest path and every existing ancestor without following symlinks.The private directory is only ever created exclusively with mode 0700.
@throws RuntimeException On changed storage, unsafe paths, symlinks or non-regular files.
Parameters
| Column | Type | Default | Description |
|---|---|---|---|
| $state | array | Server-owned recovery state. | |
| $relative | string | Fixed manifest path, or empty for the private directory itself. | |
| $state['id'] | |||
| $manifest['dirs'] | |||
| true |
Return
| string | Absolute path within the current asset filestore. |
Location
include/storage_test_functions.php lines 67 to 95
Definition
function storage_test_path(array $state, string $relative = ''): string
{
$manifest = storage_test_manifest();
if (
!preg_match('/\A[a-f0-9]{32}\z/D', $state['id'])
|| $state['root'] !== storage_test_root()
|| ($relative !== '' && !isset($manifest['files'][$relative]) && !in_array($relative, $manifest['dirs'], true))
) {
throw new RuntimeException('storage_test_unsafe');
}
$path = $state['root'] . '/.rs-storage-test-' . $state['id'];
$parts = $relative === '' ? [] : explode('/', $relative);
foreach (array_merge([''], $parts) as $part) {
if ($part !== '') {
$path .= '/' . $part;
}
clearstatcache(true, $path);
if (is_link($path)) {
throw new RuntimeException('storage_test_unsafe');
}
if (file_exists($path)) {
$stat = lstat($path);
if ($stat === false || (!is_dir($path) && (!is_file($path) || $stat['nlink'] !== 1))) {
throw new RuntimeException('storage_test_unsafe');
}
}
}
return $path;
}
This article was last updated 13th November 2026 16:05 Europe/London time based on the source file dated 13th November 2026 11:40 Europe/London time.