Неверное имя файла ярлыка linux

Неверное имя файла шрифта (imagettfbox)

Этот вопрос задавался снова и снова, но я не смог найти правильный ответ на мою проблему. Как небольшое примечание, весь код работал отлично, прежде чем мы переместили файл класса из /application/lib/class to/library/class. Я попытался сыграть с GDFONTPATH, относительными, абсолютными путями с расширением файла и без него безрезультатно. Вот некоторые из строк, которые мы пробовали до сих пор:

putenv('GDFONTPATH=' . realpath(dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'fonts')); /*1*/ $FontName = dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'fonts'.DIRECTORY_SEPARATOR.basename($FontName,'.ttf'); /*2*/ $FontName = '\pChart\fonts\\'.basename($FontName); /*3*/ $FontName =basename($FontName); $coords = imagettfbbox($FontSize, 0, $FontName, $Text); 

Несколько комбинаций этих попыток также использовались безрезультатно. Я действительно недоволен этой проблемой, поскольку # 1, когда echo’ed дает полный путь, который открывает правильный файл шрифта, если он скопирован/вставлен в win explorer. Это может помочь узнать абсолютный путь к файлу, который получает ошибку и путь к имени шрифта.

C:\wamp\www\application_bundle\Library\pChart\class\pImage.class.php C:\wamp\www\application_bundle\Library\pChart\fonts\arialuni.ttf 

Мы сталкиваемся с этой проблемой на всех платформах разработчиков (Win, Mac и Linux). PHP 5.3.13 Благодарим вас за помощь. Изменить: Кажется, что файл не найден/сервер не смотрит в нужную папку. Если кто-то может помочь устранить проблему, указав, как определить, какой путь пытается открыть GD, действительно помощь.

Вы пробовали косую черту, верно? PHP на Windows понимает и то и другое, но что-то глубокое в GD может и не быть.

Сегодня мы попытались использовать другой шрифт, обновить файлы библиотеки и до сих пор без изменений.

@Salketer Очень трудно (я боюсь, даже невозможно) решить эту проблему, потому что мы не можем воспроизвести ошибку, но я могу сказать, что я буду делать в этой ситуации. На вашем месте я бы села и записала каждую мелочь (даже если вы думаете, что она не связана с проблемой), которая изменилась с рабочей версии, а затем проанализировала бы пошагово.

4 ответа

Мы выяснили, как заставить его работать.

Короче говоря, мы включали файл класса, а затем вызывали методы для записи текста. Мы делали что-то вроде этого:

$classPath = 'pChart/'; include($classPath.'/class/pImage.class.php'); //. inside the pImage.class we passed font like this: $FontName = $classPath.'/fonts/arialuni.ttf'; imagettfbbox($FontSize, 0, $FontName, $Text) 

Это не сработало, что мы делали до или после. Пока мы не изменили $classPath на

Читайте также:  Hello, Nginx!

Обратите внимание, что они (или должны) указывать точно в ту же папку, что и код, выполняемый из файла в корне библиотеки.

Мы пытались найти, почему абсолютные пути не работали, но не могли воспроизвести ошибку в изолированной среде, поэтому в нашей архитектуре есть что-то подозрительное.

Я знаю, что на это был дан ответ и принят, но я не видел, чтобы кто-то задумывался о том, почему это решение работает и что было неправильно в первую очередь.

Краткое описание проблемы

Текущая рабочая директория устанавливается в точке php, которая обрабатывает запрос, и все относительные пути разрешаются на основе текущего рабочего каталога, а не каталога файла, на который указан путь.

Длинное описание проблемы

Относительные пути в php разрешаются на основе текущего рабочего каталога.

В целях тестирования вы всегда можете увидеть, что представляет собой текущий рабочий каталог, вызывая getcwd

Это значение изначально поступает на http-запрос в качестве каталога, содержащего файл, который веб-сервер первоначально передал запросу на php.

Так, например, если вы перейдете к http://www.mydomain.com/index.php, текущий рабочий каталог будет таким же, как и корень документа ( $_SERVER[«DOCUMENT_ROOT»] )

Для запроса CLI cwd — это каталог, в котором вы находитесь, когда вы выполняете команду. Поэтому, если я нахожусь в /home/orangepill , и я запустил /usr/bin/php /path/to/file.php , cwd будет /home/orangepill .

Это вызывает проблему для относительных ссылок на файлы внутри включенных файлов.

Давайте рассмотрим этот пример.

  • Клиент перейдет на сайт www.mydomain.com
  • Apache имеет index.php, установленный в директиве DirectoryIndex, и apache находит файл index.php в корневом каталоге документа. Текущий рабочий каталог установлен в корень документа.
  • /index.php содержит строку include «library/myclass.php»; $ _SERVER [ «DOCUMENT_ROOT» ]. «/Library/myclass.php» существует и все хорошо
  • myclass.php содержит строку include(«myclass_helper.php»); , которая разрешает $_SERVER [ «DOCUMENT_ROOT» ]. «/myclass_helper.php». (помните, что относительные ссылки разрешаются относительно текущего рабочего каталога)
  • $_SERVER[«DOCUMENT_ROOT»].»/myclass_helper.php» не существует на самом деле в $_SERVER[«DOCUMENT_ROOT»].»/library/myclass_helper.php»

Вероятно, вы, но ждите. Я испытал различное поведение в своих сценариях, включив его в include. Причина этого заключается в том, что include и require language constructs (вместе с несколькими другими командами файловой системы) пытаются включить относительные пути из каждого из путей, указанных в директиве include php. Итак, в приведенном выше примере, если библиотечная директория с корнем документа существовала внутри включенных путей, тогда все будет работать так, как ожидалось.

Читайте также:  Bullzip pdf printer linux

Оптовое решение для требуемых файлов относительно текущего файла состоит в том, чтобы структурировать ваши пути include, используя контекстную константу __DIR__ . Таким образом, вы использовали бы include __DIR__.»/myclass_helper.php»; ( include dirname(__FILE__).»/myclass_helper.php в средах pre PHP 5.3), и во время выполнения это фактически превратило бы ваш относительный путь в абсолютный путь, основанный на местоположении файла, делающего include.

Для обычных включенных каталогов я привык задавать несколько часто используемых мест для использования с относительными ссылками файловой системы. например

define ("APPLICATION_PATH", realpath($_SERVER["DOCUMENT_ROOT"]."/application"); define ("LIBRARY_PATH", realpath($_SERVER["DOCUMENT_ROOT"]."/library"); define ("CONFIG_PATH", APPLICATION_PATH."/etc/"; 

Это дает вам множество опорных точек для включения путей относительно.

Спасибо за ваш ответ. Это заслуживает некоторого внимания. Но здесь проблема не должна быть такой же, как описано . Включение файла относительно пути включения работает. Файл pChart был правильно включен, используя просто ‘pChart /’, так как он находится в библиотеке, но шрифт будет найден, только если мы включим файл, используя ‘../library/pChart’. Если я все еще что-то упускаю, это не имеет для нас смысла.

Это указывало бы на то, что текущим рабочим путем был каталог, совместно использующий родителя с каталогом библиотеки. Где находится путь к файлу php, который первым обработал запрос apache.

index.php, получившему запрос, должен был получить доступ к этому пути от родителя библиотеки: ./app1/www/

Источник

Как изменить значок для определенного типа файла?

Я пытаюсь изменить значок для application/x-hwp файлы. Я добавил иконки в нужные места и проверил их с помощью assoGiate (после прочтения этой темы). Это показывает, что мой нужный значок связан с типом файла. Тем не менее, Наутилус все еще показывает старую икону. Как я могу заставить Наутилус показывать правильный значок?

4 ответа

Вот набор инструкций, которые должны получить пользовательский значок для файлов hwp.

    Проверьте, существует ли тип MIME: grep ‘hwp’ /etc/mime.types

sudo cp PathToIcon/application-x-hwp.svg /usr/share/icons/gnome/scalable/mimetypes 

Основная хитрость заключается в том, чтобы правильно узнать, где находятся реальные значки.
Чтобы определить это, давайте проанализируем значки HTML. Соглашение об именах для значков такое же, как и для MIME-типа, только / заменяется на — и заглавные буквы не допускаются. Т.е. MIME-тип, скажем, text/x-changelog будет иметь иконку с именем text-x-changelog.svg (или же png ). MIME-тип для HTML text/html , Так что его иконка будет text-html.* Если мы запустим команду

find /usr/share/icons/ -type f | grep 'text-html\.' 

мы получим несколько мест, где расположены эти иконки:

/usr/share/icons/Humanity/mimes/ /usr/share/icons/gnome/NNxNN/mimetypes/ /usr/share/icons/HighContrast/scalable/mimetypes/ 

Если мы посетим каждого из них с Наутилусом, мы увидим, что Humanity/ папка содержит наши текущие иконки, gnome/ — некоторые старые. HighContrast/ нас не интересует. Таким образом, чтобы изменить какой-либо значок, мы должны заменить значки, расположенные в Humanity/ папка.
Также обратите внимание, что text-html.svg значки, которые можно масштабировать и которые должны быть помещены в scalable вложенные папки (что должно быть логично) вместо этого помещаются в папки разных размеров, так же, как растровые файлы PNG.

Читайте также:  Pid текущего процесса linux

После замены значков (во всех подпапках в соответствии с их размерами) на нужные необходимо обновить кеш значков:

sudo gtk-update-icon-cache /usr/share/icons/Humanity 

Есть еще один способ определить приоритетность схем значков — проверить их index.theme файлы. Если мы посмотрим внутрь /usr/share/icons/Humanity/index.theme , посмотрим:

Это означает, что значки из gnome а также hicolor папки будут иметь меньший приоритет, чем папки из Humanity , Это объясняется здесь.
Как ни странно, Наутилус не подчиняется этим правилам наследования. Когда я добавил новый MIME-тип, я попытался поместить его значки в /usr/share/icons/gnome/ , /usr/share/icons/hicolor , ~/.local/share/icons/hicolor Обновление иконки базы на каждом шаге — все напрасно. Эти значки правильно отображались в assogiate на первой вкладке, но никогда в Наутилусе. Но когда я поместил их в Humanity папки и обновленные иконки базы данных, они появились сразу.

NB Все это относится к теме значков по умолчанию. Если вы используете какую-то собственную тему значков, вы должны проверить, где находятся настоящие значки, и вместо этого добавить / изменить значки. Также в более новых дистрибутивах эти правила наследования могут измениться. Затем вы должны найти новую папку, в которой хранятся фактические значки (если это не так Humanity больше), как объяснено ранее.

Источник

Оцените статью
Adblock
detector