-
Notifications
You must be signed in to change notification settings - Fork 201
Error PHP8.1 Azure Storage #347
Description
Which service(blob, file, queue, table) does this issue concern?
Blob Storage
Which version of the SDK was used?
"microsoft/azure-storage-blob": "^1.5"
What's the PHP/OS version?
PHP 8.1.6
What problem was encountered?
Deprecated: substr(): Passing null to parameter Azure/azure-storage-common-php#1 ($string) of type string is deprecated in /DIR_APP/vendor/microsoft/azure-storage-common/src/Common/Internal/Utilities.php on line 615
Steps to reproduce the issue?
Using version of PHP 8.0 or greater, try to create:
$connectionString = sprintf('BlobEndpoint=https://%s.blob.core.windows.net;SharedAccessSignature=%s', $storageAccount, $sasToken);
$blobClient = BlobRestProxy::createBlobService($connectionString);
We are able to pass only BlobEndpoint, but we are not able to pass secondary Endpoing. Then in:
app/code/Hublot/CryptoPayment/Model/Blob/BlobRestProxy.php
$secondaryUri = Utilities::tryAddUrlScheme( $settings->getBlobSecondaryEndpointUri() );
$secondaryUri will be null.
and then in:
vendor/microsoft/azure-storage-common/src/Common/Internal/Utilities.php:603
public static function endsWith($haystack, $needle, $ignoreCase = false)
{
if ($ignoreCase) {
$haystack = strtolower($haystack);
$needle = strtolower($needle);
}
$length = strlen($needle);
if ($length == 0) {
return true;
}
return (substr($haystack, -$length) === $needle);
}
haystack will be null, which will throw exception in php 8.0 or greater version, it should be string.
Have you found a mitigation/solution?
Yes.
One of the option to fix the issue is to be able to change:
vendor/microsoft/azure-storage-common/src/Common/Internal/StorageServiceSettings.php:189
$blobSecondaryEndpointUri = null, to $blobSecondaryEndpointUri = '', or to be able to set $blobSecondaryEndpointUri thry setter.
Other solution is:
app/code/Hublot/CryptoPayment/Model/Blob/BlobRestProxy.php:142
$secondaryUri = Utilities::tryAddUrlScheme(
$settings->getBlobSecondaryEndpointUri()
) ?: '';
Is there a failing request ID related to this problem returned by server? What is it?
No
What is the storage account name and time frame of your last reproduce? (UTC YYYY/MM/DD hh:mm:ss)
I am not able to provide that information.
(If you think some of the information should not be shared publicly, you can e-mail the main Microsoft contributors of the repository instead.)