3v4l.org

run code in 300+ PHP versions simultaneously
<?php $actual = <<<SOURCE <!DOCTYPE html> <html class="desktop-version"> <head> <meta name="error" content="500" /> <title>Loading...</title> <script id="page-title" type="text/html">500 - Internal Server Error</script> <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, user-scalable=no"/> <meta http-equiv="cache-control" content="max-age=0" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="expires" content="0" /> <meta http-equiv="pragma" content="no-cache" /> <link rel="shortcut icon" href="/bundles/orofrontend/default/images/favicon.ico?version=2ca56ad8" /> <link rel="stylesheet" media="all" href="/css/oro.css?version=2ca56ad8" /> <script type="text/template" id="template-datagrid-grid-view"> <div class="btn-toolbar"> <% if (choices.length) { %> <div class="btn-group views-group"> <div data-toggle="dropdown" class="btn btn-link dropdown-toggle <% if (disabled) { %>disabled<% } %>"> <%= title %> </div> <ul class="dropdown-menu"> <% _.each(choices, function (choice) { %> <li><a href="#" data-value="<%- choice.value %>"> <% if (choice.icon) { %><i class="<%- choice.icon %>"></i><% } %><%- choice.label %></a> </li> <% }); %> </ul> </div> <% } %> <% if (showActions) { %> <div class="btn-group actions-group"> <div class="btn btn-link dropdown-toggle" data-toggle="dropdown" href="#"> <%- actionsLabel %> </div> <ul class="dropdown-menu"> <% _.each(actions, function(action) { %> <% if (action.enabled) { %> <li><a href="#" class="<%- action.name %>"><%- action.label %></a></li> <% } %> <% }); %> </ul> <% if (dirty) { %> <div class="edited-label">&nbsp;-&nbsp;<%- editedLabel %></div> <% } %> </div> <% } %> </div> </script> <script type="text/template" id="template-datagrid-grid-view-label"> <% if (navbar) { %> <h1 class="oro-subtitle"><%- title %><span class="caret"></span></h1> <% } else { %> <%- title %><span class="caret"></span> <% } %> </script> <script type="text/template" id="template-datagrid-view-name-modal"> <div class="form-horizontal"> <div class="control-group"> <label class="control-label" for="gridViewName"><%- label %>:</label> <div class="controls"> <input id="gridViewName" name="name" type="text" value="<%- value %>"> </div> </div> <div class="control-group control-group-checkbox"> <label class="control-label" for="gridViewDefault"><%- defaultLabel %>:</label> <div class="controls"> <input id="gridViewDefault" name="is_default" type="checkbox" <% if(defaultChecked) { %> checked <% } %> > </div> </div> </div> </script> <script type="text/template" id="template-datagrid-view-name-error-modal"> <span for="gridViewName" class="validation-failed"><%= error %></span> </script> <script type="text-template" id="template-audit-condition-type-select"> <span class="active-filter"> <div> <div class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"><%= selected === "changed" ? changedLabel : changedToValueLabel %></a> <ul class="dropdown-menu"> <li <%= (selected === "changed") ? 'class="active"' : '' %>> <a class="choice-value" href="#" data-value="changed"><%= changedLabel %></a> </li> <li <%= (selected === "changed_to_value") ? 'class="active"' : '' %>> <a class="choice-value" href="#" data-value="changed_to_value"><%= changedToValueLabel %></a> </li> </ul> <select style="display: none;"> <option <%= (selected === "changed") ? "selected" : "" %> value="changed"><%= changedLabel %></option> <option <%= (selected === "changed_to_value") ? "selected" : "" %> value="changed_to_value"><%= changedToValueLabel %></option> </select> <span class="active-filter"> </span> </div> </div> </span> </script> <script type="text/html" id="filter-container"> <% if (!_.isEmpty(filters)) { %> <div class="filter-box oro-clearfix-width"> <div class="filter-container"> <select data-action="add-filter-select" multiple> <% _.each(filters, function (filter, name) { %> <% if (filter.visible) { %> <option title="<%- _.escape(filter.label) %>" value="<%- name %>" <% if (filter.enabled) { %>selected<% } %>> <%- filter.label %> </option> <% } %> <% }); %> </select> <span class="filter-items"></span> <div class="filter-items-hint"> <a class="reset-filter-button" href="javascript:void(0);">Clear All Filters</a> </div> </div> </div> <% } %> </script> <script id="widget-items-item-select-template" type="text/template"> <div class="pull-left items-selector-widget"> <select class="item-select filter-select-oro"> <option></option> <% items.each(function (item) { %> <option value="<%= item.get('id') %>"><%= item.get('label') %></option> <% }); %> </select> </div> </script> <script id="widget-items-item-template" type="text/template"> <tr data-cid="<%= cid %>"> <td><%= label %></td> <td class="action-cell"> <input type="hidden" name="<%= namePrefix %>[id]" value="<%= id %>"> <input data-name="order" type="hidden" class="order" name="<%= namePrefix %>[order]" value="<%= order %>"> <input class="hide" data-name="show" type="checkbox" name="<%= namePrefix %>[show]" <%= show ? 'checked' : '' %>> <% if (_.isMobile()) { %> <span class="btn delete-button" data-collection-action="delete" title="Move column up"> <i class="fa-trash-o hide-text"></i> </span> <span class="btn move-up<% if (isFirst) { %> disabled<% } %>" data-collection-action="moveUp" title="Move column up"> <i class="fa-chevron-up"></i> </span> <span class="btn move-down<% if (isLast) { %> disabled<% } %>" data-collection-action="moveDown" title="Move column down"> <i class="fa-chevron-down"></i> </span> <% } else { %> <a href="javascript: void(0);" class="action no-hash delete-button" title="Delete column" data-collection-action="delete"> <i class="fa-trash-o hide-text"></i> </a> <span title="Move column"> <i class="fa-arrows-v handle"></i> </span> <% } %> </td> </tr> </script> <script type="text/template" id="product-price-filter-template"> <div class="product-price-filter"> <span class="product-price-unit-filter-separator"><%- _.__("oro.pricing.filter.product_price.per") %></span> <div class="btn-group btn-block product-price-unit-filter"> <button class="btn dropdown-toggle" data-toggle="dropdown"> <%- selectedChoiceLabel %><span class="caret"></span> </button> <ul class="dropdown-menu" data-name="unit"> <% _.each(choices, function (option) { %> <li<% if (selectedChoice == option.value) { %> class="active"<% } %>> <a class="dropdown-item choice-value" href="#" data-value="<%= option.value %>"><%- option.label %></a> </li> <% }); %> </ul> <input type="hidden" name="unit" id="unit" value="<%= selectedChoice %>"/> </div> </div> </script> <script type="text/template" id="product-prices-tier-button-template"> <div class="product-tier-prices"> <i class="fa-bars" data-toggle="popover" data-placement="bottom" data-close="false"></i> </div> </script> <script type="text/template" id="product-prices-tier-table-template"> <table class="product-tier-prices-table"> <% if (clickable) { %> <tr> <td colspan="2"> <%= _.__('oro.pricing.click_to_select') %> </td> </tr> <% } %> <% _.each(prices, function(unitPrices, unit) { %> <tr> <td colspan="2"> <b><%= _.__('oro.product.product_unit.' + unit + '.label.full') %></b> </td> </tr> <% _.each(unitPrices, function(price) { %> <tr class="<% if (!_.isEmpty(matchedPrice) && unit === matchedPrice.unit && parseFloat(price.price) === parseFloat(matchedPrice.price)) { %>matched-tier-price<% } %>"> <td><div class="text-right"><%= price.quantity %>:</div></td> <td> <div class="text-left"> <% if (clickable) { %> <a href="javascript: void(0);" data-price="<%= parseFloat(price.price) %>" data-unit="<%= unit %>" ><%= formatter.formatCurrency(price.price, price.currency) %></a> <% } else { %> <%= formatter.formatCurrency(price.price, price.currency) %> <% } %> </div> </td> </tr> <% }) %> <% }) %> </table> </script> <script type="text/template" id="product-prices-price-overridden-template"> <div class="product-price-overridden" style="display: none;"> <i class="fa-exclamation-circle" data-toggle="popover" data-placement="bottom" data-close="false" data-content="<p><%= _.__('oro.pricing.product_prices.price_is_overridden') %></p><p><a href='javascript: void(0);'><%= _.__('oro.pricing.product_prices.reset_price') %></a></p>"></i> </div> </script> <script type="text/html" id="totals-template"> <div class="control-group"> <label class="control-label"><%= item.label %></label> <div class="controls"> <label class="control-label"><%= item.formattedAmount %></label> </div> <% if (item.formattedBaseAmount) { %> <div class="total-base-currency-wrapper"> <label class="control-label"></label> <div class="controls"> <label class="control-label"><%= item.formattedBaseAmount %></label> </div> </div> <% } %> </div> </script> <script type="text/html" id="totals-template-no-data"> <div class="no-data"> <span>No data</span> </div> </script> <script type="text/template" id="order-notes-widget"> <div class="notes-widget"> <div class="notes-widget-preview"></div> <div class="notes-widget-edit"></div> <a class="notes-widget-edit-btn" href="javascript: void(0);"><%= _.__('oro.order.notes_widget.edit') %></a> <a class="notes-widget-add-btn" href="javascript: void(0);"><%= _.__('oro.order.notes_widget.add') %></a> <a class="notes-widget-remove-btn" href="javascript: void(0);"><%= _.__('oro.order.notes_widget.remove') %></a> </div> </script> <script type="text/html" id="order-taxes-totals-template"> <div class="control-group"> <label class="control-label"><%= item.label %></label> <div class="controls"> <label class="control-label" data-toggle="collapse" data-target="#order-taxes-totals-table"> <%= item.formattedAmount %> </label> </div> </div> <% var collapseIn = _.defaults(item.data.in, true); %> <div class="collapse<%= collapseIn ? ' in' : '' %>" id="order-taxes-totals-table"> <div class="controls"> <% var total = item.data.total %> <% var shipping = item.data.shipping %> <% var translations = { unit: 'Unit Price', row: 'Row Total', total: 'Total', shipping: 'Shipping'} %> <% var unit = unit; %> <% var row = row; %> <% var total = total; %> <% var shipping = shipping; %> <% var object = {unit: unit, row: row, shipping: shipping, total: total}; %> <% var data = _.pick(object, _.identity); %> <% if (data) { %> <table class="grid table table-condensed table-bordered tax-result-grid"> <thead> <tr> <th class="renderable"></th> <th class="renderable">Incl. Tax</th> <th class="renderable">Excl. Tax</th> <th class="renderable">Tax Amount</th> </tr> </thead> <tbody> <% _.each(data, function(item, key) { %> <tr> <td class="renderable"><%= translations[key] %></td> <td class="renderable"><%= item.includingTax %></td> <td class="renderable"><%= item.excludingTax %></td> <td class="renderable"><%= item.taxAmount %></td> </tr> <% }); %> </tbody> </table> <% } %> SOURCE; $text = 'There was an error performing the requested operation. Please try again or contact us for assistance.'; $actual = preg_replace('/\s+/u', ' ', $actual); $regex = '/'.preg_quote($text, '/').'/ui'; $message = sprintf('The text "%s" appears in the text of this page, but it should not.', $text); var_dump(!preg_match($regex, $actual));

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0120.00316.75
8.3.50.0070.01116.61
8.3.40.0150.00618.86
8.3.30.0150.00019.15
8.3.20.0040.00420.16
8.3.10.0060.00321.94
8.3.00.0040.00417.80
8.2.180.0070.01418.41
8.2.170.0150.00022.96
8.2.160.0030.01021.19
8.2.150.0040.00424.18
8.2.140.0040.00424.66
8.2.130.0050.00320.69
8.2.120.0050.00326.35
8.2.110.0040.00721.00
8.2.100.0090.00318.22
8.2.90.0060.00319.25
8.2.80.0080.00017.97
8.2.70.0000.00817.75
8.2.60.0000.00818.03
8.2.50.0060.00318.10
8.2.40.0050.00322.11
8.2.30.0000.00819.50
8.2.20.0080.00018.19
8.2.10.0040.00418.47
8.2.00.0060.00318.46
8.1.280.0070.01425.92
8.1.270.0000.00822.27
8.1.260.0050.00326.35
8.1.250.0000.01028.09
8.1.240.0030.00623.96
8.1.230.0040.00819.29
8.1.220.0050.00317.78
8.1.210.0050.00318.77
8.1.200.0030.00617.73
8.1.190.0060.00317.60
8.1.180.0040.00418.10
8.1.170.0080.00018.66
8.1.160.0040.00418.90
8.1.150.0000.00720.13
8.1.140.0060.00319.62
8.1.130.0030.00319.02
8.1.120.0000.00717.59
8.1.110.0040.00417.65
8.1.100.0060.00317.66
8.1.90.0040.00417.72
8.1.80.0000.00817.68
8.1.70.0020.00517.54
8.1.60.0030.00617.62
8.1.50.0030.00717.77
8.1.40.0000.00817.62
8.1.30.0050.00317.76
8.1.20.0040.00417.79
8.1.10.0080.00017.61
8.1.00.0040.00417.61
8.0.300.0000.00818.77
8.0.290.0000.00817.00
8.0.280.0050.00318.43
8.0.270.0050.00317.26
8.0.260.0030.00319.07
8.0.250.0040.00417.26
8.0.240.0000.00717.21
8.0.230.0000.00717.14
8.0.220.0040.00417.23
8.0.210.0000.00817.15
8.0.200.0030.00517.14
8.0.190.0040.00417.14
8.0.180.0040.00417.21
8.0.170.0040.00417.23
8.0.160.0040.00417.17
8.0.150.0000.00817.12
8.0.140.0060.00317.14
8.0.130.0040.00413.60
8.0.120.0060.00317.23
8.0.110.0050.00317.31
8.0.100.0000.00817.29
8.0.90.0030.00617.26
8.0.80.0130.00917.21
8.0.70.0030.00517.10
8.0.60.0030.00517.27
8.0.50.0000.00817.26
8.0.30.0080.01117.33
8.0.20.0100.01217.46
8.0.10.0030.00517.39
8.0.00.0110.00717.04
7.4.330.0030.00315.55
7.4.320.0030.00316.83
7.4.300.0030.00316.77
7.4.290.0040.00416.93
7.4.280.0040.00416.82
7.4.270.0000.00716.93
7.4.260.0070.00316.93
7.4.250.0030.00316.68
7.4.240.0040.00416.80
7.4.230.0050.00216.84
7.4.220.0050.01116.86
7.4.210.0090.00616.70
7.4.200.0040.00416.89
7.4.160.0080.00816.62
7.4.150.0030.01717.40
7.4.140.0180.00417.86
7.4.130.0130.00816.77
7.4.120.0090.01416.77
7.4.110.0140.00416.68
7.4.100.0070.01116.66
7.4.90.0180.01016.74
7.4.80.0100.00719.39
7.4.70.0130.01316.90
7.4.60.0160.00017.01
7.4.50.0000.01616.85
7.4.40.0000.01716.93
7.4.30.0090.01116.74
7.4.00.0090.00615.34
7.3.330.0030.00313.44
7.3.320.0030.00313.42
7.3.310.0000.00716.45
7.3.300.0030.00416.52
7.3.290.0000.00716.41
7.3.280.0070.01016.52
7.3.270.0090.00917.40
7.3.260.0100.01416.55
7.3.250.0070.01416.66
7.3.240.0100.01316.57
7.3.230.0030.01616.54
7.3.210.0130.01116.55
7.3.200.0090.00916.57
7.3.190.0030.01416.59
7.3.180.0170.00016.50
7.3.170.0030.01416.44
7.3.160.0090.01216.79
7.3.10.0030.01416.59
7.3.00.0060.01016.57
7.2.330.0150.00916.76
7.2.320.0150.00616.79
7.2.310.0070.01016.71
7.2.300.0090.00916.80
7.2.290.0110.00716.89
7.2.130.0060.01216.94
7.2.120.0060.00916.93
7.2.110.0100.00717.08
7.2.100.0070.01117.14
7.2.90.0070.01416.73
7.2.80.0040.01116.99
7.2.70.0070.00716.91
7.2.60.0020.01517.04
7.2.50.0130.00916.80
7.2.40.0040.01416.80
7.2.30.0150.00716.65
7.2.20.0080.00516.85
7.2.10.0000.01716.85
7.2.00.0060.00917.07
7.1.250.0130.00315.50
7.1.200.0000.01215.64
7.1.70.0060.00617.39
7.1.60.0060.00617.52
7.1.40.0770.01332.47
7.1.30.1400.01732.72
7.1.20.0670.01032.85
7.1.10.0570.01314.88
7.1.00.0800.01015.01
7.0.200.0060.00617.00
7.0.180.0800.00314.54
7.0.170.0770.01714.57
7.0.160.0800.00714.46
7.0.150.0800.01014.30
7.0.140.0830.01014.63
7.0.130.0630.01014.64
7.0.120.0700.01014.73
7.0.110.0570.01314.49
7.0.100.0700.01014.61
7.0.90.0500.01714.50
7.0.80.0600.01014.71
7.0.70.0870.01314.69
7.0.60.0700.00714.49
7.0.50.0730.01014.50
7.0.40.0700.01714.73
7.0.30.0770.00714.50
7.0.20.0830.00314.61
7.0.10.0970.00714.65
7.0.00.0800.00314.61

preferences:
54.31 ms | 400 KiB | 5 Q