PHP 可以解析 Mac 别名吗?
Can PHP resolve a Mac alias?
我是 运行 MAMP 并使用 PHP 读取给定文件夹中所有文件的名称。我想为另一个文件夹中的某些图像创建一个别名,并让 PHP 将它们解析为它们的实际路径。我知道如何创建以这种方式工作的 symlinks,但我希望允许不懂技术的网站所有者使用他们熟悉的 Mac OS 功能。
我在与我命名为 test
:
的别名相同的文件夹中创建了一个 PHP 脚本
<?php
if (is_link ("test")) {
echo "is link";
} else {
echo "is not link";
}
?>
这与 "is not link" 相呼应。我尝试在 link 上使用 fread() 命令,但 PHP 似乎挂起。它既不记录错误也不响应。我曾尝试在十六进制编辑器中打开别名以查看它包含的内容...但是十六进制编辑器打开的文件似乎是一个巨大的文件(如果别名是文件),或者打开目标文件夹(如果别名是到文件夹)。
有没有办法帮助PHP解析别名中的路径?有我可以调用的 AppleScript 函数吗?
您可能指的不是实际的符号 link。如果您正在处理 Finder 别名,您可以 use the workaround found in the comments for the is_link
docs.
以下是评论的内容(避免后代只回答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 );
}
这里有一些关于symlinks vs. aliases. Really though, you should avoid using Apple's abstractions and just create a symlink的解释:
ln -s /path/to/file /path/to/symlink
我是 运行 MAMP 并使用 PHP 读取给定文件夹中所有文件的名称。我想为另一个文件夹中的某些图像创建一个别名,并让 PHP 将它们解析为它们的实际路径。我知道如何创建以这种方式工作的 symlinks,但我希望允许不懂技术的网站所有者使用他们熟悉的 Mac OS 功能。
我在与我命名为 test
:
<?php
if (is_link ("test")) {
echo "is link";
} else {
echo "is not link";
}
?>
这与 "is not link" 相呼应。我尝试在 link 上使用 fread() 命令,但 PHP 似乎挂起。它既不记录错误也不响应。我曾尝试在十六进制编辑器中打开别名以查看它包含的内容...但是十六进制编辑器打开的文件似乎是一个巨大的文件(如果别名是文件),或者打开目标文件夹(如果别名是到文件夹)。
有没有办法帮助PHP解析别名中的路径?有我可以调用的 AppleScript 函数吗?
您可能指的不是实际的符号 link。如果您正在处理 Finder 别名,您可以 use the workaround found in the comments for the is_link
docs.
以下是评论的内容(避免后代只回答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 );
}
这里有一些关于symlinks vs. aliases. Really though, you should avoid using Apple's abstractions and just create a symlink的解释:
ln -s /path/to/file /path/to/symlink