mirror of
https://gitlab.com/harald.mueller/aktuelle.kurse.git
synced 2024-11-30 13:41:58 +01:00
605 lines
52 KiB
Plaintext
605 lines
52 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<!DOCTYPE html>
|
|||
|
<html lang="en">
|
|||
|
<head>
|
|||
|
|
|||
|
<!-- Error reporting -->
|
|||
|
<script>(function(){
|
|||
|
window.reportError = function(msg, file, line, col, err, isUnhandledRejection){};
|
|||
|
var prevOnError = window.onerror;
|
|||
|
var onError = function(msg, file, line, col, err) {
|
|||
|
reportError(msg, file, line, col, err, false);
|
|||
|
prevOnError && prevOnError.apply(window, arguments);
|
|||
|
return false;
|
|||
|
};
|
|||
|
window.onerror = onError;
|
|||
|
// Setup reporting for unhandled Promise rejection errors
|
|||
|
window.addEventListener("unhandledrejection", function(e) {
|
|||
|
if (!e.reason) return;
|
|||
|
var l = getSrcLocation(e.reason);
|
|||
|
reportError(e.reason.message, l.file, l.line, l.col, e.reason, true);
|
|||
|
});
|
|||
|
// Setup reporting for console.error and console.warn calls
|
|||
|
patchConsole('error');
|
|||
|
patchConsole('warn');
|
|||
|
// Utility functions
|
|||
|
function patchConsole(fnName) {
|
|||
|
var fn = console[fnName];
|
|||
|
console[fnName] = function() {
|
|||
|
fn.apply(console, arguments);
|
|||
|
var l; try {
|
|||
|
throw new Error('_');
|
|||
|
} catch (err) {
|
|||
|
l = getSrcLocation(err, 1);
|
|||
|
}
|
|||
|
var msg = 'console.' + fnName + ': ' + Array.prototype.join.call(arguments, ' ');
|
|||
|
reportError(msg, l.file, l.line, l.col, undefined, false);
|
|||
|
};
|
|||
|
}
|
|||
|
function getSrcLocation(err, sd) {
|
|||
|
var s = err && err.stack;
|
|||
|
var l = s && s.split("\n")[1 + (sd|0)];
|
|||
|
var r = l && (/^\s*at [^(]*\((.*?):(\d+)(:\d+)?\)$/.exec(l) || /^\s*at (.*?):(\d+)(:\d+)?$/.exec(l));
|
|||
|
return r ? {file: r[1], line: r[2], col: r[3]} : {};
|
|||
|
}
|
|||
|
})();</script>
|
|||
|
<!-- Error reporting --> <!-- Google Tag Manager -->
|
|||
|
<script>(function() {
|
|||
|
// Initialize Tag Manager queue
|
|||
|
window.dataLayer = window.dataLayer || [];
|
|||
|
window.gtmLoaded = false;
|
|||
|
// Setup reporting for errors that occurred before Tag Manager initialized
|
|||
|
var prevReportError = window.reportError;
|
|||
|
var reportError = function(msg, file, line, col, err, isUnhandledRejection) {
|
|||
|
if (!window.gtmLoaded || isUnhandledRejection) {
|
|||
|
// Reproduce the behavior of the Tag Manager error handler
|
|||
|
window.dataLayer.push(makeEvt(msg, file, line));
|
|||
|
}
|
|||
|
prevReportError && prevReportError.apply(window, arguments);
|
|||
|
};
|
|||
|
window.reportError = reportError;
|
|||
|
// Utility functions
|
|||
|
function makeEvt(msg, file, line) {
|
|||
|
return {
|
|||
|
event: "gtm.pageError", "gtm.errorMessage": msg,
|
|||
|
"gtm.errorUrl": file, "gtm.errorLineNumber": line
|
|||
|
};
|
|||
|
}
|
|||
|
})();</script>
|
|||
|
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
|||
|
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
|||
|
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
|||
|
'https://www.googletagmanager.com/gtm.js?id='+i+dl;j.addEventListener(
|
|||
|
'load', function(){window.gtmLoaded=true});f.parentNode.insertBefore(j,f);
|
|||
|
})(window,document,'script','dataLayer','GTM-5P98');</script>
|
|||
|
<!-- End Google Tag Manager --> <!-- Sentry -->
|
|||
|
<script>
|
|||
|
(function() {
|
|||
|
window.sentryLoaded = false;
|
|||
|
window.errorsForSentry = [];
|
|||
|
var prevReportError = window.reportError;
|
|||
|
var reportError = function(
|
|||
|
msg,
|
|||
|
file,
|
|||
|
line,
|
|||
|
col,
|
|||
|
err,
|
|||
|
isUnhandledRejection
|
|||
|
) {
|
|||
|
if (!window.sentryLoaded) {
|
|||
|
window.errorsForSentry.push(err);
|
|||
|
}
|
|||
|
prevReportError && prevReportError.apply(window, arguments);
|
|||
|
};
|
|||
|
window.reportError = reportError;
|
|||
|
})();
|
|||
|
</script>
|
|||
|
<script>
|
|||
|
window.sentryLoad = function() {
|
|||
|
var resolveEnvironment = function () {
|
|||
|
const href = window.location.href;
|
|||
|
if (/^https:\/\/(.+\.)?jetbrains\.com/.test(href)) {
|
|||
|
return 'production';
|
|||
|
} else if (/^https?:\/\/localhost/.test(href)) {
|
|||
|
return 'local-dev';
|
|||
|
} else {
|
|||
|
return 'staging';
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
window.sentryLoaded = true;
|
|||
|
Sentry.init({
|
|||
|
environment: resolveEnvironment(),
|
|||
|
dsn: 'https://1adb2a61713144eda0786e5af50ddc51@o245151.ingest.sentry.io/1423069',
|
|||
|
autoSessionTracking: false,
|
|||
|
release:
|
|||
|
"jetbrainscom@4b8bfca2f7",
|
|||
|
beforeSend: function(event) {
|
|||
|
Object.keys(event).forEach(function(key) {
|
|||
|
var value = event[key];
|
|||
|
if (isEmail(value)) {
|
|||
|
delete event[key];
|
|||
|
}
|
|||
|
});
|
|||
|
return event;
|
|||
|
}
|
|||
|
});
|
|||
|
Sentry.configureScope(function(scope) {
|
|||
|
scope.setTag('page_locale', 'en-us');
|
|||
|
scope.setTag('browser.locale', getPageLocale());
|
|||
|
|
|||
|
scope.setTag('http.urlFull', location.href);
|
|||
|
var protocol = location.protocol || '';
|
|||
|
//omit `:` from location.protocol string
|
|||
|
var protocolString = protocol.substring(0, protocol.length - 1);
|
|||
|
|
|||
|
scope.setTag('http.protocol', protocolString);
|
|||
|
|
|||
|
scope.setTag('http.hostname', location.hostname);
|
|||
|
|
|||
|
var search = location.search || '';
|
|||
|
//omit ? from location.search string
|
|||
|
var searchString = search.substr(1);
|
|||
|
if (searchString !== '') {
|
|||
|
scope.setTag('http.query', searchString || '1');
|
|||
|
}
|
|||
|
var hash = location.hash || '';
|
|||
|
//omit # from location.hash string
|
|||
|
var hashString = hash.substr(1);
|
|||
|
if (hashString !== '') {
|
|||
|
scope.setTag('http.fragment', hashString);
|
|||
|
}
|
|||
|
});
|
|||
|
window.errorsForSentry.forEach(Sentry.captureException);
|
|||
|
|
|||
|
function getPageLocale() {
|
|||
|
return (
|
|||
|
(navigator.languages && navigator.languages[0]) ||
|
|||
|
navigator.language
|
|||
|
);
|
|||
|
}
|
|||
|
function isEmail(value) {
|
|||
|
var emailRegex = /[\+\-\_\.a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+\.[a-zA-Z0-9]+/g;
|
|||
|
return emailRegex.test(value);
|
|||
|
}
|
|||
|
};
|
|||
|
</script>
|
|||
|
<script src="https://browser.sentry-cdn.com/6.10.0/bundle.min.js" crossorigin="anonymous" onload="sentryLoad()" async></script>
|
|||
|
<!-- End Sentry -->
|
|||
|
<title>Download PhpStorm: Lightning-Smart PHP IDE</title>
|
|||
|
|
|||
|
<meta charset="utf-8">
|
|||
|
<meta http-equiv="x-ua-compatible" content="IE=edge">
|
|||
|
<meta name="viewport" content="width=device-width, maximum-scale=1">
|
|||
|
|
|||
|
<link rel="icon" href="/favicon.ico?r=1234" type="image/x-icon"><!-- 48×48 -->
|
|||
|
<link rel="icon" href="/icon.svg?r=1234" type="image/svg+xml" sizes="any">
|
|||
|
<link rel="apple-touch-icon" href="/apple-touch-icon.png?r=1234" sizes="180x180"><!-- 180×180 -->
|
|||
|
<link rel="icon" href="/icon-512.png?r=1234" type="image/png" sizes="512x512">
|
|||
|
<link rel="manifest" href="/site.webmanifest">
|
|||
|
|
|||
|
<meta name="apple-mobile-web-app-title" content="JetBrains">
|
|||
|
<meta name="application-name" content="JetBrains">
|
|||
|
<meta name="msapplication-TileColor" content="#000000">
|
|||
|
<meta name="theme-color" content="#000000">
|
|||
|
<link rel="canonical" href="https://www.jetbrains.com/phpstorm/download/"/> <!-- .350-->
|
|||
|
<meta name="description" content="Download the latest version of PhpStorm for Windows, macOS or Linux."/>
|
|||
|
|
|||
|
<link rel="alternate" hreflang="x-default" href="https://www.jetbrains.com/phpstorm/download/" />
|
|||
|
|
|||
|
<link rel="alternate" hreflang="en" href="https://www.jetbrains.com/phpstorm/download/" />
|
|||
|
<link rel="alternate" hreflang="en-CN" href="https://www.jetbrains.com.cn/en-us/phpstorm/download/" />
|
|||
|
<link rel="alternate" hreflang="de" href="https://www.jetbrains.com/de-de/phpstorm/download/" />
|
|||
|
<link rel="alternate" hreflang="es" href="https://www.jetbrains.com/es-es/phpstorm/download/" />
|
|||
|
<link rel="alternate" hreflang="fr" href="https://www.jetbrains.com/fr-fr/phpstorm/download/" />
|
|||
|
<link rel="alternate" hreflang="ja" href="https://www.jetbrains.com/ja-jp/phpstorm/download/" />
|
|||
|
<link rel="alternate" hreflang="ko" href="https://www.jetbrains.com/ko-kr/phpstorm/download/" />
|
|||
|
<link rel="alternate" hreflang="ru" href="https://www.jetbrains.com/ru-ru/phpstorm/download/" />
|
|||
|
<link rel="alternate" hreflang="zh-Hans" href="https://www.jetbrains.com/zh-cn/phpstorm/download/" />
|
|||
|
<link rel="alternate" hreflang="zh-CN" href="https://www.jetbrains.com.cn/phpstorm/download/" />
|
|||
|
<link rel="alternate" hreflang="pt-BR" href="https://www.jetbrains.com/pt-br/phpstorm/download/" />
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script>
|
|||
|
default_site_language = 'en-us';
|
|||
|
var current_lang = 'en-us';
|
|||
|
var i18n_info = {"current_lang": "en-us", "languages": [{"canonical": "en", "code": "en-us", "label": "English", "page_translated": true, "url": "/phpstorm/download/"}, {"canonical": "de", "code": "de-de", "label": "Deutsch", "page_translated": true, "url": "/de-de/phpstorm/download/"}, {"canonical": "es", "code": "es-es", "label": "Espa\u00f1ol", "page_translated": true, "url": "/es-es/phpstorm/download/"}, {"canonical": "fr", "code": "fr-fr", "label": "Fran\u00e7ais", "page_translated": true, "url": "/fr-fr/phpstorm/download/"}, {"canonical": "ja", "code": "ja-jp", "label": "\u65e5\u672c\u8a9e", "page_translated": true, "url": "/ja-jp/phpstorm/download/"}, {"canonical": "ko", "code": "ko-kr", "label": "\ud55c\uad6d\uc5b4", "page_translated": true, "url": "/ko-kr/phpstorm/download/"}, {"canonical": "ru", "code": "ru-ru", "label": "\u0420\u0443\u0441\u0441\u043a\u0438\u0439", "page_translated": true, "url": "/ru-ru/phpstorm/download/"}, {"canonical": "zh-Hans", "code": "zh-cn", "label": "\u7b80\u4f53\u4e2d\u6587", "page_translated": true, "url": "/zh-cn/phpstorm/download/"}, {"canonical": "pt-BR", "code": "pt-br", "label": "Portugu\u00eas do Brasil", "page_translated": true, "url": "/pt-br/phpstorm/download/"}]};
|
|||
|
var navigationMenu = {"primary": {"items": [{"title": "Developer Tools", "banners": [{"isActive": false, "title": "Space", "description": "An all-in-one solution for software projects and teams", "logoId": "space", "actionLabel": "Explore Space", "url": "/space/", "bgColor": "#167DFF", "bgGradient": "linear-gradient(117.63deg, rgb(8 89 255) -0.78%, rgb(0 154 231) 55.03%, rgb(221 255 84) 111.19%)", "cleaned_url": "/space/"}, {"isActive": false, "title": "Fleet", "description": "Next-generation IDE by JetBrains", "logoSrc": "/img/banners-menu-main/fleet.svg", "actionLabel": "Learn more", "url": "/fleet/", "bgColor": "#8701C7", "bgGradient": "linear-gradient(130.93deg, #69029A 0%, #8701C7 32.33%, #6B57FF 97.76%)", "cleaned_url": "/fleet/"}], "suggestions": [{"isActive": false, "url": "/products/", "title": "Not sure which tool is best for you?", "description": "Whichever technologies you use, there's a JetBrains tool to match", "actionLabel": "Find your tool", "cleaned_url": "/products/"}], "submenu": {"layout": "auto-fill inline inline inline", "columns": [{"title": "IDEs", "mobileLayout": "forceTwoColumns", "subColumns": [{"items": [{"isActive": false, "title": "AppCode", "url": "/objc/", "logoId": "appcode", "cleaned_url": "/objc/"}, {"isActive": false, "title": "CLion", "url": "/clion/", "logoId": "clion", "cleaned_url": "/clion/"}, {"isActive": false, "title": "DataGrip", "url": "/datagrip/", "logoId": "datagrip", "cleaned_url": "/datagrip/"}, {"isActive": false, "title": "DataSpell", "url": "/dataspell/", "logoId": "dataspell", "cleaned_url": "/dataspell/"}, {"isActive": false, "title": "Fleet", "url": "/fleet/", "logoId": "fleet", "cleaned_url": "/fleet/"}, {"isActive": false, "title": "GoLand", "url": "/go/", "logoId": "goland", "cleaned_url": "/go/"}]}, {"items": [{"isActive": false, "title": "IntelliJ IDEA", "url": "/idea/", "logoId": "intellij-idea", "cleaned_url": "/idea/"}, {"isActive": false, "title": "PhpStorm", "url": "/phpstorm/", "logoId": "phpstorm", "cleaned_url": "/phpstorm/"}, {"isActive": false, "title": "PyCharm", "url": "/pycharm/", "logoId": "pycharm", "cleaned_url": "/pycharm/"}, {"isActive": false, "title": "Rider", "url": "/rider/", "logoId": "rider", "cleaned_url": "/rider/"}, {"isActive": false, "title": "RubyMine", "url": "/ruby/", "logoId": "rubymine", "cleaned_url": "/ruby/"}, {"isActive": false, "title": "WebStorm", "url": "/webstorm/", "logoId": "webstorm", "cleaned_url": "/webstorm/"}]}]}, {"title": "PLUGINS & SERVICES", "mobileLayout": "forceTwoColumns", "items": [{"isActive": false, "title": "All Plugins", "url": "https://plugins.jetbrains.com/", "cleaned_url": "https://plugins.jetbrains.com/"}, {"isActive": false, "title": "IDE Themes", "url": "https://plugins.jetbrains.com/search?tags=Theme", "cleaned_url": "https://plugins.jetbrains.com/search?tags=Theme"}, {"isActive": false, "title": "Big Data Tools", "url": "https://plugins.jetbrains.com/plugin/12494-big-data-tools", "cleaned_url": "https://plugins.jetbrains.com/plugin/12494-big-data-tools"}, {"isActive": false, "title": "Code With Me", "url": "/code-with-me/", "cleaned_url": "/code-with-me/"}, {"isActive": false, "title": "QA Tools", "url": "https://lp.jetbrains.com/qa/", "cleaned_url": "https://lp.jetbrains.com/qa/"}, {"isActive": false, "title": "Rust", "url": "/rust/", "cleaned_url": "/rust/"}, {"isActive": false, "title": "Scala", "url": "https://plugins.jetbrains.com/plugin/1347-scala", "cleaned_url": "https://plugins.jetbrains.com/plugin/1347-scala"}, {"isActive": false, "title": "Toolbox App", "url": "/toolbox-app/", "cleaned_url": "/toolbox-app/"}]}, {"title": ".NET & VISUAL STUDIO", "hasSeparator": true, "items": [{"isActive": false, "title": "Rider", "url": "/rider/", "logoId": "rider", "cleaned_url": "/rider/"}, {"isActive": false, "title": "ReSharper", "url": "/resharper/", "logoId": "resharper", "cleaned_url": "/resharper/"}, {"isActive": false, "title": "ReSharper C++", "url": "/resharper-cpp/", "logoId": "resharper-cpp", "cleaned_url": "/resharper-cpp/"}, {"isActive":
|
|||
|
|
|||
|
var is_layout_adaptive = false;
|
|||
|
is_layout_adaptive = true;
|
|||
|
|
|||
|
var disable_language_picker = false;
|
|||
|
|
|||
|
var localized_domains = [{"defaultLanguage": "en", "domain": "blog.jetbrains.com", "locales": {"de-de": "de", "en-us": "en", "es-es": "es", "fr-fr": "fr", "ja-jp": "ja", "ko-kr": "ko", "pt-br": "pt-br", "ru-ru": "ru", "zh-cn": "zh-hans"}, "pathsLocalization": false, "suffixDefault": false}];
|
|||
|
|
|||
|
var english_only_url_prefixes = [];
|
|||
|
|
|||
|
var is_landing_view = false;
|
|||
|
|
|||
|
var theme = 'None';
|
|||
|
</script>
|
|||
|
|
|||
|
<script></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<link href="/_assets/common.b34eea6f3b333c5995c8.css" rel="stylesheet" type="text/css">
|
|||
|
<link href="/_assets/default-page.e57a2ef176c16e8c7cc1.css" rel="stylesheet" type="text/css">
|
|||
|
<script src="/_assets/common.0da8e15926b0abcd2e27.js" type="text/javascript"></script>
|
|||
|
<script src="/_assets/default-page.4c542c14ea7088c427ac.js" type="text/javascript"></script>
|
|||
|
<script src="/_assets/phpstorm/download/index.entry.f823efa0bc374b62a60b.js" type="text/javascript"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<!-- Social Media tag Starts -->
|
|||
|
<!-- Open Graph data -->
|
|||
|
<meta property="og:title" content="Download PhpStorm: Lightning-Smart PHP IDE"/>
|
|||
|
|
|||
|
<meta property="og:description" content="Download the latest version of PhpStorm for Windows, macOS or Linux."/>
|
|||
|
<meta property="og:image" content="https://resources.jetbrains.com/storage/products/phpstorm/img/meta/preview.png"/>
|
|||
|
|
|||
|
<meta property="og:site_name" content="JetBrains"/>
|
|||
|
<meta property="og:type" content="website"/>
|
|||
|
<meta property="og:url" content= https://www.jetbrains.com/phpstorm/download/ />
|
|||
|
<!-- OpenGraph End -->
|
|||
|
|
|||
|
<!-- Schema.org data -->
|
|||
|
<script type="application/ld+json">
|
|||
|
{"@context": "http://schema.org/", "@type": "Product", "alternateName": "JetBrains PhpStorm", "brand": {"@type": "Brand", "name": "JetBrains"}, "description": "PhpStorm: Lightning-Smart IDE for PHP Programming by JetBrains", "image": "https://resources.jetbrains.com/storage/products/phpstorm/img/meta/preview.png", "logo": "https://resources.jetbrains.com/storage/products/phpstorm/img/meta/phpstorm_logo_300x300.png", "name": "PhpStorm", "offers": {"@type": "AggregateOffer", "highPrice": "19.90", "lowPrice": "8.90", "priceCurrency": "USD"}, "releaseDate": "2021-06-02T09:00", "sameAs": ["https://twitter.com/phpstorm", "http://www.wikidata.org/entity/Q1786113"]}
|
|||
|
</script>
|
|||
|
<script type="application/ld+json">
|
|||
|
{"@context": "http://schema.org", "@type": "SoftwareApplication", "applicationCategory": "DeveloperApplication", "author": {"@type": "Organization", "name": "JetBrains"}, "datePublished": "2021-06-02T09:00", "downloadUrl": "https://www.jetbrains.com/phpstorm/download/", "image": "https://resources.jetbrains.com/storage/products/phpstorm/img/meta/preview.png", "name": "PhpStorm", "operatingSystem": "Windows, macOS, Linux", "publisher": {"@type": "Organization", "name": "JetBrains"}, "requirements": "RAM: 2 GB, Screen Resolution: 1024x768", "screenshot": "https://www.jetbrains.com/phpstorm/img/screenshots/phpstorm_debugging@2x.png", "softwareVersion": "2021.1", "url": "https://www.jetbrains.com/phpstorm/"}
|
|||
|
</script>
|
|||
|
<script type="application/ld+json">
|
|||
|
{
|
|||
|
"@context": "http://schema.org",
|
|||
|
"@type": "WebPage",
|
|||
|
"@id": "https://www.jetbrains.com/phpstorm/download/#webpage",
|
|||
|
"url": "https://www.jetbrains.com/phpstorm/download/",
|
|||
|
"name": "Download PhpStorm: Lightning-Smart PHP IDE",
|
|||
|
"description": "Download the latest version of PhpStorm for Windows, macOS or Linux.",
|
|||
|
"image": "https://resources.jetbrains.com/storage/products/phpstorm/img/meta/phpstorm_1280x800.png"
|
|||
|
}</script>
|
|||
|
<!-- Schema.org end -->
|
|||
|
|
|||
|
<!-- Twitter data -->
|
|||
|
<meta name="twitter:description" content="Download the latest version of PhpStorm for Windows, macOS or Linux.">
|
|||
|
|
|||
|
<meta name="twitter:title" content="Download PhpStorm: Lightning-Smart PHP IDE">
|
|||
|
|
|||
|
|
|||
|
<meta name="twitter:card" content="summary_large_image">
|
|||
|
<meta name="twitter:site" content="@phpstorm">
|
|||
|
<meta name="twitter:creator" content="@phpstorm">
|
|||
|
<meta name="twitter:image:src" content="https://resources.jetbrains.com/storage/products/phpstorm/img/meta/preview.png">
|
|||
|
<meta name="twitter:label1" content="Platforms:">
|
|||
|
<meta name="twitter:data1" content="Windows, macOS, Linux">
|
|||
|
<!-- Twitter End -->
|
|||
|
<!-- Social Media tag Ends -->
|
|||
|
</head>
|
|||
|
|
|||
|
<body class="nojs body-adaptive">
|
|||
|
|
|||
|
<!-- Google Tag Manager (noscript) -->
|
|||
|
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5P98" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
|||
|
<!-- End Google Tag Manager (noscript) -->
|
|||
|
<script>
|
|||
|
/*! modernizr 3.2.0 (Custom Build) | MIT *
|
|||
|
* http://modernizr.com/download/?-flexbox-flexboxtweener !*/
|
|||
|
!function(e,n,t){function r(e,n){return typeof e===n}function o(){var e,n,t,o,i,s,l;for(var f in v)if(v.hasOwnProperty(f)){if(e=[],n=v[f],n.name&&(e.push(n.name.toLowerCase()),n.options&&n.options.aliases&&n.options.aliases.length))for(t=0;t<n.options.aliases.length;t++)e.push(n.options.aliases[t].toLowerCase());for(o=r(n.fn,"function")?n.fn():n.fn,i=0;i<e.length;i++)s=e[i],l=s.split("."),1===l.length?Modernizr[l[0]]=o:(!Modernizr[l[0]]||Modernizr[l[0]]instanceof Boolean||(Modernizr[l[0]]=new Boolean(Modernizr[l[0]])),Modernizr[l[0]][l[1]]=o),C.push((o?"":"no-")+l.join("-"))}}function i(e,n){return!!~(""+e).indexOf(n)}function s(e){return e.replace(/([a-z])-([a-z])/g,function(e,n,t){return n+t.toUpperCase()}).replace(/^-/,"")}function l(e,n){return function(){return e.apply(n,arguments)}}function f(e,n,t){var o;for(var i in e)if(e[i]in n)return t===!1?e[i]:(o=n[e[i]],r(o,"function")?l(o,t||n):o);return!1}function a(e){return e.replace(/([A-Z])/g,function(e,n){return"-"+n.toLowerCase()}).replace(/^ms-/,"-ms-")}function u(){return"function"!=typeof n.createElement?n.createElement(arguments[0]):b?n.createElementNS.call(n,"http://www.w3.org/2000/svg",arguments[0]):n.createElement.apply(n,arguments)}function d(){var e=n.body;return e||(e=u(b?"svg":"body"),e.fake=!0),e}function p(e,t,r,o){var i,s,l,f,a="modernizr",p=u("div"),c=d();if(parseInt(r,10))for(;r--;)l=u("div"),l.id=o?o[r]:a+(r+1),p.appendChild(l);return i=u("style"),i.type="text/css",i.id="s"+a,(c.fake?c:p).appendChild(i),c.appendChild(p),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(n.createTextNode(e)),p.id=a,c.fake&&(c.style.background="",c.style.overflow="hidden",f=_.style.overflow,_.style.overflow="hidden",_.appendChild(c)),s=t(p,e),c.fake?(c.parentNode.removeChild(c),_.style.overflow=f,_.offsetHeight):p.parentNode.removeChild(p),!!s}function c(n,r){var o=n.length;if("CSS"in e&&"supports"in e.CSS){for(;o--;)if(e.CSS.supports(a(n[o]),r))return!0;return!1}if("CSSSupportsRule"in e){for(var i=[];o--;)i.push("("+a(n[o])+":"+r+")");return i=i.join(" or "),p("@supports ("+i+") { #modernizr { position: absolute; } }",function(e){return"absolute"==getComputedStyle(e,null).position})}return t}function m(e,n,o,l){function f(){d&&(delete E.style,delete E.modElem)}if(l=r(l,"undefined")?!1:l,!r(o,"undefined")){var a=c(e,o);if(!r(a,"undefined"))return a}for(var d,p,m,h,y,v=["modernizr","tspan"];!E.style;)d=!0,E.modElem=u(v.shift()),E.style=E.modElem.style;for(m=e.length,p=0;m>p;p++)if(h=e[p],y=E.style[h],i(h,"-")&&(h=s(h)),E.style[h]!==t){if(l||r(o,"undefined"))return f(),"pfx"==n?h:!0;try{E.style[h]=o}catch(g){}if(E.style[h]!=y)return f(),"pfx"==n?h:!0}return f(),!1}function h(e,n,t,o,i){var s=e.charAt(0).toUpperCase()+e.slice(1),l=(e+" "+x.join(s+" ")+s).split(" ");return r(n,"string")||r(n,"undefined")?m(l,n,o,i):(l=(e+" "+S.join(s+" ")+s).split(" "),f(l,n,t))}function y(e,n,r){return h(e,t,t,n,r)}var v=[],g={_version:"3.2.0",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,n){var t=this;setTimeout(function(){n(t[e])},0)},addTest:function(e,n,t){v.push({name:e,fn:n,options:t})},addAsyncTest:function(e){v.push({name:null,fn:e})}},Modernizr=function(){};Modernizr.prototype=g,Modernizr=new Modernizr;var C=[],w="Moz O ms Webkit",x=g._config.usePrefixes?w.split(" "):[];g._cssomPrefixes=x;var S=g._config.usePrefixes?w.toLowerCase().split(" "):[];g._domPrefixes=S;var _=n.documentElement,b="svg"===_.nodeName.toLowerCase(),z={elem:u("modernizr")};Modernizr._q.push(function(){delete z.elem});var E={style:z.elem.style};Modernizr._q.unshift(function(){delete E.style}),g.testAllProps=h,g.testAllProps=y,Modernizr.addTest("flexbox",y("flexBasis","1px",!0)),Modernizr.addTest("flexboxtweener",y("flexAlign","end",!0)),o(),delete g.addTest,delete g.addAsyncTest;for(var P=0;P<Modernizr._q.length;P++)Modernizr._q[P]();e.Modernizr=Modernizr}(window,document);
|
|||
|
|
|||
|
if (!Modernizr.flexbox && !Modernizr.flexboxtweener) {
|
|||
|
|
|||
|
var $body = $('body');
|
|||
|
|
|||
|
var nodesClasses = {
|
|||
|
wrapper: 'not-supported-browser',
|
|||
|
container: 'not-supported-browser__container',
|
|||
|
|
|||
|
title: 'not-supported-browser__title',
|
|||
|
content: 'not-supported-browser__content',
|
|||
|
logo: 'not-supported-browser__logo'
|
|||
|
};
|
|||
|
|
|||
|
var nodes = {
|
|||
|
wrapper: $('<div class="' + nodesClasses.wrapper + '"></div>'),
|
|||
|
title: $('<div class="' + nodesClasses.title + '">Sorry, your browser is not fully supported</div>'),
|
|||
|
content: $('<div class="' + nodesClasses.content + '">There may be some issues with pages layout in your current browser.<br/>Please use an alternate browser until we resolve the issues.<br/>Thank you.</div>'),
|
|||
|
container: $('<div class="' + nodesClasses.container + '"></div>'),
|
|||
|
logo: $('<div class="' + nodesClasses.logo + '"><svg class="sprite-img _jetbrains" xmlns:xlink="http://www.w3.org/1999/xlink"><use xlink:href="#jetbrains"></use></svg></div>')
|
|||
|
};
|
|||
|
|
|||
|
$body.addClass('overflow-hidden');
|
|||
|
|
|||
|
|
|||
|
nodes.content
|
|||
|
.prepend(nodes.title)
|
|||
|
.prepend(nodes.logo);
|
|||
|
|
|||
|
nodes.container
|
|||
|
.append(nodes.content);
|
|||
|
|
|||
|
nodes.wrapper
|
|||
|
.append(nodes.container)
|
|||
|
.appendTo($body);
|
|||
|
}
|
|||
|
</script>
|
|||
|
<div class="page">
|
|||
|
|
|||
|
<div class="page__header">
|
|||
|
<div class="page__header-language-suggestion" id="language-suggest-bar"></div>
|
|||
|
<div class="page__header-country-suggestion" id="country-suggest-bar"></div>
|
|||
|
|
|||
|
|
|||
|
<div class="site-header-container" id="js-site-header-container">
|
|||
|
<div class="site-header-stub site-header-stub--adaptive">
|
|||
|
<div class="wt-container site-header-stub__inner">
|
|||
|
<div class="site-header-stub__menu-main-skeleton-text" style="min-width: 69px"></div>
|
|||
|
<div class="site-header-stub__menu-main-skeleton-text" style="min-width: 81px"></div>
|
|||
|
<div class="site-header-stub__menu-main-skeleton-text" style="min-width: 46px"></div>
|
|||
|
<div class="site-header-stub__menu-main-skeleton-button"></div>
|
|||
|
<div class="site-header-stub__menu-main-skeleton-button"></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<div class="menu-second " id="js-menu-second">
|
|||
|
<div class="wt-container">
|
|||
|
<div id="js-menu-second-mobile-wrapper" class="wt-display-none">
|
|||
|
<div id="js-menu-second-mobile">
|
|||
|
<div class="menu-second-mobile wt-row wt-row_size_m wt-row_align-items_center wt-row_justify_between ">
|
|||
|
<div class="wt-col-inline menu-second-skeleton-text-2" style="max-width: 120px"></div>
|
|||
|
<div class="wt-col-inline menu-second-skeleton-button" style="max-width: 80px"></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
<div id="js-menu-second-desktop" class="menu-second-desktop
|
|||
|
wt-row wt-row_size_0 wt-row_align-items_center">
|
|||
|
<div class="wt-col-auto-fill">
|
|||
|
<a class="menu-second-title-box"
|
|||
|
href="/phpstorm/">
|
|||
|
<span class="menu-second-title-box__logo jetbrains-logo">
|
|||
|
<svg class="_phpstorm sprite-img" xmlns:xlink="http://www.w3.org/1999/xlink"><use xlink:href="#phpstorm"></use></svg>
|
|||
|
</span>
|
|||
|
|
|||
|
<span class="menu-second-title-box__title wt-h3 ">PhpStorm</span>
|
|||
|
</a>
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<div class="menu-second-skeleton-text-2" style="max-width: 70px; margin-right: 16px;"></div>
|
|||
|
|
|||
|
<div class="menu-second-skeleton-text-2" style="max-width: 70px; margin-right: 16px;"></div>
|
|||
|
|
|||
|
<div class="menu-second-skeleton-text-2" style="max-width: 70px; margin-right: 16px;"></div>
|
|||
|
|
|||
|
<div class="menu-second-skeleton-text-2" style="max-width: 70px; margin-right: 16px;"></div>
|
|||
|
|
|||
|
<div class="menu-second-skeleton-text-2" style="max-width: 70px; margin-right: 16px;"></div>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<a href="/phpstorm/download/"
|
|||
|
class="wt-col-inline menu-second__download-button wt-button wt-button_size_s
|
|||
|
wt-button_mode_primary">
|
|||
|
Download
|
|||
|
</a>
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
<div class="page__content ">
|
|||
|
<div id="content">
|
|||
|
<section>
|
|||
|
<div class="wt-container">
|
|||
|
<div id="country-offer-placeholder" class="wt-offset-top-48"></div> </div>
|
|||
|
</section>
|
|||
|
<div id="download-block">
|
|||
|
<div class="wt-section wt-offset-top-96">
|
|||
|
<div class="wt-container">
|
|||
|
<div class="wt-row wt-row_size_m wt-row-sm_direction_column-reverse">
|
|||
|
<div class="wt-col-3 wt-col-md-4 wt-col-sm-12">
|
|||
|
<div class="download-logo-skeleton wt-display-sm-none">
|
|||
|
<div class="jetbrains-logo-skeleton">
|
|||
|
<div class="logo-dark"></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="wt-row wt-row_size_m wt-offset-top-24">
|
|||
|
<div class="wt-col-12">
|
|||
|
<span class="download-data-skeleton"></span>
|
|||
|
<span class="download-data-skeleton"></span>
|
|||
|
<span class="download-data-skeleton"></span>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="wt-col-7 wt-col-md-8 wt-col-sm-12">
|
|||
|
<div class="download-title-skeleton wt-offset-top-sm-24"></div>
|
|||
|
<div class="download-tabs-skeleton wt-offset-top-12">
|
|||
|
<span class="download-tab-skeleton"></span>
|
|||
|
<span class="download-tab-skeleton"></span>
|
|||
|
<span class="download-tab-skeleton"></span>
|
|||
|
</div>
|
|||
|
<div class="download-text-skeleton wt-offset-top-24 wt-offset-top-sm-12"></div>
|
|||
|
<div class="download-button-skeleton wt-offset-top-24"></div>
|
|||
|
</div>
|
|||
|
<div class="download-logo-skeleton wt-display-none wt-display-sm-block wt-col-12">
|
|||
|
<div class="jetbrains-logo-skeleton">
|
|||
|
<div class="logo-dark"></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
<noscript id="noscript">
|
|||
|
<section class="wt-section">
|
|||
|
<div class="wt-container wt-offset-top-96">
|
|||
|
<p>
|
|||
|
We’ve noticed that JavaScript is disabled in your web browser. Please <a
|
|||
|
href="http://enable-javascript.com/" target="_blank">enable JavaScript</a>
|
|||
|
in order to take advantage of all the features of this website.<br/>
|
|||
|
|
|||
|
|
|||
|
Download PhpStorm for your operating system
|
|||
|
<a href="//data.services.jetbrains.com/products/download?code=PS&platform=windows">Windows</a>,
|
|||
|
<a href="//data.services.jetbrains.com/products/download?code=PS&platform=mac">macOS</a>,
|
|||
|
<a href="//data.services.jetbrains.com/products/download?code=PS&platform=linux">Linux</a>.
|
|||
|
|
|||
|
</p>
|
|||
|
</div>
|
|||
|
</section>
|
|||
|
</noscript>
|
|||
|
|
|||
|
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
<div class="page__footer" id="footer-container">
|
|||
|
<footer class="footer" id="footer"></footer>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
<script>
|
|||
|
(function () {
|
|||
|
function getParameterByName(name, url) {
|
|||
|
if (!url) url = window.location.href;
|
|||
|
name = name.replace(/[\[\]]/g, "\\$&");
|
|||
|
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
|
|||
|
results = regex.exec(url);
|
|||
|
if (!results) return null;
|
|||
|
if (!results[2]) return '';
|
|||
|
return decodeURIComponent(results[2].replace(/\+/g, " "));
|
|||
|
}
|
|||
|
|
|||
|
function updateQueryStringParameter(uri, key, value) {
|
|||
|
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
|
|||
|
var separator = uri.indexOf('?') !== -1 ? "&" : "?";
|
|||
|
if (uri.match(re)) {
|
|||
|
return uri.replace(re, '$1' + key + "=" + value + '$2');
|
|||
|
}
|
|||
|
else {
|
|||
|
return uri + separator + key + "=" + value;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
var downloadLink = document.getElementById("download-link");
|
|||
|
if (downloadLink != null) {
|
|||
|
var platform = getParameterByName('platform');
|
|||
|
platform = platform != null ? platform : "windows";
|
|||
|
var href = downloadLink.getAttribute("href");
|
|||
|
var code = getParameterByName("code");
|
|||
|
|
|||
|
if(code != null) {
|
|||
|
href = updateQueryStringParameter(href, "code", code)
|
|||
|
}
|
|||
|
href = updateQueryStringParameter(href, "platform", platform);
|
|||
|
downloadLink.setAttribute("href", href);
|
|||
|
}
|
|||
|
})();
|
|||
|
</script><script>
|
|||
|
(function() {
|
|||
|
var STORAGE_KEY_NAME = 'firefoxDisappearedSVGWorkaround';
|
|||
|
var STORAGE_KEY_VALUE = '1';
|
|||
|
|
|||
|
var isFirefox = /firefox/i.test(navigator.userAgent);
|
|||
|
if (!isFirefox || isFirefox && sessionStorage.getItem(STORAGE_KEY_NAME) === STORAGE_KEY_VALUE) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
var arrayFrom = function (arrayLike) {
|
|||
|
return Array.prototype.slice.call(arrayLike, 0);
|
|||
|
};
|
|||
|
|
|||
|
function workaround() {
|
|||
|
var uses = document.querySelectorAll('.page svg use');
|
|||
|
var badNodesCount = 0;
|
|||
|
|
|||
|
arrayFrom(uses).forEach(function (node) {
|
|||
|
var rect = node.getBoundingClientRect();
|
|||
|
if (rect.width === 0 && rect.height === 0)
|
|||
|
badNodesCount++;
|
|||
|
});
|
|||
|
|
|||
|
if (badNodesCount === uses.length) {
|
|||
|
sessionStorage.setItem(STORAGE_KEY_NAME, STORAGE_KEY_VALUE);
|
|||
|
if (typeof dataLayer !== 'undefined')
|
|||
|
dataLayer.push({'firefoxDisappearedSVGWorkaround': STORAGE_KEY_VALUE});
|
|||
|
|
|||
|
window.location.replace(window.location.href);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
window.addEventListener('DOMContentLoaded', workaround);
|
|||
|
|
|||
|
})();
|
|||
|
</script> <link href="/_assets/banner-rotator.entry.d57df654959fabf16ae0.css" rel="stylesheet" type="text/css">
|
|||
|
<script src="/_assets/banner-rotator.entry.9533e9e02b0f5c3aec9b.js" type="text/javascript"></script>
|
|||
|
|
|||
|
|
|||
|
<script>
|
|||
|
(function () {
|
|||
|
|
|||
|
'use strict';
|
|||
|
|
|||
|
function ImagesSrcReplacer () {
|
|||
|
|
|||
|
var attribute = 'data-src';
|
|||
|
var matches = document.querySelectorAll('img[' + attribute + ']');
|
|||
|
|
|||
|
for (var i = 0, n = matches.length; i < n; i++) {
|
|||
|
|
|||
|
var attrValue = matches[i].getAttribute(attribute);
|
|||
|
|
|||
|
if (_isHighDensity ()) {
|
|||
|
|
|||
|
var name = attrValue.substring(0, attrValue.lastIndexOf('.'));
|
|||
|
var extention = attrValue.substring(attrValue.lastIndexOf('.'), attrValue.length);
|
|||
|
|
|||
|
matches[i].setAttribute('src', name + '@2x' + extention);
|
|||
|
|
|||
|
} else {
|
|||
|
matches[i].setAttribute('src', attrValue)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Detect high density
|
|||
|
* @returns {*|boolean}
|
|||
|
*/
|
|||
|
function _isHighDensity () {
|
|||
|
return (
|
|||
|
(window.matchMedia &&
|
|||
|
(window.matchMedia('only screen and (min-resolution: 124dpi), only screen and (min-resolution: 1.3dppx), only screen and (min-resolution: 48.8dpcm)').matches ||
|
|||
|
window.matchMedia('only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 2.6/2), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (min-device-pixel-ratio: 1.3)').matches)) ||
|
|||
|
(window.devicePixelRatio &&
|
|||
|
window.devicePixelRatio > 1.3));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return new ImagesSrcReplacer()
|
|||
|
|
|||
|
}(document, window));
|
|||
|
</script></body>
|
|||
|
</html>
|