The symbolic link feature provides convenient access to frequently used files in a bucket. After you create a symbolic link, you can use it like a Windows shortcut to access files. This topic describes how to create and obtain symbolic links using OSS PHP SDK.
Considerations
The sample code in this topic uses the China (Hangzhou) region (
cn-hangzhou) and its public endpoint as an example. To access OSS from other Alibaba Cloud services in the same region, use the internal endpoint. For more information about the regions and endpoints supported by OSS, see OSS regions and endpoints.To create a symbolic link, you must have the
oss:PutObjectpermission. To obtain a symbolic link, you must have theoss:GetObjectpermission. For more information, see Grant custom permissions to a RAM user.
Sample code
Create a symbolic link
You can use the following code to create a symbolic link.
<?php
// Import the autoloader file to ensure that dependency libraries are loaded correctly.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Define the descriptions for command-line arguments.
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // The region where the bucket is located. (Required)
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // The endpoint. (Optional)
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // The bucket name. (Required)
"key" => ['help' => 'The name of the object', 'required' => True], // The name of the symbolic link. (Required)
"symlink" => ['help' => 'The name of the symlink object', 'required' => True], // The name of the target object for the symbolic link. (Required)
];
// Convert the argument descriptions to the long option format required by getopt.
// Append a colon (:) to each argument to indicate that the argument requires a value.
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Parse the command-line arguments.
$options = getopt("", $longopts);
// Verify that all required arguments are provided.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // Obtain the help information for the argument.
echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
exit(1); // If a required argument is missing, exit the program.
}
}
// Extract values from the parsed arguments.
$region = $options["region"]; // The region where the bucket is located.
$bucket = $options["bucket"]; // The bucket name.
$key = $options["key"]; // The name of the symbolic link.
$symlink = $options["symlink"]; // The name of the target object for the symbolic link.
// Load credentials from environment variables.
// Use EnvironmentVariableCredentialsProvider to read the AccessKey ID and AccessKey secret from environment variables.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Use the default configurations of the SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Set the credential provider.
$cfg->setRegion($region); // Set the region where the bucket is located.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // If an endpoint is specified, set the endpoint.
}
// Create an OSS client instance.
$client = new Oss\Client($cfg);
// Create a PutSymlinkRequest object to create a symbolic link.
$request = new Oss\Models\PutSymlinkRequest(
bucket: $bucket,
key: $key, // The name of the symbolic link.
target: $symlink ,// The name of the target object for the symbolic link.
);
// Execute the operation to create the symbolic link.
$result = $client->putSymlink($request);
// Print the result of the symbolic link creation.
printf(
'status code:' . $result->statusCode . PHP_EOL . // The HTTP status code. For example, 200 indicates that the operation is successful.
'request id:' . $result->requestId . PHP_EOL . // The request ID, which is used to debug or track the request.
'result:' . var_export($result, true) . PHP_EOL // The detailed result of the symbolic link creation.
);
Obtain a symbolic link
You can use the following code to obtain a symbolic link and the name of the target file that the symbolic link points to.
<?php
// Import the autoloader file to ensure that dependency libraries are loaded correctly.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Define the descriptions for command-line arguments.
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // The region where the bucket is located. (Required)
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // The endpoint. (Optional)
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // The bucket name. (Required)
"key" => ['help' => 'The name of the object', 'required' => True], // The name of the symbolic link. (Required)
];
// Convert the parameter descriptions to the long option format required by getopt.
// A colon ":" after each parameter indicates that the parameter requires a value.
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Parse the command-line arguments.
$options = getopt("", $longopts);
// Verify that all required parameters are specified.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // Obtain the help information for the parameter.
echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
exit(1); // If a required parameter is not specified, exit the program.
}
}
// Extract values from the parsed parameters.
$region = $options["region"]; // The region where the bucket is located.
$bucket = $options["bucket"]; // The bucket name.
$key = $options["key"]; // The name of the symbolic link.
// Load credentials from environment variables.
// Use EnvironmentVariableCredentialsProvider to read the Access Key ID and Access Key Secret from environment variables.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Use the default configurations of the SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Set the credential provider.
$cfg->setRegion($region); // Set the region where the bucket is located.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // If an endpoint is provided, set the endpoint.
}
// Create an OSS client instance.
$client = new Oss\Client($cfg);
// Create a GetSymlinkRequest object to obtain the target object of the symbolic link.
$request = new Oss\Models\GetSymlinkRequest(
bucket: $bucket,
key: $key
);
// Execute the operation to obtain the symbolic link.
$result = $client->getSymlink($request);
// Print the result of obtaining the symbolic link.
printf(
'status code:' . $result->statusCode . PHP_EOL . // The HTTP status code. For example, 200 indicates a successful request.
'request id:' . $result->requestId . PHP_EOL . // The request ID, which is used for debugging or tracing requests.
'result:' . var_export($result, true) . PHP_EOL // The detailed result of the obtained symbolic link.
);
References
For sample code on creating symbolic links, see Github sample.
For sample code on obtaining symbolic links, see Github sample.