検索
ホームページバックエンド開発PHPチュートリアル探讨fckeditor在Php中的配置详解_php技巧

前言:
  FCKeidtor是个国外的多语言编辑器,你可以对其配置文件进行简单修改使之支持目前常用Web开发语言的应用,下面我就讲讲FCKeditor的最新版本2.4.2在php的具体配置过程,有不足和出错的地方,欢迎指正。

精简:
  正因为这个编辑器是支持多语言的,所以首先我们针对使用对其做相应的冗余文件删除。

1、临时文件及文件夹删除:从根目录下开始删除一切以“_”开头的文件及文件夹,因为他们为临时文件和文件夹。删除这类临时文件及文件夹之后,我们还要删除一些根目录下的多余文件,根目录下我们只保留fckconfig.js(配置文件)、fckeditor.js(js方式调用文件)、fckeditor.php(php方式调用文件,新版本通过该文件统一调用php4或者php5的调用文件,fckeditor_php4.php/fckeditor_php5.php你可以根据自己服务器使用的情况删减,建议都保留)、fckeditor_php4.php(php4的调用文件)、fckeditor_php5.php(php5的调用文件)、fckstyles.xml(样式)、fcktemplates.xml(模板)文件和editor文件夹。
2、editor/lang目录:存放的是多语言配置文件,因为我们只可能用到en和zh-cn(简体中文)所以,根据我的选择,我删掉其他的语言配置文件。
3、editor/skins界面目录:默认带有三个界面(default:默认界面,加载速度相对较快;office2003:相对pp的界面,不过速度确实要慢些;silver:银白色界面,加载速度也相对较快),可以自行决定是否删除其中一两个。
4、editor/filemanager/browser/default/connectors目录:存放编辑器所支持的Web动态语言,我们以php为例所以保留php目录,test.html文件可以帮助你查看某语言下的上传设置等(具体上传设置我将在后面的配置作较为详细讲解),可以自行决定是否删除。
5、editor/filemanager/upload目录:同理。
到此精简完成,你会发现整个编辑器确实“瘦身”不少,呵呵

基本配置:
下面我开始对编辑器进行简单配置(并非每步都必须,可根据自己的需要参考修改):
1、默认语言
打开fckconfig.js文件(注意此文件是utf-8编码哦),找到FCKConfig.AutoDetectLanguage = true ;(第56行)此句作用为自动检测语言,默认为true,即表示编辑器会根据系统语言自动检测加载相应的语言,我们将其改为false,不让其检测,然后将FCKConfig.DefaultLanguage = 'en';(编辑器默认语言,第57行)改为简体中文"zh-cn"。
2、字体列表
依然打开fckconfig.js,因为此编辑器为外国人编写,所以默认不提供中文字体,我们为其加入,找到FCKConfig.FontNames(第142行)加入“宋体;楷体_GB2312;新宋体;黑体;隶书;幼圆;”其他字体可根据自己需要自行加入。
3、文件上传
FCKeditor的文件管理程序在editor/filemanager/文件夹下,分为浏览(browser)和上传(upload)两种。“浏览”是指浏览服务器已存在文件并可以选择,也可以上传本地文件至服务器;上传是指快速上传,在窗口中点“上传”选项,选择本地文件后上传就行,但是不能查看服务器上已有上传文件,相对而言不太方便,只是操作更为快捷。也就是说FCKeditor中有一个文件浏览,有两个文件上传,而这些设置是分散在多个文件中,配置相对复杂,下面我大致讲一下:
在FCKeditor中共有三个文件跟上传功能有关,一个是js文件,两个是php文件,前者关闭后界面中不出现相关窗口或按钮,后者关闭后相关功能不可用。
js文件即是指的fckconfig.js文件,在以前旧版本的fckconfig.js中首先你必需开启如下几项:
浏览上传功能:
 
FCKConfig.LinkBrowser = true ; //文件
FCKConfig.ImageBrowser = true ; //图片
FCKConfig.FlashBrowser = true ; //Flash

快速上传功能:

FCKConfig.LinkUpload = true ; //同上
FCKConfig.ImageUpload = true ; //同上
FCKConfig.FlashUpload = true ; //同上

即把这几项设为true,而我们今天使用的2.4.2的fckconfig.js中默认已经是开启上传开关显示功能的,所以,如果你要将该编辑器作为前台使用(fckeditor上传漏洞问题一直没有得到较好的改善),考虑到安全性你可能需要关闭文件上传功能,那么你只需要将这几项设置为false即可(当然两个php文件你也不要开启上传功能哦)。
如果你要使用文件上传功能,那么我们继续配置:
依然在fckconfig.js文件中,fckeditor对语言默认支持的是asp,找到以下两句,进行相应修改:

var _FileBrowserLanguage = 'asp' ; // asp | aspx | cfm | lasso | perl | php | py(第182行)
var _QuickUploadLanguage = 'asp' ; // asp | aspx | cfm | lasso | php(第183行)

我们将其均改为'php':

var _FileBrowserLanguage = 'php' ; // asp | aspx | cfm | lasso | perl | php | py(第182行)
var _QuickUploadLanguage = 'php' ; // asp | aspx | cfm | lasso | php

在2.4.2版本中,我们发现增加了对更多文件后缀名的支持,这个应该是为了解决上传漏洞所作的些许改动,不过作用不大。
*.AllowedExtensions:(其中*号代表:FCKConfig.LinkUpload、FCKConfig.ImageUpload等)表示允许上传的文件后缀名,为空表示允许所有文件,你可根据自己需要设置上传文件后缀名,一定程度增加安全性,设置的格式可以参考它已有的后缀名设置。
*.DeniedExtensions:同上,表示禁止上传的文件后缀名。
注:你设置了允许上传的,当然禁止的也就不必要设置了,本人推荐设置允许的,毕竟禁止的后缀名列表不能罗列完全,可能还有很多我们不曾想到的后缀名。
对js文件的配置到此已经完成,下面我们进行两个php文件在上传方面的设置:
文件浏览上传修改:
打开editor/filemanager/browser/default/connectors/php/config.php文件,找到:
$Config['Enabled'] = false ;(第28行)将false改为true,即允许上传。
$Config['UserFilesPath'] = '/userfiles/' ;(第32行)为定义上传目录,可根据自己情况进行修改,我将其改为upload目录。
注:注意FCKeditor是不支持虚拟目录的,你的所有路径都是针对网站根目录的绝对路径。
文件快速上传修改:

打开文件editor/filemanager/upload/php/config.php文件,找到
$Config['Enabled'] = false ;(第28行)将false改为true。
$Config['UserFilesPath'] = '/UserFiles/' ;(第35行)同“文件浏览上传”的上传目录。
$Config['UseFileType'] = false ; (第32行)改为true,不然上传文件不会放在上传目录中
在该文件中,还有一项:
$Config['UserFilesAbsolutePath'] = '' ;(第41行)
这项的作用是设定上传的绝对路径,比如,你想指定上传文件到D:/Web/upload/下,你可以指定它的值为你的绝对路径,注意,如果你指定了该值,那你也要对$Config['UserFilesPath'] = '/UserFiles/' ;作相同的设置。
到此上传基本配置已经完成,整个编辑器最基本的配置也已经结束了,你可以通过下列代码对其进行调用测试了:
[php]include("/fckeditor/fckeditor.php"); // 包含fckeditor类,fckeditor目录放在网站根目录下
$BasePath = "/fckeditor/"; // 编辑器路径
$oFCKeditor = new FCKeditor('jayliao'); // 创建一个fckeditor对象,表单的名称为jayliao
$oFCKeditor->BasePath   = $BasePath;
$oFCKeditor->Value   = 'test'; // 设置表单初始值

// 还可设置以下部分(“=”包含部分),并非必须:
//==================================================================================//
$oFCKeditor->Width = '100%'; // 编辑器宽度,类中有默认值,如果不想修改可不管此项
$oFCKeditor->Height= '300'; // 同width,此处为高$oFCKeditor->ToolbarSet
$oFCKeditor->ToolbarSet = 'JayLiao'; // 默认编辑器工具栏有Basic(基本工具)和Default(所有工具)两种选择,JayLiao为本人自定义的工具条,如有需要可参考后文中的说明新建或修改工具条
$oFCKeditor->Config['SkinPath'] = '/fckeditor/editor/skins/office2003/'; // 设置编辑器皮肤
//==================================================================================//

$oFCKeditor->Create(); // 调用类中方法,必须
?>[/php]
赶紧测试一下吧,是不是很激动,终于可以看到这个强大的编辑器了。不过,马上你会发现在上传以中文命名的文件时会出现乱码,这到底是怎么回事呢?呵呵,不怕,下面我们就对其进行简单修改问题很快就解决的:
我们为上传文件以时间+随机数作为其新名字,打开:editor/filemanager/upload/php/upload.php,找到:
[php]$sFileName = $oFile['name'] ;[/php]
替换为:
[php]$sFileName = $oFile['name'] ;
$sOriginalFileName = $sFileName ;
$sExtension = substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ;
$sExtension = strtolower( $sExtension ) ;
$sFileName = date("YmdHis").rand(100, 200).".".$sExtension;[/php]
哈哈,你会发现“快速上传”的乱码已经解决,就这么简单,高兴之余不要忘了,同样,还需要修改“浏览”的上传,修改文件:editor/filemanager/browser/default/connectors/php/commands.php,修改内容同上。
另:你上传的中文文件不做以上命名修改可能在服务器上并非乱码,如果你只是为了在浏览的时候让编辑器正确显示该类文件名,那你可以作如下修改,打开:editor/filemanager/browser/default/connectors/php/util.php,修改ConvertToXmlAttribute函数,将:

return utf8_encode( htmlspecialchars( $value ) ) ;
修改为:

return iconv( "GBK", "UTF-8", htmlspecialchars($value) ) ;
这样,你的编辑器应该已经能正确显示中文名,不过强烈建议你修改上传文件的命名,中文名可能存在诸多不便。
当完成以上设置后,fckeditor已经能满足我们的日常使用需要,不过我们却又发现一个问题,那就是上传后的文件我们却无法删除,这样会使网站上的垃圾文件(主要是图片)日益增多,那我们是否能够通过对编辑器的修改能较为方便的管理删除无用上传文件呢?我们不难想到fckeditor的浏览文件功能,对该功能进行适当的扩展,对日常所上传的文件进行管理就变得相当简单易行了,那我们赶紧动手吧:
增加该功能我们修改的页面为:fckeditor/editor/filemanager/browser/default/frmresourceslist.html
第一步,在页面的body区域增加如下代码:



说明:第一对

的作用是当我们把鼠标移动到所上传的文件上时显示其相关信息;标签的作用是供我们删除上传文件时做动作响应窗口的,即是将我们的删除动作在iframe中运行,目的是实现伪无刷新删除效果;最后一对
的作用是显示上传文件及文件夹的列表(2.4较以前版本对标签中内容作了调整,老版该页面以
作为存放列表的容器,而新版直接将显示容器在js中生成,为了使文件显示div和iframe两组标签正常使用,故在body标签中加入一对
标签,使之能正常使用,在我的尝试中,倘若不这样修改似乎有错,当然不排除我方法不当的原因)

第二步,在文件的js代码区中加入:

复制代码 代码如下:

// add by jayliaoscu @ 2007-04-23 /*{{{{*/
// 显示文件显示层
function showDiv( fileUrl )
{
var name = fileUrl;
//获取文件类型
var suffix = name.substring(name.lastIndexOf(".")+1);

var div= document.getElementById("showFile");
div.content = "";
div.style.position = "absolute";
div.content += "

";
if (suffix=='gif' || suffix=="jpg" || suffix=="jpeg" || suffix=="bmp" || suffix=="png")
{
 div.content += "";
}
else
{
 div.content += "";
}
div.content += "
 关闭 删除 
探讨fckeditor在Php中的配置详解_php技巧
该类型不能预览
";
div.innerHTML = div.content;
div.style.display = "";
div.style.top = event.y+document.body.scrollTop+10;
div.style.left = event.x+document.body.scrollLeft+30;
}
// 隐藏文件显示层
function hiddenDiv()
{
var div= document.getElementById("showFile");
div.style.display ="none";
}
// 在iframe中删除文件
function delFile( fileUrl )
{
if(!confirm('你确定删除该文件?'))
return;
var url = '/fckeditor/del_file.php?filePath='+ fileUrl;
window.open(url, "iframe_del");
Refresh();
}
///*}}}*/

第三步,修改本页面原有js
修改:
复制代码 代码如下:

oListManager.Clear = function()
{
document.body.innerHTML = '' ;
}

为:
复制代码 代码如下:

oListManager.Clear = function()
{
hiddenDiv();
document.getElementById("body_content").innerHTML = '' ; // body_content为我们在body区域增加的div标签
}

找到:
复制代码 代码如下:

var sLink = '' ;

修改为:
复制代码 代码如下:

修改:
复制代码 代码如下:

function Refresh()
{
LoadResources( oConnector.ResourceType, oConnector.CurrentFolder ) ;
}

为:
复制代码 代码如下:

function Refresh()
{
hiddenDiv(); // 所作修改,为了刷新列表时默认隐藏文件显示层
LoadResources( oConnector.ResourceType, oConnector.CurrentFolder ) ;
}

修改函数:GetFoldersAndFilesCallBack,找到:
复制代码 代码如下:

document.body.innerHTML = oHtml.ToString() ;

修改为:
复制代码 代码如下:

document.getElementById("body_content").innerHTML = oHtml.ToString() ;

最后,增加一个文件删除页面del_file.php(该文件路径和增加的js函数delFile(fileUrl)中的调用一致),作用为删除文件,给出成功与否的操作提示,参考代码:
复制代码 代码如下:

[php]$filePath = "..".trim($_GET['filePath']);
if ( $filePath )
{
@unlink($filePath);
echo "<script>alert('删除成功。');</script>";
}
else
{
echo "<script>alert('删除错误,可能文件不存在或者已经删除。');</script>";
}
?>[/php]


至此,我对于fckeditor的修改基本完成,当然这些修改只是对fckeditor修改使用的抛砖引玉,给大家一个参考,希望对初学者有所帮助。后面对编辑器的修改过程比较匆忙,并未修改一步完成一步文档书写,所以,难免有所出错,望见谅,如果你有什么问题和错误发现欢迎联系我互相讨论,共同进步。
另附:
配置文件(fckconfig.js)中主要配置项目如下,根据自己看情况配置:

1.FCKConfig.CustomConfigurationsPath = '' ; // 自定义配置文件路径和名称
2.FCKConfig.EditorAreaCSS = FCKConfig.BasePath + 'css/fck_editorarea.css'; // 编辑区的样式表文件
3.FCKConfig.BaseHref = ''; // 相对链接的基地址
4.FCKConfig.Debug = true/false; // 是否开启调试功能,当调用FCKDebug.Output()时,会在调试窗中输出内容
5.FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/'; // 设置皮肤
6.FCKConfig.AutoDetectLanguage = true/false ; // 是否自动检测语言
7.FCKConfig.DefaultLanguage = 'zh-cn' ; // 设置默认语言
8.FCKConfig.ContentLangDirection = 'ltr/rtr'; // 默认文字方向,ltr左,rtr右
9.FCKConfig.FillEmptyBlocks = true/false ; // 使用这个功能,可以将空的块级元素用空格来替代
10.FCKConfig.FormatSource = true/false; // 切换到代码视图时,是否自动格式化代码
11.FCKConfig.FormatOutput = true/false; // 当输出内容时是否自动格式化代码
12.FCKConfig.FormatIndentator = ""; // 当在“源码格式”下缩进代码使用的字符
13.FCKConfig.GeckoUseSPAN = true/false; // 是否允许SPAN标记代替B,I,U标记
14.FCKConfig.StartupFocus = true/false; // 开启时是否FOCUS到编辑器
15.FCKConfig.ForcePasteAsPlainText = true/false;// 强制粘贴为纯文本
16.FCKConfig.ForceSimpleAmpersand = true/false; // 是否不把&符号转换为XML实体
17.FCKConfig.TabSpaces = 0/1; // TAB是否有效
18.FCKConfig.TabSpaces = 4; // TAB键产生的空格字符数
19.FCKConfig.ShowBorders = true/false; // 是否合并边框
20.FCKConfig.ToolbarStartExpanded = true/false; // 页面载入时,工具栏是否展开,点“展开工具栏”时才出现
21.FCKConfig.ToolBarCanCollapse = true/false; // 是否允许展开折叠工具栏
22.FCKConfig.ToolbarSets = object ; // 编辑器的工具栏,可以自行定义,删减,可参考已存在工具栏
23.FCKConfig.EnterMode = 'p'; // 编辑器中直接回车,在代码中生成,可选为p | div | br
24.FCKConfig.ShiftEnterMode = 'br'; // 编辑器中Shift+回车,在代码中生成,可选为p | div | br
25.FCKConfig.ContextMenu = 字符串数组; // 右键菜单的内容
26.FCKConfig.FontColors = ""; // 文字颜色列表
27.FCKConfig.FontNames = ""; // 字体列表
28.FCKConfig.FontSizes = ""; // 字号列表
29.FCKConfig.FontFormats = ""; // 文字格式列表
30.FCKConfig.StylesXmlPath = ""; // CSS样式列表的XML文件的位置
31.FCKConfig.TemplatesXmlPath = ""; // 模版的XML文件位置
32.FCKConfig.SpellChecker = "ieSpell/Spellerpages"; // 拼写检查器
33.FCKConfig.IeSpellDownloadUrl = ""; // 下载拼写检查器的网址
34.FCKConfig.SmileyPath = FCKConfig.BasePath + 'images/smiley/msn/'; // 表情文件存放路径
35.FCKConfig.SmileyImages = ''; // 表情文件名称列表,具体参考默认设置
36.FCKConfig.SmileyColumns = 8; // 表情窗口显示表情列数
37.FCKConfig.SmileyWindowWidth = 320; // 表情窗口显示宽度,此窗口会因为表情文件的改变而作调整
38.FCKConfig.SmileyWindowHeight = 240; // 表情窗口显示高度,此窗口会因为表情文件的改变而作调整
39.FCKConfig.FullPage = true/false; // 是否允许编辑整个HTML文件,还是仅允许编辑BODY间的内容

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
如何在Nginx配置Cookie安全策略如何在Nginx配置Cookie安全策略Jun 10, 2023 pm 12:54 PM

随着互联网的不断发展和普及,Web应用程序已成为人们日常生活中必不可少的一部分,这也决定了Web应用程序的安全问题非常重要。在Web应用程序中,Cookie被广泛使用来实现用户身份认证等功能,然而Cookie也存在着安全风险,因此在配置Nginx时,必须设定适当的Cookie安全策略,以保证Cookie的安全性。下面是一些在Nginx中配置Cookie安全策

使用CMake构建Linux内核的配置指南使用CMake构建Linux内核的配置指南Jul 06, 2023 pm 02:46 PM

使用CMake构建Linux内核的配置指南概述在Linux开发中,构建和配置内核是一个重要的环节。对于大多数人来说,使用Kconfig和Makefile是最常见的配置方式。然而,使用CMake来构建和配置Linux内核也是一个灵活且强大的选择。本文将介绍如何使用CMake来构建和配置Linux内核,并附上一些代码示例。安装CMake首先,我们需要安装CMak

MySQL连接池的最大连接数如何设置?MySQL连接池的最大连接数如何设置?Jun 30, 2023 pm 12:55 PM

如何配置MySQL连接池的最大连接数?MySQL是一个开源的关系型数据库管理系统,被广泛应用于各种领域的数据存储与管理。在使用MySQL时,我们常常需要使用连接池来管理数据库连接,以提高性能和资源利用率。连接池是一种维护和管理数据库连接的技术,它能够在需要时提供数据库连接,并在不需要时回收连接,从而减少了连接的重复创建和销毁。而连接池的最大连接数则是连接池所

使用GDB调试Linux内核的常用配置技巧使用GDB调试Linux内核的常用配置技巧Jul 05, 2023 pm 01:54 PM

使用GDB调试Linux内核的常用配置技巧引言:在Linux开发中,使用GDB调试内核是一项非常重要的技能。GDB是一款功能强大的调试工具,可以帮助开发者快速定位和解决内核中的bug。本文将介绍一些常用的GDB配置技巧,以及如何使用GDB调试Linux内核。一、配置GDB环境首先,我们需要在Linux系统上配置GDB的环境。请确保你的系统已经安装了GDB工具

Nginx错误页面配置,优雅处理网站故障Nginx错误页面配置,优雅处理网站故障Jul 04, 2023 pm 04:06 PM

Nginx错误页面配置,优雅处理网站故障在现代互联网时代,一个高度稳定和可靠的网站是任何企业或个人追求的目标。然而,由于各种原因,网站可能会经历故障或错误,这可能是由于网络问题、服务器问题或应用程序错误等。为了提供更好的用户体验和优雅地处理任何可能发生的错误,Nginx作为一个强大的Web服务器软件,不仅能够提供高性能的服务,还能够灵活地配置错误页面。在Ng

如何通过宝塔面板进行UFW防火墙的配置如何通过宝塔面板进行UFW防火墙的配置Jun 21, 2023 am 09:08 AM

在Linux服务器上配置防火墙非常重要,它可以有效地保护服务器免受恶意攻击。在Ubuntu操作系统上,我们可以使用UFW防火墙来保护服务器的安全。在本文中,我们将介绍如何使用宝塔面板配置UFW防火墙。第一步:安装宝塔面板首先,我们需要在Ubuntu上安装宝塔面板。您可以在宝塔官网免费下载宝塔面板的安装包,然后在命令行中运行以下命令来安装宝塔面板:$wget

如何使用Linux进行虚拟网络配置如何使用Linux进行虚拟网络配置Jun 18, 2023 am 11:24 AM

随着云计算、大数据和物联网等技术的日益普及,虚拟化技术成为了当今IT领域的热门话题。虚拟化是通过将一台物理主机划分为多个独立的虚拟机,实现资源的共享和管理的方法。虚拟网络是虚拟化的其中一个重要组成部分,能够满足不同应用之间的网络隔离和互动需求。在本文中,我们将介绍如何使用Linux进行虚拟网络配置。一、Linux虚拟网络的概述在物理网络中,网卡是连接网络设备

Intel TXT的安装和配置步骤Intel TXT的安装和配置步骤Jun 11, 2023 pm 06:49 PM

IntelTXT(TrustedExecutionTechnology,可信执行技术)是一种硬件帮助保护系统安全的技术。它通过使用硬件测量模块(TPM)来确保系统启动过程中的完整性,并且可以防止恶意软件攻击。在本文中,我们将讨论IntelTXT的安装和配置步骤,帮助你更好地保护你的系统安全。第一步:检查硬件要求安装IntelTXT前,需要先检查计算

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境