Automattic\WooCommerce\Internal\TransientFiles
TransientFilesEngine::create_transient_file
Create a transient file.
Method of the class: TransientFilesEngine{}
No Hooks.
Returns
String. The name of the transient file created (without path information).
Usage
$TransientFilesEngine = new TransientFilesEngine(); $TransientFilesEngine->create_transient_file( $file_contents, $expiration_date ): string;
- $file_contents(string) (required)
- The contents of the file.
- $expiration_date(string|int) (required)
- A string representing the expiration date formatted as "yyyy-mm-dd", or a number representing the expiration date as a timestamp (the time of day part will be ignored).
TransientFilesEngine::create_transient_file() TransientFilesEngine::create transient file code WC 10.8.1
public function create_transient_file( string $file_contents, $expiration_date ): string {
if ( is_numeric( $expiration_date ) ) {
$expiration_date = gmdate( 'Y-m-d', $expiration_date );
} elseif ( ! is_string( $expiration_date ) || ! TimeUtil::is_valid_date( $expiration_date, 'Y-m-d' ) ) {
$expiration_date = is_scalar( $expiration_date ) ? $expiration_date : gettype( $expiration_date );
throw new InvalidArgumentException( "$expiration_date is not a valid date, expected format: YYYY-MM-DD" );
}
$expiration_date_object = DateTime::createFromFormat( 'Y-m-d', $expiration_date, TimeUtil::get_utc_date_time_zone() );
$today_date_object = new DateTime( $this->legacy_proxy->call_function( 'gmdate', 'Y-m-d' ), TimeUtil::get_utc_date_time_zone() );
if ( $expiration_date_object < $today_date_object ) {
throw new InvalidArgumentException( "The supplied expiration date, $expiration_date, is in the past" );
}
$filename = bin2hex( $this->legacy_proxy->call_function( 'random_bytes', 16 ) );
$transient_files_directory = $this->get_transient_files_directory();
$transient_files_directory .= '/' . $expiration_date_object->format( 'Y-m-d' );
if ( ! $this->legacy_proxy->call_function( 'is_dir', $transient_files_directory ) ) {
if ( ! $this->legacy_proxy->call_function( 'wp_mkdir_p', $transient_files_directory ) ) {
throw new Exception( "Can't create directory: $transient_files_directory" );
}
}
$filepath = $transient_files_directory . '/' . $filename;
require_once ABSPATH . 'wp-admin/includes/file.php';
\WP_Filesystem();
$wp_filesystem = $this->legacy_proxy->get_global( 'wp_filesystem' );
if ( false === $wp_filesystem->put_contents( $filepath, $file_contents ) ) {
throw new Exception( "Can't create file: $filepath" );
}
return sprintf(
'%03x%01x%02x%s',
$expiration_date_object->format( 'Y' ),
$expiration_date_object->format( 'm' ),
$expiration_date_object->format( 'd' ),
$filename
);
}