diff --git a/lib/cpp/src/thrift/transport/TSocketPool.cpp b/lib/cpp/src/thrift/transport/TSocketPool.cpp
index b6e79d3..f56c76e 100644
--- a/lib/cpp/src/thrift/transport/TSocketPool.cpp
+++ b/lib/cpp/src/thrift/transport/TSocketPool.cpp
@@ -178,7 +178,7 @@
  * This function throws an exception if socket open fails. When socket
  * opens fails, the socket in the current server is reset.
  */
-/* TODO: without apc we ignore a lot of functionality from the php version */
+/* TODO: without apcu we ignore a lot of functionality from the php version */
 void TSocketPool::open() {
 
   size_t numServers = servers_.size();
diff --git a/lib/php/README.md b/lib/php/README.md
index 7170104..e7144fe 100644
--- a/lib/php/README.md
+++ b/lib/php/README.md
@@ -23,7 +23,7 @@
 
 Thrift requires PHP 5. Thrift makes as few assumptions about your PHP
 environment as possible while trying to make some more advanced PHP
-features (i.e. APC cacheing using asbolute path URLs) as simple as possible.
+features (i.e. APCu cacheing using asbolute path URLs) as simple as possible.
 
 To use Thrift in your PHP codebase, take the following steps:
 
@@ -46,9 +46,9 @@
     used by the TBinaryProtocol to properly use pack() and unpack() to
     serialize data.
 
-apc_fetch(), apc_store()
+apcu_fetch(), apcu_store()
 
-    APC cache is used by the TSocketPool class. If you do not have APC installed,
+    APCu cache is used by the TSocketPool class. If you do not have APCu installed,
     Thrift will fill in null stub function definitions.
 
 # Breaking Changes
diff --git a/lib/php/lib/ClassLoader/ThriftClassLoader.php b/lib/php/lib/ClassLoader/ThriftClassLoader.php
index 4361bd8..e4b4a17 100644
--- a/lib/php/lib/ClassLoader/ThriftClassLoader.php
+++ b/lib/php/lib/ClassLoader/ThriftClassLoader.php
@@ -40,26 +40,26 @@
     protected $definitions = array();
 
     /**
-     * Do we use APC cache ?
+     * Do we use APCu cache ?
      * @var boolean
      */
-    protected $apc = false;
+    protected $apcu = false;
 
     /**
-     * APC Cache prefix
+     * APCu Cache prefix
      * @var string
      */
-    protected $apc_prefix;
+    protected $apcu_prefix;
 
     /**
-     * Set autoloader to use APC cache
+     * Set autoloader to use APCu cache
      * @param boolean $apc
-     * @param string $apc_prefix
+     * @param string $apcu_prefix
      */
-    public function __construct($apc = false, $apc_prefix = null)
+    public function __construct($apc = false, $apcu_prefix = null)
     {
-        $this->apc = $apc;
-        $this->apc_prefix = $apc_prefix;
+        $this->apcu = $apc;
+        $this->apcu_prefix = $apcu_prefix;
     }
 
     /**
@@ -101,7 +101,7 @@
      */
     public function loadClass($class)
     {
-        if ((true === $this->apc && ($file = $this->findFileInApc($class))) or
+        if ((true === $this->apcu && ($file = $this->findFileInApcu($class))) or
             ($file = $this->findFile($class))
         ) {
             require_once $file;
@@ -109,14 +109,14 @@
     }
 
     /**
-     * Loads the given class or interface in APC.
+     * Loads the given class or interface in APCu.
      * @param  string $class The name of the class
      * @return string
      */
-    protected function findFileInApc($class)
+    protected function findFileInApcu($class)
     {
-        if (false === $file = apc_fetch($this->apc_prefix . $class)) {
-            apc_store($this->apc_prefix . $class, $file = $this->findFile($class));
+        if (false === $file = apcu_fetch($this->apcu_prefix . $class)) {
+            apcu_store($this->apcu_prefix . $class, $file = $this->findFile($class));
         }
 
         return $file;
diff --git a/lib/php/lib/Transport/TSocketPool.php b/lib/php/lib/Transport/TSocketPool.php
index cb9e8dd..307885f 100644
--- a/lib/php/lib/Transport/TSocketPool.php
+++ b/lib/php/lib/Transport/TSocketPool.php
@@ -25,18 +25,18 @@
 use Thrift\Exception\TException;
 
 /**
- * This library makes use of APC cache to make hosts as down in a web
- * environment. If you are running from the CLI or on a system without APC
+ * This library makes use of APCu cache to make hosts as down in a web
+ * environment. If you are running from the CLI or on a system without APCu
  * installed, then these null functions will step in and act like cache
  * misses.
  */
-if (!function_exists('apc_fetch')) {
-    function apc_fetch($key)
+if (!function_exists('apcu_fetch')) {
+    function apcu_fetch($key)
     {
         return false;
     }
 
-    function apc_store($key, $var, $ttl = 0)
+    function apcu_store($key, $var, $ttl = 0)
     {
         return false;
     }
@@ -202,11 +202,11 @@
             // This extracts the $host and $port variables
             extract($this->servers_[$i]);
 
-            // Check APC cache for a record of this server being down
+            // Check APCu cache for a record of this server being down
             $failtimeKey = 'thrift_failtime:' . $host . ':' . $port . '~';
 
             // Cache miss? Assume it's OK
-            $lastFailtime = apc_fetch($failtimeKey);
+            $lastFailtime = apcu_fetch($failtimeKey);
             if ($lastFailtime === false) {
                 $lastFailtime = 0;
             }
@@ -251,7 +251,7 @@
 
                         // Only clear the failure counts if required to do so
                         if ($lastFailtime > 0) {
-                            apc_store($failtimeKey, 0);
+                            apcu_store($failtimeKey, 0);
                         }
 
                         // Successful connection, return now
@@ -265,7 +265,7 @@
                 $consecfailsKey = 'thrift_consecfails:' . $host . ':' . $port . '~';
 
                 // Ignore cache misses
-                $consecfails = apc_fetch($consecfailsKey);
+                $consecfails = apcu_fetch($consecfailsKey);
                 if ($consecfails === false) {
                     $consecfails = 0;
                 }
@@ -284,12 +284,12 @@
                         );
                     }
                     // Store the failure time
-                    apc_store($failtimeKey, time());
+                    apcu_store($failtimeKey, time());
 
                     // Clear the count of consecutive failures
-                    apc_store($consecfailsKey, 0);
+                    apcu_store($consecfailsKey, 0);
                 } else {
-                    apc_store($consecfailsKey, $consecfails);
+                    apcu_store($consecfailsKey, $consecfails);
                 }
             }
         }
