macos — может ли PHP разрешить псевдоним Mac?

Я использую MAMP и использую PHP для чтения имен всех файлов в данной папке. Я хотел бы создать псевдоним для определенных изображений в другой папке, и чтобы PHP разрешил их по фактическому пути. Я знаю, как создавать символические ссылки, которые будут работать таким образом, но я хотел бы позволить владельцам веб-сайтов, не обладающим техническими знаниями, использовать функции Mac OS, с которыми они знакомы.

Я создал скрипт PHP в той же папке, что и псевдоним, который я назвал test:

<?php
if (is_link ("test")) {
echo "is link";
} else {
echo "is not link";
}
?>

Это отголоски «не ссылка». Я пытался использовать команду fread () по ссылке, но PHP, кажется, зависает. Он не регистрирует ошибку и не отвечает. Я попытался открыть псевдоним в шестнадцатеричном редакторе, чтобы увидеть, что он содержит … но шестнадцатеричный редактор открывает то, что кажется огромным файлом (если псевдоним для файла), или открывает целевую папку (если псевдоним в папку).

Есть ли способ помочь PHP разрешить путь в псевдониме? Есть ли функция AppleScript, которую я могу вызвать?

1

Решение

Скорее всего, вы не имеете в виду фактическую символическую ссылку. Если вы имеете дело с псевдонимами Finder, вы можете используйте обходной путь, найденный в комментариях к is_link документы.

Вот содержание комментария (чтобы избежать ответа только для потомков):

if( getFinderAlias( $someFile , $target ) ) {
echo $target;
}
else {
echo "File is not an alias";
}

function getFinderAlias( $filename , &$target ) {
$getAliasTarget = <<< HEREDOC
-- BEGIN APPLESCRIPT --
set checkFileStr to "{$filename}"set checkFile to checkFileStr as POSIX file
try
tell application "Finder"if original item of file checkFile exists then
set targetFile to (original item of file checkFile) as alias
set posTargetFile to POSIX path of targetFile as text
get posTargetFile
end if
end tell
end try
-- END APPLESCRIPT --
HEREDOC;
$runText = "osascript << EOS\n{$getAliasTarget}\nEOS\n";
$target = trim( shell_exec( $runText ) );
return ( $target == "" ? false : true );
}

Вот некоторые объяснения о символические ссылки против псевдонимов. На самом деле, вы должны избегать использования абстракций Apple и просто создать символическую ссылку:

ln -s /path/to/file /path/to/symlink
1

Другие решения

Других решений пока нет …